Межсетевые экраны: iptables и nftables

Урок про основу фильтрации трафика: что такое правила firewall и как строить безопасную политику.

Межсетевой экран (firewall) — компонент, который пропускает или отбрасывает пакеты по заданным правилам, разделяя зоны доверия.

Зачем нужен firewall

Firewall — это граница доверия. Он реализует принцип «по умолчанию запрещено»: разрешает только нужный трафик и отбрасывает остальное. Без него любой открытый порт виден всему интернету.

Модель цепочек

В Linux трафик проходит через цепочки: входящий (INPUT), исходящий (OUTPUT) и транзитный (FORWARD). К каждой цепочке привязаны правила, которые проверяются по порядку.

пакет --> [ INPUT ] --> правило 1? -> правило 2? ... -> политика по умолчанию

Пример безопасной политики (iptables)

# по умолчанию запрещаем входящие
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# разрешаем уже установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# разрешаем localhost
iptables -A INPUT -i lo -j ACCEPT

# SSH только из доверенной подсети
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# HTTPS наружу
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

То же на nftables

nftables — современная замена iptables с единым синтаксисом.

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input tcp dport 443 accept

Как работает под капотом

Ядро прогоняет каждый пакет через правила цепочки сверху вниз. Первое совпавшее правило решает судьбу пакета (ACCEPT/DROP). Если ни одно не совпало — применяется политика по умолчанию. Поэтому порядок правил важен, а финальная политика DROP делает забытый сервис закрытым, а не открытым.

Частые ошибки

  • Политика по умолчанию ACCEPT — любой новый порт сразу торчит наружу.
  • Забыть правило для ESTABLISHED — оборвутся ответы на собственные исходящие соединения.
  • Слишком широкие источники (0.0.0.0/0) там, где достаточно одной подсети.
  • Не сохранять правила — после перезагрузки firewall обнуляется.

Итоги

  • Firewall — граница доверия с политикой «по умолчанию запрещено».
  • Правила проверяются по порядку; первое совпадение решает.
  • nftables — современная замена iptables с тем же подходом.
Проверьте себя
1. Какая политика по умолчанию для входящей цепочки безопаснее?
AACCEPT
BDROP
CLOG
DRETURN
2. Зачем правило для состояния ESTABLISHED,RELATED?
AЧтобы блокировать весь трафик
BЧтобы пропускать ответы на уже установленные соединения
CЧтобы ускорить SSH
DЧтобы логировать пакеты
3. Почему важен порядок правил в цепочке?
AПорядок не важен
BПрименяется первое совпавшее правило, остальные не проверяются
CПрименяется последнее правило
DПравила выполняются случайно