四张表: filter、nat、mangle和raw
五条链:  PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING

在内核中打开转发功能:echo 1 >> /proc/sys/net/ipv4/ip_forward

表与链对应关系:
raw:
 PREROUTING
 OUTPUT
mangle(拆开、修改、封装):
 PREROUTING
 INPUT
 FORWARD
 OUTPUT
 POSTROUTING
nat(地址转换):
 PREROUTING
 OUTPUT
 POSTROUTING
filter(过滤):
 INPUT
 OUTPUT
 FORWARD

iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作
一、TABLE (表)
raw、mangle、nat、filter,不写-t 参数指定则默认为filter

二、COMMAND :
 1.管理规则
  -A:附加一条规则,添加在链的尾部
  -I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
  -D CHAIN [num]    或者 -D CRETERIA : 删除指定链中的第num条规则;
  -R CHAIN [num]: 替换指定的规则; 
  2.管理链:
  -F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
  -P CHAIN: 设定指定链的默认策略;
  -Z:置零指定链中所有规则的计数器; 
  -N:自定义一个新的空链
  -X: 删除一个自定义的空链
  -E: 重命名自定义的链;
  3.查看类:
   -L: 显示指定表中的规则;
   -n: 以数字格式显示主机地址和端口号;
   -v: 显示链及规则的详细信息
   -vv:
   -vvv
   -x: 显示计数器的精确值
   --line-numbers: 显示规则号码

三、链(chain)  
PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING

四、匹配条件 
 1.通用匹配
  -s
  -d
  -p {tcp|udp|icmp}
  -i
  -o
 2.扩展匹配
  (1)隐式扩展
   -p tcp
        --sport PORT[-PORT]: 源端口
        --dport PORT[-PORT]: 目标端口
        --tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
        --tcp-flags SYN,FIN,ACK,RST SYN        = --syn
                 SYN,ACK,RST,URG,PSH,FIN, ALL,NONE
        --syn

   -p icmp
        --icmp-type
         0: echo-reply
         8: echo-request

   -p udp
        --sport
        --dport

  (2)显式扩展: 使用额外的匹配机制
   -m EXTESTION --spe-opt

   -m state: 状态扩展 (可以是icmp、udp、tcp等的状态)
    结合ip_conntrack追踪会话的状态
     NEW: 新连接请求
     ESTABLISHED:已建立的连接(和tcp状态机的ESTABLISHED状态不一样)
     INVALID:非法连接
     RELATED:相关联的
    -m state --state NEW,ESTABLISHED -j ACCEPT

    首先要装载ip_conntrack_ftp和ip_nat_ftp模块

    iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

   -m multiport: 离散的多端口匹配扩展
        --source-ports  21,22,80
        --destination-ports
        --ports
   -m limit
         --limit RATE  
         --limit-burst
  (如:--limit 5/minute --limit-burst 8 -j ACCEPT)符合这速率则允许,不符合则执行下一条,所以还要在后面的规则drop.
   -m string
        --algo {bm|kmp}
        --string PATTEN
       例:iptables -I OUTPUT 1 -p tcp --sport 80 -m string --algo kmp --string "sex" -j DROP
   -m connlimit: 每客户端IP连接数限制
    [ ! ] --connlimit-above n (一般drop则不用取反!,accept则需要取反!)
   -m iprange
        --src-range 172.16.1.1-172.16.1.100
        --dst-range
   -m mac
        --mac-source XX:XX:XX:XX:XX:XX
   -m recent
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

条件取反:!   如  -s ! 172.16.100.6   (!后成有空格)

五、动作(target):
 ACCEPT:放行
 DROP:丢弃
 REJECT:拒绝
 DNAT:目标地址转换
 SNAT:源地址转换
 REDIRECT:端口重定向
 MASQUERADE:地址伪装 masquerade,类似于SNAT,自动选择合适的外网地址作为转换后的地址,尤其适合外网地址是动态获取的情况。
 LOG:日志  --log-prefix "something to be add before the log"
 MARK:打标记
自定义链名  :跳转到自定义链
RETURN       :在自定义链上定义,跳转回主链


每个规则都有两个内置的计数器:
 被匹配的报文个数
 被匹配的报文大小之和

SNAT:
    iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth 1 -j SNAT --to-source 10.0.0.1
DNAT:
    iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1
注意:做地址转换,forward链必须是ACCEPT才能通过。

保存规则:
service iptables save
默认位置: /etc/sysconfig/iptables

指定路径保存与载入:
iptables-save > /otherdir/iptalbes2
iptables-restore < /otherdir/iptables2
有任何疑问请点击留言: 留言板
本文发布于http://wiki.too2.net,转载请联系本人。