iptables介绍

心得:

如下图:

iptables传输数据包的过程

每个链中有一些表的部分规则,当一个数据包进来时,先走PREROUTING链(判断数据包是否是发给路由器的),如果是发给路由器的,则走INPUT链,再发给本地应用层程序;如果不是发给路由器的,则走FORWARD链,最后通过POSTROUTING链转发出去;本地应用程序往外发送数据时,先经过OUTPUT链再经过POSTROUTING链发送出去。

根据上图我们看到每个Table分布在不同的链(Chain)中,有的链只有两个表,有的链五个表都有,当数据包流经一个链时,会根据raw>mangle>nat>filter的顺序扫描每一个tables看是否有符合的规则。

对路由器而言,有两个网口,但是这两个网口对路由器而言都是外部,都是数据包进入或出去的接口,对路由器而言是相同的,而且这两个网口都在IP协议栈之下,从两个网口流入的数据包都会从PREROUTING进入路由器,从两个网口流出的数据包都是经过POSTROUTING链,五个链就像一个大容器,不过从外网还是内网进来的数据包,都会依次经过这几个链。对路由器而言有两条通路,一个是从内网到外网,一个是从外网到内网,这两种情况都是根据上图中的5个链的处理顺序进行的。


关于这五个表的介绍:

5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARDING:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发

POSTROUTIONG:发送到网卡接口之前。


四个规则表:

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能



1.filter表:三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包  内核模块: iptables_filter.
2.nat表:三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4.Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理  内核模块:iptable_raw
(这个是REHL4没有的,不过不用怕,用的不多)


规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)


规则表之间的优先顺序:

Raw——mangle——nat——filter


规则链之间的优先顺序(分三种情况):

第一种情况:入站数据流向
    从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等)(nat转发???),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向
    来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

第三种情况:出站数据流向
     防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。



文章一: http://www.cnblogs.com/my_life/articles/3242602.html

该文章内容:

http://www.ansen.org/iptables-detailed.html

http://wushank.blog.51cto.com/3489095/1171768

防火墙的简介
防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传进或传出内部网。
防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。如果都不满足,则将数据包丢弃,从而保护网络的安全。
防火墙可以被认为是这样一对机制:一种机制是拦阻传输流通行,另一种机制是允许传输流通过。一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。

通过使用防火墙可以实现以下功能:可以保护易受攻击的服务;控制内外网之间网络系统的访问;集中管理内网的安全性,降低管理成本;提高网络的保密性和私有性;记录网络的使用状态,为安全规划和网络维护提供依据。(图1)

iptables

防火墙的分类
防火墙技术根据防范的方式和侧重点的不同而分为很多种类型,但总体来讲可分为包过滤防火墙和代理服务器两种类型。

防火墙的工作原理
1.包过滤防火墙工作原理(图2)
包过滤防火墙工作原理

2.代理服务型防火墙工作原理
代理服务型防火墙是在应用层上实现防火墙功能的。它能提供部分与传输有关的状态,能完全提供与应用相关的状态和部分传输的信息,它还能处理和管理信息。

iptables简介
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables基础
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

Iptables表、链、规则(图3)
Iptables表、链、规则

iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。(图4)
iptables传输数据包的过程

iptables命令格式

iptables的命令格式较为复杂,一般的格式如下:
iptables [-t table] 命令 [chain] [rules] [-j target]
table——指定表明
命令——对链的操作命令
chain——链名
rules——规则
target——动作如何进行
1.表选项
表选项用于指定命令应用于哪个iptables内置表,iptables内置包括filter表、nat表、mangle表和raw表。
2.命令选项iptables命令格式

命令                     说明
-P或–policy  <链名>     定义默认策略
-L或–list  <链名>     查看iptables规则列表
-A或—append  <链名>     在规则列表的最后增加1条规则
-I或–insert  <链名>     在指定的位置插入1条规则
-D或–delete  <链名>     从规则列表中删除1条规则
-R或–replace  <链名>     替换规则列表中的某条规则
-F或–flush  <链名>     删除表中所有规则
-Z或–zero  <链名>     将表中数据包计数器和流量计数器归零

