Зміст

1984tech - блокування за списком доменів

Декілька посилань для загального розвитку:

Трохи технологічних посилань:

Списки доменів:

Завантаження та налаштування

Завантажуємо, та розпаковуємо.

# wget --no-check-certificate https://github.com/nightflyza/1984tech/archive/master.zip
# unzip master.zip
# cd 1984tech-master/

Для використання функціоналу з блокування доменів по їх IP адресах, а саме засобами різноманітних фаєрволів, може бути потрібне встановлення пакунку Net_DNS2 за допомогою pear:

# pear install Net_DNS2

Блокування доменів засобами DNS / ISC-BIND

Робимо конфігурацію cli/1984tech.ini згідно нашого оточення, модифікуючи що найменше BASE_PATH. Та перевіряємо чи все добре банально методом виклику

# php cli/dnsgen --preview

Далі можна переходити до розгортання пресетів

# cat named/append_named.conf >> /var/named/etc/namedb/named.conf
# cp -R named/master/1984tech.db /var/named/etc/namedb/master/

Переконуємось, що в /var/named/etc/namedb/master/1984tech.db нас все влаштовує та включаємо фантазію, як файл зон, що генерується за допомогою php cli/dnsgen –generate чи php cli/dnsgen –preview буде потрапляти у /var/named/etc/namedb/. Як варіант можете для тесту зробити щось на кшталт

# php cli/dnsgen --preview > /var/named/etc/namedb/1984tech.conf

або вірно виставити повний шлях до цього файлу у конфізі cli/1984tech.ini за допомогою опції DNS_ZONES після чого просто виконувати

# php cli/dnsgen --generate

або ж просто використовуйте сімлінки ФС. Загалом, просто увімкніть фантазію та все.

Список завантажуваних доменів, ви можете подивитись за допомогою команди

# php cli/dnsgen --list

А також ознайомитись з усіма опціями що підтримуються, за допомогою

# php cli/dnsgen --help

Не забуваємо, що після внесення змін до named.conf варто перезапустити сервіс методом

# /etc/rc.d/named restart

А після оновлення файлу зон варто зробити

# rndc reload

У випадку, якщо ви вважаєте, що людино-зрозуміле сповіщення про те, що домен заблоковано з якоїсь конкретної причини краще ніж “просто нічого” - можете скористатись веб-заглушкою з директорії webstub. Для простоти конструкції, можете зробити її віртуал-хостом за замовчуванням.

# cp -R webstub /usr/local/www/apache24/data/
# chmod -R 777 /usr/local/www/apache24/data/webstub/log

Блокування доменів засобами DNS / unbound

Працює приблизно таким самим чином, як і блокування за допомогою bind - тобто генеруючи кастомні файли зон. Для цього також використовується скрипт cli/dnsgen з наступними параметрами:

# php cli/dnsgen --preview-unbound

для попереднього перегляду, того що буде згенероване, та

# php cli/dnsgen --generate-unbound

Для генерації файлу зон. Де його буде згенеровано, можна вказати за допомогою опції UNBOUND_DNS_ZONES у конфізі cli/1984tech.ini Далі,необхідно у основний файл конфігурації unbound.conf додати інклуд свіжо згенерованої зони, до секції control:

include: "/var/unbound/1984tech.conf"

Якось так:

Після чого, героїчно це все перезавантажуємо

# unbound-control reload   

Блокування засобами фаєрволу / IPFW

Далі як водиться редагуємо конфіг cli/1984tech.ini з метою встановлення шляхів до ipfw, таблички ipfw у котру будуть пушитись IP адреси доменів зі списку, так вказуємо шлях, по якому буде генеруватись скрипт оновлення фаєрволу. Також не забуваємо вказати DNS сервери, за допомогою яких ми хотіли б резолвити адреси.

Перш за все, нам необхідно буде вирішити, що робити з табличкою, куди буде запхано IP адреси хостів. Можемо просто брутально відправити її в deny, якось так:

# ipfw add 1984 deny ip from any to table\(42\)
# ipfw add 1984 deny ip from table\(42\) to any

або ж використати заворот за допомогою fwd, якось так:

# ipfw add 1984 fwd 127.0.0.1,80 ip from 172.16.0.0/24 to table\(42\) dst-port 80
# ipfw add 1984 fwd 127.0.0.1,443 ip from 172.16.0.0/24 to table\(42\) dst-port 443

Працездатність можна перевірити наприклад подивившись як резолвляться домени

# php cli/ipfwgen --resolve

або як виглядає скрипт, що повинен генеруватись методом

# php cli/ipfwgen --preview

Далі включаємо фантазію, та використовуємо це все методом

# php cli/ipfwgen --generate

або напряму апдейтимо табличку у фаєрволі за допомогою

# php cli/ipfwgen --tableupdate

Блокування засобами Mikrotik

При великому бажанні, можна нагенерувати адрес-лістів для Mikrotik-ів. Робиться це за допомогою скрипта cli/mtgen. Наразі керується він аж двома опціями, а власне MT_LISTNAME, що вказує на ім'я адрес-ліста, що буде згенеровано, та MT_SCRIPT_PATH котрий просто вказує куди ми це бажаємо зберігати на ФС. Детальніше з його опціями, ви можете ознайомитись за допомогою наступної команди:

# php cli/mtgen --help

Візуально ви можете перевірити, що він генерує за допомогою

# php cli/mtgen --preview

У цілому все виглядає аналогічно блокуванню за допомогою фаєрволу ipfw. Також ви можете спробувати скористатись блокуванням за іменем домену, покладаючись на резолв засобами самого Mikrotik:

# php cli/mtgen --listmk

Блокування засобами Mikrotik static DNS records

Для самих маленьких/дуже ледачих або просто якщо спосіб с адрес-лістами вам не підходить з ідеологічних будь-яких міркувань - можна використати можливість створення статичних DNS записів з перенаправленням їх в /dev/null, наприклад, на 127.0.0.1
Зробити то можна наступним способом:

# php cli/mtstaticdnsgen --preview   
# php cli/mtstaticdnsgen --generate

Також, для тих, хто працює виключно через Winbox і страшенно боїться Mikrotik CLI/Terminal, є варіант створення файлових чанків(шматків) розміром менше 4Kb з повного списку доменів та імпорту їх за допомогою Mikrotik-скрипта. Скрипт лежить тут mikrotikstaticdns/StaticDNSAdder.rsc. Загалом ця процедура виглядає так:

# php cli/mtstaticdnsgen --splitchunks

Дуже рекомендовано ознайомитись з іншими опціями MT_DNSSTATIC_* в 1984tech.ini
Додатковий мануал тут

Блокування на Linux засобами ipset/iptables

Перш за все, потрібно перевірити опції в cli/1984tech.ini на тему валідності шляхів у IPSET_PATH, IPTABLES_PATH та виставити вірні IPSET_LISTNAME з IPTABLES_CHAIN. Далі створюємо відповідний список ipset та оформлюємо його блокування у фаєрволі за допомогою

# ipset -N blacklist iphash
# iptables -t filter -A FORWARD -m set --match-set blacklist dst -j DROP

Далі ми можемо отримати скрипт оновлення списку в ipset за допомогою команди

# php cli/linuxgen --ipset

У випадку, якщо це потрібно, скрипт cli/linuxgen також може виконати для вас ці скрипти самостійно, наприклад, за допомогою команди

# php cli/linuxgen --ipsetupdate

Також ви можете захотіти (ми не знаємо причин для цього) використовувати для блокування просто iptables. Скрипт для оновлення вашого фаєрволу ви можете отримати за допомогою команди

# php cli/linuxgen --iptables  

Блокування засобами проксі / Squid

Squid - виконує функцію прозорого проксі, без кешування і без підміни сертифіката, тим самим не створює MITM аткаку.

Неможливо отримати доступ до сайту

Як це все насправді працює і налаштовується, Павутина все дуже гарно і дохідливо, розписав для вас у окремому рідмі для Squid.

Блокування засобами Juniper

Тут також все типово. Аж одна опція у конфізі JUN_LISTNAME, котра вказує на ім'я префіксліста, котрий буде згенеровано, здоровий набір з set policy-options за допомогою:

# php cli/jungen --preview

Та наступні налаштування фаєрволу:

MX80# set firewall family inet filter blacklist-ip-drop interface-specific
MX80# set firewall family inet filter blacklist-ip-drop term drop from destination-prefix-list blacklist-ip
MX80# set firewall family inet filter blacklist-ip-drop term drop then discard
MX80# set firewall family inet filter blacklist-ip-drop term other then accept
MX80# set interfaces xe-0/0/0 unit 1111 family inet filter output blacklist-ip-drop

Блокування засобами Cisco

Вказуємо за допомогою опції CIS_LISTNUM номер адрес ліста для чорного списку, після чого дивимось що вийшло за допомогою:

# php cli/cisgen --preview

Використовувати це можна за допомогою:

Cisco-6500(config)# access list 101 permit ip any any
Cisco-6500(config)# interface GigabitEthernet 0/24
Cisco-6500(config-if)# ip access-group 101 out

Блокування засобами PDNSD

Для конфігу PDNSD (зазвичай лежить тут /etc/pdnsd.conf) є можливість генерації negation sections, для блокування доменів.

# php cli/pdnsdgen --preview   
# php cli/pdnsdgen --generate

Після успіщної генерації файлу просто копіпастимо його вміст до конфігу PDNSD і робимо йому restart.
Детальніше про PDNSD:
https://manpages.debian.org/jessie/pdnsd/pdnsd.conf.5.en.html
https://wiki.archlinux.org/title/pdnsd
https://gist.github.com/gorakhargosh/1119508