Stateful-фильтрация: почему firewall помнит соединения
Урок объясняет разницу между firewall, который помнит соединения, и тем, который судит о каждом пакете отдельно.
Stateful firewall — экран, который отслеживает состояние соединений и принимает решения с учётом контекста, а не по одному пакету.
Зачем помнить состояние
Stateless-firewall видит каждый пакет изолированно и вынужден разрешать целые диапазоны портов «на всякий случай» для ответов. Stateful помнит, что вы инициировали соединение, и автоматически пропускает только относящиеся к нему ответы. Это и безопаснее, и проще в настройке.
Таблица состояний
| Состояние | Что значит |
| NEW | первый пакет нового соединения |
| ESTABLISHED | пакет существующего соединения |
| RELATED | связанное соединение (например, данные FTP) |
| INVALID | пакет не относится ни к чему — отбрасываем |
Как работает под капотом
Ядро ведёт таблицу отслеживания соединений (conntrack). При исходящем соединении туда добавляется запись; ответные пакеты сопоставляются с ней и получают статус ESTABLISHED. Подделанный пакет, не соответствующий ни одной записи, помечается INVALID и отбрасывается. Так firewall отсекает многие пакеты, не относящиеся к легитимным сессиям.
Исходящее SYN -> conntrack: запись NEW Ответ SYN-ACK -> совпало -> ESTABLISHED -> пропустить Левый пакет -> нет записи -> INVALID -> DROP
Польза для защиты
- Не нужно открывать широкие диапазоны портов для ответов — меньше поверхность атаки.
- Подделанные пакеты без валидной сессии отбрасываются.
- Лимиты на новые соединения (NEW) дают базовую устойчивость к флуду.
Базовый rate-limit (концепт)
# ограничить частоту новых SSH-подключений
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m limit --limit 5/min -j ACCEPTЧастые ошибки
- Использовать stateless-подход и открывать высокие порты «для ответов» — лишняя поверхность.
- Не отбрасывать INVALID-пакеты.
- Считать, что conntrack бесконечен: при флуде таблица может переполниться — нужны лимиты.
Итоги
- Stateful-firewall помнит соединения и пропускает только их ответы.
- Пакеты без валидной сессии (INVALID) отбрасываются.
- Лимиты на NEW-соединения дают базовую защиту от флуда.
Проверьте себя
1. Чем stateful-firewall лучше stateless?
AОн быстрее, но менее безопасен
BОн помнит соединения и пропускает только их ответы, не открывая лишние порты
CОн не требует правил
DОн шифрует трафик
2. Что делать с пакетами в состоянии INVALID?
AПропускать
BЛогировать и пропускать
CОтбрасывать (DROP)
DПеренаправлять