3.匹配选项
匹配                                     说明
-i或–in-interface  <网络接口名>     指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等
-o或–out-interface  <网络接口名>     指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等
-p或—proto协议类型  < 协议类型>     指定数据包匹配的协议,如TCP、UDP和ICMP等
-s或–source  <源地址或子网>             指定数据包匹配的源地址
–sport <源端口号>                     指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
-d或–destination  <目标地址或子网>     指定数据包匹配的目标地址
–dport目标端口号                     指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

4.动作选项
动作        说明
ACCEPT        接受数据包
DROP        丢弃数据包
REDIRECT   与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。
SNAT        源地址转换,即改变数据包的源地址
DNAT        目标地址转换,即改变数据包的目的地址
MASQUERADE IP伪装,即是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的;如果主机的IP地址是静态固定的,就要使用SNAT
LOG        日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错

iptables命令格式(图5)
iptables命令格式

iptables过滤条件(图6)
iptables过滤条件

iptables的语法

1.定义默认策略
当数据包不符合链中任一条规则时,iptables将根据该链预先定义的默认策略来处理数据包,默认策略的定义格式如下。
iptables  [-t表名] <-P> <链名> <动作> ?参数说明如下。
[-t表名]:指默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
<-P>:定义默认策略。
<链名>:指默认策略将应用于哪个链,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
<动作>:处理数据包的动作,可以使用ACCEPT(接受数据包)和DROP(丢弃数据包)。

2.查看iptables规则
查看iptables规则的命令格式为:
iptables  [-t表名] <-L> [链名]
参数说明如下。
[-t表名]:指查看哪个表的规则列表,表名用可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认查看filter表的规则列表。
<-L>:查看指定表和指定链的规则列表。
[链名]:指查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪个链,则将查看某个表中所有链的规则列表。

3.增加、插入、删除和替换规则
相关规则定义的格式为:
iptables  [-t表名]  <-A | I | D | R> 链名 [规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网] [--sport 源端口号] [-d目标IP地址 | 目标子网] [--dport目标端口号] <-j动作>
参数说明如下。
[-t表名]:定义默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
-A:新增加一条规则,该规则将会增加到规则列表的最后一行,该参数不能使用规则编号。
-I:插入一条规则,原本该位置上的规则将会往后顺序移动,如果没有指定规则编号,则在第一条规则前插入。
-D:从规则列表中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
-R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。
<链名>:指定查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[规则编号]:规则编号用于插入、删除和替换规则时用,编号是按照规则列表的顺序排列,规则列表中第一条规则的编号为1。
[-i | o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出。网卡名称可以使用ppp0、eth0和eth1等。
[-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP和ICMP等。
[-s 源IP地址 | 源子网]:源主机的IP地址或子网地址。
[--sport 源端口号]:数据包的IP的源端口号。
[-d目标IP地址 | 目标子网]:目标主机的IP地址或子网地址。
[--dport目标端口号]:数据包的IP的目标端口号。
<-j动作>:处理数据包的动作,各个动作的详细说明可以参考前面的说明。

4.清除规则和计数器
在新建规则时,往往需要清除原有的、旧的规则,以免它们影响新设定的规则。如果规则比较多,一条条删除就会十分麻烦, 这时可以使用iptables提供的清除规则参数达到快速删除所有的规则的目的。
定义参数的格式为:
iptables  [-t表名] <-F | Z>
参数说明如下。
[-t表名]:指定默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
-F:删除指定表中所有规则。
-Z:将指定表中的数据包计数器和流量计数器归零。

NAT的定义
NAT英文全称是Network Address Translation,称是网络地址转换,它是一个IETF标准,允许一个机构以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有Internet 地址和私有IP地址的使用。

NAT的类型

静态NAT(Static NAT)
静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。

动态地址NAT(Pooled NAT)
动态地址NAT是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。
动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。

网络地址端口转换NAPT(Port-Level NAT)
NAPT是把内部地址映射到外部网络的一个IP地址的不同端口上。
最熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。

iptables实例

禁止客户机访问不健康网站
【例1】添加iptables规则禁止用户访问域名为www.sexy.com的网站。
iptables -I FORWARD -d www.sexy.com -j DROP
【例2】添加iptables规则禁止用户访问IP地址为20.20.20.20的网站。
iptables -I FORWARD -d 20.20.20.20 -j DROP

禁止某些客户机上网
【例1】添加iptables规则禁止IP地址为192.168.1.X的客户机上网。
iptables -I FORWARD -s 192.168.1.X -j DROP
【例2】添加iptables规则禁止192.168.1.0子网里所有的客户机上网。
iptables -I FORWARD -s 192.168.1.0/24 -j DROP

禁止客户机访问某些服务
【例1】禁止192.168.1.0子网里所有的客户机使用FTP协议下载。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 21 -j DROP
【例2】禁止192.168.1.0子网里所有的客户机使用Telnet协议连接远程计算机。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 23 -j DROP

强制访问指定的站点
【例】强制所有的客户机访问192.168.1.x这台Web服务器。
iptables -t nat -I PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.1.x:80

禁止使用ICMP协议
【例】禁止Internet上的计算机通过ICMP协议ping到NAT服务器的ppp0接口,但允许内网的客户机通过ICMP协议ping的计算机。
iptables -I INPUT -i ppp0 -p icmp -j DROP

发布内部网络服务器
【例1】发布内网10.0.0.3主机的Web服务,Internet用户通过访问防火墙的IP地址即可访问该主机的Web服务。
iptables -t nat -I PREROUTING -p tcp –dport 80 -j DNAT –to-destination 10.0.0.3:80
【例2】发布内网10.0.0.3主机的终端服务(使用的是TCP协议的3389端口),Internet用户通过访问防火墙的IP地址访问该机的终端服务。
iptables -t nat -I PREROUTING -p tcp –dport 3389 -j DNAT –to-destination 10.0.0.3:3389

案例详解
【案例1】做为客户端/终端的基本配置 ?DNS PING LO
【案例2】做为服务端的基本配置:SSH  DNS WWW FTP EMAIL (图7)
SSH  DNS WWW FTP EMAIL
【案例3】做为网关的基本配置:SSH  DNS WWW FTP EMAIL NAT )SNAT DNAT)限速 (图8)
SSH  DNS WWW FTP EMAIL NAT
【案例4】状态检测(图9)
SSH  DNS WWW FTP EMAIL

