在 Arch GNU/Linux 上安装 iptables 后出现 Ping:sendmsg:操作不允许错误

在 Arch GNU/Linux 上安装 iptables 后出现 Ping:sendmsg:操作不允许错误

昨天我买了一台新电脑作为我的家庭服务器,一台 HP Proliant Microserver。在上面安装了 Arch Linux,内核版本为 3.2.12。

安装 iptables(据我所知,当前版本为 1.4.12.2)并将密钥更改net.ipv4.ip_forward为 1,并在 iptables 配置文件中启用转发(并重新启动)后,系统无法使用其任何网络接口。Ping 失败,并显示

Ping: sendmsg: operation not permitted

如果我完全删除 iptables,网络就可以了,但我需要将互联网连接共享到本地网络。

eth0- 主板上集成的 wan NIC(Broadcom NetXtreme BCM5723)。

eth1- pci-express 插槽中的 lan NIC(英特尔 82574L 千兆网络)

由于它无需 iptables 即可工作(服务器可以访问互联网,我可以从内部网络使用 ssh 登录),因此我认为它与 iptables 有关。我对 iptables 不太熟悉,因此我使用以下内容作为参考(当然,这些内容是相互独立的...):

wiki.archlinux.org/index.php/Simple_stateful_firewall#Setting_up_a_NAT_gateway

revsys.com/writings/quicktips/nat.html

howtoforge.com/nat_iptables

在我以前的服务器上,我使用 revsys 指南来设置 nat,效果非常好。

以前有人遇到过类似的事情吗?我做错了什么?

答案1

错误信息:

Ping: sendmsg: operation not permitted

表示不允许服务器发送 ICMP 数据包。您需要允许服务器通过一个或多个已配置的接口发送流量。您可以通过以下方式执行此操作:

  1. 设置OUTPUT链策略以ACCEPT允许从你的盒子传出的所有流量:

    sudo iptables -P OUTPUT ACCEPT
    
  2. 设置OUTPUT链策略,DROP然后有选择地允许您所需的流量类型。

这适用于所有链,而不仅仅是链OUTPUTINPUT链控制您的盒子接收的流量。FORWARD链处理通过盒子转发的流量。

答案2

对我来说,在 Debian 9 上,重新安装有帮助ping

apt-get install --reinstall iputils-ping 

答案3

另一个选择是重置所有 iptable 规则。

将 iptables 上的默认策略设置为 ACCEPT:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#Then flush the rules:
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

也可以看看如何将 Ubuntu 12.04 iptables 重置为默认值而不锁定自己?

答案4

如果你维护了正确的 iptables 设置,你需要允许传出 ping:

# Allow outgoing ping
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

相关内容