Как я могу отклонить все входящие пакеты UDP за исключением поисков DNS?

Вы, кажется, не уверены в том, как DNS работает, на основе Вашего вопроса здесь, и я принимаю подобные на Переполнении стека.

Каждый компьютер в Вашей сети должен будет быть настроен, чтобы говорить с "рекурсивным" сервером DNS, который может, это может попросить искать записи от своего лица. Все рекурсивные серверы имен идут со списком "корневых" доменных серверов для нахождения произвольных доменов, но можно переопределить их поиск для определенных доменов по различным причинам - типичным примером является ".corp".

Ваш рекурсивный сервер имен, затем, должен быть сказан то, что "авторитетные" серверы DNS для определенных локальных доменов. С некоторыми серверами DNS это очень просто с другими, необходимо будет запустить авторитетный DNS на другом IP (djbdns).

Вам не нужен GoDaddy для внутренних доменных имен, локальных для Вашей сети.

3
задан 11 May 2015 в 04:27
4 ответа

Если Вы применяете методы стандартной защиты, то Ваша политика брандмауэра по умолчанию будет состоять в том, чтобы заблокировать все. Все, что Вам придется сделать, записать правило разрешить tcp и трафику UDP портировать 53, если Вы хотите разрешить входящие запросы DNS.

Трафиком, о котором Вы говорите, является UDP. UDP является не сохраняющим состояние. Это означает, что люди, заинтересованные насыщением Вашего соединения, могут отправить пакеты в Ваш адрес, даже если Вы просто отбрасываете их. Тем не менее Вы можете делать что-то полуполезное с iptables недавним соответствием, только позволять ограниченному объему трафика на самом деле быть принятым и обработанным системой. У Evan есть пример использования этого для SSH здесь. Нам, возможно, придется видеть, что Ваш весь брандмауэр управлял набором, чтобы сказать Вам, какие правила должны будут быть добавлены.

Если бы у Вас есть серьезный DoS против Вашей системы, Вам почти наверняка был бы нужен Ваш ISP для помощи Вам, пытаться иметь дело с лавинной рассылкой с межсетевым экраном узлов на VPS действительно не будет очень полезно.

Если у Вас уже нет его, необходимо рассмотреть установку нескольких вторичных серверов DNS для зон в совершенно другой сети.

5
ответ дан 3 December 2019 в 04:50

Необходимо ли на самом деле позволить незнакомцам в Интернете выполнять запросы DNS против сервера? Я подозреваю, что просто необходимо удостовериться, что брандмауэр позволяет серверу делать исходящие запросы DNS.

С брандмауэрингом Вы запускаете, блокируя все и затем будучи очень точными/подробными об открытии определенных комбинаций порта/сервиса/протокола и ограничиваете его IP-адресом (диапазон).

1
ответ дан 3 December 2019 в 04:50

В Iptables: принимать входящий UDP-трафик на порт 53 и отклонять все в диапазоне портов для эфемерных портов.

Максимальный предел не должен быть слишком высоким, иначе ваш сервер не сможет разрешать внешние домены (например, когда вы выполняете «ping google.com») изнутри вашего сервера. В ОС Linux 32768 - это первый эфемерный порт (также известный как динамические порты) для сокетов до 61000. Таким образом, 32767 - это самый высокий порт для статически выделенных портов. Это верно только в том случае, если вы не используете свой сервер в качестве преобразователя DNS, также известного как DNS-кеш, или сервер с файлом /etc/resolv.conf, указывающим на сервер имен 127.0.0.1 или :: 1

Вот пример tcpdump:

 23:10:13.315832 IP b.b.b.b.34507 > a.a.a.a.53: 23674% [1au] A? whitehouse.gov. (38)
 23:10:13.377619 IP a.a.a.a.53 > b.b.b.b.34507: 23674*- 1/2/3 A 172.230.122.69(122)
  1. bbbb запрашивает сервер имен aaaa от порта 34507 для предоставления записи A для whitehouse.gov на порт 53
  2. aaaa от порта 53 отвечает bbbb на порт 34507

Обычно, чтобы найти локальные динамические (также называемые эфемерными или частными) диапазоны портов на вашем linux для UDP и TCP:

 cat /proc/sys/net/ipv4/ip_local_port_range

Однако это работает только для серверов, на которых нет DNS-преобразователя (например, когда вы указываете свой /etc/resolv.conf на 8.8.8.8).

Сервер не является преобразователем DNS:

 -A INPUT -p udp -m udp --dport 53 -j ACCEPT
 -A INPUT -p udp -m udp --dport 0:32767 -j DROP

сервер является преобразователем DNS:

-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 0:1023 -j DROP

Это следует принять во внимание, если вы хотите разместить свой собственный преобразователь DNS для разрешения всех доменных имен.

Лучше всего. быть самим проверить:

Вы можете отслеживать отправляющие порты с помощью

tcpdump udp and port 53 and not dst host *yourserveripaddress*

, затем смотреть на отправляющие порты и пытаться найти наименьшее число. Это наименьшее число не должно быть ниже номера порта xxxx в --dport 0: xxxx, иначе вы заблокируете или замедляете свои DNS-запросы.

4
ответ дан 3 December 2019 в 04:50

Как я могу отклонить все входящие пакеты UDP, кроме поиска DNS?

Это можно сформулировать более широко: как я могу отклонить весь трафик, который я не инициировал с помощью Linux netfilter ?

Ответ состоит из двух строк:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

( Принимая во внимание, что вы не хотите фильтровать кольцевой трафик для экономии циклов ЦП, вы можете добавить для него исключение. )

Если OTOH у вас есть DNS-сервер на том же компьютере, и ваш qn можно было бы более точно указать как « Как я могу отклонить весь входящий UDP-трафик, кроме внешних запросов к DNS-серверу? », вы бы использовали ту же базу из двух строк и добавили другой, который явно разрешает трафик DNS:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp --dport 53 -j ACCEPT -m comment --comment "we serve DNS"
iptables -A INPUT -p tcp --dport 53 -j ACCEPT -m comment --comment "DNS uses TCP too sometimes"

iptables -A INPUT -j DROP

Обратите внимание, что обычно вам не нужно указывать какие-либо параметры -m state ни для чего, кроме первой строки, потому что первая строка является сокращением разрешив продолжение легитимного трафика, его пилотные пакеты получили разрешение на вход.

Другие уведомления

Совет @Zoredache для недавних [11 43753] вообще не применимо. недавний имеет очень ограниченную область использования, потому что он использует не эффективные структуры данных, а список и хэши, никаких деревьев, нет. По умолчанию он может запомнить только 100 IP-адресов на список, который можно расширить, но хеширование в любом случае не очень эффективно для поиска по нему.

1
ответ дан 3 December 2019 в 04:50

Теги

Похожие вопросы