давайте посмотрим на эти два правила iptables, которые часто используются для разрешения исходящих DNS:
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT
Мой вопрос: как именно я должен понимать состояние ESTABLISHED в UDP? UDP не имеет состояния.
Вот моя интуиция - я хотел бы знать, если или где это неправильно:
Страница руководства говорит мне это:
государство
Этот модуль, в сочетании с отслеживанием соединения, обеспечивает доступ к состояние отслеживания соединения для этого пакета. --государство ...
Итак, iptables в основном запоминает номер порта, который использовался для исходящего пакета (что еще он может запомнить для UDP-пакета?) , А затем разрешает первый входящий пакет, который отправляется обратно в течение короткого периода времени? Злоумышленник должен угадать номер порта (это будет слишком сложно?)
О том, как избежать конфликтов:
Ядро отслеживает, какие порты заблокированы (другими службами или предыдущими исходящими UDP-пакетами), чтобы эти порты не использовались для новых исходящих DNS-пакетов в течение определенного периода времени? (Что произойдет, если я случайно попытаюсь запустить службу на этом порту в течение определенного периода времени - будет ли эта попытка отклонена / заблокирована?)
Пожалуйста, найдите все ошибки в приведенном выше тексте :-) Спасибо,
Крис
источник
echo "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
NB: Этот ответ был отредактирован.
Несмотря на то, что написано
ESTABLISHED
в справочных страницах, похоже, что они означают «состояние». Для UDP это просто означает (как вы предлагаете) на некоторое время запомнить каждый исходящий пакет UDP (кортеж "src ip, src port dst ip, dst port") и распознать его ответы.FWIW, мои нормальные правила для трафика DNS будут примерно такими:
т.е. контролировать трафик в
OUTPUT
цепочке, а затем позволитьiptables
модулям состояния обрабатывать все остальное вINPUT
цепочке.Смотрите также этот связанный вопрос .
источник
RELATED
UDP-пакеты могут существовать для RTP.Разработчики iptables считают, что состоянием «УСТАНОВЛЕНО» была ситуация, когда пакеты просматривались в обоих направлениях независимо от протокола между двумя клиентами.
расширение штата является частью conntrack. Ядро понимает состояние из таблицы
Пример iptable-состояний для UDP в таблице nf_conntrack с точки зрения отправителя. Представим, что вы отправляете DNS-запрос по UDP.
Пакет отправлен. Это не отвечает и, о, таблица содержит данные о том, что ожидается в ответ (пакет для ответа DNS).
Ответ получен, флаг без ответа исчез, это означает, что это UDP-соединение находится в состоянии ESTABLISHED в течение небольшого промежутка времени, определенного в вашей системе.
источник