====== Получение выгрузки РосКомНадзор средствами MikBiLL ======
Начиная с версии 2.7.13 в MikBiLL стал доступен модуль автоматического получения выгрузки.
Для его активации на время жизни консоли необходимо настроить файл конфига и запустить модуль через консольную команду.
Внимание! Модуль только **ПОЛУЧАЕТ реестр запрещённых ресурсов**, но **НЕ блокирует** их.
Если хотите, чтоб система запускалась с запуском сервера - добавьте в автозапуск. Для запуска на работающем сервере можете использовать ''[[http://ru.wikipedia.org/wiki/At|at]]''
С версии 2.7.16 стала доступна вторая версия выгрузки. Для этого в файле конфига выгрузки укажите:
\\ **version = 2.0**
\\ Если версия не указана, то будет приниматься, что указана вторая версия.
===== Для чего это надо =====
Надо это для того, чтоб не схлопотать штраф от РосКомНадзора за то, что не подчиняетесь закону РФ.
===== Как это работает =====
При запуске этого функционала (не забывайте добавить в автозапуск) в Вашей системе будет повешен демон, который будет, исходя из настроек конфига, отправлять запросы на сервер РКН для получения файла выгрузки.
После получения выгрузки, в папке, указанной в параметре конфига ''writableDir'', будет создано 3 файла (при первой версии протокола):
* url_file.list - содержит только ссылки, разделённые символом \n
* domain_file.list - содержит только домены, разделённые символом \n
* ip_file.list - содержит только IP, разделённые символом \n
, для второй версии протокола ещё будет создан файл:
* ipSubnet_file.list
Если convertToPunycode выключен, то файлы будут в кодировке UTF-8, если включен, то ASCII.
После активации convertToPunycode количество доменов может уменьшиться на несколько за счёт того, что в реестре он значится под обоими именами: кириллическим и в Punycode.
Эти файлы Вам уже нужно самостоятельно обрабатывать, чтоб Ваши пользователи не могли получить доступ к этим ресурсам.
Для первой версии: достаточно заблокировать по 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 | ОГРН | |
| email | e-mail | |
^ необязательные ^^^
| systemEncoding | язык системы | Используется для записи логов и вывода в консоль в указанной кодировке. По умолчанию принимается кодировка UTF-8 |
| debug | параметр для отладки, принимает значения true/false | При значении true делает вывод в консоль. Можете перенаправить его, куда Вам угодно |
| convertToPunycode | Если включено ( = 1 ), то в файлы с доменами и URL будут генерироваться [[https://ru.wikipedia.org/wiki/Punycode|Punycode]] адреса. | По умолчанию = 0 |
| excludeDuplicates | Если включено ( = 1 ), то будут удаляться дубли записей во всех листах: URL, domain, IP, SubnetIP | По умолчанию = 1 |
Все параметры, кроме:
* systemEncoding
* debug
* convertToPunycode
* excludeDuplicates
являются обязательными для заполнения.
Сохраняйте файл конфига в кодировке UTF-8.
Пример файл конфига (нажмите на названии, чтоб скачать):
# адрес 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 с поддержкой алгоритмов ГОСТ:
[[http://www.cryptocom.ru/products/openssl-1-config-ru.html|Установка и настройка 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 с помощью утилиты [[http://soft.lissi.ru/products/utils/p12fromcsp/|P12FromGostCSP]].
Файл PKCS#12 должен содержать сертификат и закрытый ключ! Проверить это можно командой:
opensslGOST pkcs12 -in p12.pfx -nodes
\\ , где p12.pfx - файл, извлечённый с помощью P12FromGostCSP.
Вывод должен быть примерно таким (Windows) - нажмите для увеличения:
\\ {{ :mikbill:services:rkn_check_pfx.png?direct |}}
Далее преобразовать его в 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
Рекомендуем запускать через утилиту at, которой указываем .sh скрипт для запуска.
Пример содержимого .sh скрипта для Linux систем:
cd /var/www/mikbill/admin/
php ./index.php runRosKomNadzorDaemon
===== Чтение логов РКН =====
Логи могут быть прочитаны непосредственно с файловой системы Вашим излюбленным текстовым редактором:
\\ ''./mikbill/admin/app/log/roskomnadzor.log''
Из админ. панели:
\\ настройки -> настройки обновлений -> показать log Роскомнадзор
Внимание, если в настройках конфига модуля РКН указана кодировка отличная от UTF-8, то её необходимо указать в системных опциях:
\\ услуги -> "получение выгрузки РосКомНадзор" -> кодировка
{{:mikbill:services:rkn_sys_opts.png?nolink&|}}
===== Copyright =====
На странице частично используется материал из: [[http://habrahabr.ru/post/187574/|]] и других открытых источников.