iptables的规则和链的建立

声明:该文章转自http://www.ibm.com/developerworks/cn/linux/network/s-netip/

 

1、安装netfilter/iptables系统

因为netfiler/iptables的nerfilter组件是与内核2.4x集成在一起的,所以只需下载并安装iptables用户空间工具

1)需求

下面是安装netfilter/iptables系统的需求

硬件:需要有一个运行linux os并连接到因特网、LAN或WAN的系统。

软件:带有内核2.4或更高版本的任何版本的Linux OS。可以从http://www.kernel.org下载最新版本的内核,还需要从http://www.netfilter.org下载iptables这个用户空间工具,因为这个工具不是内核的一部分。但对于Redhat Linux版本7.1或更高版本,不需要下载此工具,因为在版本7.1或更高版本中,标准安装中已经包含了此工具

2)安装前的准备

在开始安装iptables用户空间工具之前,需要对系统做某些修改。首先,需要使用make config命令来配置啮合的选项。在配置期间,必须通过将CONFIG_NETFILTER和CONFIG_NF_IPTABLES选项设置为Y来打开他们,因为这是使netfilter/iptables工作所必须的。下面是可能要打开的其他选项:

CONFIG_PACKET: 如果要使应用程序和程序直接使用某些网络设备,那么这个选项是有用的

CONFIG_IP_NF_MATCH_STATE: 如果要配置有状态的防火墙,那么这个选项是必须的。这类防火墙会记住先前关于信息包过滤所做的决定,并根据他们做出新的决定。

CONFIG_IP_NF_FILTER: 这个选项提供一个基本的信息包过滤框架。如果打开这个选项,则会将一个基本过滤表(带有内置的INPUT、FORWARD、OUTPUT链)添加到内核空间。

CONFIG_IP_NF_TARGET_REJECT:这个选项允许指定:应该发送ICMP错误消息来响应已被DROP掉的入站信息包,而不是简单地杀死他们。

现在可以准备安装这个用户空间工具了

3)安装用户空间工具

在下载iptables用户空间工具的源代码(类似于iptables-1.26a.tar.bz2)之后,可以开始安装,需要以root身份登录来执行安装。清单1给出一个实例,它指出了安装该工具所需的命令、其必要的次序及其说明。

清单1:用户空间工具安装示例

 

First, unpack the tool package into a directory:
# bzip2 -d iptables-1.2.6a.tar.bz2
# tar -xvf  iptables-1.2.6a.tar
This will unpack the tool source into a directory named iptables-1.2.6a. 
Now change to the iptables-1.2.6a directory:
# cd iptables-1.2.6a
The INSTALL file in this directory contains a lot of useful information 
on compiling and installing this tool.
Now compile the userspace tool using the following command:
# make KERNEL_DIR=/usr/src/linux/
Here the KERNEL_DIR=/usr/src/linux/ specifies the path to the kernel's 
directory. If the directory of kernel happens to be different on some 
systems, the appropriate directory path should be substituted for 
/usr/src/linux.
Now install the source binaries using the following command:
# make install KERNEL_DIR=/usr/src/linux/
Now the installation is complete.
注:如果您有RedHat Linux版本7.1或更高版本,就不需要执行这里说明的步骤了,因为该Linux分发版(distribution)的标准安装中包含了
iptables用户空间工具。但在缺省情况下,这个工具是关闭的。为了使该工具运行,需要执行以下步骤(清单2)
清单2. 在RedHat7.1系统上设置用户空间工具示例
First you'll have to turn off the old ipchains module (predecessor of 
iptables) available in this OS package.
This can be done using the following command:
# chkconfig --level 0123456 ipchains off
Next, to completely stop the ipchains module from running, so that it 
doesn't conflict with the iptables tool, you will have to stop the ipchains 
service using the following command:
# service ipchains stop
Now if you don't want to keep this old ipchains module on your system, 
uninstall it using the following command:
# rpm -e ipchains
Now you can turn on the iptables userspace tool with the following command:
# chkconfig --level 235 iptables on
Finally, you'll have to activate the iptables service to make the userspace 
tool work by using this command:
# service iptables start
Now the userspace tool is ready to work on a RedHat 7.1 or higher system.
现在,一切都妥当了,并且netfilter/iptables系统应该正在运行,接下来,需要建立以下规则和链来过滤信息包。

2、建立规则和链

通过向防火墙提供有关对来自某个源、到某个目的或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用
netfilter/iptables系统提供的特殊指令iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加、除去、
编辑规则的命令的一半语法如下:
$iptables [-t table] command [match][target]

表(table)

[-t table]选项选项允许使用标准之外的任何表。表是包含了仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、
nat和mangle。该选项不是必须的,如果未指定,则filter用作缺省表。
filter表用于一半的信息包过滤,它包含INPUT、OUTPUT和FORWARD链。nat表用于要转发的信息包,他包含PREFOUTING、OUTPUT
和POSTROUTING链。
注:PREROUTING链由指定信息包到达防火墙就改变他们的规则所组成,而POSTROUTING链由指定正当信息包打算离开防火墙时改变他
们的规则所组成。

