use iptables to manage firewalling of ubuntu 16.04 bridge on VMware

背景: IDC分配了大量IP地址,但是自己并不能做网关,但我又不能把所有的机器全部直接置于外网,增加管理成本。
方案:
使用ubuntu 16.04做防火墙(FW)
外网(internet)只连接FW的ens160。
增加DMZ网络(DMZ),所有的需要外网IP的机器和FW的ens192全部连接到DMZ。

在FW中安装bridge-utils并桥接ens160与ens192,不知道怎么桥接的请直接参考这里

接下来就是在VMware上启用DMZ和internet的混杂模式(Promiscuous Mode)。记住,两个网络的混杂模式都必须开启。不知道怎么开启混杂模式的可以看这里。这里没必要开启整个vSwitch的混杂模式,只需要开启DMZ和internet端口组就足够了。

到了这步,你的桥接就做完了。这个时候,你DMZ里面所有的机器都有完全的外网访问权限,你在iptables里面设置的规则完全限制不了DMZ的网络。接下来就是启用iptables对bridge的限制。

运行下面命令启用bridge netfilter模块

modprobe br_netfilter

修改 /etc/modules-load.d/modules.conf,在最后加上下面一行,这样机器在重启后也会自动加载bridge netfilter模块

br_netfilter

再修改 /etc/sysctl.conf,在文件的最后添加下面几行:

###################################################################
# For iptables to manage bridge firewalling
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

最后,运行下面命令使配置生效

sysctl -p

现在,就可以使用iptables对DMZ进行管理了。
不过,我目前还没摸清这里面进出端口(iptables里面的-i和-o)的规则,只能直接使用IP了。