Декілька посилань для загального розвитку:
Трохи технологічних посилань:
Списки доменів:
Завантажуємо, та розпаковуємо.
# 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
Робимо конфігурацію 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
Працює приблизно таким самим чином, як і блокування за допомогою 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
Далі як водиться редагуємо конфіг 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-ів. Робиться це за допомогою скрипта cli/mtgen. Наразі керується він аж двома опціями, а власне MT_LISTNAME, що вказує на ім'я адрес-ліста, що буде згенеровано, та MT_SCRIPT_PATH котрий просто вказує куди ми це бажаємо зберігати на ФС. Детальніше з його опціями, ви можете ознайомитись за допомогою наступної команди:
# php cli/mtgen --help
Візуально ви можете перевірити, що він генерує за допомогою
# php cli/mtgen --preview
У цілому все виглядає аналогічно блокуванню за допомогою фаєрволу ipfw. Також ви можете спробувати скористатись блокуванням за іменем домену, покладаючись на резолв засобами самого Mikrotik:
# php cli/mtgen --listmk
Для самих маленьких/дуже ледачих або просто якщо спосіб с адрес-лістами вам не підходить з ідеологічних будь-яких міркувань - можна використати можливість створення статичних 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
Додатковий мануал тут
Перш за все, потрібно перевірити опції в 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 - виконує функцію прозорого проксі, без кешування і без підміни сертифіката, тим самим не створює MITM аткаку.
Неможливо отримати доступ до сайту
Як це все насправді працює і налаштовується, Павутина все дуже гарно і дохідливо, розписав для вас у окремому рідмі для Squid.
Тут також все типово. Аж одна опція у конфізі 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
Вказуємо за допомогою опції 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 (зазвичай лежить тут /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