Username: Password:

iptable指南之(2)准备阶段
来源:Blog.ChinaUnix.net作者:Blog.ChinaUnix.net 发布时间:2008-04-07 05:36:06

2. 准备阶段
2.1. 哪里能取得iptables
2.2. 内核配置
2.3. 编译和安装
2.3.1. 编译
2.3.2. 在Red Hat 7.1上安装


2. 准备阶段

这一章是学习iptables的开始,他将帮助您理解Netfilter和iptables在Linux中扮演的角色。他会告诉您怎样配置、安装防火墙,您的经验也会随之增长。当然,要想达到您的目标,是要花费时间,还要有毅力。( 译者注:听起来很吓人的:) )


2.1. 哪里能取得iptables

iptables 能够从www.netfilter.org 下载,网站中的FAQs也是很好的教程。iptables 也使用一些内核空间,能够在用make configure配置内核的过程中配置,下面会介绍必要的步骤。


2.2. 内核配置

为了运行iptables,需要在内核配置期间,选择以下一些选项,不管您用make config或其他命令。

CONFIG_PACKET - 允许程式直接访问网络设备(译者注:最常用的就是网卡了),象tcpdump 和 snort就要使用这个功能。

Note

严格地说,iptables并无需CONFIG_PACKET,但是他有很多用处(译者注:其他程式需要),所以就选上了。当然,您不想要,不选就是了。(译者注:建议还是选的为好)

CONFIG_NETFILTER - 允许电脑作为网关或防火墙。这个是必需的,因为整篇文章都要用到这个功能。我想您也需要这个,谁叫您学iptables呢:)

当然,您要给网络设备安装正确的驱动程式,比如,Ethernet 网卡, PPP 更有 SLIP 。 上面的选项,只是在内核中建立了一个框架, iptables确实已能够运行,但不能做任何实质性的工作。我们需要更多的选项。以下给出内核2.4.9的选项和简单的说明:

CONFIG_IP_NF_CONNTRACK - 连接跟踪模块,用于 NAT(网络地址转换)Masquerading(ip地址伪装),当然,更有其他应用。假如您想把LAN中的一台机子作为防火墙,这个模块您算选对了。脚本rc.firewall.txt 要想正常工作,就必需有他的存在。

CONFIG_IP_NF_FTP - 这个选项提供针对FTP连接进行连接跟踪的功能。一般情况下,对FTP连接进行连接跟踪是很困难的,要做到这一点,需要一个名为helper的动态链接库。此选项就是用来编译helper的。假如没有这个功能,就无法穿越防火墙或网关使用FTP。

CONFIG_IP_NF_IPTABLES - 有了他,您才能使用过滤、伪装、NAT。他为内核加入了iptables标识框架。没有他,iptables毫无作用。

CONFIG_IP_NF_MATCH_LIMIT - 此模块并不是十分必要,但我在例子rc.firewall.txt中用到了。他提供匹配LIMIT的功能,以便于使用一个适当的规则来控制每分钟要匹配的数据包的数量。比如, -m limit --limit 3/minute 的作用是每分钟最多匹配三个数据包。这个功能也可用来消除某种DoS攻击。

CONFIG_IP_NF_MATCH_MAC - 选择这个模块,能够根据MAC地址匹配数据包。例如,我们想要阻塞使用了某些MAC地址的数据包,或阻塞某些电脑的通信,用这个很容易。因为每个Ethernet网卡都有他自己的MAC地址,且几乎从不会改变。但我在 rc.firewall.txt中没有用到这个功能,其他例子也未用到。(译者注:这又一次说明了学习是为将来打基础:) )

CONFIG_IP_NF_MATCH_MARK - 这个选项用来标记数据包。对数据包做 MARK(标记)操作,我们就能够在后面的表中用这个标记来匹配数据包。后文有周详的说明。

CONFIG_IP_NF_MATCH_MULTIPORT - 选择这个模块我们能够使用端口范围来匹配数据包,没有他,是无法做到这一点的。

CONFIG_IP_NF_MATCH_TOS - 使我们能够配置数据包的TOS(Type Of Service 服务类型)。这个工作也能够用命令ip/tc完成,还可在mangle表中用某种规则设定。

CONFIG_IP_NF_MATCH_TCPMSS - 能够基于MSS匹配TCP数据包。