原文:http://www.opsers.org/linux-home/videos/chapter-netfilter-iptables-raiders.html

========

http://blog.csdn.net/sealyao/article/details/5934268

http://hi.baidu.com/linuxtrip/item/7553754c8b346be7a4c0666c

iptables的相关概念和数据包的流程

一、iptables 相关概念

 匹配(match):符合指定的条件,比如指定的 IP 地址和端口
 
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理
 
接受(accept):和丢弃相反,接受这个包,让这个包通过
 
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息;这个错误消息可以指定,也可以自动产生
 
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝
 
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上
 
规则(rule):一个或多个匹配及其对应的目标
 
链(chain):每条链都包含有一系列的规则,这些规则会被依次应用到每个遍历该链的数据包上。每个链都有各自专门的用途, 这一点我们下面会详细讨论
 
表 (table):每个表包含有若干个不同的链,比如 filter 表默认包含有 INPUT,FORWARD,OUTPUT 三个链。iptables 有四个表,分别是:raw,nat,mangle和filter,每个表都有自己专门的用处,比如最常用filter表就是专门用来做包过滤的,而 nat 表是专门用来做NAT的
 
策略(police):我们在这里提到的策略是指,对于 iptables 中某条链,当所有规则都匹配不成功时其默认的处理动作
 
连接跟踪(connection track):又称为动态过滤,可以根据指定连接的状态进行一些适当的过滤,是一个很强大的功能,但同时也比较消耗内存资源

 

二、iptables 的数据包的流程介绍


一个数据包到达时,是怎么依次穿过各个链和表的


基本步骤如下:
 
1. 数据包到达网络接口,比如 eth0
 
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包,如果进行了连接跟踪,在此处理
 
3. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等
 
4. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤
 
5. 决定路由,看是交给本地主机还是转发给其它主机
 

6、到了这里我们就得分两种不同的情况进行讨论了

第一种:数据包要转发给其它主机,这时候它会依次经过: 

(1) 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改
 
(2)进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的
 
(3)进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改
 
(4)进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤
 
(5)进入出去的网络接口,完毕
 

第二种:数据包就是发给本地主机的,那么它会依次穿过: 

(1)进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改
 
(2)进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口
 
(3)交给本地主机的应用程序进行处理
 
(4)处理完毕后进行路由决定,看该往那里发出
 
(5)进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前
 
(6)连接跟踪对本地的数据包进行处理
 
(7)进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤
 
(8)进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 

(9)再次进行路由决定
 
(10)进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤
 
(11)进入 mangle 表的 POSTROUTING 链,同上一种情况的第(3)步
注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理
 
(12)进入 nat 表的 POSTROUTING 链,同上一种情况的第10步
 
(13)进入出去的网络接口,完毕


http://blog.chinaunix.net/uid-7411781-id-3436224.html


文章二:

Linux 的内置firewall机制,是通过kernel中的netfilter模块实现的(www.netfilter.ort)。Linux kernel使用netfilter对进出的数据包进行过滤,netfilter由三个规则表组成,每个表又有许多内建的链组成。通过使用iptables命令可以对这些表链进行操作,如添加、删除和列出规则等。

一、Netfilter的三个规则表:filter,nat和mangle


(1) 规则表filter,用于路由网络数据包。是默认的,即:如果没有指定-t参数,当创建一条新规则时,它会默认存放到该表内。

该表包含如下链:

INPUT链:网络数据包流向服务器应用层

OUTPUT链:网络数据包从服务器应用层流出

FORWARD链:网络数据包经服务器路由


(2) 规则表nat,用于NAT表。NAT(Net Address Translation )是一种IP地址转换方法。

该表包含如下链:

PREROUTING链:网络数据包到达服务器时可以被修改。

OUTPUT:网络数据包由服务器应用层流出。

POSTROUTING链:网络数据包在即将从服务器发出时可以被修改。


(3) 规则表mangle,用于修改网络数据包的表,如TOS(Type Of Service),TTL(Time To Live)等

该表包含如下链:

INPUT链:网络数据包流向服务器应用层

OUTPUT链:网络数据包流出服务器应用层

FORWARD链:网络数据包经由服务器转发

PREROUTING链:网络数据包到达服务器时可以被修改

POSTROUTING链:网络数据包在即将从服务器发出时可以被修改


二、配置Iptables

当数据包进入服务器时,Linux Kernel会查找对应的链,直到找到一条规则与数据包匹配。如果该规则的target是ACCEPT,就会跳过剩下的规则,数据包会被继续发送。如果该规则的target是DROP,该数据包会被拦截掉,kernel不会再参考其他规则。

Note:如果从始至终都没有一条规则与数据包匹配,而且表末尾又没有drop all的规则,那末该数据包会被accept。Cisco则相反,在表末尾会因含deny all的规则。


1)  Iptables的命令选项(即command,后面跟着链名作为参数INPUT,OUTPUT,FORWARD,PREROUTING, 

      POSTROUTING,因为这些命令选项都是以链作为操作对象的。)

iptables [-t tables] command option parameter -j target

-A 在链尾添加一条规则

-C 将规则添加到用户定义链之前对其进行检查

-D 从链中删除一条规则

-E 重命名用户定义的链,不改变链本身

-F 清空链,删除链上的所有规则

-I 在链中插入一条规则

-L 列出某个链上的规则,如iptables –L INPUT 列出INPUT链的规则

-N 创建一个新链

-P 定义某个链的默认策略

-R 替换链上的某条规则

-X 删除某个用户相关的链

-Z 将所有表的所有链的字节和数据包计数器清零


2)  Iptables的命令参数

<1>-p或者--protocol

      应用于数据包的协议类型,可以是TCP UDP ICMP或ALL。!也可使用。

    

      当使用-p tcp时,还可使用其他可以选项,以便允许进一步定义规则。选项包括:

      --sport 允许指定匹配数据包源端口.port1:port ,表示port1和port2之间的所有端口

      --dport 目的端口,和--sport雷同。

    

      当使用-p udp时,也有特殊的选项供使包括:

      --sport,--dport,与-p tcp 相同,只不过用以用于UDP包。


      使用-p icmp参数时,只有一个选项可用。

      --icmp-type,允许在过滤规则中指定icmp类型。

     

<2>-s或--source 指定数据包的源地址。

      该参数后跟一个IP地址,一个带有sub-net mask的网络地址,或一个主机名。(不建议使用主机名)


<3>-d或--destination 数据包的目的地址,同-s.


<4>-i或--in-interface,对于INPUT FORWARD PREROUTING链,该参数指定数据包到达服务器时所使用的端口。


<5>-o或--out-interface,对于OUTPUT FORWARD POSTROUTING链,该参数指定数据包离开服务器时使用的端口。


<6>-j或--jump 用于指定一个target,告诉规则将该匹配的数据包发送到该 target。

      target可以是ACCEPT,DROP,QUEUE,RETURN。如果没有-j,那么不会对数据包进行任何操作,只是将计数器加1。


3) Iptables的命令target(通过-j来指定target)

创建规则的最后一步是指定iptables对数据包的操作。只要某一规则匹配该数据包,就不会再有别的规则的操作。

内建的target有:ACCEPT DROP QUEUE RETURN。

ACCEPT:允许数据包通过,到达目的地。

DROP:拒绝数据包通过,丢弃该包。

QUEUE:将数据包发送回到用户应用程序处理。

RETURN:不再根据当前链的其他规则来检查数据包,而是直接返回,继续被发送到其目的地址,或下一个链。


三、应用Iptables规则示例

(1)允许WWW

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

该规则被添加到filter表的INPUT链,允许目的端口是80的数据包。

(2)在内部接口上允许DHCP

iptables  -A INPUT -i eth0 -p tcp  --sport 68  --dport 67 ACCEPT

iptables  -A INPUT -i eth0 -p udp --sport 68 --dport 67 ACCEPT

以上同时允许TCP和UDP协议。

四、保存和恢复Iptables

保存Iptables

使用iptables-save可将现行的iptables规则保存,

iptables-save > iptables保存路径,如# iptables-save > /etc/iptables.up.rule

恢复Iptables

使用iptables-restore 可从配置文档恢复iptables表到现行iptables表.

iptables-restore < /etc/iptables.up.rule

五、Ubuntu Server中的Iptables

Ubuntu Server6.06中已经默认安装iptables,版本是1.3.3.默认状态是关闭。

通过修改/etc/network/interfaces可将iptables打开:

auto loIface lo inet loopbackauto eth0iface eth0 inet dhcp

#添加以下内容

pre-up iptables-restore < /etc/iptables.up.rule#call the restored rule when active the eth0post-down iptables-save > /etc/iptables.up.rule#restore the iptables rule when shutdown the interface eth0

然后重新激活eth0即可。

另外,可随时修改/etc/iptables.up.rule配置文件,来更改iptables的规则Iptables.up.rul格式如下: 行与行之间不能有空行。

六、Summary

iptables表链中每条规则的顺序很重要,如果首条是accept all,那末所有的数据包都会被允许通过firewall,因此应当适当的安排规则顺序。通常的法则是:拒绝所有,允许少数.

预备知识(转): iptable有三种队列(表)规则,mangle queue, filter queue, nat queue。

1。The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header.

2。The second table is the filter queue which is responsible for packet filtering.

* Forward chain: Filters packets to servers protected by the firewall.

* Input chain: Filters packets destined for the firewall.

* Output chain: Filters packets originating from the firewall.

3。The third table is the nat queue which is responsible fornetwork address translation. It has two built-in chains; these are:

* Pre-routing chain: NATs packets when the destination address of the packet needs to be changed.

* Post-routing chain: NATs packets when the source address of the packet needs to be changed


个人总结:

iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。

1。一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。

2。一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断filter队列内其它规则,跳到nat队列规则去执行

3。一种是中止所有规则队列的执行。


iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 prerouting,然后检查目的 IP,判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

ACCEPT 将封包放行,进行完此处理动作后,将不再比对本规则链的其它规则,直接跳往下一个规则炼(nat:postrouting)。

REJECT 拦阻该封包,并回传封包通知对方,可以回传的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。 范例如下:

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

DROP 丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web服务器。例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE 改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其它规则。例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。范例如下:

iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼(filter:input 或 filter:forward)。范例如下:

iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100

MIRROR镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。

QUEUE中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用……等。

RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

MARK将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2


  • *mangle
  • :PREROUTING ACCEPT [48436:11233990]
  • :INPUT ACCEPT [48436:11233990]
  • :FORWARD ACCEPT [0:0]
  • :OUTPUT ACCEPT [29730:6162034]
  • :POSTROUTING ACCEPT [29730:6162034]
  • COMMIT
  • *nat
  • :PREROUTING ACCEPT [391:49336]
  • :POSTROUTING ACCEPT [1793:110951]
  • :OUTPUT ACCEPT [1793:110951]
  • COMMIT
  • *filter
  • :INPUT DROP [0:0]
  • :FORWARD DROP [0:0]
  • :OUTPUT ACCEPT [1418:147349]
  • -A INPUT -i lo -j ACCEPT
  • -A INPUT -m state --state ESTABLISHED -j ACCEPT
  • -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
  • -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
  • -A INPUT -p all -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
  • -A INPUT -j DROP
  • -A OUTPUT -o lo -j ACCEPT
  • -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
  • -A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT
  • COMMIT

    首先,这个iptables配置本质上使得你的计算机假装对任何不是由你发起的入站连接视而不见。这对转发包也同样对待。这通常是一个好策略,使用:INPUT DROP和:FORWARD DROP的默认值。例外可以稍后在指定端口,地址等等上进行创建。

    -A INPUT -i lo -j ACCEPT允许你的系统接受所有由你自己的网络适配器发起的入站请求。这对通过ping自己, 获得本地系统邮件转发(例如当你的计算机想告诉你出现故障时)等等这样的测试网络配置的操作很有用。

    -A INPUT -m state --state ESTABLISHED -j ACCEPT利用iptables的状态包过滤性能使得你可以非常灵活地为入 站包实现默认的DROP策略。这一行主要说明任何由你发起的连接将被允许继续进行连接。另外,你或许能够向另 一台服务器发送数据,但是永远不知道它是否到达,因为当服务器试图应答时你的防火墙会没有任何通知就丢弃 数据包。

    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT允许入站SSH连接。你或许想将22端口修改为其他非标准端口, 并且确保任何想远程SSH访问上面提到的计算机的人在进行这种连接时都知道使用修改的端口。

    对于永远不应该被远程访问的系统,你应该在应用这个文件之前从中删除这一行,但我的经验是远程SSH访问是对 分布式网络进行安全管理的工具之一,因此大多数不在诸如网络上只有一台计算机的家庭桌面这样的单机系统的人或许都希望对系统具有某种远程SSH访问。在将来你对iptables更精通之后,你可能会考虑用几行代替这一行, 那几行定义了什么资源对远程连接到计算机的尝试是有效的,所以即使在非标准端口上,没有系统攻击者能够从 错误的资源利用SSH闯入(例如一个不正确的IP地址,等等),但是这确实超出了本文讨论的范围。

    -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT允许使用通用Unix打印系统(CUPS)的网络打印机进行连接。 如果你没有这样的打印机,请删除这一行。比它更复杂,更安全的iptables规则可以被用来做同样的事情,但这 是一个相当好的起点。

    -A INPUT -p all -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT是另一“允许自我通信”的行。

    问:我用Linux作为代理让局域网里的所有机器上ADSL。用iptables设置NAT,所有的机器都

    能够上网了。现在有一个新的要求,局域网里有一台WEB服务器,需要从internet上能

    够访问,以前用Sygate作代理的时候,作过一个端口映射,将代理服务器上的端口80映

    射到Web服务器的80端口,请问用iptables应该如何来作这个映射?

    解:iptables -t nat -A PREROUTING -d "你的外网ip" --dport 80 -j DNAT --to "Web服务器ip":80


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值