9.2.2 RHEL 5开机时默认的防火墙规则
在Linux系统中,可以通过使用iptables命令构建各种类型的防火墙。RHEL 5操作系统默认安装时,iptables防火墙已经安装,并且开机后会自动添加了一些规则,这些规则实际上是由/etc/sysconfig目录中的iptables文件决定的。可以通过“iptables -L”命令查看这些默认添加的规则。
# iptables -L
Chain INPUT (policy ACCEPT) #INPUT链中的规则
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere #规则1
Chain FORWARD (policy ACCEPT) # FORWARD链中的规则
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere #规则2
Chain OUTPUT (policy ACCEPT) # OUTPUT链中的规则
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references) #自定义的RH-Firewall-1-INPUT链
中的规则,被其他链引用两次target prot opt source destination
ACCEPT all -- anywhere anywhere #规则3
ACCEPT icmp -- anywhere anywhere icmp any #规则4
ACCEPT esp -- anywhere anywhere #规则5
ACCEPT ah -- anywhere anywhere #规则6
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns #规则7
ACCEPT udp -- anywhere anywhere udp dpt:ipp #规则8
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp #规则9
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED #规则10
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp #规则11
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh #规则12
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http #规则13
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:smtp #规则14
REJECT all -- anywhere anywhere reject-with icmp-host-
prohibited #规则15#
由于上面的iptables命令没有用-t选项指明哪一张表,也没有指明是哪一条链,因此默认列出的是filter表中的规则链。由以上结果可以看出,filter表中总共有4条链。其中,INPUT、FORWARD和OUTPUT链是内置的,而RH-Firewall-1-INPUT链是用户自己添 加的。
1.规则列
在前面列出的防水墙规则中,每一条规则列出了5项内容。target列表示规则的动作目标。prot列表示该规则指定的上层协议名称,all表示所有的协议。opt列出了规则的一些选项。source列表示数据包的源IP地址或子网,而destination列表示数据包的目的IP地址或子网,anywhere表示所有的地址。除了上述5列以外,如果存在,每一条规则的最后还要列出一些子选项,如RH-Firewall-1-INPUT链中的规则4等。
如果执行iptables命令时加了-v选项,则还可以列出每一条规则当前匹配的数据包数、字节数,以及要求数据包进来和出去的网络接口。如果加上-n选项,则不对显示结果中的IP地址和端口做名称解析,直接以数字的形式显示。还有,如果加上“--line-number”选项,可以在第一列显示每条规则的规则号。
2.规则解释
INPUT链中的规则1其target列的内容是RH-Firewall-1-INPUT,opt列是all,source和destination列均为anywhere,表示所有的数据包都交给自定义的RH-Firewall-1-INPUT链去处理。FORWARD链的规则2与规则1完全一样。OUTPUT链中没有规则。
在自定义的RH-Firewall-1-INPUT链中,列出了很多的规则,规则3表示接收所有的数据包。需要注意的是,如果在iptables中加-v选项列出这条规则时,将会看到in列是lo,即要求数据包是从环回接口中进来的,而不是任意网络接口进来的数据包都接收。
规则4表示所有icmp数据包都接收,即其他计算机ping本机时,予以接收,而且在OUTPUT链中没有规则,因此本机的ICMP回复数据包也能顺利地进入网络,被对方收到。规则5和规则6表示接收所有的esp和ah协议的数据包,这两种协议属于IPv6协议。
规则7表示目的地址是224.0.0.251,目的端口是mdns的UDP数据包允许通过。224.0.0.251是一种组播地址,mdns是端口号的一种名称。如果执行iptables命令时加了-n选项,则会显示数字5353,它是组播地址的DNS端口。
规则8和规则9表示允许所有目的端口是ipp的UDP和TCP数据包通过,ipp是端口631的名称解析,它是用于网络打印服务的端口。规则10表示所有状态是RELATED和ESTABLISHED的数据包通过,RELATED状态表示数据包要新建一个连接,而且这个要新建的连接与现存的连接是相关的,如FTP的数据连接。ESTABLISHED表示本机与对方建立连接时,对方回应的数据包。
规则11至规则14表示允许目的端口是ftp、ssh、http和smtp,状态是NEW的TCP数据包通过,状态为NEW即意味着这个TCP数据包将与主机发起一个TCP连接。这几条规则的端口对应的都是最常见的网络服务,它们的端口号分别是21、22、80和25。最后一条规则15表示拒绝所有的数据包,并向对方回应icmp-host-prohibited数据包。
3.补充解释
需要再次提醒的是,这些规则是有次序的。当一个数据包进入RH-Firewall-1-INPUT链后,将依次与规则3至规则15进行比较。按照这些规则的目标设置,如果数据包能与规则3至14中的任一条匹配,则该数据包将被接收。如果都不能匹配,则肯定能和规则15匹配,于是数据包被拒绝。
由于RH-Firewall-1-INPUT链是被INPUT链调用的,如果要返回到INPUT链,需要执行名为RETURN的目标动作。
%说明:在FORWARD链中也调用了RH-Firewall-1-INPUT链,即数据包如果不是发送给本机的,当经过FORWARD链时,还要进入RH-Firewall-1-INPUT链,与规则3到规则15再次进行匹配。