1.规则的编写格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]

       

 -t table:

  默认为filter;其它可用的有raw, mangle, nat;

 COMMAND:

  (1)链:

   -P:policy,策略,定义默认策略; 一般有两种选择,ACCEPT和DROP;

   -N:new,新建一条自定义的规则链;被内建链上的规则调用才能生效;[-j  chain_name];

   -X:drop,删除自定义的引用计数为0的空链;

   -F:flush,清空指定的链;

   -E:重命名自定义的引用计数和为0的链;

  (2)规则:

   -A:append,追加,在指定链的尾部追加一条规则;

   -I:insert,插入,在指定的位置(省略位置时表示链首)插入一条规则;

   -D:delelte,删除,删除指定的规则;

   -R:replace,替换,将指定的规则替换为新规则;不能仅修改规则中的部分,而是整条规则完全             替换;

 (3)查看:

   -L:list,列出表中的链上的规则;

   -n:numeric,以数值格式显示;

   -v:verbose,显示详细格式信息; 

   -vv, -vvv:更加详细;

   -x:exactly,计数器的精确结果;

   --line-numbers:显示链中的规则编号;

 (4)计数器:

   -Z:zero,置0;

 chain:

 (1) 内建链;

 (2) 自定义链;

 匹配条件:多重条件逻辑关系为“与”;

 (1)基本匹配条件:

   ① -s,[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;

   ② -d,[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;

   ③ -p :protocol:{tcp|udp|icmp}

   ④ -i :数据报文的流入接口;INPUT, FORWARD  and  PREROUTING 

   ⑤ -o :数据报文的流出接口; FORWARD, OUTPUT and POSTROUTING

 (2)扩展匹配条件

   ①隐式扩展:不用-m选项指出matchname即可使用此match的专用选项进行匹配;

    -p tcp:隐含了-m tcp;

       a.--source-port,--sport port[:port]:匹配报文中传输层的源端口;

       b.--destination-port,--dport port[:port]:匹配报文中传输层的目标端口;

        c.--tcp-flags mask comp

SYN,ACK,FIN,RST,URG,PSH;

            mask:要检查的标志位列表,以逗号分隔;

comp:必须为1的标志位,余下的出现在mask列表中的标志位则必须为0;

        d.--syn:相当于--tcp-flags  SYN,ACK,FIN,RST  SYN 

      -p udp:隐含了-m udp:

    a.--source-port,--sport port[:port]:匹配报文中传输层的源端口;

    b.--destination-port,--dport port[:port]:匹配报文中传输层的目标端口;

 -p icmp:隐含了-m icmp:

    a.--icmp-type {type[/code]|typename}

8:echo-request

0:echo-reply

  ②显式扩展:必须使用-m选项指出matchname,有的match可能存在专用的选项;

     multiport扩展:以离散或连续的方式定义多端口匹配条件;

          a.--source-ports,--sports port[,port|,port:port]...:指定多个源端口;

    b.--destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;

    c.--ports port[,port|,port:port]...:指定多个端口;

      iprange扩展:以连续的ip地址范围指明连续的多地址匹配条件;

          a.--src-range from[-to]:源IP地址;

    b.--dst-range from[-to]:目标IP地址;

     string扩展:对报文中的应用层数据做字符串匹配检测;

          a.--string pattern:要检测字符串模式;

    b.--hex-string pattern:要检测的字符串模式,16进制编码;

    c.--algo {bm|kmp}

     time扩展:根据报文到达的时间与指定的时间范围进行匹配度检测;

          a.--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间;

    b.--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间;

    c.--timestart hh:mm[:ss]

    d.--timestop  hh:mm[:ss]

    e.--monthdays day[,day...]

    f.--weekdays day[,day...]

示例:~]# iptables -I INPUT -d 172.16.100.67 -p tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Tue,Thu,Sat -j ACCEPT

     connlimit扩展:根据每客户端IP做并发连接数匹配;

          a.--connlimit-upto n:连接数数量小于等于n,此时应该允许;

    b.--connlimit-above n:连接数数量大于n,此时应该拒绝;

示例:~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT

     limit扩展:基于收发报文的速率进行匹配;

          a. --limit rate[/second|/minute|/hour|/day]:平均速率

    b.--limit-burst number:峰值速率

state扩展:状态检测;连接追踪机制(conntrack);

          a. --state STATE

INVALID:无法识别的状态; 

ESTABLISHED:已建立的连接;

NEW:新连接; 

RELATED:相关联的连接;

UNTRACKED:未追踪的连接;

tips:追踪到的连接:/proc/net/nf_conntrack文件中;能追踪的最大连接数量定义在/proc/sys/net/nf_conntrack_max;此值可自行定义,建议必要时调整到足够大;不同的协议的连接追踪的时长:/proc/sys/net/netfilter/

      示例:如何开放被模式的ftp服务: 

    (1) 装载追踪ftp协议的模块;

 # modprobe nf_conntrack_ftp

         (2) 放行命令连接

 ~] # iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state ESTABLISHED -j ACCEPT

 ~] # iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m state --state NEW -j ACCEPT

         (3) 放行数据连接

 ~] iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state RELATED -j ACCEPT

 处理动作(目标)

 -j targetname [per-target-options]

   argetname:

ACCEPT:接受;

DROP:丢弃;

REJECT:拒绝;

2.保存和重载规则:

    CentOS 7:

iptables-save > /PATH/TO/SOME_RULE_FILE 

iptables-restore < /PATH/FROM/SOME_RULE_FILE

CentOS 6:

 保存规则:

  service iptables save 自动保存规则至/etc/sysconfig/iptables文件中;

 重载规则:

  server iptables restore 从/etc/sysconfig/iptables文件中重载规则; 

3.iptables规则优化:

 (1) 可安全放行所有入站及出站,且状态为ESTABLISHED的连接;

 (2) 服务于同一类功能的规则,匹配条件严格的放前面,宽松放后面;

 (3) 服务于不同类功能的规则,匹配报文可能性较大扩前面,较小放后面;

 (4) 设置默认策略;

   (a) 最后一条规则设定;

   (b) 默认策略设定;