摘要:IPtable1.0.7指南
为什么?
我发现目前所有的HOWTO 都缺乏新的Linux 2.4.x 内核中的新Iptables 函数的信息,于是我试图回答象一些新的可能性在诸如状态匹配之中的问题. 假设问一下, 你的服务器上能否构建这么一种情况,它 允许被动的FTP访问 ,但不许从IRC中流出DCCs. 我将在例子 rc.firewall文件中构建这种情况,你可以在你的/etc/rc.d/ scripts中使用。是的,最初这篇文章是伪装成HOWTO文档的形式书写的,因为许多人只接受HOWTO文档,。
还有一个小脚本,我写它只是为使你在配置它的时候能象我一样振奋,具体文件可以在flush-iptables.txt中获得.
怎么样?
我已经向Marc Boucher 及netfilter团队的其他核心成员提出了问题。对他们的工作以及对我在为boingworld.com书写这个指南时的帮助表示极大的谢意。这个文档将一步一步教你setup过程,让你对iptables包有更多的了解。这大部分的东西都基于例子rc.firewall 文件,因为我发现这是学习iptables的一个好方法。我不太确定如何组织这篇文章,但我最后决定自顶向下地跟随rc.firewall 文件,换句话说,你可以阅读rc.firewall 文件,当你碰到不懂的东西时再来查看这个文件。
你是谁?
我是这样一个人,在我的局域网上有很多旧机器,等待连接到Internet上并保证安全。在这一点上,新的iptables 是从旧的ipchains 上的一个很好的升级,以前,你可以通过丢失所有的包,并将它们不送往特定的端口来建立一个安全的网络,但这将导致类似被动的 FTPs 或在IRC中流出DCCs的问题,你得服务器分配端口,并告知客户端,然后再让客户连接。但是,新的iptables 代码中也有一些小毛病,在某些方面我发现这些代码并没有为作为完整的产品发布做好准备,但我仍然建议那些使用ipchains 或更老的ipfwadm 的人进行升级,除非他们对正在使用的代码满意,或则它们足以满足他们的需要。
从哪获得 ?
iptables 用户空间包可以从netfilter 的一个主页获得http://netfilter.samba.org/。iptables 还使用了内核空间包,在配置时可以加入内核,有用的部分我们将在下文讨论。
内核setup
运行iptables 最基本的部分,你需要将下面的选项配置入内核:
CONFIG_PACKET
CONFIG_NETFILTER
当然你需要配置好你的接口,使它们工作,那就是Ethernet, PPP 和 SLIP 接口。如果你想用更高级的选项,你需要将下面的选项配置入内核:
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_MATCH_MAC
CONFIG_IP_NF_MATCH_MARK
CONFIG_IP_NF_MATCH_MULTIPORT
CONFIG_IP_NF_MATCH_TOS
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_MATCH_UNCLEAN
CONFIG_IP_NF_MATCH_OWNER
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_TARGET_REJECT
CONFIG_IP_NF_TARGET_MIRROR
CONFIG_IP_NF_NAT
CONFIG_IP_NF_NAT_NEEDED
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_TARGET_REDIRECT
CONFIG_IP_NF_NAT_FTP
你还可以看到很多,在此我不一一解释,如果你需要或好奇可以自己仔细去看看。built-in 在配置时有帮助,其他命令对于了解基本的东西会有帮助,详细情况请看一下netfilter 主页上的HOWTO"s
下文中的一些选项是你所需要使用而且我也将要讲述的.
CONFIG_PACKET
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_MATCH_UNCLEAN
CONFIG_IP_NF_TARGET_REJECT
CONFIG_IP_NF_TARGET_MASQUERADE
使用过的选项的解释
CONFIG_PACKET 使得类似tcpdump 的程序工作,在本指南中并没有真正使用,但因为你读了,我假设你对安全方面感兴趣, 在这一点上,tcpdump和snort是好的添加。
CONFIG_NETFILTER 能使内核中信息包进行过滤,没有这一选项,你不能使用iptables ,没有它你也不能伪装你的连接。
CONFIG_IP_NF_CONNTRACK ------连接跟踪,它跟踪连接,并知道在一个连接中信息包如何、在哪相关联。它在伪装或做任何一种NAT操作的时候需要!
CONFIG_IP_NF_FTP 跟踪FTP连接,因为它与基本的过滤器有点问题,所以是分开的代码。当你想在FTP的连接上伪装时需要它。
CONFIG_IP_NF_IPTABLES 是iptables 支持,如果你想使用iptables就需要它。(如果你不需要它我不知道你为什么要读这篇文章)。
CONFIG_IP_NF_MATCH_STATE 是iptables的状态匹配代码,对2.3.x 和 2.4.x 内核来说它是一种新的特性,但到目前为止还没有很好的文档对它加以描述,这也是我所想补救的。它所做的就是在基于信息包与其他连接的关系上增加包过滤的可能性,例如你可以使一个被动的FTP 客户通过一个其他方面是完全关闭的服务器,下载文件,列表目录等。
CONFIG_IP_NF_MATCH_UNCLEAN 支持通过观察包头部的一系列域来匹配不干净的包或无效包。
CONFIG_IP_NF_TARGET_REJECT 这段代码向你的过滤器中增加REJECT 目标。换句话说,它可以让你用`ICMP error" 回答,而不只是丢弃死包。这在你想告诉别人无法连接时有好处。
CONFIG_IP_NF_NAT 允许你做伪装、端口传送等等操作。如果你只有一个配置的IP ,但是还想将所有的网络设备都连到Internet 上,就需要它将你的局域网连到Internet 上。
CONFIG_IP_NF_TARGET_MASQUERADE 使改变你的局域网到 Internet 的连接成为可能,使他们看起来象是从其他的主机而不是普通的box IP来。想知道它在理论上是怎么工作的请查看masquerading HOWTO。
当然你可能不会用到所有的这些选项,或者你想使用其他的配置选项,以上这些是我在这个指南中将要用到的,为了在你的网络设备上建立基本的安全体制。
用户设置
在这你要做的就是获取iptables 包并配置好它, iptables包在netfilter的一个主页可下载. 。当然,安装这个包也是个好主意。
rc.firewall 文件
例子 rc.firewall
好了,你已经建立好了一切,准备好看看例子rc.firewall文件 。这个文件很长,有很多注释,看看它再回来看解释。
rc.firewall的解释
额外模块的初始加载
首先我们注意到模块关联文件通过发布/sbin/depmod ——一个命令而保持最新的。然后我们加载一些我们感兴趣的模块。比如你想要支持REJECT 和MASQUERADE 目标,但你没有将它在你的内核中编译,我们就加载这些模块。
下一步是加载ipt_owner 模块的选择,比如只允许特定用户做特定连接等。在这个例子中我不用它,但基本上,你可以只允许根做与redhat 和 DROP及其他一切的 FTP 和 HTTP连接。或者除了你的用户和根以外,你不许其他用户从你的网络设备连接Internet,可能对其他人不方便,但你在黑客攻击前可能安全些。
这之后是我们状态匹配过滤器使用的第一部分,ip_conntrack_ftp 和 ip_conntrack_irc的加载。通过它可以做我在本文一开始就鼓吹的事情: 状态匹配,比如不允许被动的FTP 而允许DCC 工作,我们只加载了ip_conntrack_ftp 模块,却没加载ip_conntrack_irc模块。为使他们工作,这两者必须没被编译进内核,我重复一遍,必须没有。反之亦然,我们在哪希望被动的FTP 工作,却没发送DCC ,当然我们得用其他方式做,加载IRC 模块,而不是FTP 模块。它所做的就是比如增加内核辨认一个与当前活跃的FTP 控制流程相关联的被动FTP连接的能力,但因为IRC 模块没被加载,内核没法辨认它是否与当前某个活跃的流相关联,因此它不允许这些连接。如果你用相反的方式做,相反的结果成立。
为了IP传送的内核初始化及其他
之后,我