本文以Ubuntu 14.04为例,讲讲ufw防火墙规则顺序问题。
--------------------------------此处应该优雅的使用分割线--------------------------------
先说原理再吐槽!
Linux系统及其许多其他软件中都有访问控制(Access Control)功能,比如系统中的防火墙,Cisco ios中的ACL(Access Control Lists),Web服务器中的Access Module。在有些访问控制的实现中,有一些访问控制的功能跟顺序有关,例如禁止所有其他主机访问本机端口但允许某一台主机访问本机端口,或者允许所有主机访问本机端口但禁止某一台主机访问本端口。这样的例子在netfilter iptables和Apache httpd 2.2版本中能很容易得到体现,这里主要讲讲Ubuntu的ufw。
首先要给大多数人纠正一下,ufw并不是一个防火墙,尽管它叫做Ubuntu firewall,但它本身并没有防火墙的功能,它只是一个管理netfilter防火墙的工具,其核心还是netfilter的iptables。这一点在ufw的man中很容易发现,ufw是管理netfilter的一个程序而已,此工具的目的在于帮助用户简化iptables的复杂使用方法。
在说Ubuntu ufw之前还是要说一下CentOS中的iptables,在CentOS中,iptables规则是从一个文件(/etc/sysconfig/iptables)中,从上到下读取配置的,后一条的规则能覆盖(override)前一条规则,例如默认规则下有2条拒绝规则:
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
这两条规则的含义是拒绝其他不符合规则的数据包,并且给被拒绝的主机发送一条icmp host prohibited的消息。并且这两条规则可以认为是iptables对默认规则的补充,因为在这些默认规则之前,有:INPUT ACCEPT [0:0]这样的规则,这些规则表示默认全部允许。
那说了这么多,到底要表达