All Projects → Prototype-X → blacklist-rkn-tool

Prototype-X / blacklist-rkn-tool

Licence: GPL-3.0 license
Python3 скрипт для работы с реестром запрещенных сайтов http://vigruzki.rkn.gov.ru/

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to blacklist-rkn-tool

Pihole5 List Tool
A tool for quickly and easily bulk adding allow and ad/block lists to a Pi-hole 5 installation
Stars: ✭ 185 (+537.93%)
Mutual labels:  blacklist
docker-dns-ad-blocker
A lightweight dnsmasq DNS server to block traffic to known ad servers with optional DNSCrypt support. Supports x86_64 and Raspberry Pi (armhf).
Stars: ✭ 78 (+168.97%)
Mutual labels:  blacklist
AntiBot
Lightweight BungeeCord plugin that aims to stop attacks on your server quickly and efficiently.
Stars: ✭ 42 (+44.83%)
Mutual labels:  blacklist
Blackweb
Domains Blocklist for Squid-Cache
Stars: ✭ 189 (+551.72%)
Mutual labels:  blacklist
domainos
A laravel package for blacklisting or whitelisting specific email providers or domains
Stars: ✭ 22 (-24.14%)
Mutual labels:  blacklist
accomplist
ACCOMPLIST - List Compiler
Stars: ✭ 51 (+75.86%)
Mutual labels:  blacklist
Google Chinese Results Blocklist
我终于能用谷歌搜中文了……
Stars: ✭ 5,841 (+20041.38%)
Mutual labels:  blacklist
browse-manager
Chrome扩展,网址/域名拉黑,访问次数统计、提示,自动收藏。等
Stars: ✭ 81 (+179.31%)
Mutual labels:  blacklist
russian-blackout
The RKN caused problems all over Russian Internet. This is list of services which suffered from RKN blockings activity.
Stars: ✭ 18 (-37.93%)
Mutual labels:  rkn
blackip
IP Blocklist for Ipset / Squid-Cache
Stars: ✭ 81 (+179.31%)
Mutual labels:  blacklist
Iosadblocklist
Ultimate Host List for Mobile Adblockers (Focused on iOS)
Stars: ✭ 229 (+689.66%)
Mutual labels:  blacklist
WaGis-Mass-IP-Blacklister-Windows
This Tool blocks a Mass of IP Adresses via the Windows Firewall. You can run in Automatic-Mode using a Abusive IP List like blocklist.de
Stars: ✭ 34 (+17.24%)
Mutual labels:  blacklist
jsCast
📻 An Audio Streaming Application written in JavaScript
Stars: ✭ 23 (-20.69%)
Mutual labels:  blacklist
Ipset asus
Skynet - Advanced IP Blocking For ASUS Routers Using IPSet.
Stars: ✭ 186 (+541.38%)
Mutual labels:  blacklist
Java-Proxy-Server
This is a simple HTTP/HTTPS proxy server written in Java
Stars: ✭ 149 (+413.79%)
Mutual labels:  blacklist
Unified Hosts Autoupdate
Quickly and easily install, uninstall, and set up automatic updates for any of Steven Black's unified hosts files.
Stars: ✭ 185 (+537.93%)
Mutual labels:  blacklist
ipblacklist-database
Blacklist ip addresses caught scanning or bruteforcing hosts
Stars: ✭ 18 (-37.93%)
Mutual labels:  blacklist
hosts
冷莫(trli)的规则唯一一个提供全球比较全的库Cold Mo (TRLI) rules is the only one to provide a global comparison of the library.
Stars: ✭ 4 (-86.21%)
Mutual labels:  blacklist
unwanted-twitch
Hide unwanted streams, games, categories and channels on: twitch.tv
Stars: ✭ 65 (+124.14%)
Mutual labels:  blacklist
PSBlackListChecker
Basic functionality of this module is ability to quickly verify if given IP address is on any of over 80 defined DNSBL lists. Below code will return results only if IP is on any of the lists. Advanced functionality of this module is ability to send reports to your email when things get bad on one of those 80 defined DNSBL listrs.
Stars: ✭ 50 (+72.41%)
Mutual labels:  blacklist

blacklist-rkn-tool

Code Health

Python3 скрипт bl-rkn.py для работы с реестром запрещенных сайтов http://vigruzki.rkn.gov.ru/

Сделано на базе проектов:

