柳雲莉
黑龙江农业职业技术学院信息工程系 黑龙江 154002
Linux提供的防火墙软件包内置于 Linux内核中,是一种基于包过滤防火墙的技术。其中心思想是根据网络层 IP包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻底地过滤则是检查包中的源端口中目的端口以及连接状态等信息。netfilter是Linux核心中一个通用架构,用于扩展各种服务的结构化底层服务。它提供一系列的表(table),每个表由若干链(Chain)组成,而每条链中可以由一条或数条规则(Rule)组成。它可以和其他模块(iptables模块和nat模块)结合起来实现包过滤功能。iptables是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格中的规则。实际上真正来执行这些过滤规则的是netfilter。
若要实现一台功能完善的防火墙,不是一件很轻松的事情,RHEL4中提供了图形化界面很容易完成图形化配置,单击【Applications】→【System Settings】→【Security Level】命令,打开如图1所示的界面。
图1 图形化配置防火墙
文本方式配置是手动输入相应的命令行,实际上就是使用 iptables这个工具来设置相应的规则,允许什么样的数据包通过,拒绝哪些数据包通过。最后可以将这些规则放入一个文中,作为一个可执行的脚本来执行,这样就完成了防火墙的架设。
1.2.1 iptables规则链
iptables的作用在于为netfilter的处理提供相关的规则,这些规则具有目标,它们告诉 netfilter对来自某些源、前往某些目的地或具有某些协议类型的数据包做些什么。由于一条规则只定义了某一类型的数据包,而对于其他类型的数据包,就需要另一条规则来描述,也就有了多种类型的规则存在。iptables默认具有 5条规则链:PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD它们在网络数据处理流程中的位置如图2所示。
INPUT链 处理输入包的规则链。
OUTPUT链 处理输出包的规则链。
FORWARD链 处理转发包的规则链。
PREROUTING链 对到达且未经路由判断之前的包进行处理的规则链。
POSTROUTING链 对发出且经过路由判断之后的包进行处理的规则链。
1.2.2 iptables规则表
iptables的规则链组织在3个不同的规则表中:filter、nat、mangle。其中filter针对过滤系统,nat针对地址转换系统,mangle针对策略路由和特殊应用。规则链分配如下:
filter表中包含INPUT、FORWARD和OUTPUT3个链。
nat表中包含 PREROUTING、POSTOUTING和OUTPUT3个链。
mangle表中包含 PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD5个链。
1.2.3 iptables命令格式
iptables [-t 表名] <命令> [链名] [规则号] [规则] [-j 目标]
-A在指定链的末尾添加一条或多条规则。
-t选项用于指定所使用的表。
-D从指定的链中删除一条或多条规则。可以按照规则的序号进行删除,也可以删除满足匹配条件的规则。
-L列出指定链中的所有规则,如果没有指定链,则所有链中的规则都将被列出。
-F删除指定链中的所有规则,如果没有指定链,则所有链中的规则都将被删除。
-X删除指定的用户自定义链,这个链必须没有被引用,而且里面也不包含任何规则。如果没有给出链名,这条命令将试着删除每个非内建的链。
-Z将表中数据包计数器和流量计数器归零。
比如自己拥有一台计算机,不论通过拨号上网还是小区宽带,都不会向 Internet提供服务,但是自己能够不受限制地上网。首先利用相应的编辑器,编辑如下脚本,需要将其执行权限修改为root权限。
#!/bin/sh
modprobe iptables
iptables -F #清除filter表中的所有规则iptables -X #删除用户定义的链
iptables -Z #省略-t参数默认清除filter表
#设定默认策略,只涉及filter表
iptables -P INPUT -j DROP
iptables -P OUTPUT -j ACCEPT
iptables -P FORWARD -j ACCEPT
#设定规则,因为是过滤的一些规则,所以要注意这些规则添加的链的位置
#允许本地链接
iptables -A INPUT -i lo -p all -j ACCEPT
#允许dns查询
iptables -A INPUT -p tcp -dport 53 -j ACCEPT
iptables -A INPUT -p udp -dport 53 -j ACCEPT
#允许自己使用网络服务,1024以上端口都可使用
iptables -A INPUT -p tcp -dport 1024: -j ACCEPT
iptables -A INPUT -p udp -dport 1024: -j ACCEPT
编辑好后,运行就可以了,如果需要开机启动,将该脚本放置在/etc/rc.d/rc.local中即可。防火墙在进行数据包分析时,是按顺序去对比一条一条的规则,遇到适用的规则就会执行,而不再去对比下面的规则,也就是第一匹配优先原则。
设置和管理Linux操作系统中的防火墙是网络安全中一项重要工作。netfilter/iptables是Linux系统提供的一个非常优秀的防火墙工具,它完全免费、功能强大、使用灵活、占用系统资源少,可以对经过的数据进行非常细致的控制。
[1]胡剑锋.Linux操作系统·清华大学出版社.2008.
[2]杨云.Linux网络操作系统与实训.中国铁道出版社.2008.
[3]陈健.Linux防火墙.人民邮电出版社.2009.