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)一起使用。下面就简要地介绍以下这几种状态:

标签: