IPTABLES
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传输数据包的过程
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                定义filterINPUT链默认策略接受所有数据包
      iptables –t nat –P OUTPUT DROP            natOUTPUT链默认策率丢弃所有数据包
技巧,定义默认规则拒绝所有
      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 动作>
 例如为filterINPUT链添加1条规则
iptables –t filter –A INPUT –s 192.168.1.200 –j DROP
     例如在filterINPUT链规则列表中第2条规则前插入1条规则
       iptables –t filter –I INPUT 2 –s 192.168.2.0/24 –p tcp –dport 80 –j DROP
     例如删除filterINPUT链规则列表中第3条规则
       iptables –t filter –D INPUT 3
使用iptables实现NAT
首先要开启内核路由功能:
echo “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服务重新启动后,规则会丢失