commit 642ffd0bd2b935f77a96bd77ce5fe753a762b88a Author: gSpotx2f Date: Fri Jun 19 20:46:35 2020 +0300 Initial Home page diff --git a/Home.md b/Home.md new file mode 100644 index 0000000..7c43f17 --- /dev/null +++ b/Home.md @@ -0,0 +1,180 @@ +## Описание + +Ruantiblock - решение для обхода блокировок (при помощи Tor или VPN-соединения) с выборочной проксификацией трафика к заблокированным ресурсам (при этом доступ к остальным ресурсам осуществляется напрямую). В качестве источника списка блокировок поддерживаются выгрузки с сайтов: [https://rublacklist.net](http://rublacklist.net), [zapret-info](https://github.com/zapret-info/z-i) и [https://antifilter.download](https://antifilter.download), а также список созданный самим пользователем. Включает в себя функции управления правилами iptables, списками ipset и парсер списка блокировок. Доступны конфигурации с использованием доменных имен (dnsmasq) и IP адресов (включая диапазоны CIDR). + +Данная версия решения предназначена для OpenWrt. В отличии от других решений подобного типа не имеет жёсткой интеграции и привязки исключительно к OpenWrt (при этом поддерживает конфигурацию через UCI, а также имеется функциональное LuCI-приложение) и может быть перенесено на другие Linux. Вся конфигурация находится в одном месте, все операции выполняются с помощью одного скрипта (`/usr/bin/ruantiblock`), широкие возможности конфигурации. Помимо прочего, данное решение предлагает опции для собственной тонкой настройки оптимизации списка блокировок: группировка и суммаризация IP, объединение поддоменов, фильтрация записей по шаблонам... + + +## [Установка](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0) + + +## Режимы прокси + +Доступны два режима проксификации трафика: с использованием сети Tor или клиентского VPN соединения (OpenVPN). Режим прокси определяется парметром `ruantiblock.config.proxy_mode`. `1` - Tor, `2` - VPN. Включение VPN конфигурации: + + uci set ruantiblock.config.proxy_mode="2" + uci commit ruantiblock + +Данный параметр влияет, в первую очередь, на процесс создания правил iptables. В Tor конфигурации правила создаются в цепочке `nat`, при VPN конфигурации - в `mangle`. Соответственно, и удаление правил при выключении ruantiblock зависит от выбранного типа прокси. Поэтому, перед изменением этого параметра следует отключить ruantiblock (`/usr/bin/ruantiblock stop`), для корректного удаления правил предыдущей конфигурации. + + +## Режимы обновления блэклиста и модули-парсеры + +Обновление блэклиста может выполняться в 2-х режимах: + +1. Режим `ip` - в этом режиме модули загружают из блэклиста все IP адреса и диапазоны CIDR, которые содержатся в записях, и они сразу помещаются в соответствующие ipset'ы. Данный вариант не задействует в своей работе dnsmasq, т.е список блокировок статичен и формируется только при обновлении. + +2. Режим `fqdn` - в этом режиме из блэклиста извлекаются доменные имена (FQDN). Из записей, в которых отсутствует доменное имя, извлекаются IP адреса и CIDR диапазоны. Домены заносятся в конфиг dnsmasq и, далее, dnsmasq формирует временный список ipset по мере обращения к этим доменам - записи добавляются и удаляются динамически на основе DNS-запросов и таймаута. Т.е. домены обрабатывает dnsmasq, а CIDR диапазоны и IP адреса помещаются сразу в ipset. В этом режиме разрешение доменного имени в IP адрес происходит при обращении к заблокированному сайту, следовательно IP адрес сайта всегда будет актуальным (даже если устарел в самом списке блокировок). + +Режим работы модуля можно задать в UCI: + + uci set ruantiblock.config.bllist_mode="ip" + uci commit ruantiblock + +**Модули-парсеры:** + +`/usr/bin/ruab_parser.lua` - стандартный модуль на Lua. Работает быстро, когда достаточно свободной оперативной памяти. + +`/usr/bin/ruab_parser.py` - дополнительный модуль, написан на Python3 и не имеет проблем с кириллицей, кодировкой CP1251 (`zapret-info`) и пр. Очень стабильный, аккуратно раcходует память. Недостаток лишь в том, что нужно ставить Python3. [Установка](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/Python-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C). + +Модуль можно задать в UCI: + + uci set ruantiblock.config.bllist_module="/usr/bin/ruab_parser.py" + uci commit ruantiblock + +**Источники блэклиста:** + +`rublacklist` - https://rublacklist.net. Применяется по умолчанию. Имеет удобный API и в выдаче нет ничего лишнего. + +`zapret-info` - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv. Чистый реестр от РКН в исходном виде. Содержит много лишних данных (всякие статьи, основания, судебные решения и пр. для каждой записи), что увеличивает размер файла (к тому же в кодировке CP1251). Можно использовать вместо предыдущего, разница лишь в чуть более долгой работе модуля-парсера при обновлениях. + +`antifilter` - https://antifilter.download. Этот источник для устройств, которым не хватает оперативной памяти для полных списков блокировок. В режиме `fqdn` модули загружают только список доменов (без IP адресов). В режиме `ip` - оптимизированный список IP адресов (все адреса приведены к маске /24), который очень компактен в размере, но покрывает огромное количество лишних IP адресов в диапазонах. + +Изменение источника блэклиста в конфигурации: + + uci set ruantiblock.config.bllist_source="zapret-info" + uci commit ruantiblock + + +## Дополнительные настройки + +Далее описаны некоторые опции доступные через UCI, они переопределяют часть переменных конфигурационного файла `/etc/ruantiblock/ruantiblock.conf`. + ++ **Проксификация трафика локальных клиентов (`PROXY_LOCAL_CLIENTS=1`):** + +Эта опция включает обработку трафика локальных приложений роутера в ruantiblock. Т.е. различные сетевые утилиты установленные на самом роутере ходят на заблокированные сайты через Tor или VPN. Можно отключить если нет необходимости: + + uci set ruantiblock.config.proxy_local_clients="0" + ++ **Очистка ipset перед обновлением блэклиста (`IPSET_CLEAR_SETS=0`):** + +Включение этой опции позволяет освободить некоторое количество оперативной памяти (зависит от текущего размера списка блокировок) перед обновлением блэклиста. Недостаток в том, что во время обновления не применяются правила отбора трафика в Tor или VPN, т.е. обход блокировок не работает до завершения обновления блэклиста. Следует применять лишь в случае проблем со свободной оперативной памятью. Включить: + + uci set ruantiblock.config.ipset_clear_sets="1" + ++ **LAN интерфейс:** + +Параметр нужен для правил iptables в Tor конфигурации. Должен содержать интерфейс, через который приходят пакеты из локальной сети. По умолчанию: `eth0` + + ruantiblock.config.if_lan="eth0" + ++ **VPN интерфейс:** + +Параметр нужен для правил маршрутизации в VPN конфигурации. Должен содержать интерфейс L3 VPN. По умолчанию (OpenVPN): `tun0` + + ruantiblock.config.if_vpn="tun0" + ++ **Запись событий в syslog (`USE_LOGGER=1`):** + +Опция включает запись событий в системный лог. Отключить: + + uci set ruantiblock.config.use_logger="0" + ++ **Полная проксификация всего трафика, без применения правил блэклиста (`DEF_TOTAL_PROXY=0`):** + +При активном ruantiblock можно включить режим полного прокси выполнив в консоли: + + /usr/bin/ruantiblock total-proxy-on + +В этом режиме весь трафик заворачивается в Tor или VPN, без применения правил блэклиста. Отключение: + + /usr/bin/ruantiblock total-proxy-off + +Этот режим доступен только при отключенной проксификации локальных клиентов (`PROXY_LOCAL_CLIENTS=0`, `ruantiblock.config.proxy_local_clients="0"`). Включение режима полного прокси при запуске ruantiblock: + + uci set ruantiblock.config.def_total_proxy="1" + ++ **Оптимизации записей в итоговых конфигах ipset и dnsmasq: группировка субдоменов и IP адресов, суммаризация IP адресов (`SD_LIMIT`, `IP_LIMIT`, `OPT_EXCLUDE_SLD`, `OPT_EXCLUDE_NETS`, `SUMMARIZE_IP`, `SUMMARIZE_CIDR`):** + +[Подробнее здесь](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B2-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA)... + ++ **Фильтрация записей блэклиста по шаблонам (`FQDN_FILTER`, `IP_FILTER`):** + +Переменные определяют параметры функции предварительной фильтрации записей блэклиста. [Подробнее здесь](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B1%D0%BB%D1%8D%D0%BA%D0%BB%D0%B8%D1%81%D1%82%D0%B0-%D0%BF%D0%BE-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0%D0%BC)... + ++ **Преобразование кириллических доменов в punycode (`USE_IDN=0`):** + +В lua-модуле (`ruab_parser.lua`) преобразование выполняется дополнительной библиотекой lua-idn. Python-модуль (`ruab_parser.py`) уже имеет всё необходимое в стандартной библиотеке. Если существует насущная необходимость учитывать кириллические домены, то с этим лучше справляется именно python-модуль. Данная опция некорректно работает с источником `zapret-info` в lua-модуле, поскольку данные имеют кодировку CP1251 и конвертирование кодировок выполняется утилитой iconv, но OpenWrt не поддерживает CP1251. Поэтому, правило такое: если нужны кириллические домены и источник блэклиста `zapret-info` - используйте только python-модуль! Вообще, во всём списке блокировок количество кириллических доменов не значительно, без преобразования в punycode они просто не проходят через регулярные выражения и отбрасываются парсером... Включить: + + uci set ruantiblock.config.use_idn="1" + ++ **Разрешение DNS-имен через альтернативный DNS-сервер (`ALT_NSLOOKUP=0`):** + +Добавление записи DNS-сервера для каждого домена в конфиге dnsmasq (очень существенно увеличивает размер конфига dnsmasq!): + + uci set ruantiblock.config.alt_nslookup="1" + +Если провайдер блокирует сторонние DNS-серверы, то необходимо использовать dnscrypt-proxy (или [https-dns-proxy](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-https-dns-proxy) и пр.) на роутере. На сегодняшний день, лучший вариант - применять полное шифрование DNS, вообще без использования этой опции. + +Tor также имеет свой собственный резолвер, который вполне можно использовать... + ++ **Альтернативный DNS-сервер (`ALT_DNS_ADDR="8.8.8.8"`):** + +Альтернативный DNS-сервер для предыдущего пункта. + + uci set ruantiblock.config.alt_dns_addr="8.8.8.8"` # можно указывать с портом: "8.8.8.8#53" + +Если `ruantiblock.config.alt_nslookup="1"`, то для каждого домена в конфиге dnsmasq добавляется дополнительная запись, указывающая использовать данный DNS-сервер для этого домена. + + +Есть и другие параметры для более тонкой настройки, часть из них имеют пояснения в самом конфигурационном файле. Также, смотрите UCI-конфиг `/etc/config/ruantiblock`. + + +## [Способы оптимизации и сокращения количества записей в списке блокировок.](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B2-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA) + + +## [Записи пользователя в блэклисте.](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F-%D0%B2-%D0%B1%D0%BB%D1%8D%D0%BA%D0%BB%D0%B8%D1%81%D1%82%D0%B5) + + +## Параметры запуска: + + ruantiblock start # Включение ruantiblock. Создаются списки ipset, правила iptables и пр. + ruantiblock stop # Выключение ruantiblock. Очищаются все списки ipset, удаляются правила iptables. Трафик идет стандартным способом, Tor или VPN не используется + ruantiblock destroy # То же, что и stop + удаление всех списков ipset и очистка файлов ruantiblock.dnsmasq и ruantiblock.ip + ruantiblock restart # Рестарт + ruantiblock reload # Пересоздание цепочки и правил iptables (а также таблицы маршутизации при VPN-конфигурации) + ruantiblock update # Обновление блэклиста и списков ipset + ruantiblock force-update # Принудительное обновление блэклиста (может потребоваться если предыдущее обновление выполнено некорректно или было прервано в процессе выполнения) + ruantiblock data-files # Создание файлов ruantiblock.dnsmasq и ruantiblock.ip, без обновления сетевой конфигурации + ruantiblock total-proxy-on # Включение режима полного прокси. Весь трафик всегда идёт через прокси (Tor или VPN), списки блокировок не используются для отбора трафика (работает при включенном ruantiblock) + ruantiblock total-proxy-off # Выключение режима полного прокси (работает при включенном ruantiblock) + ruantiblock status # Вывод текущего статуса, а также общей инфо (кол-во записей в списках ipset, дата последнего обновления блэклиста и пр.) + + +Перед изменением конфигурации ruantiblock необходимо обязательно выполнить удаление всех сетов и правил iptables: + + /usr/bin/ruantiblock destroy + +после изменения настроек выполнить обновление: + + /usr/bin/ruantiblock start + /usr/bin/ruantiblock update + + +## Отключение запуска при загрузке системы + + /etc/init.d/ruantiblock disable + + +## [Если после установки возникли проблемы...](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%95%D1%81%D0%BB%D0%B8-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8-%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%BB%D0%B8-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B...) +