5. Настройка

5.1. Добавления алгоритма GOST

Для формирования ключей Роскомнадзор использует алгоритм GOST. Данный алгоритм не является используемым по умолчанию. Чтобы проверить, включен ли он на Вашем сервере выполните:

openssl ciphers |tr ':' '\n' | grep GOST

Если Вы видите следующий вывод:

GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

То можете перейти к следующему разделу.

В противном случае Вам необходимо добавить GOST в openssl. Готовый пакет Вы можете скачать из репозитория SkyDNS:

apt install libengine-gost-openssl1.1

Примечание

Если Вы используете Debian 8 Jessie, тогда версию openssl из репозитория SkyDNS с помощью команды:

apt install openssl_1.0.2l-1~bpo8+1_amd64.deb

Если Вы не изменяли конфигурационный файл openssl, тогда выполните следующие команды:

sed -i "1s/^/openssl_conf = openssl_def\n/" /usr/lib/ssl/openssl.cnf
echo "
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
" >> /usr/lib/ssl/openssl.cnf

Иначе добавьте эти разделы самостоятельно.

Проверьте, что GOST алгоритмы используются библиотекой.

5.2. Получение реестра запрещенных ресурсов

Внимание

Пропустить это шаг, если вы используете тестовую версию (Тестовая версия).

Чтобы осуществлять выгрузку списка заблокированных ресурсов, провайдер должен иметь ЭЦП. Требования к ЭЦП описаны на сайте Роскомнадзора http://eais.rkn.gov.ru/tooperators/.

Выберите режим подписи запроса на получение реестра:

  • подписывать запросы прямо на сервере автоматически;
  • подписать запрос вручную один раз.

Для автоматической подписи нужно иметь в виде файлов сертификат ЭЦП и незашифрованный закрытый ключ от него, оба файла должны быть в формате PEM. Они должны начинаться, соответственно, со строк -----BEGIN CERTIFICATE----- и -----BEGIN PRIVATE KEY----- и не содержать слово «Encrypted» в заголовке.

5.2.1. Автоматический режим подписания запросов на получение реестра

Скопируйте ключ и сертификат на сервер в каталог /var/lib/skydns-zi/keys/. Убедитесь в правильности заголовков файлов. В файле /etc/skydns-zi/config.yml пропишите данные, необходимые для автоматического построения запроса:

downloader:
  rkn:
   operator_info:
     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:
   #   xmlreqfile: /var/lib/skydns-zi/req/request.xml
   #   signaturefile: /var/lib/skydns-zi/req/request.xml.sig

5.2.2. Ручной режим подписания запроса на получение реестра (один раз)

  • Создайте XML-файл request.xml по образцу:
<?xml version="1.0" encoding="windows-1251"?>
<request>
<requestTime>2014-11-26T18:04:31.000+00:00</requestTime>
<operatorName>ООО Оператор</operatorName>
<inn>6670123456</inn>
<ogrn>1116670002345</ogrn>
<email>root@operator.ru</email>
</request>

Важно

Кодировка windows-1251, двойные кавычки, переводы строк в стиле Windows, никаких лишних пробелов. Сайт eais.rkn.gov.ru разбирает XML не по стандарту.

  • Для этого файла создайте электронную подпись в формате PKCS7 (base64) в отдельном файле request.xml.sig

Если вы все сделано правильно, то файл подписи будет начинаться со строки -----BEGIN PKCS7-----.

  • Оригинальный файл и файл подписи скопируйте на сервер в каталог /var/lib/skydns-zi/req/

Правильность подписи и копирования можно проверить на сервере при условии наличия там OpenSSL 1.0.1 командой:

sudo openssl smime -binary -noverify -engine gost -verify -inform PEM -in /var/lib/skydns-zi/req/request.xml.sig -content /var/lib/skydns-zi/req/request.xml

Эта команда должна успешно завершаться в том виде, как указано выше, и (это важно) выдавать ошибку «no content», если убрать опцию -content /var/lib/skydns-zi/req/request.xml.

Совет

  • При копировании XML-файла могут испортиться окончания строк, что сделает подпись недействительной. Файлы надо передавать в бинарном режиме.
  • Некоторые программы обрамляют подпись в ----- BEGIN PKCS7 SIGNED -----. Это нарушение стандарта (должно быть -----BEGIN PKCS7-----, без лишних пробелов). К счастью, это легко поддается исправлению в текстовом редакторе (END тоже надо исправить).
  • Некоторые программы под Windows перед подписью игнорируют последний символ новой строки в подписываемом файле. Если ничего не помогает (то есть подпись никак не подходит), этот символ надо попробовать убрать.

В файле /etc/skydns-zi/config.yml укажите пути к созданным файлам:

downloader:
  rkn:
   # Этот блок необходимо закомментировать или удалить
   # operator_info:
   #   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:
     xmlreqfile: /var/lib/skydns-zi/req/request.xml
     signaturefile: /var/lib/skydns-zi/req/request.xml.sig

5.3. Настройка маршрутизации

5.3.1. Динамическая маршрутизация

Необходимость настройки протокола маршрутизации на этом этапе зависит от выбранной схемы подключения SkyDNS Zapret ISP в сеть (см. Схемы подключения SkyDNS Zapret ISP в сеть).

Общая схема, используемая при динамической маршрутизации: демон Exabgp отправляет демону Quagga bgpd маршруты по bgp, который заносит маршруты в локальную таблицу маршрутизации. После чего демон Quagga ospfd (bgpd, если Вы решите создать bgp-сессию между системой фильтрации и внутренним маршрутизатором) анонсирует маршруты на маршрутизатор.

