Linux ipchains 是 Linux IPv4 防火墙代码的重写版本,也是 ipfwadm 的重写版本,而 ipfwadm 我相信又是 BSD 的 ipfw 的重写版本。在 Linux 内核版本 2.1.102 及更高版本中,管理 IP 数据包过滤器是必需的。
较旧的代码无法处理分片,具有 32 位计数器(至少在 Intel 上是这样),不允许指定除 TCP、UDP 或 ICMP 以外的协议,无法原子性地进行大型更改,无法指定反向规则,存在一些怪癖,并且难以管理(容易导致用户错误)。作者是这么说的。
我不打算深入探讨如何控制 IPChains 防火墙,因为在 http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html 上有一个非常棒的 HOWTO 介绍了它。我只是在这里重复一遍。这里是基础知识。
你通过名称来操作链。你从三个内置链 input、output 和 forward 开始,这些链你无法删除。你可以创建自己的链。然后可以从这些规则集中添加和删除规则。
对整个链进行操作的操作有:
有几种方法可以操作链内的规则
有一些用于地址伪装的操作,它们在 ipchains 中是因为没有更好的地方放置它们
在更改防火墙规则时,会涉及到一些时间问题。如果不小心,在更改过程中可能会让数据包通过。一个简单的方法是执行以下操作
# ipchains -I input 1 -j DENY # ipchains -I output 1 -j DENY # ipchains -I forward 1 -j DENY
... 进行更改 ...
# ipchains -D input 1 # ipchains -D output 1 # ipchains -D forward 1 #
这会在更改期间丢弃所有数据包。
这是上面防火墙规则在 IPChains 中的副本。
#!/bin/sh # # rc.firewall # ## Flush everything, start from scratch /sbin/ipchains -F input /sbin/ipchains -F output /sbin/ipchains -F forward ## Redirect for HTTP Transparent Proxy #$IPCHAINS -A input -p tcp -s 192.1.2.0/24 -d 0.0.0.0/0 80 -j REDIRECT 8080 ## Create your own chain /sbin/ipchains -N my-chain # Allow email to got to the server /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT # Allow email connections to outside email servers /sbin/ipchains -A my-chain -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT # Allow Web connections to your Web Server /sbin/ipchains -A my-chain -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT # Allow Web connections to outside Web Server /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT # Allow DNS traffic /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT ## If you are using masquerading # don't masq internal-internal traffic /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT # don't masq external interface direct /sbin/ipchains -A forward -s 24.94.1.0/24 -d 0.0.0.0/0 -j ACCEPT # masquerade all internal IP's going outside /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0.0.0.0/0 -j MASQ ## Deny everything else /sbin/ipchains -P my-chain input DENY
不要止步于此。这不是一个出色的防火墙,而且我确信你还会提供其他服务。再次强调,请阅读 IPCHAINS-HOWTO。