Возможности:

  • Получение дампа реестра
  • Хранение файлов дампа реестра
  • Сохранение дампа реестра в БД SQLite/PostgreSQL
  • Уведомление по email о изменениях в реестре, статистика (--stat)
  • Уведомление по email об обновлении: веб сервиса, формата выгрузки, памятки оператору
  • Генерация и подпись запроса с Rutoken
  • Хранение истории идентификаторов запросов
  • Поддержка формата файла выгрузки версии 2.2
  • Перекодировка доменов и url в кириллице
  • Фильтрация ip: 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 0.0.0.0/0, 0.0.0.0
  • Хранение нескольких версий реестра (--rollback)
  • Вывод изменений в реестре (--diff)
  • DNS резолвинг доменов из реестра в ipv4 и ipv6 адреса
  • Вывод списка актуальных ip, url, domain и истории запросов

Требования:

Python версии 3.4.0 и выше

Установленные пакеты: peewee, lxml, suds-jurko, psycopg2, dnspython

Установка:

  1. unzip blacklist-rkn-tool.zip -d /opt

  2. chmod a+x /opt/blacklist-rkn-tool/bl-rkn.py

  3. Установите пакеты:

     pip3 install peewee lxml suds-jurko dnspython
    

    Для работы достаточно установить один Database Adapter, для типа БД который будет использоваться (SQLite установлен по умолчанию):

     apt install libpq-dev
     pip3 install psycopg2   #для PostgreSQL
    

    Установить все пакеты:

     pip3 install -r requirements.txt
    
  4. Запустите скрипт, затем отредактируйте bl-rkn.cfg

  5. Настройте запуск по cron

    19 */3 * * *  root  /usr/bin/python3 /opt/blacklist-rkn-tool/bl-rkn.py --dump   
    #права root нужны для подписи запроса с использованием rutoken
    
  6. Для отправки писем:

    sudo apt-get install postfix

Запуск:

python3 bl-rkn.py

После первого запуска скрипта будет создан файл конфигурации bl-rkn.cfg.

Ключи:

--url показать список URL
--ip показать список ip
--domain показать список доменов
--history показать список запросов на получение дампа
--help, -h краткая справка
--bt атрибут реестра blockType [default, ip, domain, domain-mask]  
--dump получить последний дамп
--rollback 0 - последняя версия дампа, 1 - предпоследняя и т.д.
--diff 0 - изменения дампа относительно предыдущей версии дампа
--stat 0 - статистика по последней версии дампа
--resolve - принудительно запускает DNS резолвинг последней версии дампа
--version, -v версия скрипта

Файл конфигурации:

bl-rkn.cfg

[DataBase]
Type = 0 # 0 - SQLite, 1 - PostgreSQL
Name = blacklist # имя БД, для SQLite имя файла, без расширения
Host = localhost
Port = 5432
User = user
Password = password

[Log]
LogCount = 7 #количество файлов для ротации логов
LogRotate = midnight # время ротации s - секунды, h - часы, d - дни
LogInterval = 1 # если LogRotate = h, LogInterval = 2, тогда ротация лога будет каждые 2 часа
LogPathFName = /opt/bl-rkn/bl-rkn.log # имя и путь log файла

[Notify]
Notify = 0 # не отправлять письмо при изменении в реестре
Auth = 0 # не использовать авторизацию на почтовом сервере
Server = mail.domain.ru # адрес почтового сервера
Port = 25 # порт почтового сервера
StartTLS = 0 # шифрование
Login = [email protected] # логин для почтового сервера
Password = 159753 # пароль для почтового сервера
Subject = vigruzki.rkn.gov.ru ver. 2.2 update # тема письма
From = [email protected] # адрес отправителя
To = [email protected] # адрес получателя

[Request]
GenerateRequest = 0 # 1 - генерировать запрос .xml и .xml.p7s автоматически нужен usb ключ Rutoken
OperatorName = ООО "Телеком" # параметры необходимые для создания файла запроса актуально,
inn = 1234567890             # если GenerateRequest = 1
ogrn = 1234567890123         #
email = [email protected]      #
XMLPathFName = /opt/bl-rkn/request.xml # путь и имя файла запроса
P7SPathFName = /opt/bl-rkn/request.xml.p7s # путь и имя файла подписи
PEMPathFName = /opt/bl-rkn/cert.pem # сертификат подписи, актуально если GenerateRequest = 1
ID = 12345006000000007089123456789001 # id ключа в rutoken, актуально если GenerateRequest = 1

