1.扩展匹配:分为隐式扩展和显式扩展

隐式扩展:所谓隐式扩展是对某种指定协议的扩展

  1.  -p tcp 
  2.  
  3.            --sport PORT[PORT2] 
  4.  
  5.            --sport PORT[PORT2] 
  6.  
  7.            --tcp-flags SYN,ACK,RST,FIN,SYN 也可以化作—syn,效果相同 
  8.  
  9.            --tcp-flags ACK,SYN,FIN,RST ACK,SYN 
  10.  
  11.        -p icmp    主要用于ping回应 
  12.  
  13.            --icmp-type 
  14.  
  15.               echo-reply 0 给予回应报文 
  16.  
  17.               echo-reply 8 请求报文 
  18.  
  19. eg:iptables –t filter –A INPUT –s 172.16.0.0/16 –p icmp-type 8 –j DROP 源地址ping目标地址172.16.0.0/16被拒绝 
  20.  
  21. iptables -t filter -L -n 查看编写的规则 
  22.  
  23. iptables -t filter -L -n -v 查看规则是否匹配到数据包 
  24.  
  25. iptables -L –n –line-numbers 显示行号 
  26.  
  27. iptables  -t filter -D INPUT 2 指定删除INPUT链中的第二条 
  28.  
  29. iptables -t filter -F INPUT 清空INPUT链中的规则 
  30.  
  31. iptables -t filter -A INPUT -s 0.0.0.0/0 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT 来自于0.0.0.0网段的源地址访问目标地址的172.16.100.1的22号端口是被允许的. 

    显式扩展:显式扩展则是由netfilter的扩展模块引入的某种扩展,用于指定匹配条件,通常需要额外的专用选项来定义,因此如果我们要在iptables中使用模块的话,则必须要使用-m指定模块.模块的存放位置:/lib/iptables/目录下,下面举例说明几个常用模块

  1. 显式扩展状态:state 
  2.  
  3.     -m state 
  4.  
  5.        --state  用来实现连接的状态监测 
  6.  
  7.         NEW(新发起的连接),ESTABLISHED(建立的连接),RELATED(相关联的),INVALID(非法的) 
  8. eg: [root@ns ~]# iptables -t filter -A INPUT -d 172.16.7.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
  9.  
  10. //目标地址允许任何源地址可以对172.16.7.1的tcp/22发起NEW和ESTABLISHED 
  11.  
  12. [root@ns ~]# iptables -t filter -A OUTPUT -s 172.16.7.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
  13.  
  14. //限定源地址只能通过172.16.7.1的tcp/22发起一个ESTABLISHED 
  15.  
  16. [root@ns ~]# iptables -P INPUT DROP 
  17.  
  18. [root@ns ~]# iptables -P OUTPUT DROP 
  19.  
  20. [root@ns ~]# iptables -L -n -v 
  21.  
  22. Chain INPUT (policy DROP 9 packets, 945 bytes) 
  23.  
  24.  pkts bytes target     prot opt in     out     source               destination         
  25.  
  26.   372 25112 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.16.7.1          tcp dpt:22 state NEW,ESTABLISHED 
  27.  
  28.   
  29.  
  30. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
  31.  
  32.  pkts bytes target     prot opt in     out     source               destination         
  33.  
  34.   
  35.  
  36. Chain OUTPUT (policy DROP 0 packets, 0 bytes) 
  37.  
  38.  pkts bytes target     prot opt in     out     source               destination         
  39.  
  40.    93  8400 ACCEPT     tcp  --  *      *       172.16.7.1           0.0.0.0/0           tcp spt:22 state ESTABLISHED 
  41.  
  42. 注释:上面的规则运用到服务器中可以这样解释,一般来说,为了系统安全我们是不允许服务器端新建连接的,即NEW状态,所以,源地址可以对目标服务器地址发起NEW和ESTABELISED状态,而服务器端只能发起ESTABLISED状态,这样的规则可以大大的加强系统的安全性。 
 
  1. -m connlimit 表示连接上限[Allows  you  to  restrict  the  number of parallel TCP connections to a server per client IP address (or address block).] 
  2.  
  3.        [!] --connlimit-above # 表示多于#才满足条件,意味着被拒绝,如果你的默认策略是DROP的话,应该要取反,表示应该不允许。[match if the number of existing tcp connections is (not) above #] 
  
  1. -m iprange 表示在规则匹配的IP范围内,执行的动作 
  2.  
  3.       --src-range ip-ip 源IP的网段 
  4.  
  5.       --dst-range ip-ip 目标IP的网段 
  6.  
  7. g:-m iprange --src-range 172.16.7.1-172.16.100.1 限定一段IP地址 

  1.     -m mac 表示mac地址的匹配 
  2.  
  3.        --mac-source XX:XX:XX:XX:XX:XX mac地址的匹配只能用在PREROUTING,INPUT,FORWARD链中 
  4.  
  5.     -m string 在规则中依据特定的模式和策略匹配相应的字符特征,以达到过滤的目的 
  6.  
  7.        --algo bm|kmp 匹配算法 algo: algorithm表算法 
  8.  
  9.        --string “pattern” 给定匹配模式 
  10.  
  11. eg:iptables -I OUTPUT 1 -o eth0 -s 172.16.7.1 -p tcp --sport 80 -m string --algo kmp --string “sex” -j DROP 
  12.  
  13. 注释:匹配到的报文中出现了sex类似的字符串都过滤掉 
  14.  
  15.     -m recent 允许动态创建一个ip地址表,凡是表内的IP都不让其匹配 
  16.  
  17.        --name NAME 
  18.  
  19.        --set 把数据包源地址加到指定列表中 
  20.  
  21.        --rcheck 通常和--set一起使用 
  22.  
  23.        --remove 从列表中释放 
  24.  
  25.        --second 限定时间,通常和--rcheck|--update一起使用 
  26.  
  27.        --hitcount hits 
  28.  
  29.     -m time 规则内基于时间的匹配 
  30.  
  31.        --datestart 开始日期 
  32.  
  33.        --datestop 结束日期 
  34.  
  35.        --timestart 开始时间 
  36.  
  37.        --timestop 结束时间 
  38.  
  39.        --weekdays 礼拜几 

2.使用iptablesnetfilter添加规则

  1. 语法格式:iptables [-t TABLE] COMMAND CHAIN [CRETIRIA匹配条件] –j ACTION 
  2.  
  3. Iptables对应的服务脚本(实际上不是服务): 
  4.  
  5. /etc/sysconfig/iptables-config 
  6.  
  7. 对应的脚本配置文件:/etc/rc.d/init.d/iptables-config使其让默认规则生效。 
  8.  
  9. 这里有一个调用iptables-config脚本的专用选项: 
  10.  
  11. Service iptables {status|start|stop|restart|save}, 
  12.  
  13. 其中save的功能最重要,用户可以把自己写的规则保存到特定位置中去。 
  14.  
  15. 规则的存放位置:/etc/sysconfig/iptables 

3.新建链,调用主链,并返回主链

  1. # iptables -A INPUT -d 172.16.7.1 -j clean_in 
  2. //调用主链 
  3. # iptables -N clean_in 
  4. //新建链 
  5. # iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP 
  6. # iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP 
  7. # iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP 
  8. # iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP 
  9. # iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP 
  10. # iptables -A clean_in -d 172.16.100.1 -j RETURN  
  11. //新建链中规则匹配完毕后,返回主链