作者:李洋
Linux系统提供了一个自带开源的防火墙——Netfilter/IPtables防火墙框架,该框架功能强大。本专题通过实战讲述如何应用其保障企业网络安全
1、框架简介
Netfilter/iptables可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行,被认为是Linux中实现包过滤功能的第四代应用程序。Netfilter/iptables包含在Linux 2.4以后的内核中,可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。Netfilter/iptables从ipchains和ipwadfm(IP防火墙管理)演化而来,功能更加强大。
如图1所示。netfilter主要提供了如下三项功能:
  包过滤:filter表格不会对数据报进行修改,而只对数据报进行过滤。iptables优于ipchains的一个方面就是它更为小巧和快速。
 NAT:NAT表格监听三个netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING及NF_IP_LOCAL_OUT。NF_IP_PRE_ROUTING实现对需要转发数据报的源地址进行地址转换,而NF_IP_POST_ROUTING则对需要转发的数据报目的地址进行地址转换。对于本地数据报目的地址的转换,则由NF_IP_LOCAL_OUT来实现。
  数据报处理:mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。使用mangle表,可以实现对数据报的修改或给数据报附上一些外带数据。当前mangle表支持修改TOS位及设置skb的nfmard字段。
 

图1  Netfilter/Iptables框架结构示意图

2、安装和启动Netfilter/iptables系统
因为Netfilter/iptables的netfilter组件是与内核2.4.x集成在一起的,高版本的Linux都配备了netfilter这个内核工具,所以一般不须要下载,而只要下载并安装iptables用户空间工具的源代码包,下载的网址为:http://www.netfilter.org/projects/iptables/downloads.html。目前,最新源代码安装包是:iptables-1.4.10.tar.bz2。
下面是安装源代码包的步骤:
//将源代码文件解压缩
#bzip2 -d iptables-1.4.10-tar.bz2
#tar -xvf iptables 1.4.10.tar
//切换目录
#cd iptables 1.4.10
//编译该工具,指定编译的内核目录为/usr/src/linux-2.6.4-8
#make KERNEL_DIR=/usr/src/linux-2.4.16-8
//执行make install命令,同样设定内核目录为/usr/src/linux-2.6.4-8
#make install KERNEL_DIR=/usr/src/linux-2.6.4-8
  安装完成后,就可以启动防火墙了,下面是启动iptables的命令:
//使用service命令手工启动
# service iptables start
如果想要在系统启动的时候也启动该防火墙服务,那么可以使用setup命令,然后进入System service选项,选择iptables守护进程即可。
3、 Iptables简单应用
1) 基本规则应用
下面将给出运用上述框架理论形成规则的一些简单示例,以供读者在实际的应用过程中进行模仿和使用:
(1)接受来自指定IP地址的所有流入的数据包:
#iptables -A INPUT -s 203.159.0.10 -j ACCEPT

(2)只接受来自指定端口(服务)的数据包:
#iptables -D INPUT --dport 80 -j DROP

(3)允许转发所有到本地(198.168.10.13)smtp服务器的数据包:
#iptables -A FORWARD -p tcp -d 198.168.10.13 --dport smtp -i eth0 -j ACCEPT

(4)允许转发所有到本地的udp数据包(诸如即时通信等软件产生的数据包):
#iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT


(5)允许来源为指定端口的tcp数据包进入:
#iptables –A INPUT –p tcp –m multiport -–source-port 21,53,80,25,110 ACCEPT

(6)丢掉SYN和ACK标志位置位的数据包:
#iptables -A INPUT-p tcp –-tcp-flags ALL SYN,ACK DROP
2) 碎片检测及流量控制
(1)检查IP碎片:在TCP/IP网络中,链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU,这些被分段的片段就成为IP碎片。那么,如果在防火墙处不对IP碎片进行特别处理的话,那么有可能部分IP碎片会被防火墙拦截,从而影响到接受端对这些碎片的还原,并最终影响到信息的完整性和可用性问题,所以,下面的例子给出防火墙允许IP碎片通过的规则:
#iptables –A FORWARD –p tcp –f –s 172.168.96.0/24 –d 172.168.97.18 –j ACCEPT
需要特别留意上述规则中的-f选项,它指定了第二个以及以后的IP碎片将由防火墙来处理通过,否则的话,考虑下面的规则,防火墙有可能对其第二个及其以后的IP碎片进行拦截,从而影响正常的信息流通:
#iptables –A FORWARD –p tcp –s 172.168.96.0/24 –d 172.168.97.18 –j ACCEPT
(2)速率限制:iptables提供了非常健全的速率控制机制,主要用来限制由外向内的单位时间内通过的数据包个数,这样做的一个直接的好处就是尽可能地抑制前面多次提到的拒绝服务攻击或者是分布式拒绝服务攻击,因为这两种攻击的一个非常典型的表现就是单位时间内有很多数据包涌向目的地。所以,我们可以使用下面的规则来限制单位时间内允许通过防火墙,从而进入被保护网络的数据包个数:
#iptables –A INPUT –m limit -–limit 200/second
#iptables –A INPUT –m limit -–limit 10000/minute
上述两条规则分别限制1秒内和1分钟内通过的数据包个数不能超过200和10000个。当然,在实际应用中,也可以通过/second、/minute、、/hour、/day这样的时间间隔来进行设定,并且,其中诸如200和10000这些具体数值的设定需要用户根据具体情况和经验来进行设定,没有规定的数值可循。
另外,在设定速率限制后,还可以设定超过该限制所触发的一些处理事件,比如说直接丢弃。下面的规则表示当速率超过200限制后,将直接对后续数据包进行丢弃:
#iptables –A INPUT –m limit -–limit-burst 200

文章如转载,请注明转载自:http://www.5iadmin.com/post/1029.html