在Linux防火墙中,对于数据报而言,有以下几个流向: PREROUTING-->FORWARD-->POSTROUTING PREROUTING-->INPUT-->本机OUTPUT-->POSTROUTING 数据报的流向主要流向其实也是iptables的两种工作模式:  iptables会根据不同的数据处理包处理功能不同的规则表。它包括如下3个表:filter、nat和mangle。
filter是默认的表,包含真正的防火墙过滤规则。内建的规则链包括:INPUT、OUTPUT和FORWARD。 nat表包含源、目的地址及端口转换使用的规则,内建的规则链包括PERROUTING、OUTPUT和POSTROUTING。 mangle表包含用于设置特殊的数据包路由标志的规则。随后filter表中的规则会检查这些标志。内建的规则链包括:PERROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT。
表中相应的相关规则链功能如下: INPUT链:当一个数据包由内核中的路由计算确定为本地的Linux系统后,它会通过INPUT链的检查。 OUTPUT链:保留给系统自身生出的数据包 FORWARD键:经过Linux系统路由的数据包(即当iptables防火墙用于连接两个网络时,两个网络之间的数据包必须流经该防火墙) PREROUTING链:用于修改目的地址(DNAT) POSTROUTING链:用于修改源地址(SNAT)
iptables详细语法
iptables [-t 表名] <-A|I|D|R> 链名[规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [--sport 源端口号] [-d 目标IP地址|目标子网] [--dport 目标端口号] <-j 动作>
注意:此语法规则详细,逻辑清晰,推荐记忆此语法格式。在刚开始写iptables规则时就应该养成良好的习惯,用此语法规则来规范脚本,对今后的工作会大有帮助。
下面关于语法的详细说明: (1)、定义默认策略 作用:当数据包不符合链中任意一条规则时,iptables将根据该链预先定义的默认策略来处理数据包。 默认策略定义格式为: iptables [-t 表名] <-P> <链名> <动作> 参数说明如下: [-t 表名] :将指定默认策略应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。 <-P> :定义默认策略 <链名> :指定默认策略应用于哪个链,可以使用INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING。 <动作> : 处理数据包的动作,可以使用ACCEPT(接收数据包)和DROP(丢弃数据包)。


(2)查看iptables规则
查看iptables规则的命令格式为: iptables [-t 表名] <-L> [链名] 参数说明如下: 

(3)增加、插入、删除、替换iptables规则
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和POSTROUTER [规则编号] :规则编号在插入、删除和替换规则时使用,编号是按照规则列表的顺序排列的,规则列表中的第一条规则的编号为1。 [-i | o 网卡名称] :是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出。网卡名称可以使用ppp0、eth0和eth1等。 [-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP和ICMP等。 [-s 源IP地址|源子网] :-s后面接源主机的IP地址或子网地址。 [--sport 源端口号] : --sport后面接数据包的IP源端口号。 [-d 目标IP地址|目标子网] :-d后面接目标主机的IP地址或子网地址 [--dport 目标端口号] :--dport后面接数据包的IP目标端口号。 <-j 动作>
下面是处理数据包的动作,以及各个动作的详细说明。 ACCEPT:接收数据包。 DROP:丢弃数据包。 REDIRECT:将数据包重新转向到本机或另一台主机的某一个端口,通常实现透明代理或对外开放内网的某些服务。 REJECT:拦截该数据封包,并发回封包通知对方。 SNAT:源地址转换,即改变数据包的源地址。例如:将局域网的IP(10.0.0.1/24)转化为广域网的IP(203.93.236.141/24),在NAT表的POSTROUTING链上进行该动作。 DNAT:目标地址转换,即改变数据包的目标地址。例如:将广域网的IP(203.93.236.141/24)转化为局域网的IP(10.0.0.1/24),在NAT表的PREROUTING链上进行该动作。 MASQUERADE:IP伪装,即常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP动态分配的,如果主机的IP地址是静态固定的,就要使用SNAT。 LOG:日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错。


(4)清除规则和计数器 在新建规则时,往往需要清除原有的旧规则,以免它们影响新设定的规则。如果规则比较多,逐条删除就会十分麻烦,这时可以使用iptables提供的清除规则参数达到快速删除所有的规则的目的。 定义参数的格式为: iptables [-t 表名] <-F | Z> 参数说明如下: |