Запретить ICMP трафик к своему серверу можно добавив правило в сетевой фильтр iptables, с указанием источника, адресата, типа протокола и нужного действия.
Как запретить ICMP трафик к своему серверу
Адрес сервера в примере -123.123.123.123
С локального компьютера отправляем один пакет ICMP
ping -c 1 123.123.123.123
PING 123.123.123.123 (123.123.123.123) 56(84) bytes of data.
64 bytes from 123.123.123.123: icmp_seq=1 ttl=53 time=75.7 ms
— 123.123.123.123 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 75.787/75.787/75.787/0.000 ms
Потери 0%, значит никаких запретов изначально нет.
Чтобы ограничить трафик требуется отредактировать правила iptables на сервере.
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d 123.123.123.123 -m state --state NEW,ESTABLISHED,RELATED -j DROP
В качестве действия указываем DROP
iptables-save
# Generated by iptables-save v1.6.0 on Fri Aug 31 06:48:58 2018
*filter
:INPUT ACCEPT [7:488]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:680]
-A INPUT -d 123.123.123.123/32 -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j DROP
COMMIT
Вновь проверяем с локального компьютера
ping -c 1 123.123.123.123
PING 123.123.123.123 (123.123.123.123) 56(84) bytes of data.
— 123.123.123.123 ping statistics —
1 packets transmitted, 0 received, 100% packet loss, time 0ms
Потери 100%, входящие ICMP пакеты будут отбрасываться во всех случаях.
Пример приведен на скриншоте:
Здесь видно, что пинг до сервера проходил, после добавления блокировки ситуация изменилась. Пинг не проходит.
Стоит отметить, что ICMP пакеты могут быть двух типов:
0 — echo-reply
8 — echo-request
В примере заблокированы только те, которые относятся к типу echo-request
Запретить исходящий ICMP трафик с сервера можно так
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
Чтобы правила сохранились после перезагрузки сервера можно установить дополнительно пакет iptables-persistent