一、临时设置(重启后失效)
1. 禁止ping
# 方法1:使用sysctl(立即生效,重启失效)
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
# 方法2:直接修改/proc文件系统
echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all
2. 允许ping
# 恢复允许ping
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0
echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all
二、永久设置(需重启网络服务或系统)
1. 通过sysctl配置文件
# 编辑sysctl配置文件
sudo nano /etc/sysctl.conf
# 在文件末尾添加:
# 禁止ping
net.ipv4.icmp_echo_ignore_all = 1
# 或允许ping
# net.ipv4.icmp_echo_ignore_all = 0
# 使配置立即生效
sudo sysctl -p
2. 通过iptables/ufw/firewalld(更推荐)
iptables方案:
# 禁止所有入站ping请求
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 允许所有入站ping请求
sudo iptables -D INPUT -p icmp --icmp-type echo-request -j DROP # 删除规则
# 或
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 保存iptables规则(不同系统命令不同)
# Ubuntu/Debian: sudo iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL: sudo service iptables save
ufw方案(Ubuntu/Debian):
# 禁止ping
sudo ufw deny icmp
# 允许ping
sudo ufw allow icmp
firewalld方案(CentOS/RHEL/Fedora):
# 查看当前ICMP设置
sudo firewall-cmd --query-icmp-block=echo-request
# 禁止ping
sudo firewall-cmd --permanent --add-icmp-block=echo-request
sudo firewall-cmd --reload
# 允许ping
sudo firewall-cmd --permanent --remove-icmp-block=echo-request
sudo firewall-cmd --reload
三、验证设置
# 检查当前系统设置
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
# 输出1表示禁止,0表示允许
# 从另一台机器测试ping
ping 目标服务器IP
四、注意事项
区别对待:
icmp_echo_ignore_all=1:系统内核直接丢弃所有ICMP回显请求
- 防火墙规则:更灵活,可以针对特定IP或网络设置规则
iptables规则示例(更精细控制):
# 只允许特定IP ping
sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 允许局域网ping,禁止外网ping
sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
IPv6设置(如果需要):
# 临时设置
sudo sysctl -w net.ipv6.icmp.echo_ignore_all=1
# 永久设置:在/etc/sysctl.conf中添加
net.ipv6.icmp.echo_ignore_all = 1
建议使用防火墙方案,因为这样更灵活且易于管理。根据你的发行版选择合适的工具(iptables/ufw/firewalld)。