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