Как отключить пинг в Linux: iptables, sysctl и ufw

Пинг (ICMP echo-request) – простой способ проверить, отвечает ли хост. На VPS и серверах за firewall его часто отключают: меньше шума от сканеров, меньше лишних ответов наружу. Ниже – рабочие способы в Linux через iptables, sysctl и ufw, плюс как вернуть пинг обратно.

Зачем отключать ICMP echo

Отключение пинга – не панацея от взлома. Сервисы на 22/80/443 по-прежнему видны, если порты открыты. Имеет смысл как один из слоёв hardening:

  • сканеры и боты реже отмечают хост как «живой» по ICMP;
  • меньше фонового ICMP-шума в логах и на слабом канале;
  • на части политик безопасности «молчание» на echo – требование чеклиста.

Минус: сложнее диагностировать сеть «снаружи» (traceroute/ping от коллег, мониторинг по ICMP). Если мониторинг ходит именно пингом – сначала переведите проверки на HTTP/TCP, потом режьте echo.

Способ 1: iptables

Правило в INPUT: дропаем входящие echo-request.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Проверка правил:

sudo iptables -L -v -n

Чтобы правило пережило reboot на Debian/Ubuntu:

sudo apt install iptables-persistent
sudo netfilter-persistent save

На nftables-стеке (современный Ubuntu) iptables часто frontend к nft. Если используете чистый nftables – лучше писать аналог в nft. Если firewall уже через ufw или firewalld – не смешивайте ручные iptables-правила без понимания, кто главный.

Способ 2: sysctl (уровень ядра)

Ядро может игнорировать все ICMP echo без правил firewall:

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1

Постоянно – строка в /etc/sysctl.conf или drop-in в /etc/sysctl.d/:

echo "net.ipv4.icmp_echo_ignore_all=1" | sudo tee /etc/sysctl.d/99-disable-ping.conf
sudo sysctl --system

Либо классика через /etc/sysctl.conf и sudo sysctl -p. Параметр действует на IPv4. Для IPv6 смотрите отдельные настройки и firewall (icmpv6 type 128/129).

Способ 3: ufw

UFW по умолчанию пропускает часть ICMP через before.rules. Правило DROP нужно вставить в /etc/ufw/before.rules до секции # End required lines (в блок ufw-before-input):

sudo nano /etc/ufw/before.rules

Добавьте строку:

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Перезагрузка правил ufw:

sudo ufw reload

Если reload не подхватил before.rules как ожидаете – sudo ufw disable && sudo ufw enable (учтите краткий разрыв политик; на удалённом SSH будьте осторожны).

Как снова включить пинг

iptables – удалить то же правило (флаг -D):

sudo iptables -D INPUT -p icmp --icmp-type echo-request -j DROP
sudo netfilter-persistent save

sysctl:

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0

И уберите или закомментируйте строку в sysctl.conf / удалите drop-in, затем sudo sysctl --system.

ufw – удалите добавленную строку из /etc/ufw/before.rules и выполните sudo ufw reload.

Что выбрать

  • sysctl – быстро и просто, если firewall не трогаете;
  • iptables/nft – когда политика уже в netfilter и нужен точечный DROP;
  • ufw – если весь firewall ведёте через ufw, держите правило там, а не параллельно в iptables.

Не дублируйте одно и то же тремя способами без нужды: потом сложнее понять, почему пинг «не оживает». Один выбранный слой и проверка с внешней машины: ping -c 3 IP.

Кратко

Отключить ответ на ping в Linux можно через DROP ICMP echo в firewall или через net.ipv4.icmp_echo_ignore_all=1. Сохраняйте правила после reboot, не ломайте мониторинг и помните: закрытый пинг не заменяет закрытые порты и обновления.

Источники и ссылки


Комментарии загружаются…