Перейти к содержимому
Калькуляторы

iptables - ограничить запросы к DNS одним/двумя доменами

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

~ # netstat -n -p -l | grep 53
tcp        0      0 127.0.0.0:53            0.0.0.0:*               LISTEN      258/dnsmasq
tcp        0      0 192.168.1.1:53          0.0.0.0:*               LISTEN      258/dnsmasq
udp        0      0 127.0.0.0:53            0.0.0.0:*                           258/dnsmasq
udp        0      0 192.168.1.1:53          0.0.0.0:*                           258/dnsmasq

 

Намёк ясен? =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Намек в том, что DNS работает еще и по TCP? Так там же вроде только zone transfer по TCP?

 

Или намек про dnsmasq?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Намек в том, что DNS работает еще и по TCP? Так там же вроде только zone transfer по TCP?

Ну незнаю как бинд, но dnsmasq и pdnsd вполне себе по tcp работают с резолверами и винда до tcp стучиться с завидной переодичностью.

 

Или намек про dnsmasq?

Ну и на него тоже, там есть возможность порезать всё лишнее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

Наверное, правильнее всего сделать два view. Один для белых, другой для серых. Для серых нарулить конфигом ДНС как надо. Белым просто разрешить всё.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так и сделано. Задача именно отфильтровать "левые" запросы. До того, как они будут отработаны сервером. Неужели никто не решал такую задачу?

 

В любом случае, не могу понять, почему не работает такая конструкция: "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Учитывая, что это dnsmasq, проще запустить два экземпляра на разных портах

с разными настройками (общую часть подключать через include)