1)命令(commad)

-A或--append: 该命令将一条规则附加到链的末尾

示例:
$iptables -A INPUT -s 205.168.0.1 -j ACCEPT
该示例命令将一条规则附加到INPUT链的末尾,确定来自源205.168.0.1的信息包可以ACCEPT

-D 或--delete:通过用-D指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。下面

的示例显示了这两种方法:
示例:
$iptables -D INPUT --dport 80 -j DROP
$iptables -D OUTPUT 3
第一条命令从INPUT链删除规则,它指定DROP前往端口80的信息包。第二天命令只是从OUTPUT链删除编号3的规则。

-P 或 --policy:该命令设置链的缺省目标,记策略。所有与链中任何规则不匹配的信息包都将被强制使用此链的策略

示例:
$iptables -P INPUT DROP
该命令将INPUT链的缺省目标指定为DROP,这意味着,将丢弃所有与INPUT链中任何规则都不匹配的信息包
-N或--new-chain: 用命令所指定的名称创建一个新链。
示例:
iptables -N allowed-chain

-F 或--flush:如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。

此参数用于快速清除

示例:
$iptables -F FORWARD
$iptables -F

-L 或--list: 列出指定链中的所有规则

示例:
$iptables -L allowed-chain

2)匹配(match)

iptables的命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和
特定协议的匹配。这里,我们将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其示例和说明:

-p或--protocol:

该通用协议匹配用于检查某些特定协议。协议示例有TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及

ALL(用于所有协议)。ALL是缺省匹配。可以使用!符号,它表示不与该项匹配。
$iptables -A INPUT -p TCP, UDP
$iptables -A INPUT -p !ICMP
在上诉示例中,这两条命令都执行同一任务,他们指定所有TCP和UDP信息包都将与该规则匹配。通过指定!ICMP,我们打算允许所有
其他协议(在这种情况下是TCP和UDP),而将ICMP排除在外。

-s 或 --source: 

该源匹配用于根据信息包的源IP地址来与他们匹配。该匹配还允许对某一范围内的IP地址进行匹配,可以使用!符号,
表示不与该项匹配。缺省源匹配与所有IP地址匹配。
示例:
$iptables -A OUTPUT -s 192.168.1.1
$iptables -A OUTPUT -s 192.168.0.0/24
$iptables -A OUTPUT -s !203.16.1.89
第二条命令指定该规则与所有来自192.168.0.0到192.168.0.24的IP地址范围的信息包匹配。第三条命令指定该规则将与除来自源地址
203.16.1.89外的任何信息包匹配。

-d 或--destination:

该目的地匹配用于根据信息包的目的地IP地址来与他们匹配。该匹配还允许对某一范围内IP地址进行匹配,可以
使用!符号,表示不与该项匹配。
示例:
$iptables -A INPUT -d 192.168.1.1
$iptables -A INPUT -d 192.168.0.0/24
$iptables -A OUTPUT -d !203.16.1.89

3)目标(target)

目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是
常用的一些目标及其示例和说明:

ACCEPT: 

当信息包与具有ACCEPT目标的规则完全匹配时,会被接受(允许他前往目的地),并且它将停止遍历链(虽然该信息包可能
遍历另一个表中的其他链,并且有可能在那里被丢弃)。该目标被指定为-j ACCEPT.

DROP: 

当信息包与具有DROP目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为-j DROP

REJECT:

该目标的工作方式与DROP目标相同,但她比DROP好。和DROP不同,REJECT不会在服务器和客户机上留下死套接字。另外
,REJECT将错误信息发回给信息包的发送方。该目标被指定为-j REJECT.
$iptaables -A FORWARD -p TCP --drop 22 -j REJECT

RETURN:

在规则中设置的RETURN目标让与该规则匹配的信息包停止遍历包含该规则的链,如果链是如INPUT之类的主链,则使用该链
的缺省策略处理信息包。它被指定为-jump REBURN
示例:
$iptables -A FORWARD -d 203.16.1.89 -jump RETURN
还有许多用于建立高级规则的其他目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等

3、保存规则

学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。但是,请记住:用上诉方法建立的规则会被保存到内核中,当
重新引导系统时,会丢失这些规则。所以,如果您讲没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则
,那么必须将该规则集保存在文件中。可以使用iptables-save命令来做到这一点:
$iptables-save > iptables-script

现在,信息包过滤表中的所有规则都被保存在文件iptables-script中,无论何时再次引导系统,都可以使用iptables-restore命令将规则
集从该脚本文件恢复到信息包过滤链表,如下所示:
$iptables-restrore iptables-script

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值