Я часто вижу iptables, настроенный так, чтобы разрешить всем пакетам РОДСТВЕННЫЕ соединения, а определенные сервисные порты - НОВЫМ соединениям.
По какой причине указано NEW? Если соединение не НОВОЕ, оно, я думаю, СВЯЗАННО, поэтому конкретное правило порта не будет выполняться ни то, ни другое. Так почему же явно определять служебные порты с помощью NEW, а не только протокол и номер порта?
Правила в брандмауэре netfilter (iptables) проверяются последовательно, и судьба пакета (ACCEPT, DROP, REJECT и т. Д.) Определяется на основе первого совпадения.
Сделав брандмауэр с полным состоянием и первое правило типичным -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 или аналогичные продукты.
NEW
означает, что пакет начал новое соединение.
Это обрабатывается модулями ядра, называемыми ip_conntrack_*
которые делают ваш брандмауэр сохранный. Межсетевые экраны с отслеживанием состояния могут отслеживать потоки трафика.
Если вы просто укажете протокол и номер порта, ваш брандмауэр не будет иметь состояния, а не будет иметь состояния. Означает, что он просто ограничивает или блокирует пакеты. Брандмауэры этого типа не осведомлены о потоках данных.
Хорошим примером является FTP: активный FTP использует порт 21 для канала управления, но затем использует порт 20 для канала данных. В случае брандмауэра с отслеживанием состояния вам не нужно явно открывать порт 20, потому что он связан с предыдущим новым установленным соединением на порту 21.
Вот выдержка из iptables
страница руководства:
НОВОЕ - означает, что пакет начал новое соединение или иным образом связан с соединением, которое не встречало пакетов в обоих направлениях.
УСТАНОВЛЕН - означает, что пакет связан с соединением, которое принимает пакеты в обоих направлениях.
СВЯЗАННЫЙ - означает, что пакет начинает новое соединение, но связан с существующим соединением, например с передачей данных FTP или ошибкой ICMP.
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP
Приведенный выше набор правил позволит пакетам на TCP-порт 22 с состоянием INVALID
через ACCEPT
Недействительным: Если ни одно из предыдущих состояний не применяется, пакет находится в состоянии НЕДЕЙСТВИТЕЛЬНО. Это может быть вызвано различными типами скрытых сетевых зондов или может означать, что у вас заканчиваются записи CONNTRACK (которые вы также должны видеть в своих журналах). Или это может быть просто совершенно безобидно.
Утверждая СОСТОЯНИЕ NEW
гарантирует, что пакеты INVALID не принимаются по ошибке.
И чтобы прояснить значения: