Similar to this old request on BugZilla for Fedora 8, I'm hoping something has changed since then or someone knows another way.

I want to manage the iptables rules by hand—the one-size-fits-all automatic rules don't suit me at all. These rules seem to be added and removed when a network is started and destroyed. Is there a way of either preventing these rules being added at all or hooking a script into the network start that restores the default rules afterwards.

For now, I'm using a very crude method with cron, but I hope there is a better way:

  *  *  *  *  * root    iptables-restore < /etc/sysconfig/iptables
  • Is KVM using a modular script to start virtual network devices? If so you could manipulate that script (this is how I would do this on XEN). – Nils Dec 10 '12 at 14:56
  • I don't think so but tbh I'm not sure how to find out. – user83664 Dec 10 '12 at 17:38
  • The best place to ask is the libvirt devel list or on their IRC channel (#virt on OFTC) – dyasny Dec 10 '12 at 21:52

Well I've found an answer that suits me: I've gone back to school and learned to do it the old fashioned way. No need to use libvirt's fancy networking functions as I can just:

  • set up my own bridged network(s) (not attached to any physical network port)
  • use a DHCP server on the host and masquerade in iptables
  • edit the libvirt guest config files to use the bridge(s)
  • have complete flexibility in how I want to configure security with iptables
  • +1 just use bridged mode, or move on to 802.1Qbg/h – dyasny Dec 10 '12 at 21:53

Use hooks to restore your iptables rules:

mkdir /etc/libvirt/hooks
for f in daemon qemu lxc libxl network; do
  echo '#!/bin/sh
iptables-restore < /etc/sysconfig/iptables' > "/etc/libvirt/hooks/$f"
  chmod +x "/etc/libvirt/hooks/$f"
service libvirtd restart

Iptables rules will be reloaded for certain actions only, but this is sufficient to make it static. Only reload (SIGHUP) of libvirtd will write it's own rules, but it isn't triggered by any system scripts, so will not happen until you type service libvirtd reload by yourself. See https://libvirt.org/hooks.html

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy