显式扩展:必须显式指明使用的扩展模块(rpm-ql iptables | grep "\.so")
CentOS6: man iptables
CentOS7: man iptables-extensions
1、multiport扩展
以离散方式定义多端口匹配;最多指定15个端口;
[!]--source-ports,--sports port[,port|,port:port]...:指明多个源端口;
[!]--destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口;
[!]--ports port[,port|,port:port]...
iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m multiport--dport 22,80 -j ACCEPT
iptables -I OUTPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m multiport--sport 22,80 -j ACCEPT
2、iprange扩展
[!]--src-range from[-to]:指明连续的源IP地址范围;
[!]--dst-range from[-to]:指明连续的目标IP地址范围;
iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80-m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80-m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT
3、string扩展
检查报文中出现的字符串;
--algo{bm|kmp}
bm= Boyer-Moore
kmp= Knuth-Pratt-Morris
[!]--string pattern
iptables -I OUTPUT -m string --algo bm --string ‘movie‘ -j REJECT
4、time扩展
根据报文到达的时间与指定的时间范围进行匹配;
--datestart
--datestop
--timestart
--timestop
--monthdays
--weekdays
iptables -I INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --timestart00:00--timestop 08:00 -j REJECT
5、connlimit扩展(centos7)
根据每客户端IP(也可以是地址块)做并发连接数数量匹配;
--connlimit-aboven:连接的数量大于n
--connlimit-upton: 连接的数量小于等于n
6、limit扩展
基于收发报文的速率做检查;
令牌桶过滤器
--limitrate[/second|/minute|/hour|/day]
--limit-burstnumber
iptables -I INPUT -d 172.16.100.1 -p icmp --icmp-type 8 -m limit--limit-burst 5 --limit 30/minute -j ACCEPT
iptables -I OUTPUT -s 172.16.100.1 -p icmp --icmp-type 0 -j ACCEPT
7、state扩展
根据连接追踪机制检查连接的状态;
调整连接追踪功能所能够容纳的最大连接数量:
/proc/sys/net/nf_conntrack_max
已经追踪到并记录下的连接:
/proc/net/nf_conntrack
不同协议或连接类型追的时长:
/proc/sys/net/netfilter/
可追踪的连接状态:
NEW:新发出的请求;连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
INVALIED:无法识别的连接;
--stateSTATE1,STATE2,...
iptables -I INPUT -d 172.16.100.1 -p tcp --dport 22 -m state --stateNEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 172.16.100.1 -p tcp --sport 22 -m state --stateNEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -s -d 172.16.100.1 -p tcp -m multiport --dports2,80-m state --state NEW -j ACCEPT