Вопрос или проблема
Я не системный инженер (я разработчик программного обеспечения), и у меня есть следующая проблема. У меня есть сервер Linux CentOS 7. Коллега сказал мне, что не может пинговать этот сервер с конкретной машины, принадлежащей подсети 10.10.10.0/24. Он попросил меня проверить, есть ли какие-либо ограничения, связанные с этой подсетью.
Ситуация такова, что с других машин этот сервер можно пинговать, но не изнутри 10.10.10.0/24.
Что я могу сделать? Я думал проверить, есть ли активированные какие-либо специфические правила на брандмауэре Linux.
Итак, firewalld кажется активным на моей машине CentOS 7:
[centos@prod-zabbix ~]$ sudo -s
[root@prod-zabbix centos]# firewall-cmd --state
running
[root@prod-zabbix centos]# systemctl status firewalld
● firewalld.service - firewalld - динамический демон брандмауэра
Loaded: загружено (/usr/lib/systemd/system/firewalld.service; включено; предустановка вендора: включено)
Active: активен (работает) с Пт 2022-03-04 08:22:09 UTC; 1 неделя 5 дней назад
Docs: man:firewalld(1)
Main PID: 3125 (firewalld)
CGroup: /system.slice/firewalld.service
└─3125 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Затем я попытался выполнить команду firewall-cmd –list-all, чтобы показать дополнительную информацию (из того, что я могу понять, она показывает информацию для конкретной зоны… но мне неясно, что это означает для “зоны”), в любом случае вот вывод:
[root@prod-zabbix centos]# firewall-cmd --list-all
public (активно)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports: 10050/tcp 10051/tcp 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Единственное, что может быть связано с пингом, что я вижу, это строка icmp-block-inversion: no.
Так что, в общем, как я могу проверить, блокирует ли брандмауэр пинг с машин, принадлежащих этой конкретной подсети?
iptables -vnL
выведет правила брандмауэра вместе с счетчиками пакетов и байтов – вы можете посмотреть, какие правила соответствуют и изменяются, пока он пингует.
Быстрый способ проверки – вставить правило в начало брандмауэра и посмотреть, разрешает ли оно трафик –
iptables -I INPUT -s 10.0.10.0/24 -j ACCEPT
это временно (т.е. до перезагрузки/перезагрузки брандмауэра) позволит трафику из этого диапазона попадать на ваш сервер, при условии, что NAT не задействован, и пакеты предназначены для сервера, а не просто проходят через него.
Вам также может понадобиться добавить правило вывода на случай, если ваш сервер получает пакеты, но отбрасывает ответы.
iptables -I OUTPUT -d 10.0.10.0/24 -j ACCEPT
Вы также можете использовать tcpdump, чтобы увидеть, получаете ли вы пакеты и отправляете их – что-то вроде
tcpdump -I any src or dst 10.0.10.0/24
+Команда tcpdump грубая, я не у своего ПК, чтобы протестировать. Вам также нужно убедиться, что пакет установлен, и отправитель пытается связаться с вами, пока вы его запускаете.
Ответ или решение
Чтобы проверить, блокирует ли брандмауэр на сервере CentOS 7 ICMP-пакеты от машин в подсети 10.10.10.0/24, вам следует выполнить несколько шагов для диагностики настроек фаервола и проверки правил. В данной статье мы подробно рассмотрим, как это сделать.
Шаг 1: Проверка состояния firewalld
Сначала необходимо убедиться, что firewalld
действительно активен, и получить информацию о его состоянии. Вы уже выполнили следующие команды, и они показывают, что сервис firewalld
запущен:
sudo systemctl status firewalld
Шаг 2: Проверка правил фаервола
Для просмотра активных правил брандмауэра вы можете использовать команду:
firewall-cmd --list-all
Из вывода вы заметили, что активная зона public
не имеет специфических правил для ICMP, кроме настройки icmp-block-inversion: no
, которая действительно разрешает входящие ICMP-пакеты. Однако, важно убедиться, что блокировки для конкретной подсети нет.
Шаг 3: Проверка с использованием iptables
Хотя вы используете firewalld
, он в конечном итоге управляет правилами в iptables
. Вы можете просмотреть текущие правила iptables
с помощью следующей команды:
iptables -vnL
Эта команда выведет все активные правила с счетчиками пакетов и байтов. Обратите внимание на правила в цепочке INPUT
, чтобы увидеть, не блокируются ли входящие запросы ICMP от подсети.
Шаг 4: Для временного разрешения пинга
Если вы хотите временно разрешить ICMP-пакеты из подсети 10.10.10.0/24, вы можете добавить следующее правило в начале цепочки INPUT
:
iptables -I INPUT -s 10.10.10.0/24 -j ACCEPT
Также можно добавить правило для разрешения исходящего трафика в эту подсеть:
iptables -I OUTPUT -d 10.10.10.0/24 -j ACCEPT
Эти изменения будут действовать до перезагрузки системы или перезапуска firewalld
.
Шаг 5: Отслеживание трафика с помощью tcpdump
Чтобы увидеть, приходят ли ICMP-пакеты на ваш сервер, вы можете использовать инструмент tcpdump
. Убедитесь, что он установлен на вашем сервере, и выполните следующую команду:
tcpdump -i any icmp
Эта команда отобразит ICMP-пакеты, которые приходят на сервер. Если вы видите ICMP-пакеты от машин в подсети 10.10.10.0/24, значит, сервер их получает, но, возможно, по каким-то причинам не отвечает. Если пакеты не появляются, то они либо не доходят до сервера, либо блокируются другими правилами фаервола.
Шаг 6: Анализ логов
Если вы хотите проанализировать, какие пакеты блокируются, вы можете добавить правила логирования в iptables
, чтобы отслеживать, какие пакеты из данной подсети проходят или блокируются:
iptables -A INPUT -s 10.10.10.0/24 -j LOG --log-prefix "Dropped ICMP: " --log-level 4
Это правило будет записывать в системный лог все блокированные пакеты из подсети 10.10.10.0/24 с префиксом "Dropped ICMP".
Заключение
Следуя указанным шагам, вы сможете проверить, блокирует ли брандмауэр ICMP-пакеты и, соответственно, пинг от машин в указанной подсети. Всегда помните, что вносить изменения в правила фаервола стоит осторожно, чтобы избежать непреднамеренного блокирования легитимного трафика.