и файрволлом перенаправлять запросы от части клиентов на второй порт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dnsmasq помнится по tcp не кеширует ничего :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dnsmasq помнится по tcp не кеширует ничего :(
Во-первых, дайте пруфлинк. Какая кэшу разница, пришёл запрос через tcp или через udp?

 

Во-вторых, по статистике 99,(9)% запросов от клиентов приходит по udp.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видимо напутал или было версий 5 назад, сейчас TCP может мешает только логи ротейтить.

У меня после перехода на сислог перестал записывать кому что выдал/освободил :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видимо напутал или было версий 5 назад, сейчас TCP может мешает только логи ротейтить.

У меня после перехода на сислог перестал записывать кому что выдал/освободил :(

Если Вы про DNS, то он ничего не освобождает.

Если про DHCP, то он работает по UDP.

В любом случае, все неочевидные моменты лучше уточнять здесь:

http://lists.thekelleys.org.uk/mailman/lis...dnsmasq-discuss

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

Нахрена козе боян называется тема, не надо решать проблемы днса через иптаблес, все настраивается в самом днс сервере, пусть о ни режет все не нужное и шлет режекты.

Какие с этим то проблемы? Давайте ещё напишем днс сервер на правилах иптаблеса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

Нахрена козе боян называется тема, не надо решать проблемы днса через иптаблес, все настраивается в самом днс сервере, пусть о ни режет все не нужное и шлет режекты.

Какие с этим то проблемы? Давайте ещё напишем днс сервер на правилах иптаблеса.

Все и так настроено и работает лет 5. Просто задолбали уже тысячи бесполезных запросов к DNS, типа, где тут у нас updates.kaspersky.com и т.п.

Еще сталкивался с вирусами у клиентов, которые умудряются генерировать запросы к DNS на скорости предоставленного им канала (жесткий флуд).

В результате чего, bind начинает дико тупить, что не есть хорошо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

Нахрена козе боян называется тема, не надо решать проблемы днса через иптаблес, все настраивается в самом днс сервере, пусть о ни режет все не нужное и шлет режекты.

Какие с этим то проблемы? Давайте ещё напишем днс сервер на правилах иптаблеса.

Ну да в теории звучит красиво, многие сервисы поддерживают access lists, но как-то спокойнее закрыть нужные порты/прочее через iptables или вообще на сетевом оборудовании, куда подключен сервер, потому что вероятность ошибки в iptables или в IOS маршрутизатора много меньше, чем в конкретном приложении. Кроме того, не всё можно сделать средствами приложения, например не отвечать конкретному клиенту рекурсию на MX-записи средствами bind9 нельзя, ни с помощью acl, ни с помощью view, а как уже написали выше, бывает вирусня, которая генерит запросы на скорости интерфейса и dns-сервер может заглючить. С помощью iptables почти всегда можно отфильтровать MX-запросы от конкретно IP-адреса.

Да, я тоже считаю, что фаервол это костыль, но на практике без него тяжко.

 

По теме:

Вот как правильно блокировать example.com:

 

iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|076578616d706c6503636f6d00|" --algo kmp -j DROP

 

(OUTPUT потому что на своей десктопной машине проверял).

Ну Вам надо перевернуть DROP на ACCEPT и т.д., это наверное, не нужно расписывать

 

Почему не работает -string "example.com" отдельная история, если интересно, то можно конечно объяснить, но думаю, что врядли будет интересно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.

example.com и к реверсу.

 

Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"

Но видимо что то делаю не так. Подскажите, как правильнее?

 

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

Нахрена козе боян называется тема, не надо решать проблемы днса через иптаблес, все настраивается в самом днс сервере, пусть о ни режет все не нужное и шлет режекты.

Какие с этим то проблемы? Давайте ещё напишем днс сервер на правилах иптаблеса.

Ну да в теории звучит красиво, многие сервисы поддерживают access lists, но как-то спокойнее закрыть нужные порты/прочее через iptables или вообще на сетевом оборудовании, куда подключен сервер, потому что вероятность ошибки в iptables или в IOS маршрутизатора много меньше, чем в конкретном приложении. Кроме того, не всё можно сделать средствами приложения, например не отвечать конкретному клиенту рекурсию на MX-записи средствами bind9 нельзя, ни с помощью acl, ни с помощью view, а как уже написали выше, бывает вирусня, которая генерит запросы на скорости интерфейса и dns-сервер может заглючить. С помощью iptables почти всегда можно отфильтровать MX-запросы от конкретно IP-адреса.

Да, я тоже считаю, что фаервол это костыль, но на практике без него тяжко.

 

По теме:

Вот как правильно блокировать example.com:

 

iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|076578616d706c6503636f6d00|" --algo kmp -j DROP

 

(OUTPUT потому что на своей десктопной машине проверял).

Ну Вам надо перевернуть DROP на ACCEPT и т.д., это наверное, не нужно расписывать

 

Почему не работает -string "example.com" отдельная история, если интересно, то можно конечно объяснить, но думаю, что врядли будет интересно.

Хм... Странно. Таки интересно, объясните, пожалуйста.

 

Спасибо за толковый ответ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"exapmle.com" в каноническом виде "example.com.", далее разбиваем на части с делимитером ".", получаем ("example","com",""), затем len("example")=7, значит пишем 07, затем "example" (в ASCII-коде), получается 076578616d706c65, тоже самое делаем с com, получается 03636f6d и с пустой строкой - длина 0, значит 00, самой строки нет. И всё это "склеиваем": 076578616d706c6503636f6d00

 

Кстати, с hex-string работает --icase.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 18.05.2010 в 00:20, s.lobanov сказал:

По теме:

Вот как правильно блокировать example.com:

 

iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|076578616d706c6503636f6d00|" --algo kmp -j DROP

 

(OUTPUT потому что на своей десктопной машине проверял).

Ну Вам надо перевернуть DROP на ACCEPT и т.д., это наверное, не нужно расписывать

 

Почему не работает -string "example.com" отдельная история, если интересно, то можно конечно объяснить, но думаю, что врядли будет интересно.

 

# iptables -V
iptables v1.8.3 (legacy)

# uname -a
Linux _ 5.0.19-un-def-alt1 #1 SMP PREEMPT __ x86_64 GNU/Linux

# cat /etc/altlinux-release
ALT Sisyphus Sisyphus (unstable) (sisyphus)
 

Работает вот так (заблокировать себе доступ к example.com)

iptables  -A OUTPUT -m string --hex-string "example.com" --algo bm --to 65535 -j DROP

 

т.е. для примера, из первого сообщения 

iptabless -A INPUT -p udp -m udp --dport 53 -m string --hex-string "example.com" --algo kmp --icase -j ACCEPT

 

P.s.: сорри за некропостинг - вдруг кому надо

Изменено пользователем gochankot

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.