Iptables模块研究报告
Iptables 模块使用指南1. 前言................................................................................
Iptables 模块使用指南
1. 前言.............................................................................................................................................. 2
1.1 关于本文档 . ....................................................................................................................... 2
1.2 背景知识 . ........................................................................................................................... 2
1.3 术语 . ................................................................................................................................... 2
2. Iptables模块介绍 ......................................................................................................................... 3
3. Iptables编译及安装 ..................................................................................................................... 4
3.1 关于编译 . ........................................................................................................................... 4
3.2 关于安装 . ........................................................................................................................... 5
3.3 内核支持 . ........................................................................................................................... 6
3.4 文件大小 . ........................................................................................................................... 6
4. 关于数据报文 . ............................................................................................................................. 6
4.1 数据报文流程介绍 . ........................................................................................................... 6
4.2 数据报文的状态介绍 . ..................................................................................................... 10
5. Iptables程序使用 ....................................................................................................................... 11
5.1 关于iptables 程序 ........................................................................................................... 11
5.2 命令参数说明 . ................................................................................................................. 12
5.3 iptables程序使用实例 ..................................................................................................... 27
6. iptables模块使用场景 ............................................................................................................... 30
,1. 前言
1.1 关于本文档
本文档描述Iptables 模块的使用,对iptables 命令进行了详细的说明。
1.2 背景知识
网络攻击正在日益得势,防火墙技术因此得到广泛运用。防火墙能控制不同网络或网络安全域之间信息的出入口,通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,有选择地接受外部访问,对内部强化设备监管、控制对服务器与外部网络的访问,在被保护网络和外部网络之间加起一道屏障,以防止发生不可预测的、潜在的破坏性侵入。
在Linux 操作系统上,netfilter/iptables 作为最新的防火墙技术,提供了一个有效的手段来控制谁可以并如何通过网络连接到Linux 系统,自然iptables 成为最新的管理内核包过滤的工具,可以添加、修改或删除包过滤表格中的规则。
从Linux 内核2.0.x 中ipfwadm 到内核2.2.x 中的ipchains ,再衍变成2.4.x/2.6.x的iptables , 2.4.x/2.6.x内核中的iptables 并不是2.2内核的简单增强,而是一次完全的重新实现,内核提供的防火墙软件包在结构上发生了非常大的变化。
2.4.x/2.6.x内核提供了更好的灵活性和可扩展性。
1.3 术语
NAT :Network Address Translation 网络地址转换,是将IP 数据报报头中的IP 地址转换为另一个IP 地址的过程。
DNAT :Destination Network Address Translation 目的网络地址转换。 DNAT 是一种改变数据包目的 ip 地址的技术,经常和SNAT 联用,以使多台服务器能共享一个ip 地址连入Internet ,并且继续服务。通过对同一个ip 地址分配不同的
,端口,来决定数据的流向。
SNAT :Source Network Address Translation 源网络地址转换。这是一种改变数据包源ip 地址的技术,经常用来使多台计算机分享一个Internet 地址。
DNS :Domain Name System计算机域名系统,它是由解析器和域名服务器组成的,是保存有该网络中所有主机的域名和对应IP 地址,并将域名转换为IP 地址功能的服务器。
2. Iptables模块介绍
Netfilter/iptables模块是一种功能强大的IP 信息包过滤系统,可用于添加、编辑和删除规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表(如Filter 、Nat )中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain )中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace ),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。 iptables 组件是一种工具,也称为用户空间(userspace ),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables 模块是用于Firewall 的一种强大的工具,防火墙的典型环境如下图所示:
,
iptables 由Netfilter 项目开发,维护网站为。
3. Iptables编译及安装
以下是针对iptables 1.4.3的版本进行说明。
3.1 关于编译
从官网(www.netfilter.org )下载开源代码压缩包iptables-1.4.3.tar.bz2,该版 本可以支持2.6.29的内核。
i. 解压缩文件:
tar –xvjf iptables-1.4.3.tar.bz2
ii. 配置编译安装环境:
cd iptables-1.4.3,
./configure CC=指定交叉编译工具链 --host=指定交叉编译平台 --prefix=指定安装文件路径
这里所有的路径都只能是绝对路径。
iii. 编译:
make
编译生成的可执行文件为iptables ,位于iptables-1.4.3/.libs;
库文件有以下两类:
必选的:libiptc/.libs/libiptc.so.0和.libs/libxtables.so.1;
可选的:位置iptables-1.4.3/extensions,
libipt_DNAT.so libipt_icmp.so
,libipt_LOG.so libipt_MIRROR.so libipt_REDIRECT.so libipt_SNAT.so libipt_TTL.so
libxt_hashlimit.so libxt_length.so libxt_mac.so libxt_standard.so libxt_statistic.so libxt_TCPMSS.so libxt_tos.so libxt_udp.so
libipt_MASQUERADE.so
libipt_NETMAP.so libipt_REJECT.so libipt_ttl.so libxt_iprange.so libxt_limit.so libxt_multiport.so libxt_state.so libxt_string.so libxt_tcp.so libxt_TOS.so … …
3.2 关于安装
修改Makefile ,拷贝可执行文件iptables 及相应的库文件。
由于开发板空间有限,我们没有必要把所有的库文件都移植到开发板上,根 据需要将所需的库文件拷贝到开发板的/lib目录下。
Makefile 做如下修改,在执行make install时,自动执行cp 命令。
install: cp .libs/iptables ../../target/usr/sbin/iptables
cp .libs/libxtables.so.1 ../../target/lib/ cp libiptc/.libs/libiptc.so.0 ../../target/lib/ cp extensions/libxt_standard.so ../../target/lib/ cp extensions/libxt_state.so ../../target/lib/ cp extensions/libxt_statistic.so ../../target/lib/ cp extensions/libxt_string.so ../../target/lib/ cp extensions/libxt_tcp.so ../../target/lib/ cp extensions/libxt_udp.so ../../target/lib/ cp extensions/libxt_multiport.so ../../target/lib/ cp extensions/libxt_tos.so ../../target/lib/ cp extensions/libxt_TOS.so ../../target/lib/ cp extensions/libipt_icmp.so ../../target/lib/ cp extensions/libipt_DNAT.so ../../target/lib/ cp extensions/libipt_SNAT.so ../../target/lib/ cp extensions/libipt_LOG.so ../../target/lib/ cp extensions/libipt_MASQUERADE.so ../../target/lib/ cp extensions/libipt_REJECT.so ../../target/lib/ cp extensions/libipt_TTL.so ../../target/lib/ cp extensions/libipt_ttl.so ../../target/lib/ cp extensions/libxt_iprange.so ../../target/lib/ cp extensions/libxt_mac.so ../../target/lib/
,cp extensions/libxt_limit.so ../../target/lib/ cp extensions/libxt_TCPMSS.so ../../target/lib/ cp extensions/libipt_REDIRECT.so ../../target/lib/ cp extensions/libxt_hashlimit.so ../../target/lib/
3.3 内核支持
为了正常运行iptables ,需要在内核中打开相应配置。用make menuconfig或其他命令,打开以下一些选项。
注:[*]<*>为选中支持该模块,[ ]< >为不选中。
[*] Network packet filtering framework (Netfilter) --->
… …
<*> Netfilter Xtables support (required for ip_tables)
<*> IP tables support (required for filtering/masq/NAT)
<*> IP range match support
<*> Mac match support
… …
根据3.2移植的库文件,在内核配置过程中,打开支持相应的模块,iptables 才能正常使用。
3.4 文件大小
在mipsel 平台上可执行文件iptables 的大小为70515字节,
移植到mipsel 平台上的库文件大小为576kB 。
4. 关于数据报文
4.1 数据报文流程介绍
首先我们看下数据报文是怎样穿越内核的中Netfilter 组件的:当数据报文到达内核时,如果MAC 地址符合,就会由内核里相应的驱动程序接收,然后会经过路由操作,从而决定是发送给本地的程序,还是转发给其他机子。Netfilter 在内核有五个挂载点:NF_IP_PRE_ROUTING、NF_IP_IN_PUT、
,NF_IP_FORWARD、NF_IP_OUT_PUT、NF_IP_POST_ROUTING ,这5个hook 点分别对应系统中默认的5个链PREROUING 、INPUT 、FORWARD 、OUTPUT 、POSTROUTING ,iptables 依赖于这5个链进行操作。如下图所示:

然后我们讨论下数据报文是以什么顺序以及如何穿越这些链的。我们先来看一个以本地为目的的报文,它要经过以下步骤才能到达要接收它的程序: 表4-1. 以本地为目标的报文


现在我们来看看源地址是本地机器的报文要经过哪些步骤: 表4-2. 以本地为源的报文


我们假设一个报文的目的地址是另一个网络中的一台机子。让我们来看看这个报文的旅程:
表4-3. 被转发的报文

综上所述,我们可以归纳数据报文的流程如下图:
,
注意,所有的报文都会经过上图中的某一条路径,不管你是否把它DROP 或者ACCEPT 。如果你把报文DNAT 回它原来的网络,它一样会走完相应路径上剩余的链。
4.2 数据报文的状态介绍
报文的状态依据协议的不同而不同,但在内核外部,也就是用户空间里,只有5种状态:NEW ,ESTABLISHED ,RELATED ,INV ALID 和UNTRACKED 。它们主要是和状态匹配(-m state)一起使用。下面就简要地介绍以下这几种状态: