Користувальницькькі налаштування

Налаштування сайту


1984tech

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

1984tech [2017/05/30 15:17]
1984tech [2022/09/24 14:39] (поточний)
Рядок 1: Рядок 1:
 +====== 1984tech - блокування за списком доменів ======
 +{{ :ingsoc.png|}}
  
 +Декілька посилань для загального розвитку:
 +  * [[https://uk.wikipedia.org/wiki/%D0%9C%D0%B5%D1%80%D0%B5%D0%B6%D0%B5%D0%B2%D0%B8%D0%B9_%D0%BD%D0%B5%D0%B9%D1%82%D1%80%D0%B0%D0%BB%D1%96%D1%82%D0%B5%D1%82|Мережевий нейтралітет]]
 +  * [[http://www.president.gov.ua/ua/documents/constitution/konstituciya-ukrayini-rozdil-i|Конституція України]]
 +  * [[https://uk.wikipedia.org/wiki/%D0%94%D0%B6%D0%BE%D1%80%D0%B4%D0%B6_%D0%9E%D1%80%D0%B2%D0%B5%D0%BB%D0%BB|Джордж Орвелл]]
 +  * [[http://www.president.gov.ua/documents/1332017-21850|Указ президента України №133/2017]]
 +  * [[http://www.rnbo.gov.ua/documents/473.html|Указ президента України №126/2018]]
 +  * [[https://www.president.gov.ua/documents/3762021-39745|Указ президента України №376/2021]]
 +
 +Трохи технологічних посилань:
 +  * [[https://github.com/nightflyza/1984tech|Розробка на GitHub]]
 +  * [[https://github.com/nightflyza/1984tech/archive/master.zip|Поточний снапшот]]
 +  * [[https://ubilling.net.ua/1984tech/|Лендінг проекту. Можливо згодом тут буде відбуватись щось цікаве.]]
 +
 +Списки доменів:
 +
 +  * [[https://ubilling.net.ua/1984tech/domains.txt|domains.txt]]
 +  * [[https://ubilling.net.ua/1984tech/domains.json|domains.json]]
 +
 +====== Завантаження та налаштування ======
 +
 +Завантажуємо, та розпаковуємо.
 +
 +  # wget --no-check-certificate https://github.com/nightflyza/1984tech/archive/master.zip
 +  # unzip master.zip
 +  # cd 1984tech-master/
 +
 +Для використання функціоналу з блокування доменів по їх IP адресах, а саме засобами різноманітних фаєрволів, може бути потрібне встановлення пакунку [[http://pear.php.net/package/Net_DNS2/redirected|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:
 +<code>
 +include: "/var/unbound/1984tech.conf"
 +</code>
 +
 +Якось так: \\
 +{{:1984unbound2.png?300|}}
 + 
 +Після чого, героїчно це все перезавантажуємо
 +  # 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 ======
 +Для самих маленьких/дуже ледачих або просто якщо спосіб с адрес-лістами вам не підходить з <del>ідеологічних</del> будь-яких міркувань - можна використати можливість створення **статичних DNS записів** з перенаправленням їх <del>в /dev/null</del>, наприклад, на **127.0.0.1** \\
 +Зробити то можна наступним способом:
 +
 +  * візуально можете перевірити генерацію за допомогою
 +
 +  # php cli/mtstaticdnsgen --preview   
 +  
 +
 +
 +  * згенерувати файл (шлях до якого задається опцією **MT_DNSSTATIC_SCRIPT_PATH**) з готовим скриптом для копіпасту до Mikrotik CLI/Terminal можна так 
 +
 +  # php cli/mtstaticdnsgen --generate
 +
 +Також, для тих, хто працює виключно через Winbox і страшенно боїться Mikrotik CLI/Terminal, є варіант створення файлових чанків(шматків) розміром менше 4Kb з повного списку доменів та імпорту їх за допомогою Mikrotik-скрипта. Скрипт лежить тут //mikrotikstaticdns/StaticDNSAdder.rsc//. Загалом ця процедура виглядає так: \\
 +  * створюємо скрипт **StaticDNSAdder.rsc** на Mikrotik і копіпастимо в нього вміст одноіменного скрпта //mikrotikstaticdns/StaticDNSAdder.rsc//
 +  * створюємо файлові чанки (шлях до каталогу, де буде розміщено чанки, задається опцією **MT_DNSSTATIC_CHUNKS_PATH**): 
 +
 +  # php cli/mtstaticdnsgen --splitchunks
 + 
 +  * кладемо створені чанки, які будуть іменуватись якось так **mt_dnsstatic_chunk_<number>.1984t**, до Mikrotik ///files//
 +  * запускаємо скрипт, уважно дивимось "вихлоп" у Mikrotik Log 
 +
 +Дуже рекомендовано ознайомитись з іншими опціями **MT_DNSSTATIC_*** в **1984tech.ini** \\
 +Додатковий мануал [[https://github.com/nightflyza/1984tech/blob/master/mikrotikstaticdns/README.md|тут]]
 +
 +====== Блокування на 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 аткаку.\\
 +  * При блокуванні HTTP трафіку - клієнтові показується наша сторінка з причиною блокування.
 +  * При блокуванні HTTPS трафіку - Squid просто скидає з'єднання і браузер показує повідомлення:
 +
 +<code>
 +Неможливо отримати доступ до сайту
 +</code>
 +
 +Як це все насправді працює і налаштовується, Павутина все дуже гарно і дохідливо, розписав для вас у [[https://github.com/nightflyza/1984tech/blob/master/squid/README.md|окремому рідмі]] для Squid.
 +
 +====== Блокування засобами Juniper ======
 +
 +Тут також все типово. Аж одна опція у конфізі JUN_LISTNAME, котра вказує на ім'я префіксліста, котрий буде згенеровано, здоровий набір з set policy-options за допомогою:
 +
 +  # php cli/jungen --preview
 +
 +Та наступні налаштування фаєрволу:
 +
 +<code>
 +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
 +</code>
 +
 +
 +====== Блокування засобами Cisco ======
 +
 +Вказуємо за допомогою опції CIS_LISTNUM номер адрес ліста для чорного списку, після чого дивимось що вийшло за допомогою:
 +  # php cli/cisgen --preview
 +
 +Використовувати це можна за допомогою:
 +<code>
 +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
 +</code>
 +
 +====== Блокування засобами PDNSD ====== 
 +Для конфігу PDNSD (зазвичай лежить тут ///etc/pdnsd.conf//) є можливість генерації **negation sections**, для блокування доменів. \\
 +  * візуально можете перевірити генерацію за допомогою
 +
 +  # php cli/pdnsdgen --preview   
 +
 +
 +  * згенерувати файл (шлях до якого задається опцією **PDNSD_SCRIPT_PATH**) з готовим скриптом для копіпасту до **pdnsd.conf** можна так 
 +
 +  # 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 \\