xaker1 Posted May 10, 2016 Posted May 10, 2016 Здравствуйте. Есть задача - организовать блокировку сайтов для определенных клиентов. Блокировку по определенным причинам решили делать через DNS. В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков. Есть какое-нибудь готовое решение? Сейчас пытаюсь реализовать с помощью PowerDNS + скрипт на Python - но схема работает крайне криво. Вставить ник Quote
snvoronkov Posted May 10, 2016 Posted May 10, 2016 В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков. Есть какое-нибудь готовое решение? bind + view https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html Вставить ник Quote
xaker1 Posted May 11, 2016 Author Posted May 11, 2016 (edited) В итоге нужно получить 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
OKyHb Posted May 12, 2016 Posted May 12, 2016 Ещё как вариант - поднять второй DNS сервер (с блокировками) на нестандартном порту. И нужных клиентов заворачивать на него через iptables + ipset. Вставить ник Quote
xaker1 Posted May 12, 2016 Author Posted May 12, 2016 По сути и делается отдельный 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
OK-2004 Posted May 12, 2016 Posted May 12, 2016 (edited) Попробуйте поиграться вот так : 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
hsvt Posted May 12, 2016 Posted May 12, 2016 А как у вас в listen on 8.8.8.8 8.8.4.4 ? Если клиент укажет другие днс сервера то спуфинг сработает? Вставить ник Quote
hsvt Posted May 12, 2016 Posted May 12, 2016 (edited) Тогда было бы не плохо рассказать до конца про такой метод :) в nfqfilter соответственно фильтрацию по domains вырезали в БД и файлах? Edited May 12, 2016 by hsvt Вставить ник Quote
OK-2004 Posted May 12, 2016 Posted May 12, 2016 (edited) Поди днат делает Поди - да. Накидал собственный скрипт, который берёт dump.xml , полученный с помощью https://github.com/yegorov-p/python-zapret-info. Далее вырезаю из него домены, которые блокирую на ДНС.( blocktype=domain + "короткие" урлы) Edited May 13, 2016 by OK-2004 Вставить ник Quote
xaker1 Posted May 12, 2016 Author Posted May 12, 2016 Попробуйте поиграться вот так : ... и опять же - получается черный список. У меня же сейчас проблема с белым списком. Получается выдавать только нужные зоны, но как только пытаюсь реализовывать подмену DNS записей, что бы показывать для запрещенных сайтов (те, которые не входят в список разрешенных т.е.) загрушку - подмена записей происходит для всех зон (даже для тех, которые нужно разрешать.) Вставить ник Quote
polmax Posted May 12, 2016 Posted May 12, 2016 (edited) Для начала с конфиге своём попробуйте zone "." { type master; file "/etc/bind/blockeddomain.db"; }; Вставить в конце после зоны ya.ru, и посмотреть реакцию бинда. И не плохо бы было озвучить версию bind. А вообще если вы обозначаете зону мастер для ".", то всегда будет обрабатываться только она ибо приоритет, все остальные зоны будут игнорироваться (будь то форвард, мастер и т.д.). Вариант делать forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить). Edited May 12, 2016 by polmax Вставить ник Quote
xaker1 Posted May 12, 2016 Author Posted May 12, 2016 (edited) 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
polmax Posted May 12, 2016 Posted May 12, 2016 (edited) xaker1 в общем вариант или блочить конкретные имена (чёрный список) или вариант который я описал выше: forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить). Edited May 12, 2016 by polmax Вставить ник Quote
st_re Posted May 12, 2016 Posted May 12, 2016 Сделать 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
xaker1 Posted May 12, 2016 Author Posted May 12, 2016 (edited) Так получилось. В итоге для решения одной задачи используется 3 DNS сервера... Edited May 12, 2016 by xaker1 Вставить ник Quote
OK-2004 Posted May 13, 2016 Posted May 13, 2016 (edited) Почему 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
xaker1 Posted May 13, 2016 Author Posted May 13, 2016 Почему 3 ? Огласите весь список пожалуйста.... © bind9, получает запросы от клиентов, и если нужно обрабатывать по белому списку - определяет кому дальше отсылать unbound или powerdns (на все запросы отдает один и тот же ответ, с IP заглушки). Если же попадаем в черный список - bind занимается всем сам. Вставить ник Quote
st_re Posted May 13, 2016 Posted May 13, 2016 Только у меня вариант от 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
A4on.TV Posted May 14, 2016 Posted May 14, 2016 Посмотрите на проект DNS proxy https://github.com/looterz/grimd блокирует домены из списка. создавался как блокировщик рекламы и малвара, но что мешает ему дать список запрещенных сайтов? Вставить ник Quote
Ivan_83 Posted May 14, 2016 Posted May 14, 2016 Посмотрите на проект DNS proxy https://github.com/looterz/grimd блокирует домены из списка. создавался как блокировщик рекламы и малвара, но что мешает ему дать список запрещенных сайтов? Он же на GO! Список доменов можно легко и в unbound запихать. Вставить ник Quote
Lariosik Posted May 16, 2016 Posted May 16, 2016 Список доменов можно легко и в unbound запихать. А можно пример в студию? Вставить ник Quote
Ivan_83 Posted May 16, 2016 Posted May 16, 2016 # 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
Lariosik Posted May 16, 2016 Posted May 16, 2016 (edited) 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
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.