Мы запускаем Bind как Caching-Nameserver, и вот 3 правила в нашей настройке для обработки функций DNS:
iptables -A INPUT -s $OUR_NETWORK -p udp --destination-port 53 -j ACCEPT
iptables -A INPUT -s $OUR_NETWORK -p tcp --destination-port 53 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
Первые два правила предназначены для наших клиентов. Обратите внимание, что я включил TCP, хотя мы не разрешаем передачу зон, поскольку мы не размещаем никаких зон (но я заметил, что некоторые законные клиенты выполняют запросы через TCP), и поэтому я включил его.
У меня вопрос по третьей строчке. Эта строка предназначена для ответа от вышестоящих DNS-серверов (ответов на наши рекурсивные запросы). Я подумал, что этой строки достаточно, но затем я заметил в журнале (пакеты, которые я отбрасываю, не совпадающие ни с одной строкой ALLOW), что были десятки пакетов UDP, приходящих из порта источника UDP / 53.
Мои первоначальные мысли были:
1) это законные ответы от других DNS-серверов, которые отслеживание соединений моей системы не распознается как "связанные"
2) это законные ответы, но это «поздние ответы», и поэтому моя система их не распознала.
Какое правило вы используете для ответов на ваших кэширующих серверах имен? Должен ли я разрешить ЛЮБОЙ, сопоставив только входящий порт источника udp / 53 независимо от состояния? Используете ли вы механизм отслеживания соединений (ESTABLISHED, RELATED) для udp?
Всего наилучшего, JFA
IMHO, вы должны специально разрешить исходящие DNS-запросы в своей цепочке OUTPUT (конечно, как для UDP, так и для TCP), а затем сбросить флаги, зависящие от порта и протокола, из RELATED
правило входа, например:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Или, другими словами, используйте политику исходящего трафика для управления исходящим трафиком для каждого протокола и сопоставление с отслеживанием состояния для управления входящими ответами.
Правила iptables RHEL / CentOS по умолчанию работают так, хотя по умолчанию они разрешают любой пакет OUTPUT.
И да, вы довольно часто будете видеть отклоненные пакеты, потому что они были слишком поздно, чтобы соответствовать сопоставлению с отслеживанием состояния.
Отслеживание соединений и UDP не имеет смысла. Нет подключения для отслеживания, поскольку UDP - это протокол без установления соединения.
Чтобы быть полностью совместимым с RFC, вы должны прослушивать порт 53 для трафика TCP и UDP.
TCP используется, когда размер запроса превышает 512 байт, что, как вы говорите, обычно для передачи зон и т.п., но иногда вы увидите, что это делают и законные клиенты.
Причина, по которой вы видите много подключений от udp / 53, заключается в том, что многие серверы имен настроены для ответа на этот порт, а не на случайный порт с высоким уровнем. На вашем месте я бы разрешил udp / 53 с вышестоящих DNS-серверов и оставил все как есть.