iptables不允许来自远程机器的ICMP请求

我用下面的iptables规则configuration了我的linux路由

iptables --list-rules -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A FORWARD -i vmbr0 -o eth2 -j ACCEPT -A FORWARD -i vmbr0 -o eth1 -j ACCEPT -A FORWARD -i eth1 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth2 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT 

eth1和eth2是wan接口。 vmbr0是我的私人networking。 从远程计算机ping eth2 ip地址的请求正在被丢弃,http请求也被丢弃。

我怎样才能解决这个问题?

看来您列出的每个规则都是一个接受规则,包括默认值。 从这一点来说,你的configuration不应该放弃或拒绝任何数据包。 我认为你的问题在别处。

如果你想允许ICMP ping请求,试试这个:

 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d <eth2_ip> -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 0 -s <eth2_ip> -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
  • 8代表回声请求
  • 0是回复回复的代码

如果主机防火墙没有阻塞任何ICMP报文,请检查与ICMP相关的内核参数。

 $ sysctl net.ipv4.icmp_echo_ignore_all net.ipv4.icmp_echo_ignore_all = 0 

这通常在/etc/sysctl.conf中设置; 如果此主机在Internet上,则通常不希望它响应ping(ICMP)。

请注意,ICMP既不是TCP也不是UDP – 所以你必须以不同于TCP或UDP的规则来允许它。

为了进行debugging,我使用tcpdump来侦听主机上的networkingstream量 – 查看正在查看的数据包 – 以及执行以下命令:

 watch -d iptables -L -v -n 

这个命令可能会告诉你哪个规则被选中,只要没有太多的stream量通过防火墙。