====== Получение выгрузки РосКомНадзор средствами 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/|]] и других открытых источников.