xaker1 Posted May 10, 2016 · Report post Здравствуйте. Есть задача - организовать блокировку сайтов для определенных клиентов. Блокировку по определенным причинам решили делать через DNS. В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков. Есть какое-нибудь готовое решение? Сейчас пытаюсь реализовать с помощью PowerDNS + скрипт на Python - но схема работает крайне криво. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snvoronkov Posted May 10, 2016 · Report post В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков. Есть какое-нибудь готовое решение? bind + view https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 11, 2016 (edited) · Report post В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков. Есть какое-нибудь готовое решение? bind + view https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html Поковырял - но пока не удается реализовать белый список - максимум всё блокируется, но не удается разрешить рекурсивную работу для отдельных зон. Edited May 11, 2016 by xaker1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
OKyHb Posted May 12, 2016 · Report post Ещё как вариант - поднять второй DNS сервер (с блокировками) на нестандартном порту. И нужных клиентов заворачивать на него через iptables + ipset. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 12, 2016 · Report post По сути и делается отдельный DNS сервер. Просто нужно через Web интерфейс указывать кому и какие ограничения выставляются. Далее генерируюся конфиги. Но на данный момент затык с белыми списками. Конфиг такой: acl acl9{ 192.168.1.206/32; };view view9 { match-clients { acl9; }; allow-recursion { any; }; zone "." { type master; file "/etc/bind/blockeddomain.db"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "ya.ru" { type forward; forward only; forwarders { 8.8.8.8; }; }; }; При данной конфигурации блокируются все сайты, ya.ru не работает. Если убрать зону "." - то ya.ru открывается, другие сайты не работают - но для запрещенных сайтах не происходит подмены DNS (которая и описана в /etc/bind/blockeddomain.db и нужна для демонстрации уведомления о блокировке сайта). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
OK-2004 Posted May 12, 2016 (edited) · Report post Попробуйте поиграться вот так : cat /etc/bind/named.conf: options { directory "/var/cache/bind"; dump-file "/var/log/named/cache_dump.db"; statistics-file "/var/log/named/named_stats.txt"; auth-nxdomain no ; allow-recursion { none; }; allow-query { none; }; allow-transfer { none; }; notify no; recursion no; version "REFUSED"; query-source address x.x.x.x; check-names master ignore; check-names slave ignore; recursive-clients 10000; listen-on { 8.8.8.8; 8.8.4.4; 127.0.0.1; }; listen-on-v6 { none; }; }; include "/etc/bind/logging"; include "/etc/bind/rndc.key"; controls { inet 127.0.0.1 allow { localhost; } keys { rndc-key; }; }; ////////////////////////////////////////////////////////////////////////////////////// acl our_net { 192.168.0.0/16; 10.0.0.0/8; 172.16.0.0/12; 192.0.2.0/24; 127.0.0.1; }; view "our_net" { match-clients { "our_net"; }; allow-recursion { our_net; }; allow-query { our_net; }; include "/etc/bind/local_zones"; include "/etc/bind/common_zones"; recursion yes; }; /////////////////////////////////////////// view "all" { match-clients { any ; } ; allow-query { none ; } ; recursion no; allow-recursion { none; }; include "/etc/bind/local_zones"; }; список наших зон, за которые мы авторитарны по определению. ( "белые" cписки ) cat /etc/bind/local_zones: zone "." { type hint; file "/etc/bind/db.root"; }; // zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; // zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; // zone "121.168.192.in-addr.arpa" { type master; file "/etc/bind/192.168.121.rev"; } ; // zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; } ; // zone "localhost" { type master; file "/etc/bind/db.localhost" ; } ; zone "local" { type master; file "/etc/bind/db.local" ; } ; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127" ; } ; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0" ; } ; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255" ; } ; // zone "sdsdsffsf.ru" { type master; file "fsfsfsfsfsf.ru.ip"; }; zone "xxx.xxx.xx.in-addr.arpa" { type master; file "xxx.xxx.xxx.0.rev"; }; zone "xxx.xxx.xx.in-addr.arpa" { type master; file "xxx.xxx.xxx.0.rev"; }; zone "xxx.xxx.xx.in-addr.arpa" { type master; file "xxx.xxx.xxxx.0.rev" ; }; zone "xxx.xxx.xx.in-addr.arpa" { type master; file "xxx.xxx.xxx.0.rev" ; }; zone "fdgdfgdfgdfgdfg.ru" { type master; file "dfgdfsfdgdf.ru.ip"; }; zone "fdgfefddfgdfgdfg.ru" { type master; file "dfgsdfsdfssfdgdf.ru.ip"; }; ................ ............. ............. шаблон файла зоны для домена из чёрного списка: $ttl 300 @ IN SOA dns.0.com. admin.0.com. ( XXXXXXXXXX 10800 3600 604800 38400 ) @ IN NS dns.0.com. @ IN MX 10 mail.0.com. @ IN A 192.168.121.183 // на этом ип сидит http cо страничкой "Доступ запрещён типа..." * IN A 192.168.121.183 // на этом ип сидит http cо страничкой "Доступ запрещён типа..." "черный" список доменов, для которых мы как-бы авторитарны: cat -n /etc/bind/common_zones|(head -n 10 && seq 3 | xargs -Iz echo "...." && tail -n 10) : 1 zone "03magnet.ru" { type master; file "03magnet.ru.hosts"; }; 2 zone "1001casino.com" { type master; file "1001casino.com.hosts"; }; 3 zone "100casino.net" { type master; file "100casino.net.hosts"; }; 4 zone "100diplom.com" { type master; file "100diplom.com.hosts"; }; 5 zone "100diplomov.com" { type master; file "100diplomov.com.hosts"; }; 6 zone "100medspravok.ru" { type master; file "100medspravok.ru.hosts"; }; 7 zone "101slot.com" { type master; file "101slot.com.hosts"; }; 8 zone "1039luxury.com" { type master; file "1039luxury.com.hosts"; }; 9 zone "103luxury9.com" { type master; file "103luxury9.com.hosts"; }; 10 zone "10betcom.sbtech.com" { type master; file "10betcom.sbtech.com.hosts"; }; .... .... .... 7964 zone "zolotoi-baton.com" { type master; file "zolotoi-baton.com.hosts"; }; 7965 zone "zombi909.dyndns.tv" { type master; file "zombi909.dyndns.tv.hosts"; }; 7966 zone "zombie-legal.com" { type master; file "zombie-legal.com.hosts"; }; 7967 zone "zomzom.biz" { type master; file "zomzom.biz.hosts"; }; 7968 zone "zoo4u.ru" { type master; file "zoo4u.ru.hosts"; }; 7969 zone "zoorc24.biz" { type master; file "zoorc24.biz.hosts"; }; 7970 zone "zubromix.com" { type master; file "zubromix.com.hosts"; }; 7971 zone "zubrrotzdg2m2uy7.onion.to" { type master; file "zubrrotzdg2m2uy7.onion.to.hosts"; }; 7972 zone "zuu9ieth.cserver.tv" { type master; file "zuu9ieth.cserver.tv.hosts"; }; 7973 zone "zz.jofra.biz" { type master; file "zz.jofra.biz.hosts"; }; Сия конструкция помогает работать замечательному творению от max1976, отправляя на его nfq-filter тока урлы, которые надо блокировать, домены блокируем по днс. Edited May 13, 2016 by OK-2004 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hsvt Posted May 12, 2016 · Report post А как у вас в listen on 8.8.8.8 8.8.4.4 ? Если клиент укажет другие днс сервера то спуфинг сработает? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted May 12, 2016 · Report post Поди днат делает Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hsvt Posted May 12, 2016 (edited) · Report post Тогда было бы не плохо рассказать до конца про такой метод :) в nfqfilter соответственно фильтрацию по domains вырезали в БД и файлах? Edited May 12, 2016 by hsvt Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
OK-2004 Posted May 12, 2016 (edited) · Report post Поди днат делает Поди - да. Накидал собственный скрипт, который берёт dump.xml , полученный с помощью https://github.com/yegorov-p/python-zapret-info. Далее вырезаю из него домены, которые блокирую на ДНС.( blocktype=domain + "короткие" урлы) Edited May 13, 2016 by OK-2004 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 12, 2016 · Report post Попробуйте поиграться вот так : ... и опять же - получается черный список. У меня же сейчас проблема с белым списком. Получается выдавать только нужные зоны, но как только пытаюсь реализовывать подмену DNS записей, что бы показывать для запрещенных сайтов (те, которые не входят в список разрешенных т.е.) загрушку - подмена записей происходит для всех зон (даже для тех, которые нужно разрешать.) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
polmax Posted May 12, 2016 (edited) · Report post Для начала с конфиге своём попробуйте zone "." { type master; file "/etc/bind/blockeddomain.db"; }; Вставить в конце после зоны ya.ru, и посмотреть реакцию бинда. И не плохо бы было озвучить версию bind. А вообще если вы обозначаете зону мастер для ".", то всегда будет обрабатываться только она ибо приоритет, все остальные зоны будут игнорироваться (будь то форвард, мастер и т.д.). Вариант делать forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить). Edited May 12, 2016 by polmax Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 12, 2016 (edited) · Report post version: 9.9.5-9+deb8u6-Debian <id:f9b8a50e> Текущий конфиг: acl acl9{ 192.168.1.0/24; }; view view9 { match-clients { acl9; }; allow-recursion { any; }; zone "ya.ru" { type forward; forward only; forwarders { 8.8.8.8; }; //file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "." { type master; file "/etc/bind/blockeddomain.db"; }; }; $ dig +short habr.ru @10.1.1.110.1.1.1 $ dig +short ya.ru @10.1.1.1 10.1.1.1 Edited May 12, 2016 by xaker1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
polmax Posted May 12, 2016 (edited) · Report post xaker1 в общем вариант или блочить конкретные имена (чёрный список) или вариант который я описал выше: forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить). Edited May 12, 2016 by polmax Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
st_re Posted May 12, 2016 · Report post Сделать 1 зону . для ya.ru в ней указать их (ya.ru) NSы и их имена тоже описать (glue). при разрешенной рекурсии, мне так кажется, должно работать. для нерутовой зоны работало подобное.. не? ps ну в общем да.. $TTL 1h @ SOA @ nobody.localhost. 42 1d 12h 1w 3h @ NS a. ; Silence a BIND warning a A 1.1.1.1 * A 1.1.1.1 ru. A 1.1.1.1 *.ru A 1.1.1.1 ya.ru. NS gm1. gm1. A 8.8.8.8 nag.ru. A 8.8.8.8 gov. A 1.1.1.1 *.gov A 1.1.1.1 nasa.gov. NS gm1. zone "." { type master; file "/etc/namedb/named.root"; }; dig +short www.ya.ru @192.168.72.55 ya.ru. 213.180.204.3 213.180.193.3 93.158.134.3 dig +short www.yandex.ru @192.168.72.55 1.1.1.1 dig +short www.microsoft.com @192.168.72.55 1.1.1.1 dig www.nasa.gov @192.168.72.55 ;; ANSWER SECTION: www.nasa.gov. 543 IN CNAME www.nasawestprime.com. www.nasawestprime.com. 3600 IN A 1.1.1.1 с последним облом, тотому как там cname в за пределы песочницы Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 12, 2016 (edited) · Report post Так получилось. В итоге для решения одной задачи используется 3 DNS сервера... Edited May 12, 2016 by xaker1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
OK-2004 Posted May 13, 2016 (edited) · Report post Почему 3 ? Огласите весь список пожалуйста.... © Вариант от st_re можно дополнить view с acl. Для первой группы ( c ограничениям по белым и черным спискам ) - зона "." как мастер ; для второй группы ( без ограничений ) - стандартная как hint. Для второй группы - файлы зон стандартные, для первой - всё придётся запихивать в одну зону. Пы.Сы. Только у меня вариант от st_re почему то сработал только когда в файле зоны поменял местами некоторые строки: ............ ya.ru. NS gm1. gm1. A 8.8.8.8 ru. A 1.1.1.1 *.ru A 1.1.1.1 .............. Edited May 13, 2016 by OK-2004 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
xaker1 Posted May 13, 2016 · Report post Почему 3 ? Огласите весь список пожалуйста.... © bind9, получает запросы от клиентов, и если нужно обрабатывать по белому списку - определяет кому дальше отсылать unbound или powerdns (на все запросы отдает один и тот же ответ, с IP заглушки). Если же попадаем в черный список - bind занимается всем сам. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
st_re Posted May 13, 2016 · Report post Только у меня вариант от st_re почему то сработал только когда в файле зоны поменял местами некоторые строки: порядок у меня был именно как привел, я прямо файл и скопировал. Надо опции сборки смотреть.. у меня фря и бинд из портов. Тот джейл в котором пускал тест, что выше, я уже разобрал, там 10.3 фря была, вот тут на 9.3 параметры. Я так понимаю тут ничего не должно отличаться от теста, кроме 9.3. Они у меня в одной "пудреннице" собираются с одинаковыми конфигами. built by make with '--localstatedir=/var' '--disable-linux-caps' '--disable-symtable' '--with-randomdev=/dev/random' '--with-libxml2=/usr/local' '--with-readline=-ledit' '--sysconfdir=/usr/local/etc/namedb' '--disable-fetchlimit' '--disable-filter-aaaa' '--disable-fixed-rrset' '--without-geoip' '--with-idn=/usr/local' '--with-libiconv=/usr/local' '--enable-ipv6' '--disable-largefile' '--disable-newstats' '--without-python' '--disable-querytrace' '--disable-rpz-nsdname' '--disable-rpz-nsip' '--enable-rrl' 'STD_CDEFINES=-DDIG_SIGCHASE=1' '--without-gssapi' '--with-openssl=/usr' '--disable-native-pkcs11' '--without-gost' '--enable-threads' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=amd64-portbld-freebsd9.3'[code] Зоны со * я использую местами, чтобы им прядок был важен не замечал. Но собиратели пакетов в дистрибутивах Линукса временами такие затейники :) У меня то обычно фря на таких задачах. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
A4on.TV Posted May 14, 2016 · Report post Посмотрите на проект DNS proxy https://github.com/looterz/grimd блокирует домены из списка. создавался как блокировщик рекламы и малвара, но что мешает ему дать список запрещенных сайтов? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted May 14, 2016 · Report post Посмотрите на проект DNS proxy https://github.com/looterz/grimd блокирует домены из списка. создавался как блокировщик рекламы и малвара, но что мешает ему дать список запрещенных сайтов? Он же на GO! Список доменов можно легко и в unbound запихать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lariosik Posted May 16, 2016 · Report post Список доменов можно легко и в unbound запихать. А можно пример в студию? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted May 16, 2016 · Report post # Windows Internet emulator: Network Connectivity Status Indicator (NCSI) # https://technet.micr...v=ws.10%29.aspx local-data: "dns.msftncsi.com 30 IN A 131.107.255.255" local-data: "dns.msftncsi.com 3600 IN AAAA fd3e:4f5a:5b81:0:0:0:0:1" # Block WSUS stats local-data: "statsfe2.update.microsoft.com 30 IN A 0.0.0.0" local-data: "statsfe2.update.microsoft.com 30 IN AAAA ::0" local-data: "ctldl.windowsupdate.com 30 IN A 0.0.0.0" local-data: "ctldl.windowsupdate.com 30 IN AAAA ::0" # Block IE crap local-data: "ieonline.microsoft.com 30 IN A 0.0.0.0" local-data: "ieonline.microsoft.com 30 IN AAAA ::0" local-data: "iecvlist.microsoft.com 30 IN A 0.0.0.0" local-data: "iecvlist.microsoft.com 30 IN AAAA ::0" Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lariosik Posted May 16, 2016 (edited) · Report post Ivan_83 Cпасибо, только я заметил, что у вас local-zone нет, http://www.it-wars.com/dns-back-to-the-roots/ описано с local-zone local-zone: "doubleclick.net" redirect local-data: "doubleclick.net A 127.0.0.1" нужна ли local-zone? Edited May 16, 2016 by Lariosik Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted May 16, 2016 · Report post У меня так работает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...