CONFIG_IP_NF_MATCH_STATE - 相比较ipchains 这是最大的更新,有了他,我们能够对数据包做状态匹配。比如,在某个TCP连接的两个方向上已有通信,则这个连接上的数据包就被看作ESTABLISHED(已建立连接)状态。在rc.firewall.txt 里大量使用了此模块的功能。

CONFIG_IP_NF_MATCH_UNCLEAN - 匹配那些不符合类型标准或无效的 P、TCP、UDP、ICMP数据包(译者注:之所以此模块名为UNCLEAN,能够这样理解,凡不是正确模式的包都是脏的。这有些象操作系统内存管理中的“脏页”,那这里就能够称作“脏包”了,自然也就UNCLEAN了)。我们一般丢弃这样的包,但不知这样做是否正确。另外要注意,这种匹配功能还在实验阶段,可能会有些问题。

CONFIG_IP_NF_MATCH_OWNER - 根据套接字的拥有者匹配数据包。比如,我们只允许root访问Internet。在iptables中,这个模块最初只是用一个例子来说明他的功能。同样,这个模块也处于实验阶段,还无法使用。

CONFIG_IP_NF_FILTER - 这个模块为iptables添加基本的过滤表,其中包含INPUT、FORWARD、OUTPUT链。通过过滤表能够做完全的IP过滤。只要想过滤数据包,不管是接收的还是发送的,也不管做何种过滤,都必需此模块。

CONFIG_IP_NF_TARGET_REJECT - 这个操作使我们用ICMP错误信息来回应接收到的数据包,而不是简单地丢弃他。有些情况必须要有回应的,比如,相对于ICMP和UDP来说,要重置或拒绝TCP连接总是需要一个TCP RST包。

CONFIG_IP_NF_TARGET_MIRROR - 这个操作使数据包返回到发送他的电脑。例如,我们在INPUT链里对目的端口为HTTP的包配置了MIRROR操作,当有人访问HTTP时,包就被发送回原电脑,最后,他访问的可能是他自己的主页。(译者注:应该不难理解为什么叫做MIRROR了)

CONFIG_IP_NF_NAT - 顾名思义,本模块提供NAT功能。这个选项使我们有权访问nat表。端口转发和伪装是必需此模块的。当然,假如您的LAN里的任何电脑都有唯一的有效的 IP地址,那在做防火墙或伪装时就无须这个选项了。rc.firewall.txt 是需要的:)

CONFIG_IP_NF_TARGET_MASQUERADE - 提供MASQUERADE(伪装)操作。假如我们不知道连接Internet的IP,最好选择的方法就是使用MASQUERADE,而不是DNAT或SNAT。换句话说,就是假如我们使用PPP或SLIP等连入Internet,由DHCP或其他服务分配IP,使用这个比SNAT好。因为MASQUERADE 无需预先知道连接Internet的IP,虽然对于电脑来说MASQUERADE要比NAT的负载稍微高一点。

CONFIG_IP_NF_TARGET_REDIRECT - 这个操作和代理程式一起使用是很有用的。他不会让数据包直接通过,而是把包重新映射到本地主机,也就是完成透明代理。

CONFIG_IP_NF_TARGET_LOG - 为iptables增加 LOG(日志)操作。通过他,能够使用系统日志服务记录某些数据包,这样我们就能了解在包上发生了什么。这对于我们做安全审查、调试脚本的帮助是无价的。

CONFIG_IP_NF_TARGET_TCPMSS - 这个选项能够对付一些阻塞ICMP分段信息的ISP(服务提供商)或服务。没有ICMP分段信息,一些网页、大邮件无法通过,虽然小邮件能够,更有,在握手完成之后,ssh能够但scp不能工作。我们能够用TCPMSS解决这个问题,就是使MSS(Maximum Segment Size)被钳制于PMTU(Path Maximum Transmit Unit)。这个方法能够处理被Netfilter研发者们在内核配置帮助中称作“criminally brain-dead ISPs or servers”的问题。

CONFIG_IP_NF_COMPAT_IPCHAINS - ipchains 的,这只是为内核从2.2转换到2.4而使用的,他会在2.6中删除。

CONFIG_IP_NF_COMPAT_IPFWADM - 同上,这只是 ipfwadm的暂时使用的兼容模式。

