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

Блокировка по DNS

Здравствуйте.

Есть задача - организовать блокировку сайтов для определенных клиентов. Блокировку по определенным причинам решили делать через DNS.

В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков.

Есть какое-нибудь готовое решение? Сейчас пытаюсь реализовать с помощью PowerDNS + скрипт на Python - но схема работает крайне криво.

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


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

В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков.

Есть какое-нибудь готовое решение?

bind + view

 

https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html

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


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

В итоге нужно получить DNS сервер, который на основании IP клиента будет применять один из белых\черных списков.

Есть какое-нибудь готовое решение?

bind + view

 

https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html

Поковырял - но пока не удается реализовать белый список - максимум всё блокируется, но не удается разрешить рекурсивную работу для отдельных зон.

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

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


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

Ещё как вариант - поднять второй DNS сервер (с блокировками) на нестандартном порту. И нужных клиентов заворачивать на него через iptables + ipset.

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


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

По сути и делается отдельный 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 и нужна для демонстрации уведомления о блокировке сайта).

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


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

Попробуйте поиграться вот так :

 

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 тока урлы, которые надо блокировать, домены блокируем по днс.

Изменено пользователем OK-2004

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


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

А как у вас в listen on 8.8.8.8 8.8.4.4 ? Если клиент укажет другие днс сервера то спуфинг сработает?

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


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

Тогда было бы не плохо рассказать до конца про такой метод :) в nfqfilter соответственно фильтрацию по domains вырезали в БД и файлах?

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

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


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

Поди днат делает

 

Поди - да.

 

Накидал собственный скрипт, который берёт dump.xml , полученный с помощью https://github.com/yegorov-p/python-zapret-info.

Далее вырезаю из него домены, которые блокирую на ДНС.( blocktype=domain + "короткие" урлы)

Изменено пользователем OK-2004

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


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

Попробуйте поиграться вот так :

...

и опять же - получается черный список. У меня же сейчас проблема с белым списком.

Получается выдавать только нужные зоны, но как только пытаюсь реализовывать подмену DNS записей, что бы показывать для запрещенных сайтов (те, которые не входят в список разрешенных т.е.) загрушку - подмена записей происходит для всех зон (даже для тех, которые нужно разрешать.)

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


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

Для начала с конфиге своём попробуйте

zone "." {
type master;
file "/etc/bind/blockeddomain.db";
};

Вставить в конце после зоны ya.ru, и посмотреть реакцию бинда.

И не плохо бы было озвучить версию bind.

 

А вообще если вы обозначаете зону мастер для ".", то всегда будет обрабатываться только она ибо приоритет, все остальные зоны будут игнорироваться (будь то форвард, мастер и т.д.).

Вариант делать forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить).

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

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


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

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.1

10.1.1.1

$ dig +short ya.ru @10.1.1.1

10.1.1.1

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

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


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

xaker1 в общем вариант или блочить конкретные имена (чёрный список) или вариант который я описал выше: forward для "." на какой то ещё свой днс где как раз будет возвращаться днс заглушки (можно же поднять 2 днс на этом же компе но с другим портом, например 5353 и туда форвардить).

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

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


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

Сделать 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 в за пределы песочницы

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


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

Так получилось. В итоге для решения одной задачи используется 3 DNS сервера...

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

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


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

Почему 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
..............

Изменено пользователем OK-2004

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


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

Почему 3 ?

Огласите весь список пожалуйста.... ©

bind9, получает запросы от клиентов, и если нужно обрабатывать по белому списку - определяет кому дальше отсылать unbound или powerdns (на все запросы отдает один и тот же ответ, с IP заглушки).

Если же попадаем в черный список - bind занимается всем сам.

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


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

 

Только у меня вариант от 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]

 

Зоны со * я использую местами, чтобы им прядок был важен не замечал. Но собиратели пакетов в дистрибутивах Линукса временами такие затейники :) У меня то обычно фря на таких задачах.

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


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

Посмотрите на проект DNS proxy https://github.com/looterz/grimd

блокирует домены из списка.

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

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


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

Посмотрите на проект DNS proxy https://github.com/looterz/grimd блокирует домены из списка. создавался как блокировщик рекламы и малвара, но что мешает ему дать список запрещенных сайтов?

Он же на GO!

Список доменов можно легко и в unbound запихать.

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


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

Список доменов можно легко и в unbound запихать.

 

А можно пример в студию?

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


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

# 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"

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


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

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?

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

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


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

Join the conversation

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

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

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

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

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

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

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