快速部署透明式防火墙
2018-03-04
对于普通的Linux防火墙来说,其往往采用的是路由模式。即在Linux防火墙主机上设置两块网卡,分别拥有独立的IP,用来连接内网和外网。因此,黑客在对其进行攻击时,就有了明确的目标。
另外,在企业网络环境中,有时可能根据需要对防火墙设备进行调整(例如添加新的防火墙,连接VLAN等),这就必然涉及到对相关的网络配置进行更改,调整防火墙规则,修改与IP设置相关的参数等,在实际工作中操作起来是很繁琐的。如果使用透明式防火墙,就可以轻松解决以上问题。
将Linux主机配置为网桥设备,并配合防火墙模块,就可以将其变成透明式防火墙。其使用的不是路由模式而是桥接模式,属于OSI网络层级中的第二层的网络设备,因此不必在网络接口上设置IP。对于以太网来说,网桥设备不会隔断广播数据包发送。例如网桥设备连接了三个实体网段,对于某个网段实体内的两台主机之间的单播数据传输来说,网桥设备禁止其传送给别的实体网段。当一个实体网段中的主机向另一个实体网段中的某台主机进行单播数据传输时,网桥设备不会将数据包传输到其他的实体网段中。透明式防火墙可以在不改变原有网络环境配置的情况下,轻松部署到网络中的任何位置。
因为透明式防火墙无需设置IP,所以拥有了很好的隐蔽性。对于黑客来说,无法感觉到透明式防火墙的存在,造成了黑客无法确定需要攻击的目标究竟存在何处。在Linux中已经引入了网桥机制,执行“yum install bridge-utils”命令,安装网桥管理工具。例如,在Linux网桥主机上设置两块网卡,分别连接IP为 10.0.1.10的 PC1,IP为10.0.10.20的 PC2。 这 样,虽然两台主机处于同一实体网段,但是因为被Linux网桥主机隔离,是无法直接通讯的。只有将Linux网桥主机配置为网桥设备,才可以正常通讯。使用VI命令,打开“/etc/sysconfig/network-scripts/ifconfig-eth0”文 件,在其 中 设 置“DEVICE=eth0”、“ONBOOT=yes”、“BOOTPROTO=static”、“HWADDR=xx.xx.xx.xx.xx.xx”。
对 应 的,打 开“/etc/sysconfig/networkscripts/ifconfigeth1”文 件,在 其 中 设置“DEVICE=eth1”、“ONBOOT=yes”、“BOOTPROTO=static”、“HWADDR=xx.xx.xx.xx.xx.xx”。其中的“HWADDR”参数分别设置两块网卡的MAC地址。执行“echo 1 > /proc/sys/net/ipv4/ip_forward”命令,启用数据包转发功能,允许数据包在eth0和eth1接口之间传送。执行“brctl addbr br0”命令,添加一个名为“br0”的虚拟网桥接口。执行“brctl addif br0 eth0”和“brctl addif br0 eth1”命令,将eth0和eth1两个网络接口合并为一个网桥设备。执行“ifconfig br0 up”命令,启动名为“br0”的虚拟网桥接口。这样,该Linux网桥主机配置为网桥设备,两边的主机PC1和PC2就可以正常通讯了。为了避免出现广播风暴导致网络拥堵,可以执行“brctl stp br0 on”命令,启用网桥设备的STP(Spanning Tree Protoco,生成树协议)机制,来有效解决广播风暴问题。
在网桥设备上配合NetFilter防火墙模块,才可以构建透明防火墙。在OSI网络层级中,NetFilter不仅可以工作在第三层,其实也可以运行在第二层。在主流的Linux中,是无需进行额外配置的。注意,对网桥设备中NetFilter防火墙来说,其只能识别网桥接口,而无法识别以太网接口的。例如,如果想拦截PC2对PC1的PING探测,执行“iptables-A FORWARD -i eth1 -o eth0 -p icmp -j DROP”,在“Filter”表中的“FORWARD”链中添加一条拦截规则,假设PC1连接到eth0接口,PC2连接到eth1接口。但是,该规则是无效的,因为网桥设备上的NetFilter是无法识别以太网接口的。只有执行“iptanles -A FORWARD-m physdev --physdev-in eth1 -p icmp -j DROP”命令,添加一条规则,才可以禁止ICMP数据包从eth1接口进入。其中的“-m physdev”参数表示使用“physdev”模块,“--physdev-in”参数表示匹配进入网桥实际接口的数据包,对应的“--physdevout”参数表示匹配从网桥实际接口发出的数据包。
例如,在某企业网拥有 61.xxx.xxx.10,61.xxx.xxx.20,61.xxx.xxx.30 三个公网IP,NAT主机使用的IP为 61.xxx.xxx.10,企 业 内网通过多对一的映射机制,通过该NAT设备访问外网,该企业的Web和FTP服务器分别使用的IP为61.xxx.xxx.20 和 61.xxx.xxx.30。为了控制对Web和FTP服务器的访问,在其和NAT主机之间设置一台Linux主机作为透明防火墙。我们只允许来自NAT主机的数据包通过透明防火墙访问Web和FTP服务器。为此可以在Linux透明防火墙上执行“iptables -t filter -F”命令,清除Filter表中的所有规则。
执 行“iptables –A FORWARD -m physdev--physdev-ineth0-mstate --state ESTABLISHED,RELATED –J ACCEPT”命令,在“Filter”表中的“FORWARD”链中创建一条规则,允许已经建立的以及由其产生和关联的网络连接通过透防火墙的eth0接口进入,来访问Web和FTP服务器。这里假设透明防火墙的eth0接口连接NAT主机,eth1接 口 连 接 Web和FTP服务器。
其 中 的“-m state”参数表示使用State模块,用来检测数据包的状态。“ESTABLISHED” 参 数表示对已经建立的连接放行,“RELATED”参 数 对 相关联的网络连接放行。执行“iptable -A FORWARD-m physdev --physdev-in eth0 -m mac -mac-source xx:xx:xx:xx:xx:xx –j ACCEPT”命令,创建一条规则,允许来自NAT主机的数据包通过该透明防火墙。其中的“-m mac”参数表示使用MAC地址检测模块,“–macsource xx:xx:xx:xx:xx:xx”参数表示只针对NAT主机的MAC地址产生的网络连接 放 行。 执 行“iptable-A FORWARD -m physdev--physdev-in eth0 –p tcp-syn -d 61.xxx.xxx.20 -m multiport -dports 80,443-m state –state NEW –j ACCEPT”命令,创建一条规则。
该规则对于访问目的IP为 61.xxx.xxx.20,目 标端口为80和443的第一条TCP网络连接放行,其中的“-p tcp -syn”参数表示针对的是TCP的首条网络连接,“-state NEW”参数表示连接状态为新的连接。因为Web服务器可以提供普通的80端口,还可提供用于加密连接的443端口。所以对这两个端口的访问都需要放行。
执 行“iptable –A FORWARD -m physdev--physdev-in eth0 –p tcp–syn –d 61.xxx.xxx.30-m multiport -dports 21.22,989,990 -m state-state NEW -j ACCEPT”命令,创建一条规则,对于访问目 的 IP为 61.xxx.xxx.30,目标端口为 21、22、989、990的第一条TCP网络连接放行,因为FTP连接包括普通连接和加密连接,可能使用到这些端口。执行“iptable-A FORWARD -m physdev--physdev-in eth0 -j DROP”命令,创建一条规则,对其余的网络连接进行拦截。