hiller Posted May 5, 2010 · Report post Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами. example.com и к реверсу. Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT" Но видимо что то делаю не так. Подскажите, как правильнее? Смысл в том, что на DNS-сервер приходят разнообразные запросы, которые по сути бессмысленны, рекурсия с серых адресов запрещена, разрешена только с белых. Share this post Link to post Share on other sites
sfstudio Posted May 5, 2010 · Report post ~ # 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 Намёк ясен? =) Share this post Link to post Share on other sites
hiller Posted May 5, 2010 · Report post Намек в том, что DNS работает еще и по TCP? Так там же вроде только zone transfer по TCP? Или намек про dnsmasq? Share this post Link to post Share on other sites
sfstudio Posted May 5, 2010 · Report post Намек в том, что DNS работает еще и по TCP? Так там же вроде только zone transfer по TCP? Ну незнаю как бинд, но dnsmasq и pdnsd вполне себе по tcp работают с резолверами и винда до tcp стучиться с завидной переодичностью. Или намек про dnsmasq? Ну и на него тоже, там есть возможность порезать всё лишнее. Share this post Link to post Share on other sites
wtyd Posted May 5, 2010 · Report post Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.example.com и к реверсу. Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT" Но видимо что то делаю не так. Подскажите, как правильнее? Смысл в том, что на DNS-сервер приходят разнообразные запросы, которые по сути бессмысленны, рекурсия с серых адресов запрещена, разрешена только с белых. Наверное, правильнее всего сделать два view. Один для белых, другой для серых. Для серых нарулить конфигом ДНС как надо. Белым просто разрешить всё. Share this post Link to post Share on other sites
hiller Posted May 5, 2010 · Report post Так и сделано. Задача именно отфильтровать "левые" запросы. До того, как они будут отработаны сервером. Неужели никто не решал такую задачу? В любом случае, не могу понять, почему не работает такая конструкция: "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT"... Share this post Link to post Share on other sites
Ilya Evseev Posted May 5, 2010 · Report post Учитывая, что это dnsmasq, проще запустить два экземпляра на разных портах с разными настройками (общую часть подключать через include) и файрволлом перенаправлять запросы от части клиентов на второй порт. Share this post Link to post Share on other sites
Ivan_83 Posted May 12, 2010 · Report post dnsmasq помнится по tcp не кеширует ничего :( Share this post Link to post Share on other sites
Ilya Evseev Posted May 12, 2010 · Report post dnsmasq помнится по tcp не кеширует ничего :(Во-первых, дайте пруфлинк. Какая кэшу разница, пришёл запрос через tcp или через udp? Во-вторых, по статистике 99,(9)% запросов от клиентов приходит по udp. Share this post Link to post Share on other sites
Ivan_83 Posted May 17, 2010 · Report post Видимо напутал или было версий 5 назад, сейчас TCP может мешает только логи ротейтить. У меня после перехода на сислог перестал записывать кому что выдал/освободил :( Share this post Link to post Share on other sites
Ilya Evseev Posted May 17, 2010 · Report post Видимо напутал или было версий 5 назад, сейчас TCP может мешает только логи ротейтить.У меня после перехода на сислог перестал записывать кому что выдал/освободил :( Если Вы про DNS, то он ничего не освобождает.Если про DHCP, то он работает по UDP. В любом случае, все неочевидные моменты лучше уточнять здесь: http://lists.thekelleys.org.uk/mailman/lis...dnsmasq-discuss Share this post Link to post Share on other sites
sdroom Posted May 17, 2010 · Report post Необходимо с помощью iptables ограничить запросы к DNS-серверу только нашими локальными доменами.example.com и к реверсу. Как это правильнее сделать? Пробовал всякие извраты, аля "-A INPUT -p udp -m udp --dport 53 -m string --string "example.com" --algo kmp --icase -j ACCEPT" Но видимо что то делаю не так. Подскажите, как правильнее? Смысл в том, что на DNS-сервер приходят разнообразные запросы, которые по сути бессмысленны, рекурсия с серых адресов запрещена, разрешена только с белых. Нахрена козе боян называется тема, не надо решать проблемы днса через иптаблес, все настраивается в самом днс сервере, пусть о ни режет все не нужное и шлет режекты.Какие с этим то проблемы? Давайте ещё напишем днс сервер на правилах иптаблеса. Share this post Link to post Share on other sites
hiller Posted May 17, 2010 · Report post Необходимо с помощью 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 начинает дико тупить, что не есть хорошо... Share this post Link to post Share on other sites
s.lobanov Posted May 17, 2010 · Report post Необходимо с помощью 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" отдельная история, если интересно, то можно конечно объяснить, но думаю, что врядли будет интересно. Share this post Link to post Share on other sites
hiller Posted May 17, 2010 · Report post Необходимо с помощью 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" отдельная история, если интересно, то можно конечно объяснить, но думаю, что врядли будет интересно. Хм... Странно. Таки интересно, объясните, пожалуйста. Спасибо за толковый ответ! Share this post Link to post Share on other sites
s.lobanov Posted May 18, 2010 · Report post "exapmle.com" в каноническом виде "example.com.", далее разбиваем на части с делимитером ".", получаем ("example","com",""), затем len("example")=7, значит пишем 07, затем "example" (в ASCII-коде), получается 076578616d706c65, тоже самое делаем с com, получается 03636f6d и с пустой строкой - длина 0, значит 00, самой строки нет. И всё это "склеиваем": 076578616d706c6503636f6d00 Кстати, с hex-string работает --icase. Share this post Link to post Share on other sites
gochankot Posted November 26, 2019 (edited) · Report post В 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.: сорри за некропостинг - вдруг кому надо Edited November 27, 2019 by gochankot Share this post Link to post Share on other sites