iptables的基础知识-iptables中的ICMP

在iptables看来,只有四种ICMP分组,以下分组类型可以被归为NEW、ESTABLISHED

ECHO请求(ping,8)和ECHO应答(ping,0)

时间戳请求(13)和应答(14)

信息请求(15)和应答(16)

地址掩码请求(17)和应答(18)

这些ICMP分组类型中,请求分组属于NEW,应答分组属于ESTABLISHED。而其它类型的ICMP分组不基于请求/应答方式,一律被归入RELATED。

我们先看一个简单的iptables例子:

  
  1. iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED, RELATED -j ACCEPT  
  2.  
  3. iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT  
  4.  

这链条规则进行如下的iptables过滤:

一个ICMP echo请求是一个NEW连接。因此,允许ICMP echo请求通过OUTPUT链。

当请求的应答返回,由于iptables两个方向上都发包了,此时连接的状态是ESTABLISED,因此允许通过INPUT链。而INPUT链没有NEW状态,因此不允许echo请求通过INPUT链。也就是说,这两条规则允许内部主机ping外部主机,而不允许外部主机ping内部主机。

一个重定向ICMP(5)分组不是基于请求/应答方式的,因此属于RELATED。INPUT和OUTPUT链都允许RELATED状态的连接,因此重定向(5)分组可以通过INPUT和OUTPUT链。