IPTABLES <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Iptables 基础,规则、链、表
规则:就是网络管理员预定义的条件,规则一般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别定义了源地址、目的地址、传输协议(如 TCP,UDP,ICMP )和服务类型 (HTTP,FTP,SMTP) 等,当数据包与规则匹配时, iptables 就根据规则所定义的方法来处理这些数据包,如放行 (accept), 拒绝 (reject), 和丢弃 (drop) 等。配置防火墙主要工作就是添加,修改和删除这些规则。
链:链( CHAINS )是数据包传播的途径,每一条链其实就是众多规则中的一个检查清单,每一条链可以有一条或数条规则。当一个数据包到达一条链时, iptables 就从链中第一条规则开始检查,看该数据包是否满足规则定义的条件。如果满足,系统就会根据这条规则所定义的方法处理该数据包;否则 iptables 将继续检查下一条规则,如果该数据包不符合链中任一条规则, iptables 将会按照默认策略来处理数据包。
表:表( tables )提供了特定的功能, iptables 内建了 3 个表,即 filter 表、 nat 表、和 mangle 表。分别用于实现包过滤,网络地址转换和包重构的功能
1.  Filter
Filter 表主要是用于过滤数据包,是 iptables 的默认表,包含了 INPUT 链(用于处理进入的数据包), FORWORD 链(处理转发的数据包), OUTPUT 链(处理本地生成的数据包)。在 filter 表中只允许对数据包进行接受、丢弃操作,而无法对数据包进行修改。
2.  Nat
Nat 表主要用于网络地址转换,可以实现一对一,一对多,多对多等 NAT 工作,包含了 PREROUTING 链(修改即将到来的数据包), OUTPUT 链(修改路由之前本地生成的数据包)和 POSTROUTING (修改即将出去的数据包)。
3.  Mangle
Mangle 表主要用于对指定包进行修改,如 TTL,TOS 等。用的很少。
IPTABLES 传输数据包的过程
1、  当一个数据包进入网卡时,他首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转发出去。
2、  如果数据包是进入本机的,就会向下到 INPUT 链。数据包到达 INPUT 链后,任何进程都会接受。本机上运行的程序也可以发出数据包,这些数据包会经过 OUTPUT 链,然后到达 POSTROUTING 链输出。
3、  如果数据包是要转发出去的,且内核允许,数据包就会经过 FORWARD 链,然后到 POSTROUTING 链输出。
用户可以在各个链定义规则。
Iptables 命令格式:
iptables [-t ] – 命令 匹配 动作
1、  表选项: filter 表, nat 表和 mangle
2、  命令选项,用于指定执行方式,包括插入规则、删除规则、添加规则等。
-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
   -o 或者 —out-interface < 网络接口名称 >   指定数据包从哪个网络接口流出
   -p 或者 —proto < 协议类型 >             指定数据包匹配的协议 tcp,udp,icmp
   -s 或者 —source < 源地址或子网 >        指定数据包匹配的源地址
   --sport < 源端口号 >                    指定数据包匹配的源端口号
   -d 或者 —destination < 目的地址或者子网 >
   --dport < 目标端口号 >
4 、动作选项,指定当数据包与规则匹配时,应该做什么操作,如接口,丢弃等
   ACCEPT          接受数据包
   DROP            丢弃数据包
   REDIRECT        将数据包重新转向到本机或另外一台主机的某个端口
   SNAT             源地址转换
   DNAT             目的地址转换
   MASQUERADE     IP 伪装,即 NAT 技术
   LOG               日至功能,将符合规则的数据包的相关信息记录在日至中
Iptables 的使用
1、  定义默认策略
iptables [-t 表名 ] <-P> < 链名 > < 动作 >
例如: iptables –P INPUT ACCEPT                定义 filter INPUT 链默认策略接受所有数据包
      iptables –t nat –P OUTPUT DROP            nat OUTPUT 链默认策率丢弃所有数据包
技巧,定义默认规则拒绝所有
      iptables –P INPUT DROP
      iptables –P FORWARD DROP
      iptables –P OUTPUT ACCEPT
2、  查看 iptables 规则
iptables [-t 表名 ] <-L> [ 链名 ]
例如查看 nat 表所有链的规则列表
Iptables –t nat –L
3、  增加、插入、删除和替换规则
Iptables [-t 表名 ] <-A I D R> 链名 [ 规则编号 ] [-i o 网卡名称 ] [-p 协议类型 ] [-s 源地址或子网 ] [--sport 源端口号 ] [-d 目的 IP 地址或子网 ] [--dport 目的端口号 ] <-j 动作 >
  例如为 filter INPUT 链添加 1 条规则
iptables –t filter –A INPUT –s 192.168.1.200 –j DROP
     例如在 filter INPUT 链规则列表中第 2 条规则前插入 1 条规则
       iptables –t filter –I INPUT 2 –s 192.168.2.0/24 –p tcp –dport 80 –j DROP
     例如删除 filter INPUT 链规则列表中第 3 条规则
       iptables –t filter –D INPUT 3
使用 iptables 实现 NAT
首先要开启内核路由功能:
echo “<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”> /proc/sys/net/ipv4/ip_forward
然后实现 IP 伪装,在 nat 表中的 POSTROUTING 链加入一条规则,这条规则是将所有由 ppp0 口送出的包伪装。
iptables –t nat –A POSTROUTING –o PPP0 –j MASQUERADE
查看规则虽然可以用iptables -L 来查看,但是信息并不完全,所以还是用cat /etc/sysconfig/iptables 来查看
注意:每次添加或者删除规则后,要service iptables save 来保存,否则iptables服务重新启动后,规则会丢失