Получение выгрузки РосКомНадзор средствами MikBiLL
Начиная с версии 2.7.13 в MikBiLL стал доступен модуль автоматического получения выгрузки.
Для его активации на время жизни консоли необходимо настроить файл конфига и запустить модуль через консольную команду.
at
version = 2.0
Если версия не указана, то будет приниматься, что указана вторая версия.
Для чего это надо
Надо это для того, чтоб не схлопотать штраф от РосКомНадзора за то, что не подчиняетесь закону РФ.
Как это работает
При запуске этого функционала (не забывайте добавить в автозапуск) в Вашей системе будет повешен демон, который будет, исходя из настроек конфига, отправлять запросы на сервер РКН для получения файла выгрузки.
После получения выгрузки, в папке, указанной в параметре конфига writableDir
, будет создано 3 файла (при первой версии протокола):
- url_file.list - содержит только ссылки, разделённые символом \n
- domain_file.list - содержит только домены, разделённые символом \n
- ip_file.list - содержит только IP, разделённые символом \n
, для второй версии протокола ещё будет создан файл:
- ipSubnet_file.list
Эти файлы Вам уже нужно самостоятельно обрабатывать, чтоб Ваши пользователи не могли получить доступ к этим ресурсам.
Для первой версии: достаточно заблокировать по URL, чуть жёстче - сразу весь домен, и самый "не правильный" вид блокировки, но приемлемый, - по IP сервера. В зависимости от того, какой Вы вид выбрали Вы и будете использовать соответствующий файл: со списком URL, доменов или IP серверов.
Файл конфига
Он расположен по пути:
./mikbill/admin/app/etc/roskomnadzor/roskomnadzor.cfg
Таблица с описанием свойств файла:
Параметр | Описание | Комментарий |
---|---|---|
wsdlUrl | адрес WSDL схемы | Не изменяйте |
version | версия протокола | В данный момент доступна первая (1.0) и вторая (2.0) версии |
certPath | абсолютный путь к сертификату | Путь к сертификату, которым будет создаваться откреплённая электронная подпись к файлу запроса |
writableDir | директория доступная для записи | В ней будут сохранены файлы выгрузки |
openssl | полный путь к openssl | собранного с поддержкой алгоритмов ГОСТ |
unzip | путь к распаковщику | Можно получить выполнив which unzip |
execCommandAfterDownload | команда применения выгрузки | Рекомендуется записать все необходимые команды в .sh файл и указать путь к нему |
timezoneOffset | часовой пояс | Укажите Ваш часовой пояс в формате '+06:00' |
delayTime | время между повторами на получение ответа выгрузки | в минутах |
lullTime | время между актами получения выгрузок | в минутах |
данные оператора (Ваши данные) | ||
operator | название организации | |
inn | ИНН | |
ogrn | ОГРН | |
необязательные | ||
systemEncoding | язык системы | Используется для записи логов и вывода в консоль в указанной кодировке. По умолчанию принимается кодировка UTF-8 |
debug | параметр для отладки, принимает значения true/false | При значении true делает вывод в консоль. Можете перенаправить его, куда Вам угодно |
convertToPunycode | Если включено ( = 1 ), то в файлы с доменами и URL будут генерироваться Punycode адреса. | По умолчанию = 0 |
excludeDuplicates | Если включено ( = 1 ), то будут удаляться дубли записей во всех листах: URL, domain, IP, SubnetIP | По умолчанию = 1 |
Все параметры, кроме:
- systemEncoding
- debug
- convertToPunycode
- excludeDuplicates
являются обязательными для заполнения.
Пример файл конфига (нажмите на названии, чтоб скачать):
- roskomnadzor.cfg
# адрес WSDL схемы wsdlUrl = http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl # адрес тестовой WSDL схемы: для теста закоментируйте верхнюю строку символом "#" и раскоментируйте нижнюю строку # wsdlUrl = http://vigruzki.rkn.gov.ru/services/OperatorRequestTest/?wsdl # версия протокола, в данный момент доступна первая (1.0) и вторая (2.0) версии version = 2.0 # абсолютный путь к сертификату certPath = /root/cert.pem # директория доступная для записи: указываем относительный путь, в конце адреса обязательно '/' writableDir = ./app/etc/roskomnadzor/ # полный путь к openssl собранного с поддержкой алгоритмов ГОСТ openssl = /usr/local/ssl/bin/openssl # which unzip unzip = /usr/bin/unzip # команда применения выгрузки - команда, которую необходимо выполнить после получения и сохранения реестра запрещённых адресов execCommandAfterDownload = # execCommandAfterDownload = /usr/bin/sudo -u root /var/www/mikbill/admin/sys/scripts/yourScript.sh # часовой пояс timezoneOffset = +06:00 # время между повторами на получение ответа выгрузки (минуты) delayTime = 2 # время между актами получения выгрузок (минуты) lullTime = 30 # [данные оператора] # название operator = ООО "" # ИНН inn = 123 # ОГРН ogrn = 312 # e-mail email = webmaster@localhost # язык системы: указывайте только в случае, если он отличен от UTF-8, иначе - оставьте пустым: используется только для логов. Если укажите кодировку, то чтение логов станет невозможным из админки systemEncoding = # Пример с указанной кодировкой: # systemEncoding = koi8-r # true - для отладки выводим все сообщения на экран, значения: true/false debug = false # преобразовывать в Punycode convertToPunycode = 0 # исключаем дубликаты записей: url, domain, IP, SubnetIP excludeDuplicates = 1
Настройка openSSL с ГОСТом для подписи запросов
Тут начинается самое "трудное и интересное".
Собрать openSSL с поддержкой алгоритмов ГОСТ:
Установка и настройка OpenSSL-1.0.0
Думаю, что вполне можно собрать необходимую Вам версию openSSL.
# Правим файл /etc/openssl/openssl.cnf, а вернее тот, который находится в папке с нашим отдельным openssl
# Это пишем вверху:
openssl_conf = openssl_def
# Это – внизу:
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib/openssl/engines/libgost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
dynamic_path = /usr/lib/openssl/engines/libgost.so
- проверьте, чтоб по этому пути у Вас находился файл libgost.so
, иначе - укажите другой путь.
Для проверки поддержки openssl алгоритмов ГОСТ выполним команду:
путь_к_openssl_с_ГОСТ ciphers | tr ":" "\n" | grep GOST
Результат должен быть следующим:
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
OpenSSL с ГОСТом для Centos
Скачиваем и собираем исходник.
yum -y install imake yum -y install zlib-devel wget http://www.mikbill.ru/openssl-1.0.1f.tar.gz tar xzf openssl-1.0.1f.tar.gz cd openssl-1.0.1f ./config shared zlib enable-rfc3779 --prefix=/usr/local make depend make make install
Далее, после установки редактируем файл
mcedit /usr/local/ssl/openssl.cnf
До названия первой секции (первая строка [в квадратных скобках]) вносим:
openssl_conf = openssl_def
Далее в конец файла вносим:
[openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost default_algorithms = ALL #dynamic_path = /usr/local/lib64/engines/libgost.so #CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
тестируем:
# /usr/local/bin/openssl ciphers | tr ":" "\n" | grep GOST
Вывод:
GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89
Создание .pem файла для подписи запросов
Тут начинается самое "трудное и интересное".
Команда opensslGOST
- это алиас на openssl, собранный с поддержкой алгоритмов ГОСТ.
export | grep PATH
подскажет Вам, куда можно положить симлинк на исполняемый файл.
Можно (нужно) указывать полный путь, например:
/gost-ssl/bin/openssl
Ключ необходимо экспортировать в формате PKCS#12 из криптоконтейнера в Windows с помощью утилиты P12FromGostCSP.
Файл PKCS#12 должен содержать сертификат и закрытый ключ! Проверить это можно командой:
opensslGOST pkcs12 -in p12.pfx -nodes
, где p12.pfx - файл, извлечённый с помощью P12FromGostCSP.
Вывод должен быть примерно таким (Windows) - нажмите для увеличения:
Далее преобразовать его в PEM. В OpenSSL это делается так (может запросить пароль, которым защищен Ключ PKCS#12):
opensslGOST pkcs12 -in p12.pfx -out key.pem -nodes -clcerts
Теперь у нас есть файл key.pem, к которому мы указываем полный путь в свойстве конфига "certPath"
.
Punycode
Punycode (произносится как «пуникод» или «пьюникод») — стандартизированный метод преобразования последовательностей Unicode-символов в так называемые ACE-последовательности (англ. ASCII Compatible Encoding — кодировка, совместимая с ASCII[1]), которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах. Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. (https://ru.wikipedia.org/wiki/Punycode)
Если после установки в конфиге значения "конвертировать в punycode" получение выгрузки вылетает с ошибкой
PHP Fatal error: Call to undefined function idn_to_ascii() in /var/www/mikbill/admin/index.php on line 0
, то проверьте, установлен ли модуль intl:
php -m | grep intl
Если нет, то необходимо его установить: http://php.net/manual/ru/intl.installation.php
Запуск
Запускается через консольную команду "runRosKomNadzorDaemon".
Пример запуска при нахождении в директории ./mikbill/admin/
:
php ./index.php runRosKomNadzorDaemon
Пример содержимого .sh скрипта для Linux систем:
cd /var/www/mikbill/admin/ php ./index.php runRosKomNadzorDaemon
Чтение логов РКН
Логи могут быть прочитаны непосредственно с файловой системы Вашим излюбленным текстовым редактором:
./mikbill/admin/app/log/roskomnadzor.log
Из админ. панели:
настройки → настройки обновлений → показать log Роскомнадзор
услуги → "получение выгрузки РосКомНадзор" → кодировка
Copyright
На странице частично используется материал из: http://habrahabr.ru/post/187574/ и других открытых источников.