1. 程式人生 > >再議Linux的禁ping設定——以CentOS7.4為例

再議Linux的禁ping設定——以CentOS7.4為例

一、 背景

在實際的生產環境中,對於某些伺服器需要進行設定禁止ping,具體場景就不做討論了,大家根據自己的實際情況進行設定即可。

二、實驗環境

被ping主機IP:

10.1.1.11

執行ping的主機IP:

10.1.1.12及通過NAT連線的主機

作業系統版本:

[root@ChatDevOps ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

三、實驗步驟

1.從主機10.1.1.12ping主機10.1.1.11。

[[email protected]
~]# ip address show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:76:62:6b brd ff:ff:ff:ff:ff:ff inet 10.1.1.12/24 brd 10.1.1.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe76:626b/64
scope link valid_lft forever preferred_lft forever [[email protected] ~]# ping 10.1.1.11 PING 10.1.1.11 (10.1.1.11) 56(84) bytes of data. 64 bytes from 10.1.1.11: icmp_seq=1 ttl=64 time=0.842 ms 64 bytes from 10.1.1.11: icmp_seq=2 ttl=64 time=0.464 ms 64 bytes from 10.1.1.11: icmp_seq=3 ttl=64 time
=0.533 ms 64 bytes from 10.1.1.11: icmp_seq=4 ttl=64 time=0.661 ms 64 bytes from 10.1.1.11: icmp_seq=5 ttl=64 time=0.654 ms

2.從通過NAT連線的主機ping10.1.1.11。

C:\Users\IVAN DU>ping 10.1.1.11
Pinging 10.1.1.11 with 32 bytes of data:
Reply from 10.1.1.11: bytes=32 time<1ms TTL=64
Reply from 10.1.1.11: bytes=32 time<1ms TTL=64
Reply from 10.1.1.11: bytes=32 time<1ms TTL=64
Reply from 10.1.1.11: bytes=32 time<1ms TTL=64
Ping statistics for 10.1.1.11:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

3.檢視主機10.1.1.11的相關網路配置。預設情況下,CentOS7.4的配置如下:

[[email protected] ~]# sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 0
[[email protected] ~]# sysctl net.ipv4.icmp_echo_ignore_broadcasts
net.ipv4.icmp_echo_ignore_broadcasts = 1

4.修改配置,再次分別ping,觀察結果。

[[email protected] ~]# sysctl net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_all = 1

分別在10.1.1.12和NAT主機上ping10.1.1.11,結果如下:

[[email protected]ChatDevOps ~]# ping 10.1.1.11
PING 10.1.1.11 (10.1.1.11) 56(84) bytes of data.
C:\Users\IVAN DU>ping 10.1.1.11
Pinging 10.1.1.11 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.1.1.11:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)

效果非常顯著,立馬不能ping了。

5.重啟主機,檢視設定是否依然生效。

Last login: Wed Jul 18 16:08:36 2018 from 10.1.1.1
[[email protected] ~]# sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 0

另外兩臺主機立馬就能ping通了,效果立竿見影。

6.再次修改設定。

[root@ChatDevOps ~]# echo '1'>/proc/sys/net/ipv4/icmp_echo_ignore_all
[root@ChatDevOps ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all 
1
[root@ChatDevOps ~]# sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 1

7.重啟驗證一下,剛剛修改的配置是否仍然有效。我就不再貼執行結果了,依然能ping通。

8.設定禁ping之後我們來檢測一下開放的埠是否受影響。

[[email protected] ~]# ping 10.1.1.11
PING 10.1.1.11 (10.1.1.11) 56(84) bytes of data.
[[email protected] ~]# nmap 10.1.1.11
Starting Nmap 6.40 ( http://nmap.org ) at 2018-07-18 17:05 CST
Nmap scan report for 10.1.1.11
Host is up (0.00030s latency).
Not shown: 998 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 00:0C:29:4C:37:1B (VMware)
Nmap done: 1 IP address (1 host up) scanned in 12.39 seconds

四、總結

1.很多人都認為禁止ping主機能增加主機的安全性,這個觀點在某種程度來說是有一定道理的,但是在絕大部分情況下,禁止ping主機並不可取,可以通過其他很多方式來提高網路的安全性。

2.使用修改net.ipv4.icmp_echo_ignore_all的值及/proc/sys/net/ipv4/icmp_echo_ignore_all的方法禁用ping主機IP的方法在下次重啟後會失效。如果在主機啟動階段或者使用者登入階段就禁用ping功能可以修改啟動過程中的執行引數及登入後執行指令碼。修改配置檔案/etc/sysctl.conf,也可以實現永久禁止ping。命令如下:

[root@ChatDevOps ~]# echo "net.ipv4.icmp_echo_ignore_all = 1">>/etc/sysctl.conf 
[root@ChatDevOps ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1

這種情況下主機無論是同一網段還是不同網路都不能ping通。當然也可能有其他方法,再此就不進一步討論,沒有較大參考價值。

3.當然,如果系統啟用防火牆,也是可以永久阻止主機被ping了,可以參考如下命令:

[root@ChatDevOps ~]# firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
success
[root@ChatDevOps ~]# firewall-cmd --reload
success

這種情況下ping,則會顯示:Reply from 10.1.1.11: Destination port unreachable.

埠掃描依然不受影響。內網主機依然還是可以ping通的。
4.ping不通跟埠不通在某種情況下並不是一回事,大家也看到我上面的實驗了,不要把這兩者混為一談。常用的埠檢測工具有:Nmap、Zmap、Masscan,nmap我最常用。當然也可以直接用telnet。

5.寫得倉促,不足之處希望諸位多多指教。