Выполните команду, которая запросит необходимые для настройки данные и выполнит настройку OSPFv2 в случае, когда SkyDNS Zapret ISP и внутренний маршрутизатор находятся в одной сети и никаких ospf-сессий больше не существует.

zi-ctl configure

sudo zi-ctl configure

В случае если необходимо произвести более сложную настройку динамической маршрутизации, то это нужно сделать самостоятельно.

Конфигурационный файлы для Quagga и Exabgp располагаются в /etc/quagga/ и /etc/exabgp/ соответственно.

5.3.2. Статическая маршрутизация

Для настройки статической маршрутизации необходимо написать скрипт загрузки маршрутов на маршрутизатор и добавить его исполнение в cron.

Вы можете использовать примеры скриптов на Shell Script для роутеров Cisco и Huawei, либо использовать любой другой удобный для вас язык.

Cisco

#!/bin/sh -e

acl_output='/srv/tftp/routes.acl'
echo "no ip access-list extended webtraffic" > ${acl_output}.tmp
echo "ip access-list extended webtraffic" >> ${acl_output}.tmp
for route in $(zi-ctl routes && zi-ctl routes --ipv6)
do
    echo "permit ip any host ${route}" >> ${acl_output}.tmp
done
echo "end" >> ${acl_output}.tmp
mv ${acl_output}.tmp ${acl_output}

# Здесь нужно написать команду, которая выполнит загрузку правил на маршрутизатор

Huawei

#!/bin/sh -e

acl_output='/srv/tftp/routes.acl'
echo "acl number 5000" > ${acl_output}.tmp
i=0
for route in $(zi-ctl routes && zi-ctl routes --ipv6)
do
    i=$((i+=5))
    echo "rule ${i} deny destination ${route}" >> ${acl_output}.tmp
done
mv ${acl_output}.tmp ${acl_output}

# Здесь нужно написать команду, которая выполнит загрузку правил на маршрутизатор

Вы также можете скопировать данные примеры из директории /usr/share/skydns-zi/examples/.

5.3.2.1. Пример

Примечание

#.#.#.# - IP-адрес TFTP-сервера.

Рассмотрим пример внедрения статической маршрутизации для роутера Cisco ASR1002.

  • В конец скрипта добавьте строчку:
/usr/bin/snmpset -v1 -ccommunity ${router_ip} .1.3.6.1.4.1.9.2.1.53.#.#.#.# s ${acl_output}
  • Установите пакет SNMP:
sudo apt-get install snmp
  • Установите и настройте сервер TFTP:
sudo apt-get install atftpd
  • Создайте каталог /srv/tftp/:
mkdir –p /srv/tftp
  • Создайте маршрутную карту на роутере:
route-map webcache-redirect permit 10
match ip address webtraffic
set ip next-hop <zapret-isp-ip>
  • Примените маршрутную карту на интерфейс, на который приходит трафик от пользователей. Например, vlan 1:
int vlan 1
ip policy route-map webcache-redirect
  • Добавьте правило в cron на исполнение скрипта каждые шесть минут.

5.4. Настройка фильтрующего DNS-сервера

Вместе с пакетом поставляется DNS-сервер Unbound. Он установится на сервер во время установки пакета.

Фильтрующий DNS-сервер запущен на 127.0.0.2:53 для протокола IPv4 и на ::1@12346 для протокола IPv6. Запросы к нему перенаправляются посредством правил iptables.

Распространять адрес фильтрующего DNS-сервера можно, используя протокол DHCP, или указав его вышестоящим для Ваших DNS-серверов.

Запустите команды:

# добавить DNS-сервер в автозапуск
systemctl enable skydns-unbound
# перезапустить сервис
service skydns-unbound restart

5.5. Прием трафика

Для работы продукта необходимо задать список сетей, трафик из которых будет фильтроваться. Сделать это можно, используя консольную команду zi-ctl nets:

sudo zi-ctl nets add NET_1 NET_2 NET_N

5.6. Создание административного пользователя

Чтобы начать использовать web-интерфейс, необходимо создать пользователя. Сделать это можно, используя консольную команду zi-ctl user:

sudo zi-ctl user edit

По умолчанию WEB интерфейс размещён на 0.0.0.0:80.

_images/login.png

В окне введите почтовый адрес и пароль только что созданного пользователя.

5.7. Настройка почтовых отправлений

Внимание

Нерегулярное обновление реестра может вызвать претензии Роскомнадзора. Следует читать почту, которую получает root. Все уведомления об ошибках скачивания реестра будут направляться туда.

В файле /etc/cron.d/skydns-zi, вместо MAILTO=root пропишите MAILTO=<YOUR_EMAIL> и настройте MTA для отправки почты. Для отправки уведомлений на несколько адресов e-mail, необходимо в MTA прописать алиасы.

При успешном завершении скриптов загрузки и преобразования, сообщение будет следующего вида:

Downloading module MJ has finished.
Downloading module RKN has finished.
Parsing module MJ has finished.
Parsing module RKN has finished.

где MJ - для списка Министерства юстиции РФ, RKN - для списка Роскомнадзора.

Пример завершения с ошибкой:

Downloading module RKN has finished.
Downloading module MJ has finished with exception. # Модуль загрузки выполнился с ошибкой.
Traceback (most recent call last):
  File "/usr/share/python/skydns-zi/local/lib/python3.4/site-packages/isp_filter/downloader/__init__.py", line 17, in download
    module_.download(info)
  File "/usr/share/python/skydns-zi/local/lib/python3.4/site-packages/isp_filter/downloader/mj.py", line 11, in download
    raise Exception()
Exception:
Parsing module RKN has finished.
Parsing module MJ has finished.