作者:荒原之梦
前言:“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
|