Продвинутая настройка
Данный раздел является необязательным. Он предназначен для тех, кто хочет максимально настроить систему фильтрации под требования Вашей сети.
Конфигурационный файл
Ниже представлен пример конфигурационного файла со всеми существующими параметрами:
--- # Устанавливает уровень логирования. # Возможные варианты: DEBUG (логируется вся вспомогательная информация), INFO (логируется только информация из критичных мест (ответы ACL, загрузки списков)). loglevel: DEBUG # Включает логирование ответов ACL. Увеличивает время ответа ACL на ~20% log_acl: False # Содержит системные пути к различным командам. system_paths: # Путь к команде `ipset`. ipset: /sbin/ipset # Путь к команде `unbound-control`. unbound_control: /usr/sbin/unbound-control # Путь к команде `iptables`. iptables: /sbin/iptables # Путь к команде `ip6tables`. ip6tables: /sbin/ip6tables # Путь к команде `iptables-restore`. iptables_restore: /sbin/iptables-restore # Путь к команде `ip6tables-restore`. ip6tables_restore: /sbin/ip6tables-restore # Путь к команде `service`. service: /usr/sbin/service # Включает поддержку IPv6 в системе фильтрации - IPv6 адреса переносятся из источников в базу; доменные имена разрешаются в IPv6 адреса. ipv6_support: true ip_aggregator: # Граница агрегации. ip-barrier: 120 # Включение агрегирования. enabled: true resolver: # Количество параллельных подключений к Unbound. concurrency: 500 # Время, которое прибавляется в реальному `ttl`, чтобы получить фиктивный. ttl: 3h # Таймаут между циклами разрешения доменов находящихся в базе. interval: 5m # Анонсировать маршруты посредством exabgp. dynamic-routing: true # next hop для всех анонсируемых маршрутов, менять только в случае необходимости. bgp-next-hop: 8.8.8.8 # Устанавливает максимальное количество IP-адресов, которые будут заноситься в базу, после разрешения домена. ip-limit: 12 # Адрес DNS-сервера, через который сервис `zi-update` будет производить разрешение доменных имён. dns-name: 127.0.0.1 admin: # Токен, используемый утилитой zi-check для авторизации и получения списка урлов. check-api-token: 32b24177-ad41-40ea-af74-45c9e5bdbf4d # Следующие значения устанавливают порог, превысив который, в web-интерфейсе на главной странице будут создаваться оповещения. # Допустимое количество дней с момента последней загрузки источника (любого). max_time_delta: 2 # Допустимый процент используемой RAM. memory_threshold: 80 # Допустимый процент используемого своп-файла. max_expected_swap: 80 # Допустимый процент используемого места на диске. max_expected_memory: 80 # Каждый модуль загрузки (enricher) состоит из парсера и загрузчика. По умолчанию они оба включены. # enable_parser: false - выключает парсер (занесение информации в бд). # enable_downloader: false - выключает загрузчик. Парсер всё ещё работает. enrichers: # Мин.Юст. mjust: name: mjust #enable_parser: false #enable_downloader: false # Белый список Роскомнадзора. # Стоит отметить, что он является полуофициальным. В нём находятся домены государственных служб, компаний. wrkn: name: wrkn enable_parser: false enable_downloader: false # Адрес загрузки. url: https://storage.googleapis.com/smisc/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D1%85%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2.xlsx # Время, через которое источник будет загружаться. По умолчанию 24 часа. # Пример формата: 12h - каждые 12 часов, 10m - каждые 10 минут. period: 24h # Список Роскомнадзора. rkn: name: rkn #enable_parser: false #enable_downloader: false operator_info: # Настроить, если для подписи запросов к API получения выгрузки используется ключ. # Этот блок необходимо закомментировать или удалить. operatorname: OOO "ОПЕРАТОР" inn: '6670123456' ogrn: '116670002345' email: 'root@loclhost.com' # Файлы для создания квалифицированной электронной подписи. certificate: /var/lib/skydns-zi/keys/private.pem privatekey: /var/lib/skydns-zi/keys/id_rsa.key signed_files: # Настроить, если для подписи запросов к API получения выгрузки. # Используется заранее заготовленный и подписанный запрос. # Этот блок необходимо закомментировать или удалить. xmlreqfile: /var/lib/skydns-zi/req/request.xml signaturefile: /var/lib/skydns-zi/req/request.xml.sig ipset_config: # Обратите внимание, что существуют аналогичные параметры для протокола IPv6 (в тех же блоках, но с цифрой 6). # Определяет размер хэша для указанных `ipset`. hash_size: v4_http_black_dst: 65536 v4_https_black_dst: 65536 v4_blacklist_nets_dst: 65536 v4_isp_nets_src: 1024 v4_isp_bypass_nets_src: 1024 v4_whitelisted_ips: 1024 # Устанавливает максимальное количество элементов, которое может содержать указанный `ipset`. max_elem: v4_http_black_dst: 150000 v4_https_black_dst: 150000 v4_blacklist_nets_dst: 150000 v4_isp_nets_src: 1024 v4_isp_bypass_nets_src: 1024 v4_whitelisted_ips: 1024
Отключение загрузки и осуществление фильтрации по URL из списка Минюста
По умолчанию с сайта https://www.skydns.ru SkyDNS Zapret ISP скачивает список URL, подготовленный SkyDNS, на основе списка Министерства юстиции РФ. Чтобы не скачивать и не осуществлять фильтрацию по этому списку URL, установите значение параметров enricher.mjust.downloader: false
enricher.mjust.parser: false
в /etc/skydns-zi/config.yml
:
mjust: downloader: false parser: false
Удалите связанные с этим списком файлы:
rm /var/lib/skydns-zi/src/zi-mj-urllist*
Отключать не рекомендуется, так как через этот источник распространяются поддомены доменов, которые Роскомнадзор блокирует по маске.
Firewall
При установке пакета создаются правила firewall и ipset-ы, необходимые для работы skynds-zi. Если Вам необходимо добавить свои правила или ipset-ы, добавьте их в файлы /etc/firewall.conf
и /etc/ipset.conf
.
Содержимое данных файлов должно соответствовать формату выходных данных команд iptables-save
и ipset save
. Если Вы добавляете правила любым другим способом, они не будут восстановлены после перезагрузки системы.
Отказоустойчивость
Рассмотрим различные схемы подключения SkyDNS Zapret ISP в сеть и способы осуществления отказоустойчивости:
- Динамическая маршрутизация. В случае выхода из строя сервера SkyDNS Zapret ISP, перенаправление исходящего трафика на систему фильтрации осуществляться не будет, таким образом, не пострадает основной сервис сети - предоставление доступа абонентам в сеть Интернет.
- Статическая маршрутизация. В случае выхода из строя сервера SkyDNS Zapret ISP, необходимо на уровне скрипта предусмотреть очистку таблицы маршрутизации от добавленных статических маршрутов.
Диаграмма ниже демонстрирует способ осуществления отказоустойчивости при внедрении динамической маршрутизации:
В данном случае было настроено две OSPF-сессии - по одной для каждой из системы фильтрации. В случае отказа одного из серверов, трафик маршрутизировался на второй.
Масштабирование
Для масштабирования решения возможна установка в сеть дополнительного сервера SkyDNS Zapret ISP.
Если Вы используете схему с динамической маршрутизацией - необходимо, чтобы все маршруты, получаемые с серверов фильтрации по OSPF имели одинаковую стоимость маршрута (Equal-cost multi-path routing - ECMP), иначе никакого смысла от дополнительных серверов не будет, так как трафик будет идти через один. По умолчанию протокол OSPF поддерживает до 4 альтернативных путей.
Диаграмма ниже демонстрирует способ осуществления отказоустойчивости при внедрении динамической маршрутизации:
В данном случае было настроено две OSPF-сессии - по одной для каждой из системы фильтрации.
Настройка балансировки на маршрутизаторе является индивидуальной, согласно документации производителя Вашего маршрутизатора.
Если Вы используете схему со статической маршрутизацией, то для всех дополнительных серверов достаточно будет выполнить шаги, указанные здесь (см Статическая маршрутизация).
В настоящее время единый центр управления серверами отсутствует. Каждый сервер придётся настраивать и обслуживать отдельно. На каждом сервере необходимо будет установить одинаковый конфигурационный файл, продублировать Списки исключений и настроить OSPF (BGP) сессии.
Списки исключений
Черный список
Список ресурсов, которые провайдер должен индивидуально блокировать по судебным решениям. Допустимые типы блокировок: URL, domain, IP-адрес. Изменения вступают в силу с задержкой порядка пяти минут.
Белый список
Список ресурсов, которые провайдер исключает из блокировки. Исключение может быть произведено по: URL, domain, IP-адрес. Имеет более высокий приоритет, чем Черный список. Изменения вступают в силу с задержкой порядка пяти минут.
Если Вы добавляете домен в Белый список, то все IP-адреса, ассоциированные с ним, станут белыми. Таким образом Вы можете противодействовать тем доменам, которые добавляют IP-адреса популярных сайтов к своим (IP-спуфинг).
Пример: yandex.ru
разрешился в 77.88.8.8/32
, этот IP-адрес исчезает из анонсов.
Серый список
Список сетей. Данный список позволяет Вам перенаправлять весь трафик, идущий в заданные сети, на сервер фильтрации. Отличие от добавления IP-адреса в Черный список заключается в том, что трафик на IP-адреса из Черного списка блокируется на уровне iptables
, не достигая ACL. Его приоритет выше Черного списка, но ниже Белого. Изменения вступают в силу с задержкой порядка пяти минут.
Если Вы хотите незамедлительного применения обновлений, воспользуйтесь командами: zi-ctl domain в случае добавление в список домена или URL, zi-ctl route в случае добавление в список IP-адреса.
Редактирование
Через консоль: zi-ctl filter
Через WEB UI:
Раздел Списки/(Черный|Белый|Серый) список (Создание нового правила)
Продвинутая настройка Squid
Конфигурационный файл /etc/squid/squid.conf
.
В случае, если Вы наблюдаете проблему излишней блокировки, используйте следующую информационную справку.
Принцип работы Squid: Squid осуществляет балансировку запросов по 2 воркерам каждый из которых форкает по 4 процесса zi_sni_check, которые используются для фильтрации https трафика по имени домена, и zi_url_check, которые используется для фильтрации http трафика.
За это отвечают данные строки конфига:
workers 2 external_acl_type zi_sni_check children-max=4 %ssl::>sni sudo -u skydns-zi zi-squid-acl SNI external_acl_type zi_url_check children-max=4 %DST %PORT %PATH sudo -u skydns-zi zi-squid-acl URL
Изменение параметра workers
изменяет количество процессов Squid-а. Параметр children-max
отвечает за количество подпроцессов, производящих фильтрацию.
Следует помнить, что каждый подпроцесс имеет свой кэш ответов. Необоснованное увеличение их количества может привести к истощению ресурсов машины, и, как результат, прекращения функционирования системы фильтрации в целом.
Параметры, помогающие решить проблему чрезмерной блокировки:
negative_ttl
- определяет время, в течение которого будут храниться отрицательные ответы (блокировка доступа) от подпроцесса фильтрации (значение в секундах, по умолчанию 1 час).cache
- определяет размерность кэша одного подпроцесса (по умолчанию 262144).
Необходимо добавить эти параметры перед children-max
После любых изменений нужно перезапустить сервис:
service squid restart
и обязательно проверить корректность запуска в лог файле /var/log/squid/cache.log
.
Squid и HTTPS
Для фильтрации HTTPS трафика Squid использует самоподписанный сертификат. По умолчанию вместе с пакетом поставляется самоподписанный сертификат.
/etc/squid/squidCA.pem
- расположение самоподписанного сертификата.
Если Вам нужно заменить его на свой, то выполните следующие команды:
cp <YOUR_CERT> /etc/squid/squidCA.pem chmod 400 /etc/squid/squidCA.pem rm -rf /var/lib/squid_ssl_db /usr/lib/squid/ssl_crtd -c -s /var/lib/squid_ssl_db chown -R proxy:proxy /var/lib/squid_ssl_db service squid restart
Ваш сертификат обязательно должен быть самоподписанным.
Чтобы создать самоподписанный сертификат, следуйте инструкции.
Агрегация маршрутов
SkyDNS Zapret ISP включает в себя функцию уменьшения количества анонсируемых маршрутов посредством сокращения длины префикса анонсируемой сети. По умолчанию данная функция включена (Конфигурационный файл ip_aggregator.enabled: true
).
Сжатие происходит, когда количество маршрутов из сети превышает заданный барьер (Конфигурационный файл ip_aggregator.ip-barrier
). Алгоритм учитывает адреса, находящиеся в белом списке.
Рассмотрим следующий пример: в анонсах присутствуют сети 1.1.1.2/32
и 1.1.1.3/32
. Вы включаете функцию сжатия маршрутов, устанавливая ip_aggregator.ip-barrier: 1
, после чего анонсируется лишь 1.1.1.0/24
.
Предположим, Вы добавили в белый список адрес 1.1.1.135/32
. В результате начнут анонсироваться следующие подсети: 1.1.1.0/25
, 1.1.1.192/26
, 1.1.1.160/27
, 1.1.1.144/28
, 1.1.1.136/29
, 1.1.1.128/30
, 1.1.1.132/31
.
В результате агрегации на сервер фильтрации будет перенаправляться дополнительный трафик. Однако это не приведёт к его блокировке. Весь трафик, для которого нет правил фильтрации, будет пропущен дальше без изменений. Агрегация также повлечёт за собой увеличение нагрузки на сетевой интерфейс и процессор сервера, поэтому стоит внимательно подходить к выбору параметра ip_aggregator.ip-barrier
. Значение по умолчанию - 120, было выбрано исходя из анализа маршрутов, находящихся в базе.
Чтобы изменения вступили в силу, необходима перезагрузка ExaBGP
и zi-update
. Для этого выполните команды:
supervisorctl stop zi-update service exabgp restart supervisorctl start zi-update
Правила iptables и ipset
SkyDNS Zapret ISP поставляет с собой набор базовых правил для обеспечения заворота трафика. Правила содержаться в отдельных файлах, соответствующих входному формату команд ip(6)tables-restore
и ipset restore
. Если Вы хотите применить свои собственные правила:
- для
iptables
выполнитеcp /usr/share/skydns-zi/firewall.conf /etc/firewall.conf
. После чего добавьте в файл/etc/firewall.conf
ваши правила.
- для
ip6tables
выполнитеcp /usr/share/skydns-zi/firewall6.conf /etc/firewall6.conf
. После чего добавьте в файл/etc/firewall6.conf
;ваши правила.
- для
ipset
добавьте правила в/etc/custom_ipsets.conf
.
После этого выполните:
zi-ctl ipset update
Фильтрация по протоколу IPv6
Начиная с версии 3.2.3, SkyDNS Zapret ISP предоставляет возможность фильтрации по протоколу IPv6.
Обратитесь к разделу Фильтрация доступа к ресурсам в реестре по протоколу IPv6 прежде чем начать настройку.
Для включения фильтрации необходимо:
- В конфигурационном файле добавить строчку:
ipv6_support: true
.
- В файле
/etc/quagga/daemons
поменятьospf6d=no
наospf6d=yes
.
- Повторить Настройка маршрутизации (настроить OSPF для IPv6 в случае динамической маршрутизации, обновить скрипт выгрузки маршрутов в случае статической).
- Добавить Ваш IPv6 префикс (Прием трафика), если Вы это не сделали при первоначальной настройке.
- Выполните команду
zi-ctl ipset update
.
Настройка ipset-ов
Начиная с версии 3.2.5, SkyDNS Zapret ISP предоставляет возможность настроить параметры ipset-ов.
Настройка размера ipset-ов, а также допустимый размер хэша устанавливается с помощью блока ipset_config
. После выставления новых значений, выполните:
zi-ctl ipset update --recreate