iptables参数详解
⼀、limit:速率-m limit 说明:
--limit 1000/s #设置最⼤平均匹配速率
--limit 5/m --limit-burst 15 #表⽰⼀开始能匹配的数据包数量为15个,每匹配到⼀个,limit-burst的值减1,所以匹配到15个时,该值为0,每过12s,limit-burst的值会加1,表⽰⼜能匹配1个数据包例⼦:
iptables -A INPUT -i eth0 -m limit --limit 5/m --limit-burst 15 -j ACCEPT iptables -A INPUT -i eth0 -j DROP注意要点:
1、--limit-burst的值要⽐--limit的⼤
2、limit本⾝没有丢弃数据包的功能,因此,需要第⼆条规则⼀起才能实现限速的功能⼆、time :在特定时间内匹配-m time 说明:
--monthdays day1[,day2]在每个⽉的特定天匹配--timestart hh:mm:ss
在每天的指定时间开始匹配--timestop hh:mm:ss
在每天的指定时间停⽌匹配--weekdays day1[,day2]
在每个星期的指定⼯作⽇匹配,值可以是1-7例⼦:
iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPTiptables -A INPUT -i eth0 -j DROP
三、ttl:匹配符合规则的ttl值的数据包-m ttl 说明:--ttl-eq 100
匹配TTL值为100的数据包--ttl-gt 100
匹配TTL值⼤于100的数据包--ttl-lt 100
匹配TTL值⼩于100的数据包例⼦:
iptables -A OUTPUT -m ttl --ttl-eq 100 -j ACCEPT
四、multiport:匹配离散的多个端⼝-m multiport 说明:
--sports port1[,port2,port3]匹配源端⼝
--dports port1[,port2,port3]匹配⽬的端⼝
--ports port1[,port2,port3]匹配源端⼝或⽬的端⼝例⼦:
iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP
五、state:匹配指定的状态数据包-m state 说明:--state value
value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)例⼦:
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT六、mark:匹配带有指定mark值的数据包-m mac 说明:--mark value
匹配mark标记为value的数据包例⼦:
iptables -t mangle -A INPUT -m mark --mark 1 -j DROP
拒绝特定的mac地址访问例⼦:
iptables -A FORWARD -m mac --mac-source 00:0C:24:FA:19:80 -j DROP
其它参数详解
参数 --tcp-flags
只过滤TCP中的⼀些包,⽐如SYN包,ACK包,FIN包,RST包等等例如: iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
说明 ⽐对 TCP 封包的状态旗号,参数分为两个部分,第⼀个部分列举出想⽐对的旗号,第⼆部分则列举前述旗号中哪些有被设,未被列举的旗号必须是空的。TCP 状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)PSH(强迫推送)等均可使⽤于参数中,除此之外还可以使⽤关键词 ALL 和
NONE 进⾏⽐对。⽐对旗号时,可以使⽤ ! 运算⼦⾏反向⽐对。参数 --syn
例如: iptables -p tcp --syn
说明 ⽤来⽐对是否为要求联机之 TCP 封包,与 iptables -p tcp --tcp-flags SYN,FIN,ACK的作⽤完全相同,如果使⽤ !,可⽤来⽐对⾮要求联机封包。
参数 -m multiport --source-port
例如: iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
说明 ⽤来匹配不连续的多个来源端⼝,⼀次最多可以匹配 15 个端⼝,可以使⽤ ! 进⾏反向⽐对。参数 -m multiport --destination-port
例如: iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110说明 ⽤来匹配不连续的多个⽬的地端⼝,设定⽅式同上。参数 -m multiport --port
例如: iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
说明 这个参数⽐较特殊,⽤来匹配来源端⼝号和⽬的端⼝号相同的封包,设定⽅式同上。注意:在本范例中,如果来源端⼝号为 80⽬的端⼝号为 110,这种封包并不算符合条件。参数 --icmp-type
例如: iptables -A INPUT -p icmp --icmp-type 8(icmp-request=8;icmp-reply=0)
说明 ⽤来⽐对 ICMP 的类型编号,可以使⽤代码或数字编号来进⾏⽐对。⽤ iptables -p icmp --help 来查看有哪些代码可⽤。参数 -m limit --limit
例如: iptables -A INPUT -m limit --limit 3/hour
说明 ⽤来⽐对某段时间内封包的平均流量,上⾯的例⼦是⽤来⽐对:每⼩时平均流量是否超过⼀次 3 个封包。 除了每⼩时平均次外,也可以每秒钟、每分钟或每天平均⼀次,默认值为每⼩时平均⼀次,参数如: /second、 /minute、/day。 除了进⾏封数量的⽐对外,设定这个参数也会在条件达成时,暂停封包的⽐对动作,以避免因骇客使⽤洪⽔攻击法,导致服务被阻断。参数 --limit-burst
例如: iptables -A INPUT -m limit --limit-burst 5
说明 ⽤来⽐对瞬间⼤量封包的数量,上⾯的例⼦是⽤来⽐对⼀次同时涌⼊的封包是否超过 5 个(这是默认值),超过此上限的封将被直接丢弃。使⽤效果同上。参数 -m mac --mac-source
例如: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
说明 ⽤来⽐对封包来源⽹络接⼝的硬件地址,这个参数不能⽤在 OUTPUT 和 Postrouting规则炼上,这是因为封包要送出到⽹后,才能由⽹卡驱动程序透过 ARP 通讯协议查出⽬的地的 MAC 地址,所以 iptables 在进⾏封包⽐对时,并不知道封包会送到哪个⽹络接⼝去。参数 --mark
例如: iptables -t mangle -A INPUT -m mark --mark 1
说明 ⽤来⽐对封包是否被表⽰某个号码,当封包被⽐对成功时,我们可以透过 MARK 处理动作,将该封包标⽰⼀个号码,号码最不可以超过 4294967296。
参数 -m owner --uid-owner
例如: iptables -A OUTPUT -m owner --uid-owner 500
说明 ⽤来⽐对来⾃本机的封包,是否为某特定使⽤者所产⽣的,这样可以避免服务器使⽤ root 或其它⾝分将敏感数据传送出,可以降低系统被骇的损失。可惜这个功能⽆法⽐对出来⾃其它主机的封包。参数 -m owner --gid-owner
例如: iptables -A OUTPUT -m owner --gid-owner 0
说明 ⽤来⽐对来⾃本机的封包,是否为某特定使⽤者群组所产⽣的,使⽤时机同上。参数 -m owner --pid-owner
例如: iptables -A OUTPUT -m owner --pid-owner 78
说明 ⽤来⽐对来⾃本机的封包,是否为某特定⾏程所产⽣的,使⽤时机同上。参数 -m owner --sid-owner
例如: iptables -A OUTPUT -m owner --sid-owner 100
说明 ⽤来⽐对来⾃本机的封包,是否为某特定联机(Session ID)的响应封包,使⽤时机同上。参数 -m state --state
例如: iptables -A INPUT -m state --state RELATED,ESTABLISHED
说明 ⽤来⽐对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表⽰该封包的联机编号(Session ID)⽆法辨识或编号不正确。ESTABLISHED 表⽰该封包属于某个已经建⽴的联机。NEW 表⽰该封包想要起始⼀个联机(重设联机或将联机重导向)。RELATED 表⽰该封包是属于某个已经建⽴的联机,所建⽴的新联机。例如:FTP-DATA 联机必定是源⾃某个 FTP 联机参数 -m comment --comment \"descripton\"
例如: iptables -A INPUT -p icmp --icmp-type 8 -j DROP -m comment --comment \"拒绝ping防⽕墙\"说明 给防⽕墙策略添加注释,拒绝任何到达防⽕墙的icmp请求
TCP连接状态
[root@web01 scripts]# netstat -tun
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 96 10.10.10.52:22 10.10.10.254:52032 ESTABLISHED LISTEN 侦听来⾃远⽅的TCP端⼝的连接请求
SYN-SENT 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED 再收到和发送⼀个连接请求后等待对⽅对连接请求的确认ESTABLISHED 代表⼀个打开的连接
FIN-WAIT-1 等待远程TCP连接中断请求,或先前的连接中断请求的确认FIN-WAIT-2 从远程TCP等待连接中断请求
CLOSE-WAIT 等待从本地⽤户发来的连接中断请求CLOSING 等待远程TCP对连接中断的确认
LAST-ACK 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT 等待⾜够的时间以确保远程TCP接收到连接中断请求的确认CLOSED 没有任何连接状态