上面,我简要介绍了很多选项,但这只是内核2.4.9中的。要想看看更多的选项,建议您去Netfilter 看看patch-o-matic。在那里,有其他的一些选项。POM可能会被加到内核里,当然现在还没有。这有很多原因,比如,还不稳定,Linus Torvalds没打算或没坚持要把这些补丁放入主流的内核,因为他们还在实验。

把以下选项编译进内核或编译成模块,rc.firewall.txt才能使用。

  • CONFIG_PACKET

  • CONFIG_NETFILTER

  • CONFIG_IP_NF_CONNTRACK

  • CONFIG_IP_NF_FTP

  • CONFIG_IP_NF_IRC

  • CONFIG_IP_NF_IPTABLES

  • CONFIG_IP_NF_FILTER

  • CONFIG_IP_NF_NAT

  • CONFIG_IP_NF_MATCH_STATE

  • CONFIG_IP_NF_TARGET_LOG

  • CONFIG_IP_NF_MATCH_LIMIT

  • CONFIG_IP_NF_TARGET_MASQUERADE

以上是为确保 rc.firewall.txt正常工作而需要的最少的选项。其他脚本需要的选项,在相应的章节里都有说明。现在,我们只需注意要学习的这个脚本。


2.3. 编译和安装

下面,我们来看看怎样编译iptables。iptables很多组件的配置、编译是和内核的配置、编译相关联的,了解这一点是很重要的。某些Linux产品预装了iptables,比如Red Hat,但是他的缺省配置是不启用iptables的。后文我们会介绍怎样启用他,也会介绍一下其他 Linux产品里的iptables情况。


2.3.1. 编译

首先要解压iptables包。这里,我用iptables 1.2.6a做例子(译者注:在我翻译时,最新版本已是 1.2.9,其中又有了不少改进,修补了一些bug,增添了几个match和target。)。命令 bzip2 -cd iptables-1.2.6a.tar.bz2 | tar -xvf -(当然也能够用tar -xjvf iptables-1.2.6a.tar.bz2,但这个命令可能对一些老版的tar不适用 ) 将压缩包解压至目录iptables-1.2.6a,其中的INSTALL文档有很多对编译、运行有用的信息。

这一步,您将配置、安装一些额外的模块,也能够为内核增加一些选项。我们这里只是检查、安装一些未被纳入内核的标准的补丁。当然,更多的在实验阶段的补丁,仅在进行其他某些操作时才会用到。

Note

有一些补丁仅仅处在实验阶段,把他们也安装上不是个好主意。这一步,您会碰到很多十分有趣的匹配和对数据包的操作,但他们还正在实验。

为了完成这一步,我们要在iptables的目录内用到如下一些命令:

make pending-patches KERNEL_DIR=/usr/src/linux/

变量KERNEL_DIR指向内核原码的真实路径。一般情况下,都是/usr/src/linux/ ,但也会不相同,这要看您所用的Linux产品了。

Note

总之,只有某些补丁会被询问是否加入内核,而Netfilter的研发者们有大量的补丁或附件想要加入内核,但还要再实验一阵子才能做到。假如您想安装这些东西,就用下面的命令:

make most-of-pom KERNEL_DIR=/usr/src/linux/

这个命令会安装部分patch-o-matic(netfilter世界对补丁的称呼),忽略掉的是很极端的那一部分,他们可能会对内核造成严重的破坏。您要知道这个命令的作用,要了解他们对内核原码的影响,好在在您选用之前,会有所提示。下面的命令能够安装任何的patch-o-matic(译者注:一定要小心哦)。

make patch-o-matic KERNEL_DIR=/usr/src/linux/

要仔细的读读每一个补丁的帮助文档,因为有些patch-o-matic会损坏内核,而有些对其他补丁有破坏作用。

Note

您要是不打算用patch-o-matic修补内核,以上的命令都用不着,他们不是必需的。但是,您能够用这些命令来看看有什么有趣的玩意儿,这不会影响任何东西。

安装好patch-o-matic,现在应该重新编译内核了,因为其中增加了一些补丁。但别忘了重新配置内核,现有的配置文档里可没有您增加的补丁的信息。当然,您也能够先编译iptables , 再来编译内核。

接下来就该编译iptables了,用下面这个简单的命令:

