9.3.2 保护内部客户机的防火墙规则
9.3.1小节介绍的是针对服务器子网的防火墙配置,侧重点是如何对其进行保护。因此,规则排列的特点是先放行指定的数据包,再拒绝所有的数据包。但对于图9-8中的子网10.10.2.0/24来说,配置的原则应该是不一样的,因为这个子网中的计算机是用户上网的计算机,为了给用户提供尽量多的上网功能,应该放行所有的数据包,但事先要对部分有问题的数据包进行拒绝。
要限制的数据包分为两类,一类是限制用户对Internet上某些内容的访问,还有一类是不允许Internet上的某些内容进入该子网。前者的数据包是从网卡eth2到eth0,而后者应该是从eth0到eth2。例如,如果不希望内网的计算机使用QQ,可以使用以下命令进行限制。
iptables -A FORWARD -p UDP --dport 8000 -i eth2 -o eth0 -j DROP
%说明:UDP协议8000号端口是QQ客户端登录服务器时使用的目的端口,该命令限制内网的计算机向外发送目的端口是8000的数据包。
下面的这条命令与上面命令功能相同,但它限制的是进来的数据包,客户端发起登录请求的数据包还是能通过的,效果不如上面那条命令好。
iptables -A FORWARD -p UDP --sport 8000 -i eth0 -o eth2 -j DROP
但实际上,目前QQ也可以通过TCP协议的80和443端口进行登录,而这两个端口是不能封的,否则,用户的浏览器将不能访问网站。因此,比较可靠的方法是封锁访问QQ服务器IP地址的数据包,具体命令如下:
iptables -A FORWARD -p tcp -d 60.191.124.236 -i eth2 -o eth0 -j DROP
iptables -A FORWARD -p tcp -d 58.60.15.38 -i eth2 -o eth0 -j DROP
…
60.191.124.236和58.60.15.38等IP址是QQ服务器的地址,有几十个IP,而且是动态变化的,需要即时搜集更新。此外,如果有些网站或者其他服务器也不允许内网的用户访问,可以查出其IP地址后,使用类似的命令进行限制。有些计算机病毒或木马程序要使用固定的端口进行传播或通信,为了保护内网不受这些程序的影响,需要把这部分端口封掉,例子命令如下所示。
iptables -A FORWARD -i eth0 -o eth2 -m multiport --dport 135:139,445,593,5554 -j DROP
135至139是Windows网络共享使用的端口号,为了防止内网数据可能会泄露,一般要封掉该端口,使内网和Internet之间不能进行Windows网络共享。其他几个端口都是 病毒或木马程序端口,如果有最新的病毒或木马使用其他端口,应该在上述命令中添加 进去。
有些蠕虫病毒发作时会产生大量的ICMP数据包,可以设置拒绝ICMP数据包的规则。但由于ping命令也是使用ICMP数据包工作的,如果设置拒绝转发ICMP数据包,内网将不能ping外网的任何主机,会给网络维护带来不便,因此比较好的办法是限制ICMP数据包的注量,命令如下所示。
iptables -A FORWARD -p icmp -m limit --limit 50/m --limit-burst 60 -j ACCEPT
前面的规则限制了10.10.2.0/24子网与Internet之间的部分数据包,管理员可以根据具体情况随时添加更多的规则或删除、修改部分规则。最后,还应该添加使所有数据包都能通过的规则,具体命令如下所示。
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
由于还有一个与服务器相连的eth1网卡,它默认时是不允许数据包通过的,因此上述命令要指明是在eth2和eth0网卡之间可以通过所有的数据包。