使用iptables限制ICMP

我有以下规则,我相信将限制icmp数据包到1 / s。

:INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [7:988] -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -m limit --limit 1/sec -j ACCEPT -A INPUT -s 11.xx71/32 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 11.xx65/32 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 11.xx66/32 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT 

但是当我用“ping -i .001”ping这个主机时,所有的数据包都到达了这台机器上

iptables-nvL DROP计数器不递增。这个规则有什么问题

这里的问题是你接受一个数据包(隐含地是NEW状态,然后试图应用一个限制规则,这个限制可能会起作用,但是后面的RELATED,ESTABLISHED规则可能会让你感到RELATED,ESTABLISHED

你有两个select:

  1. 根据协议设置相关和build立的规则。
  2. 通过状态跟踪使该types的ICMPstream量不可跟踪。

鉴于现在的表格在那里

根据协议设置相关和build立的规则。

 iptables -D INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -m udp -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT 

通过状态跟踪使该types的ICMPstream量不可跟踪。

 iptables -t raw -I PREROUTING -m icmp -p icmp --icmp-type any -j NOTRACK 

我认为你需要在你的速率限制规则之后为ICMP添加一个明确的DROP规则

 -A INPUT -p icmp -m icmp --icmp-type any -m limit --limit 1/sec -j ACCEPT -A INPUT -p icmp -j DROP 

这是因为后续的数据包被认为是ESTABLISHED和以后的规则

 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

允许他们在被政策抛弃之前。