基于Linux系统的包过滤防火墙(6)
来源:asp之家 时间:2009-09-19 20:21:00
即每分钟所允许的最大包数量为限制速率(本例为3)加上当前的触发阀值burst数。在任何情况下,都可以保证3个包通过,触发阀值burst相当于是允许额外的包数量。
(4)基于状态的匹配扩展(连接跟踪)。
每个网络连接包括以下信息:源地址、目的地址、源端口、目的湍口,称为套接字对(socketpairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息称为状态(stateful),能够检测每个连接状态的防火墙叫作状态包过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟踪连接状态的表,比简单包过滤防火墙具有更大的安全性。iptables与ipchains的不同之处在于iptables可以使用连接状态信息,创建基于包的状态的规则匹配。
基于状态匹配创建规则的命令格式如下:
iptables -m state-state [!]state [,state,state,state]
其中,state表是一个用逗号分割的列表,用来指定的连接状态可以是如下的4种:
→NEW:该包想要开始一个连接(重新连接或将连接重定向)。
→RELATED:该包是属于某个已经建立连接所建立的新连接。例如:FTP的数据传输连接和控制连接之间就是RELATED关系。
→ESTABLISHED:该包属于某个已经建立的连接。
→INVALID:该包不匹配于任何连接,通常这些包会被DROP。
例如:
1)在INPUT链添加一条规则,匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包。
#iptables -A INPUT -m state-state RELATED,ESTABLISHED
2)在INPUTP链添加一条规则,匹配所有从非eth0接口来的连接请求包。
#iptables -A INPUT -m state-state NEW -i ! eth0
又如,对于ftp连接可以使用下面的连接跟踪:1)被动ftp连接模式。
#iptables -A INPUT -p tcp-sport 1024: --dport 1024: -mstate-stateESTABLES -j ACCEPT
#iptables -A OUTPUT -p tcp-sport 1024: --dport 1024:-mstate-state ESTABLISHED,RELATED -j ACCEPT
2)主动ftp连接模式。
#iptables -A INPUT -p tcp-sport 20 -mstate-stateESTABLISHED,RELATED -j ACCEPT -m state-state ESTABLISHED-jACCEPT
(5)TOS匹配扩展。
所有数据包的首部都有一个称为服务类型的专用字段。该字段用于当数据包经过路由器时区分优先顺序。
使用ToS字段,可以使用某种类型的数据包优先于其它的数据包。有标记的数据包在路由器中进行不同的处理。设置ToS字段的工作是在网络层进行的。有关ToS的具体工作过程请参专考RFC1349。
在数据包中设置ToS字段的主要原因是:对不同类型的数据包加以区分,从而在流量较高的网络上减少网络拥塞。
数据包的ToS字段用一个字节表示。此字节的高3位舍弃不用,最低位使用固定值0,因此,有效位共有4个。有效位分别用来控制数据包的最小延时,最大吞吐量,最大可靠度和最小成本。其中,
→最小延时:用于减少数据包从路由到达主机的时间。
→最大吞吐量:用于提高数据传输量。适用于FTP数据端口,HTTP大文件传输和大量的POP3传输。
→最大可靠度:用来试图减少数据重传。
→最小成本:通常只在商业产品中使用。
要创建与ToS字段匹配的规则,可以使用下面的语法:
iptables [-t table]CMD[chain]-m tos tos_value [-j target]
其中tos_value可以是0x02、0x04、0x06、0x08、0x10。
例如:
#iptables -A INPUT -p tcp -m tos 0x08
表示匹配在ToS字段中设置了最大吞吐量的包。
2.3.4 设置目标扩展
要获得目标的简要说明,可以使用如下的命令:
#iptables -j name_of_TARGET-help
目标扩展由内核模块组成,而且iptables的一个可选扩展提供了新的命令行选项。在几个扩展是包含在默认netfilter发布中的。
(1)设置包的ToS值。为了设置数据包的ToS值,需要使用ToS目标扩展。设置ToS的值,只能对FORWARD、OUTPUT和PREROUTING链进行。语法如下:
iptables [-t table]CMD[chain][rule-matcher]-jTOS-set-tostos_value
其中tos_value可以是0x02、0x04、0x06、0x08、0x10。
下面是使用ToS目标扩展设置ToS值的一些例子:
#iptables -A OUTPUT -p tcp -m tcp-dport 21 -j TOS-set-tos0x10
#iptables -A OUTPUT -p tcp -m tcp-dport 22 -j TOS-set-tos0x10
#iptables -A OUTPUT -p tcp -m tcp-dport 110 -jTOS-set-tos0x08
(2)日志记录。iptables使用新的目标扩展LOG来实现日志记录。LOG目标用syslogd记录此包并继续传播。LOG目标扩展还可以使用如下的一些参数:
→ --log-level
跟踪一个级别名称或数字。合适的名字是"debug"、"info"、"notice"、"warning"、"err"、"crit"、"alert"和"emerg",相当于数字7到0。参考syslog.conf的手册可获取这些级别的说明。默认是"warning"。
→ --log-prefix
跟踪一个最多29个字符的字符串,它被写入到log信息的开始处,这样可以方便地使用grep对日志进行过滤。
另外,在使用LOG目标扩展的同时,还可以使用limit match,这样可以使记录有用日志的同时确保日志记录不会变得冗长。
下面是使用LOG目标扩展的一些例子:
#iptables -A FORWARD -m tcp -p tcp -j LOG
#iptables -A FORWARD -m icmp -p icmp-sport echo-reply -j LOG
#iptables -A INPUT -m limit-limit 3/m-limit-burst 3-jLOG-log-prefix "INPUT packet died:"
第3章、包过滤防火墙配置举例
3.1 建立包过滤防火墙
3.1.1网络结构
本节为一个的网络结构建立一个包过滤防火墙。
这个网络结构假设内部网有有效的Internet地址。为了将内部网段198.168.80.0/24与Internet隔离,在内部网络和Internet之间使用了包过滤防火墙。防火墙的网接口是eth1(198.168.80.254),防火墙的Internet接口是eth0(198.199.37.254)。加外,内网中有3台服务器对外提供服务。分别为: