Почему сетевой трафик может проходить через firewall, который должен его блокировать?

«Почему сетевой трафик может проходить через firewall, который должен его блокировать?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моей практике с iptables/nftables и облачными группами безопасности (Security Groups) трафик проходит из-за ошибок в порядке применения правил (порядок важен!), неявных разрешающих политик по умолчанию или из-за того, что правило блокировки применяется не к тому сетевому интерфейсу или адресу.

Типичный кейс и решение: Я настраивал firewall на сервере, но SSH-трафик всё равно проходил. Проблема была в том, что правило DROP для порта 22 добавлялось в конец цепочки INPUT командой -A, после уже существующего разрешающего правила ACCEPT.

# НЕПРАВИЛЬНО: Правило добавляется в конец цепочки и может не сработать.
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

# ПРАВИЛЬНО: Правило нужно вставить в начало цепочки, чтобы оно обрабатывалось первым.
sudo iptables -I INPUT 1 -p tcp --dport 22 -j DROP

# Всегда проверяйте итоговый порядок правил:
sudo iptables -L INPUT -v -n --line-numbers

Другие частые причины:

  1. Политика по умолчанию: Цепочка INPUT имеет политику ACCEPT. Нужно явно установить DROP: sudo iptables -P INPUT DROP.
  2. Проброс портов (NAT): Правила в цепочке FORWARD или DOCKER-USER (если используется Docker) могут пропускать трафик.
  3. Не перезагружены правила: После редактирования файла конфигурации /etc/iptables/rules.v4 нужно применить правила: sudo iptables-restore < /etc/iptables/rules.v4.
  4. Облачные Security Groups: В AWS/GCP/Azure нужно проверять как входящие (Inbound), так и исходящие (Outbound) правила групп безопасности, привязанных к инстансу.