При использовании правил брандмауэра iptables зачем устанавливать состояние NEW на всех разрешенных портах?


23

Я часто вижу iptables, настроенный для разрешения всех пакетов для СВЯЗАННЫХ подключений, и определенные сервисные порты для НОВЫХ подключений.

В чем причина заявления NEW? Если соединение не НОВОЕ, оно СВЯЗАНО, я полагаю, поэтому конкретное правило порта не будет выполняться ни одним из них. Так зачем явно определять сервисные порты с помощью NEW, а не только protocoll и номер порта?

Ответы:


21

Правила в брандмауэре сетевого фильтра (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 или аналогичные продукты.


1
Отличный ответ (+1 от меня!) За исключением того, что вы говорите: « Доступ разрешен на основе первого матча ». Если первое совпадение будет DROP или REJECT, это не разрешит доступ; если это ЖУРНАЛ, то вы должны продолжить поиск более позднего совпадения; и если пользовательские цепочки включаются, вещи могут стать довольно барочными. Скорее, я бы сказал, что « судьба пакета определяется на основе первого сопоставления ».
MadHatter поддерживает Монику

5
Можете ли вы вспомнить случай, когда related/establishedлиния присутствует, но последующие правила не утверждают NEW?
Даниэль Видрик

13

NEW означает, что пакет установил новое соединение.

Он обрабатывается модулями ядра, ip_conntrack_*которые делают ваш брандмауэр сохраняющим состояние . Межсетевые экраны с отслеживанием состояния могут наблюдать за потоками трафика.

Если вы просто указываете протокол и номер порта, ваш брандмауэр не является состоящим из состояний, но не сохраняет его. Означает, что это просто ограничивает или блокирует пакеты. Брандмауэры такого типа не знают о потоках данных.

Хорошим примером является FTP: активный FTP использует порт 21 для канала управления, но затем использует порт 20 для канала данных. В случае брандмауэра с сохранением состояния вам не нужно явно открывать порт 20, потому что он связан с предыдущим новым установленным соединением на порту 21.

Вот выдержка из iptablesсправочной страницы:

NEW - означает, что пакет установил новое соединение или иным образом связан с соединением, которое не видело пакеты в обоих направлениях.

ESTABLISHED - означает, что пакет связан с соединением, которое увидело пакеты в обоих направлениях.

RELATED - означает, что пакет запускает новое соединение, но связан с существующим соединением, таким как передача данных по FTP, или ошибка ICMP.


1
Какой механизм будет «связывать» порт 20 с портом 21? Можно ли перенести открытое IP-соединение на другой порт?
Дронус

nf_conntrack_ftp.ko
mateusza

7
-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

Invalid : если ни одно из предыдущих состояний не применяется, пакет находится в состоянии INVALID. Это может быть вызвано различными типами скрытых сетевых тестов, или это может означать, что у вас заканчиваются записи CONNTRACK (которые вы также должны увидеть в журналах). Или это может быть просто доброкачественным.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


Утверждение STATE NEWгарантирует, что пакеты INVALID не будут ошибочно приняты.

И чтобы уточнить значения:

  • NEW : это новые соединения
  • УСТАНОВЛЕН : это пакет, включенный в текущее соединение
  • СВЯЗАННЫЕ : Это новое соединение, но оно было основано на существующем соединении
  • НЕДЕЙСТВИТЕЛЬНО : Ничто из перечисленного не применяется.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.