RedHat 7.0及CentOS 7.0禁止Ping的三种方法(附:ICMP数值类型与功能表)

作者:荒原之梦
前言:
“Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存时间,网络延迟等信息,而且响应Ping请求也会消耗服务器资源。因此,在服务器上禁用ICMP响应可以尽可能的隐藏服务器在Internet上的踪迹,降低受攻击面。本文介绍三种方法禁用(或启用)ICMP响应,即禁止(或允许)Ping.

操作环境:

RedHat 7.0(CentOS 7.0的操作方法与此一致)

方法一 临时禁用ICMP协议

修改文件/proc/sys/net/ipv4/icmp_echo_ignore_all 的值。
切换到root,输入命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这样就将/proc/sys/net/ipv4/icmp_echo_ignore_all 文件里面的 0 临时改为了1 ,从而实现禁止ICMP报文的所有请求,达到禁止Ping的效果,网络中的其他主机Ping该主机时会显示“请求超时”,但该服务器此时是可以Ping其他主机的。
如果想启用ICMP响应,则输入:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
注0:由于/proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件是只读的,即使我们使用root用户登陆,vim打开/proc/sys/net/ipv4/icmp_echo_ignore_all ,将里面的 0 该为1 之后使用qw! 强制保存也无法完成修改。因此上面这个方法只是临时的,一旦服务器重启就又会回到默认的 0 状态(假设修改前/proc/sys/net/ipv4/icmp_echo_ignore_all 里面的值就是 0 )。如果想永久修改(当然也可以改回来,只是不再受服务器关机或重启的影响)请使用方法二或方法三。

方法二 永久禁用ICMP协议:

禁用ICMP协议,输入:
vim /etc/sysctl.conf
添加一条信息:
net.ipv4.icmp_echo_ignore_all = 1
保存并退出。
输入:
sysctl -p
使配置生效。
启用ICMP协议,输入:
vim /etc/sysctl.conf
将:
net.ipv4.icmp_echo_ignore_all = 1
修改为:
net.ipv4.icmp_echo_ignore_all = 0
如果没有net.ipv4.icmp_echo_ignore_all = 1 就添加:
net.ipv4.icmp_echo_ignore_all = 0
保存并退出。
输入:
sysctl -p
使配置生效。
注1:如果想启用ICMP响应,不能直接在/etc/sysctl.conf 里删除net.ipv4.icmp_echo_ignore_all = 1 之后sysctl -p . 这样做仍然是禁止Ping的状态,此时使用命令:vim /proc/sys/net/ipv4/icmp_echo_ignore_all 查看发现其值仍然是1 , 即仍处于拒绝ICMP响应的状态。

方法三 配置IPTABLES防火墙

Iptables防火墙是集成于Linux内核的IP信息包过滤系统。方法三不能和上面的方法一和方法二组合使用。即,在使用方法三时不能已经使用方法一或方法二禁止了Ping.
禁止Ping,输入:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
停止禁用Ping,输入:
iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

上面两条命令的简要解释:

-A:添加防火墙规则.
INPUT:入站规则.
-p icmp:指定包检查的协议为ICMP协议.
--icmp-type 8:指定ICMP类型为8(关于ICMP类型与数值的对应关系和功能,见注3).
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
-j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.
注2:由于方法三是对防火墙进行的设置,所以使用方法三禁止Ping后只会阻止来自外网的Ping请求,内网主机的Ping请求仍然会正常响应。使用方法一和方法二禁止Ping后不仅会阻止外网的Ping请求也会阻止内网的Ping请求。
注3:ICMP数值类型与功能表
Type
Code
Description
Query
Error
0
0
Echo Reply
x
3
0
Network Unreachable
x
3
1
Host Unreachable
x
3
2
Protocol Unreachable
x
3
3
Port Unreachable
x
3
4
Fragmentation needed but no frag. bit set
x
3
5
Source routing failed
x
3
6
Destination network unknown
x
3
7
Destination host unknown
x
3
8
Source host isolated (obsolete)
x
3
9
Destination network administratively prohibited
x
3
10
Destination host administratively prohibited
x
3
11
Network unreachable for TOS
x
3
12
Host unreachable for TOS
x
3
13
Communication administratively prohibited by filtering
x
3
14
Host precedence violation
x
3
15
Precedence cutoff in effect
x
4
0
Source quench
5
0
Redirect for network
5
1
Redirect for host
5
2
Redirect for TOS and network
5
3
Redirect for TOS and host
8
0
Echo request
x
9
0
Router advertisement
10
0
Route solicitation
11
0
TTL equals 0 during transit
x
11
1
TTL equals 0 during reassembly
x
12
0
IP header bad (catchall error)
x
12
1
Required options missing
x
13
0
Timestamp request (obsolete)
x
14
Timestamp reply (obsolete)
x
15
0
Information request (obsolete)
x
16
0
Information reply (obsolete)
x
17
0
Address mask request
x
18
0
Address mask reply