make KERNEL_DIR=/usr/src/linux/

iptables应该编译好了,假如不行,好好考虑考虑问题在哪儿,要么订阅 Netfilter mailing list,那里可能有人能帮助您。

一切顺利的话,我们该安装iptables了,这几乎不会有什么问题的。我们用下面的命令来完成这一步:

make install KERNEL_DIR=/usr/src/linux/

现在大功告成了。假如您在前面没有重新编译、安装内核,现在就要做了,不然,您还是不能使用更新后的iptables。好好看看INSTALL吧,那里面有周详的安装信息。


2.3.2. 在Red Hat 7.1上安装

Red Hat 7.1使用2.4.x的内核,支持Netfilter和iptables。Red Hat包含了任何基本的程式和需要的配置文档,但缺省使用的是B class=COMMAND>ipchains。“iptables为什么不能用”是最常见的问题,下面就让我们就来说说怎样关闭ipchains而起用iptables

Note

Red Hat 7.1预装的iptables版本有些老了,在使用之前,您可能想装个新的,再自己编译一下内核。

我们先要关闭ipchains,并且不想再让他运行起来,做到这一点,要更改目录/etc/rc.d/下的一些文档名。用以下命令完成:

chkconfig --level 0123456 ipchains off

这个命令把任何指向/etc/rc.d/init.d/ipchains的软连接改名为 K92ipchains。以S开头表示,在启动时会由初始化脚本运行此脚本。改为K开头后,就表示终止服务,或以后在启动时不再运行。这样,ipchains以后不会再开机就运行了。

要想终止正在运行的服务,要用service命令。终止ipchains 服务的命令是:

service ipchains stop

现在,我们能够启动iptables服务了。首先,要确定在哪个运行层运行,一般是 2,3和5,这些层有不同的用处:

  • 2. 不带NFS的多用户环境,和层3的区分仅在于不带网络支持。

  • 3. 多用户环境,就是我们一般事用的层。

  • 5. X11,图像界面。

用下面的命令以使iptables能在这些层运行:

chkconfig --level 235 iptables on

您也能够使用这个命令使iptables能在其他层运行。但没这个必要,因为层1是单用户模式,一般用在维修上;层4保留不用;层6用来关闭电脑。

启动iptables用:

service iptables start

在脚本iptables里还没有定义规则。在Red Hat 7.1中添加规则的方法有二:第一个方法是编辑/etc/rc.d/init.d/iptables,要注意在用RPM升级iptables时,已有的规则可能会被删除。另一个方法是先装载规则,然后用命令iptables-save把规则保存到文档中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载。

我们先来说明怎样利用“剪切粘贴大法”配置/etc/rc.d/init.d/iptables。为了能在电脑启动iptables时装载规则,能够把规则放在“start)”节或函数start()中。注意:假如把规则放在“start)”节里,则不要在“start)”节里运行start(),还要编辑“stop)”节,以便在关机时或进入一个无需iptables的层时,脚本知道怎样处理。还应检查“restart”节和“condrestart”节的配置。一定要注意,我们所做的改变在升级iptables时可能会被删除,而不管是通过Red Hat网络自动升级还是用 RPM升级。

下面介绍第二种方法:先写一个规则的脚本,或直接用iptables命令生成规则。规则要适合自己的需要,别忘了实验一下是否有问题,确认正常之后,使用命令iptables-save来保存规则。一般用iptables-save > /etc/sysconfig/iptables生成保存规则的文档 /etc/sysconfig/iptables,也能够用service iptables save,他能把规则自动保存在/etc/sysconfig/iptables中。当电脑启动时,rc.d下的脚本将用命令iptables-restore调用这个文档,从而就自动恢复了规则。

以上两种方法最好不要混用,以免用不同方法定义的规则互相影响,甚至使防火墙的配置无效。

至此,能够删除预装的ipchainsiptables了,这样能够避免新旧版本的iptables之间的冲突。其实,只有当您从原码安装时,才需要这样做。但一般来说,也不会出现互相影响的问题,因为基于rpm的包不使用原码的缺省目录。删除用以下命令:

rpm -e iptables

既然不用ipchains为什么要保留呢?删吧!命令如下:

rpm -e ipchains

历经磨难,胜利终于到来了。您已能够从源码安装iptables了。那些老版的东西就删掉吧。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