Hi, here an implementation of firewall with iptables, like openstack and cloudstack is doing.
The main idea is to use as much of possible chains feature of iptables. First, we create 2 chains by tap interface, for incoming and outgoing packets. (In my example, tap110i0-out and tap110i0-in). Secondly, we create group of rules, which openstack/cloudstack/amazon ec2 are calling "security group" Then, we apply theses security group to tap110i0-out or tap110i0-in. (incoming rules / outgoing rules) This model have a lot of advantages: - you can defined rules (chain names up to 28characters), and reuse them for differents vms -you can apply rules on vms or group - if you need to change a chain/security group, you can simply flush the chain (iptables -F chain) before reapply rules, without need to regenerate/"compile" all rules -they are not relation with bridge, only tap interfaces, so you can move a interface from a bridge to another bridge without breaking rules. -it's possible to do security groups with mac address of vms, and allow ports opening from a group to another group. -it's possible enable/disable firewall log for each vm separatly -No need to maintain shorewall config files,compile rules,... we can simply generate chains in live by security group are created/modified, or edit tap chain when group are apply/remove to a tap interface. what do you think about it ? iptables -F iptables -X iptables -N tap110i0-out iptables -N tap110i0-in #out iptables -A FORWARD -m physdev --physdev-is-bridged --physdev-in tap110i0 -j tap110i0-out #in iptables -A FORWARD -m physdev --physdev-is-bridged --physdev-out tap110i0 -j tap110i0-in #create security groups samples iptables -N security1 iptables -N security2 iptables -N security3 iptables -N security4 iptables -N security5 #security1 : mac address from vm1 + ssh allowed from group4 + external ip iptables -A security1 -m mac --mac-source 1e:0b:85:27:8d:65 -j ACCEPT iptables -A security1 -p tcp --dport 22 -j security4 #allow ssh access to security group4 iptables -A security1 -p tcp --dport 22 --src 192.168.100.55 -j ACCEPT iptables -A security1 -j RETURN #security2 : simple ssh rules iptables -A security2 -p tcp --dport 22 -j ACCEPT #security3 : group with mac address from vm3 && vm4 + ssh open for security group2 iptables -A security3 -m mac --mac-source ab:ab:ab:ab:ab:ab -j ACCEPT iptables -A security3 -m mac --mac-source cd:cd:cd:cd:cd:cd -j ACCEPT iptables -A security3 -p tcp --dport 22 -j security2 iptables -A security3 -j RETURN #security4 : group with macaddress from vm2 iptables -A security4 -m mac --mac-source 32:36:8a:e1:b5:65 -j ACCEPT iptables -A security4 -j RETURN #security5 : web http 80 iptables -A security5 -p tcp --dport 80 -j ACCEPT #out rules for tap110i0 iptables -A tap110i0-out -j ACCEPT #fixme: add antispoofing rules #in rules for tap110i0 iptables -A tap110i0-in -m state --state INVALID -j DROP iptables -A tap110i0-in -m state --state RELATED,ESTABLISHED -j RETURN iptables -A tap110i0-in -j security1 iptables -A tap110i0-in -j security5 iptables -A tap110i0-in -j LOG --log-prefix "tap110i0in-dropped: " --log-level 4 iptables -A tap110i0-in -j DROP _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel