Правила в брандмауэре сетевого фильтра (iptables) проверяются последовательно, и судьба пакета (ACCEPT, DROP, REJECT и т. Д.) Определяется на основе первого совпадения.
Делая брандмауэр statefull и первое правило типичным, -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
подавляющее большинство легитимного трафика на ваш сервер принимается после прохождения только этого единственного правила. Этот трафик не должен пересекать другие правила.
В зависимости от размера вашей базы правил это может означать существенную разницу в производительности вашего брандмауэра.
Единственный трафик, который теперь должен проверять межсетевой экран, - это явно новые соединения.
Т.е. сравнить брандмауэр для общедоступного веб-сервера с доступом для нескольких веб-мастеров со своих рабочих станций:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Примерно 99% легитимных пакетов будут принадлежать установленным соединениям, но только первое правило. Из пакетов, не соответствующих этому правилу, большинство должно быть новыми подключениями к вашему веб-сайту, многопортовый модуль может предоставлять доступ к HTTP или HTTPS в одном правиле. Веб-мастера входят в систему с нескольких рабочих станций с фиксированными адресами, используя ssh и sftp, а все остальное отклоняется.
Брандмауэр, где правила логически упорядочены портом TCP:
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Здесь каждый пакет для вашего веб-сервера HTTP должен быть проверен на соответствие 5 правилам, прежде чем будет предоставлен доступ. И с большим количеством сервисов, работающих на сервере, которые могут легко превратиться в 50 или более правил, если вы, например, будете использовать fail2ban или аналогичные продукты.
related/established
линия присутствует, но последующие правила не утверждаютNEW
?NEW
означает, что пакет установил новое соединение.Он обрабатывается модулями ядра,
ip_conntrack_*
которые делают ваш брандмауэр сохраняющим состояние . Межсетевые экраны с отслеживанием состояния могут наблюдать за потоками трафика.Если вы просто указываете протокол и номер порта, ваш брандмауэр не является состоящим из состояний, но не сохраняет его. Означает, что это просто ограничивает или блокирует пакеты. Брандмауэры такого типа не знают о потоках данных.
Хорошим примером является FTP: активный FTP использует порт 21 для канала управления, но затем использует порт 20 для канала данных. В случае брандмауэра с сохранением состояния вам не нужно явно открывать порт 20, потому что он связан с предыдущим новым установленным соединением на порту 21.
Вот выдержка из
iptables
справочной страницы:источник
Вышеуказанный набор правил пропустит пакеты на TCP-порт 22 с состоянием
INVALID
сквозногоACCEPT
/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables
Утверждение STATE
NEW
гарантирует, что пакеты INVALID не будут ошибочно приняты.И чтобы уточнить значения:
источник