➡️ Предыдущая часть
Маршрутизация настроена правильно,
ping gateway работает, но связь всё равно не работает. Вероятно, виноват файрволл. Он может молча блокировать пакеты, не оставляя очевидных следов.Linux может использовать несколько систем: iptables, nftables, firewalld.
iptables — классическая система:
iptables -L -n -v
Флаги:
-L — list, показывает правила-n — numeric, не резолвит имена-v — verbose, показывает счётчики пакетовВывод показывает три основные цепочки:
- INPUT — входящие пакеты
- OUTPUT — исходящие пакеты
- FORWARD — транзитные (для маршрутизатора)
Политика по умолчанию:
Chain INPUT (policy DROP)
Policy DROP — всё блокируется по умолчанию, разрешено только то, что явно указано в правилах выше. Безопасно, но легко сломать связность.
Policy ACCEPT — всё разрешено по умолчанию, блокируется только указанное. Менее безопасно, но проще в отладке.
iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1523 128K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Смотрите на колонку
pkts (packets). Если правило с DROP/REJECT показывает большое количество — оно активно блокирует трафик.В примере выше: 1523 пакета на порт 22 (SSH) были отброшены.
Временное отключение файерволла:
iptables -F # Очистить все правила
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Если после этого всё заработало — проблема точно в правилах. Восстановите их и ищите конкретное блокирующее правило.
firewalld — современная альтернатива:
firewall-cmd --list-all
Показывает активную зону и все правила в ней. Firewalld работает с концепцией зон: public, internal, trusted, dmz и т.д.
Проверьте:
- Какая зона активна для вашего интерфейса
- Какие сервисы разрешены в этой зоне
- Какие порты открыты
Какие зоны активны и на каких интерфейсах:
firewall-cmd --get-active-zones
Добавление правил firewalld
Разрешить сервис (HTTP):
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
Разрешить порт:
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
Флаг
--permanent делает правило постоянным. Без него — только до перезагрузки firewalld.Если правил много, найти виновника сложно. Добавьте логирование для отброшенных пакетов:
iptables:
iptables -I INPUT -j LOG --log-prefix "DROPPED: "
Теперь все отброшенные пакеты будут логироваться в
/var/log/messages с префиксом "DROPPED:".firewalld:
firewall-cmd --set-log-denied=all
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера