Iptables 语法与格式 
 
  
 
   netfilter机制的命令结构:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
   

 
    
  
      netFilter: INPUIT、FORWARD、OUTPUT     《filter的三种chain《最重要 
   
 
  
      Nat:PREROUTING、POSTROUTING、OUTPUT    《nat的三种chain《地址转换 
   
 
  
      Mangle: PREROUTING、INPUT、FORWARD     《mangle的五种chain《提供QOS 
   
 
  
              OUTPUT、POSTROUTING              可以更改封包的内容 
   
 
  
      RAW:    PREROUTING、OUTPUT             《raw的两种chain《提高性能 
   
 
  
Iptables命令参数: 
   
 
  
        Iptables –t [ filter | nat | mangle | raw]
 
  
                -t参数的意义是功能是哪一个(默认是filter) 
   
 
  
Iptables的操作方式: 
   
 
  
      -L        列出规则(table)内容,--line显示行号 (默认是filter) 
   
 
  
      -F        清除规则(table)内容 
   
 
  
      -A        加入新的规则 
   
 
  
      -P        修改default policy (默认是ACCEPT) 
   
 
  
      -I        插入新的规则 
   
 
  
      -R        配置新的规则取代旧的规则 
   
 
  
      -D        删除规则 
   
 
  
Iptables基本的规则语法: 
   
 
  
1) 接口的匹配参数: 
   
 
  
-i   匹配封包从哪个接口进入 例如: -i eth0  
   
 
  
-o   匹配封包从哪个接口出去 例如: -o eth1  
   
 
  
     (常见的网络接口: eth0、 ppp0、 lo、 fddi0 “<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0”代表第一块网卡,如果有多个就以此类推) 
   
 
  
2)  协议的匹配参数: 
   
 
  
-p   匹配使用的协议 例如: tcp、udp、icmp等也可使用all代表所有 
   
 
  
     在/etc/protocols文档中可以查看全部的协议及端口号 
   
 
  
3 )  匹配来源/目的的IP地址: 
   
 
  
-s   匹配封包的来源ip地址 例如: -s 192.168.10.100 
   
 
  
-d   匹配封包的目的ip地址 例如: -d 172.16.10.100 
   
 
  
     可匹配单一ip、网段(192.168.10.0/24)、FQDN名(www.baidu.com) 
   
 
  
4)匹配来源/目的的post位置: 
   
 
  
--sport   匹配来源就是来源使用哪个服务端口回应客服端封包 
   
 
  
          例如: --sport 110 匹配由pop3 Server回应客户端封包 
   
 
  
--dport   匹配目的就是目的端要访问源端端哪个端口(服务) 
   
 
  
          例如: --dport 80 匹配访问Web Server的封包 
   
 
  
5)处理方式: 
   
 
  
-j   ACCEPT 允许 
   
 
  
     DROP   将封包丢掉 
   
 
  
     REJECT 将封包丢掉,并回应发送端一个ICMP封包 
   
 
  
结合以上参数语法编写一下规则: 
   
 
  
使用shell脚本的方式 
   
 
  
       #!/ 
   Variable 
   
 
  
       VALUES=“/sbin/iptables –t filter”  
   
 
  
       SERVER=192.168.10.100 
   
 
  
       CLIENT=192.168.10.150 
   
 
  
       #Clear Original Rule 
   
 
  
       $VALUES –t filter –F 
   
 
  
       #Set Default Policy 
   
 
  
     $VALUES –t filter –P INPUTDROP 
   
 
  
       $VALUES –t filter –P FORWARD DROP 
   
 
  
       #Set Rule 
   
 
  
       $VALUES –A INPUT –p tcp –m state –-state INVALID –j DROP 
   
 
  
       $VALUES –A INPUT –p icmp –j DROP 
   
 
  
       $VALUES –A INPUT –p tcp –d $SERVER –-dport 80 –j ACCEPT 
   
 
  
       $VALUES –A INPUT –p tcp –s $CLIENT –d $SERVER –-dport 23 –j       ACCEPT
 
  
       $VALUES –A INPUT –p tcp –s $CLIENT –d $SERVER –-dport 22 –j j ACCEPT 
   
 
  
规则编写完成后将脚本赋予700权限并将属组与属主改成root然后执行脚本。 
   
 
  
使用service iptables save 指令将规则存储到/etc/sysconfig/iptables文件中。 
   
 
  
在/etc/rc.d/rc.local文件中的最后加入脚本的名称,需要决对路径  
   
 
  
 
   
 
 
  
注:如何解决无发在防火墙主机上对外建立连接的问题: 
   
 
  
      解决方法:使用xt_state.ko模块该模块提供“连接追踪”功能 
   
 
  
      Netfilter模块所在目录: 
   
 
  
        /lib/modules/kernel_version/kernel/net/netfilter  
   
 
  
      Iptables工具模块所在目录: 
   
 
  
        /lib/iptables 
   
 
  
      State模块的四种描述如下: 
   
 
  
        ESTABLISHED、 NEW、 RELATED、 INVALID 
   
 
  
       使用规则如下: 
   
 
  
     I iptables –t filter –A INPUT –m state –-state ESTABLISHED –  j ACCEPT                                                                  i 
   ptables -t filter –A INPUT –m state –-state RELATED –j ACCEPT


   将以上两条规则添加到现有的规则中就可以了。

https://blog.51cto.com/renhm/334685