Начиная с версии 2.7.13 в MikBiLL стал доступен модуль автоматического получения выгрузки.
Для его активации на время жизни консоли необходимо настроить файл конфига и запустить модуль через консольную команду.
at
Надо это для того, чтоб не схлопотать штраф от РосКомНадзора за то, что не подчиняетесь закону РФ.
При запуске этого функционала (не забывайте добавить в автозапуск) в Вашей системе будет повешен демон, который будет, исходя из настроек конфига, отправлять запросы на сервер РКН для получения файла выгрузки.
После получения выгрузки, в папке, указанной в параметре конфига writableDir
, будет создано 3 файла (при первой версии протокола):
, для второй версии протокола ещё будет создан файл:
Эти файлы Вам уже нужно самостоятельно обрабатывать, чтоб Ваши пользователи не могли получить доступ к этим ресурсам.
Для первой версии: достаточно заблокировать по 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 |
Все параметры, кроме:
являются обязательными для заполнения.
Пример файл конфига (нажмите на названии, чтоб скачать):
# адрес 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-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
Скачиваем и собираем исходник.
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
Тут начинается самое "трудное и интересное".
Команда 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 (произносится как «пуникод» или «пьюникод») — стандартизированный метод преобразования последовательностей 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 Роскомнадзор
На странице частично используется материал из: http://habrahabr.ru/post/187574/ и других открытых источников.