[History]
HistoryCount = 3000 # количество хранимых id запросов
DiffCount = 3 # количество версий реестра хранимых в БД, минимальное значение 1 

[Dump]
lastDumpDateUrgently = 1 # проверять новый дамп по параметру lastDumpDateUrgently
lastDumpDate = 1 # проверять новый дамп по параметру lastDumpDate (обновляется один раз в час)
DumpFileSave = 1 # сохранять дампы
DumpPath = # если не указано тогда сохранять дампы в директории скрипта/dumps/
GetResultMaxCount = 3 # количество попыток получения дампа

[Resolver]
Resolver = 1 # вкл. резолвинг доменов
IPv6 = 0 
DNS = 8.8.4.4 77.88.8.1

[OpenSSL]
Path =

Использование:

Получение полного списка для блокировки по url:

  1. Список url подлежащих блокировке

     bl-rkn.py --url
    
  2. Список доменов, где блокировка должна осуществлятся только по имени домена т.е. blockType = domain

     bl-rkn.py --domain --bt domain
    
  3. Список доменов, где блокировка должна осуществлятся только по маске домена т.е. blockType = domain-mask

     bl-rkn.py --domain --bt domain-mask
    
  4. Список ip, где блокировка должна осуществлятся только по ip адресам т.е. blockType = ip

     bl-rkn.py --ip --bt ip
    

Примеры использования аргументов коммандной строки --diff x, --rollback x, --stat x:

Количество версий реестра задается в конфигурации опцией DiffCount.

Когда аргумент --rollback не указан, что эквивалентно --rollback 0 и соответствует самой последней версии реестра.

Аргумент --diff 0 показывает разницу между поледней и предпоследней версией реестра, что позволяет сделать однократную полную выгрузку IP/URL/Domain в систему фильтрации трафика, а в дальнейшем выгружать только изменения в реестре, что позволяет экономить ресурсы и ускоряет обновление данных в системе фильтрации.
Разница отображается с помощью символов '+' и '-' перед IP/URL/Domain.

Пример однократной полной выгрузки IP/URL/Domain в систему фильтрации трафика и накат изменений в реестре:

У нас хранится три версии реестра т.е. DiffCount = 3

bl-rkn.py --rollback 2 --ip #вывод ip самой старой версии реестра [0, 1, 2]
bl-rkn.py --diff 1 --ip #изменения в предпоследней версии реестра
bl-rkn.py --diff 0 --ip #изменения последней версии реестра

В дальнейшем для поддержания реестра в актуальном состоянии достаточно после получения нового реестра выполнить:

bl-rkn.py --diff 0 --ip

Аргумент --stat x показывает подробную статистику изменений в реестре

bl-rkn.py --stat 0

Получение ip адресов методом разрешения доменных имен из реестра.

Включается когда в конфигурации Resolver = 1. Запускается автоматически после получения нового реестра

bl-rkn.py --dump

При отображении списка ip адресов, будет выведен результат работы резолвера:

bl-rkn.py --ip

Для получения списка ip из реестра, необходимо в конфигурации сделать Resolver = 0

Как показала практика количество ip адресов полученное методом разрешения доменных имен, почти в два раза меньше, чем в реестре.

Для PostgreSQL:

  • Запуск CLI:

      sudo -u postgres psql
    
  • Установить пароль для пользователя postgres:

      postgres=# \password postgres
    
  • Создать нового пользователя:

      CREATE USER blrkn WITH PASSWORD 'passwd' CREATEDB;
    

Оптимизация настроек сервера PostgreSQL:

mamonsu

pgtune

Документация PostgreSQL:

Документация PostgreSQL на русском языке

Книга Работа с PostgreSQL настройка и масштабирование

Видео администрирование PostgreSQL

Сравнение РСУБД

Примечания:

Описание процедуры получения реестра: http://vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf

Версии 1.5.0 и выше не совместимы с предыдущими версиями blacklist-rkn-tool, создайте БД заново, перед этим экспортируйте таблицу history, а затем импортируйте в новую БД.

Обзор аналогов:

GNU GPL утилиты для блокировки сайтов:

nfqfilter

extfilter

Пообщаться с авторами утилит, получить ответы на вопросы forum.nag.ru

Gitter

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].