Linux 的内置firewall机制,是通过kernel中的netfilter模块实现的(www.netfilter.ort)。Linux kernel使用netfilter对进出的数据包进行过滤,netfilter由三个规则表组成,每个表又有许多内建的链组成。通过使用iptables命令可以对这些表链进行操作,如添加、删除和列出规则等。
-A 在链尾添加一条规则 -C 将规则添加到用户定义链之前对其进行检查 -D 从链中删除一条规则 -E 重命名用户定义的链,不改变链本身 -F 清空链,删除链上的所有规则 -I 在链中插入一条规则 -L 列出某个链上的规则,如iptables –L INPUT 列出INPUT链的规则 -N 创建一个新链 -P 定义某个链的默认策略 -R 替换链上的某条规则 -X 删除某个用户相关的链 -Z 将所有表的所有链的字节和数据包计数器清零 2.) Iptables的命令参数 -p –protocol 应用于数据包的协议类型,可以是TCP UDP ICMP或ALL。!也可使用。 当使用-p tcp时,还可使用其他可以选项,以便允许进一步定义规则。选项包括: ——sport 允许指定匹配数据包源端口.port1:port ,表示port1和port2之间的所有端口 ——dport 目的端口,和——sport雷同。 当使用-p !udp时,也有特殊的选项供使包括: ——sport,——dport,与-p tcp 相同,只不过用以用于UDP包。 使用-p icmp参数时,只有一个选项可用。 ——icmp-type,允许在过滤规则中指定icmp类型。 -s –source 指定数据包的源地址。该参数后跟一个IP地址,一个带有sub-net mask的网络地址,或一个主机名。(不建议使用主机名) -d,- - destination 数据包的目的地址,同-s.
-j,——jump 用于指定一个target,告诉规则将该匹配的数据包发送到该 target。Target可以是ACCEPT,DROP,QUEUE,RETURN.如果没有-j,那么不会对数据包进行任何操作,只是将计数器加1。
-i - - in-interface ,对于INPUT FORWARD PREROUTING链,该参数指定数据包到达服务器时所使用的端口。 -o - - out-interface,对于OUTPUT FORWARD POSTROUTING链,该参数指定数据包离开服务器时使用的端口。 3.) Iptables的命令target 创建规则的最后一步是指定Iptables对数据包的操作。只要某一规则匹配该数据包,就不会再有别的规则的操作。内建的target有:ACCEPT DROP QUEUE RETURN。 ACCEPT:允许数据包通过,到达目的地。 DROP:拒绝数据包通过,丢弃该包。 QUEUE:将数据包发送回到用户应用程序处理。 RETURN:不再根据当前链的其他规则来检查数据包,而是直接返回,继续被发送到其目的地址,或下一个链。 2.应用Iptables规则 示例 允许WWW
该规则被添加到filter表的INPUT链,允许目的端口是80的数据包。
在内部接口上允许DHCP
以上同时允许TCP和UDP协议。
3.保存和恢复Iptables 保存Iptables 使用iptables-save可将现行的iptables规则保存, iptables-save > iptables保存路径,如# iptables-save > /etc/iptables.up.rule 恢复Iptables 使用iptables-restore 可从配置文档恢复iptables表到现行iptables表.
二、Ubuntu Server中的Iptables
|
auto lo |
#添加以下内容
pre-up iptables-restore < /etc/iptables.up.rule |
另外,可随时修改/etc/iptables.up.rule配置文件,来更改iptables的规则。Iptables.up.rule格式如下:
#Generated by iptables-save V1.3.3 on Tue Jul 31 14:18:44 2007 |
iptables表链中每条规则的顺序很重要,如果首条是accept all,那末所有的数据包都会被允许通过firewall,因此应当适当的安排规则顺序。
通常的法则是:拒绝所有 允许少数.