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

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

我已经使用以下 iptables 规则配置了我的 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 是我的私有网络。来自远程计算机的 eth2 ip 地址的 ping 请求被丢弃,http 请求也是如此。

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

答案1

看起来您列出的每条规则都是 ACCEPT 规则,包括默认规则。因此,您的配置不应该丢弃或拒绝任何数据包。我认为您的问题出在其他地方。

答案2

如果您想允许 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 是 echo-r​​equest 的代码
  • 0 是回应代码

答案3

如果主机防火墙没有阻止任何 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 不同的规则来允许它。

为了调试目的,我会使用tcpdump嗅探主机上的网络流量 - 查看看到了哪些数据包 - 以及执行以下命令:

watch -d iptables -L -v -n

只要没有太多流量进入防火墙,此命令就可能会显示选择了哪条规则。

相关内容