我有一系列 Ubuntu 10.04 服务器,每台服务器都启用了 ufw 防火墙。我已允许端口 22(用于 SSH)和 80(如果是 Web 服务器)。我的问题是,我正在尝试启用 icmp echo 响应(ping 回复)。
ICMP 的功能与其他协议不同——我知道从技术角度来说它低于 IP 级别。您可以直接输入sudo ufw allow 22
,但不能输入sudo ufw allow icmp
答案1
ufw 不允许通过命令行界面命令指定 icmp 规则。但它允许您通过其规则文件(iptables-restore 样式文件)调整规则集。
ufw 默认允许某些 icmp 流量,包括 icmp echo reply,并且已经在以下位置默认配置/etc/ufw/before.rules
:
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
如果您的主机没有响应 ping,请查看此文件以确保上述行存在,如果这不起作用,请查看 ping 主机及其之间的任何防火墙。
答案2
对于 Ubuntu 18.04,你应该在/etc/ufw/before.rules文件:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
这些都在我的默认文件中。
当然,一定要确保这确实是问题所在。我遇到的问题是,我的电脑阻止 ping 发往我试图 ping 的服务器所在的网络。我最终使用了一个已经发布在互联网上的网站来帮我执行 ping(例如https://ping.eu/ping/)。
答案3
将以下内容添加到 /etc/ufw/before.rules 文件:
# allow outbound icmp
-A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
编辑文件后,运行命令:
sudo ufw reload
答案4
这是一份帮助文档,讨论如何启用/禁用 ping 等响应。