Jump to content

Recommended Posts

Posted

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

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

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

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

Posted

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

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

bind + view

 

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

Posted (edited)

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

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

bind + view

 

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

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

Edited by xaker1
Posted

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

Posted

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

Posted (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 by OK-2004
Posted (edited)

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

Edited by hsvt
Posted (edited)
Поди днат делает

 

Поди - да.

 

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

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

Edited by OK-2004
Posted

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

...

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

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

Posted (edited)

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

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

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

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

 

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

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

Edited by polmax
Posted (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.1

10.1.1.1

$ dig +short ya.ru @10.1.1.1

10.1.1.1

Edited by xaker1
Posted (edited)

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

Edited by polmax
Posted

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

Posted (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 by OK-2004
Posted

Почему 3 ?

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

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

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

Posted

 

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

 

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

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

Он же на GO!

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

Posted

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

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.