Перейти до

Demid

Маглы
  • Всього повідомлень

    65
  • Приєднався

  • Останній візит

Все, що було написано Demid

  1. Ну собсно корявая реализация, спасибо гуглу и опеннет: Для начала нам надо вытащить электронную подпись с рутокена, полученного в роскомнадзоре. Для этого воспользуемся утилитой P12FromGostCSP, и экспортируем подпись в формате PKSC#12. Так как системный OpenSSL в FreeBSD не поддерживает шифрование ГОСТ, ставим свежую версию из портов. Это не затрагивает работоспособность всей системы, и портовый OpenSSL прекрасно существует параллельно системному: # which openssl /usr/bin/openssl # openssl version OpenSSL 0.9.8y 5 Feb 2013 # /usr/local/bin/openssl version OpenSSL 1.0.1e 11 Feb 2013 # Находим файл /usr/local/openssl/openssl.cnf и пишем в конец файла: [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] default_algorithms = ALL engine_id = gost #dynamic_path = /usr/local/lib/engines/libgost.so CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet В начало этого файла пишем : openssl_conf = openssl_def Копируем на сервер наш сертификат в формате PKSC#12 и конвертируем его в формат PEM: /usr/local/bin/openssl pkcs12 -in p12.pfx -out cert.pem -nodes -clcerts Подготавливаем структуру директорий для работы наших скриптов и копируем туда сконвертированный сертификат: mkdir /var/db/zapret-info/ mkdir /var/db/zapret-info/cfg mkdir /var/db/zapret-info/arch cp cert.pem /var/db/zapret-info/cfg/ Создаем файл запрос в соответствии с требованиями Роскомнадзора (где данные между тэгами изменены на данные вашей фирмы): echo '<operatorName>ООО "РОГА И КОПЫТА"</<operatorName>' > /var/db/zapret-info/cfg/request.xml echo '<inn>00XXXXXXXXXX</inn>' >> /var/db/zapret-info/cfg/request.xml echo '<ogrn>XXXXXXXXXXXXX</ogrn>' >> /var/db/zapret-info/cfg/request.xml echo '<email>info@rogaikopita.ru</email>' >> /var/db/zapret-info/cfg/request.xml В зависимости от раскладок системной консоли полученный файл /var/db/zapret-info/cfg/request.xml необходимо сконвертировать в кодировку WINDOWS-1251. Создаем скрипт download.pl (у меня лежит в папке root) #!/usr/bin/perl -w use strict; use SOAP::Lite; use MIME::Base64; use Sys::Syslog qw(:DEFAULT setlogsock); use POSIX qw(strftime); # XXX dirty!!! binmode STDOUT, ':utf8'; binmode STDERR, ':utf8'; my $BASE = "/var/db/zapret-info"; my %n; ($n{sec},$n{min},$n{hour},$n{mday},$n{mon},$n{year},$n{wday},$n{yday}, $n{isdst}) = localtime(time()); $n{year}+=1900; $n{mon}++; $n{mon}=~s/^(\d)$/0$1/; $n{mday}=~s/^(\d)$/0$1/; $n{hour}=~s/^(\d)$/0$1/; $n{min}=~s/^(\d)$/0$1/; $n{sec}=~s/^(\d)$/0$1/; my $dt="$n{year}-$n{mon}-$n{mday}T$n{hour}:$n{min}:$n{sec}.000+04:00"; my $dd="$n{year}$n{mon}$n{mday}$n{hour}"; my $service = SOAP::Lite->service("http://www.zapret-info.gov.ru/services/OperatorRequest?wsdl"); my $reqfn = "$BASE/request-$dd.xml"; my $binfn = "$BASE/request-$dd.bin"; my $xmlreqfn = "$BASE/cfg/request.xml"; my $certfn = "$BASE/cfg/cert.pem"; my $request="" ; open (XML, "<$xmlreqfn"); while (<XML>) { $request .= $_; } close (XML); die "Resuest template not found in $xmlreqfn." if (length($request)==0); open (XMLREQ, ">$reqfn") or die "Can't create new request"; print XMLREQ "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n"; print XMLREQ "<request>\n\t<requestTime>$dt</requestTime>\n"; print XMLREQ $request; print XMLREQ "</request>"; close XMLREQ; system ("/usr/local/bin/openssl smime -sign -in $reqfn -out $binfn". " -signer $certfn -outform DER -nodetach"); open XMLREQ, "<$reqfn" or die "Can't open $reqfn"; my $xmlreq = do { local $/ = undef; <XMLREQ>; }; close XMLREQ; open XMLREQSIG, "<$binfn" or die "Can't open $binfn"; my $xmlreqsig = do { local $/ = undef; <XMLREQSIG>; }; close XMLREQSIG; my @sendresult = $service->sendRequest( $xmlreq, $xmlreqsig ); if ($sendresult[0] eq 'false') { mylog("error request $sendresult[1]"); } elsif ($sendresult[0] eq 'true') { open (CODESTRING, ">$BASE/codestring"); print CODESTRING $sendresult[2]; close CODESTRING; mylog("sent request $binfn: $sendresult[1]"); }; if (-e "$BASE/codestring") { open CODESTRING, "$BASE/codestring"; my $codestring = <CODESTRING>; close CODESTRING; my $cnt = 0; while(1) { my @getresult = $service->getResult($codestring); if ($getresult[0] eq 'false') { mylog ("$getresult[1]"); sleep 60; } elsif ($getresult[0] eq 'true') { my $outarch = decode_base64($getresult[1]); open (OUT, ">$BASE/out.zip"); print OUT $outarch; close OUT; unlink "$BASE/codestring"; if (-e "$BASE/out.zip") { system("/bin/mv $reqfn $BASE/arch/"); system("/bin/mv $binfn $BASE/arch/"); system("/bin/cp $BASE/out.zip $BASE/arch/out-$dt.zip"); system("/usr/bin/unzip -o $BASE/out.zip -d $BASE/dump"); unlink "$BASE/out.zip"; mylog ("Done. Everything seems to be ok."); exit 0; }; mylog("Shouldn't reach. DEBUG ME!!!"); exit 255; } else { mylog ("getresult is unknown"); exit 255; }; $cnt++; if ($cnt>30) { mylog ("too much tries, bailing out"); exit 255; } }; # notreached } else { mylog ("codestring file not found"); }; sub mylog { my $logstring = $_[0]; my($now_string); $now_string = strftime "%d-%m-%Y %H:%M:%S", localtime; print(STDERR $now_string." ".$logstring."\n"); }; Создаем скрипт zapreinfo.sh (у меня лежит в папке root) #!/bin/sh /usr/bin/perl -w download.pl cat /var/db/zapret-info/dump/dump.xml | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq > /var/db/zapret-info/zapretinfo_ip && /etc/rc.d/ipfw restart Редактируем firewall.conf, добавляем: # третья табличка - zapret.info. Она должна блокироваться бай дефолт на внутреннем интерфейсе. IP 1.1.1.1 адрес сервера страницы заглушки cat /var/db/zapret-info/zapretinfo_ip | while read ip; do ${FwCMD} table 3 add $ip done ${FwCMD} add 3 fwd 1.1.1.1,80 ip from table\(10\) to table\(3\) dst-port 80 ${FwCMD} add 3 fwd 1.1.1.1,443 ip from table\(10\) to table\(3\) dst-port 443 Создаем страницу заглушку (спасибо Ростелекому ): <!DOCTYPE html><html><head><meta charset=utf-8 /><title>Доступ ограничен</title><style>html,body{min-height:100%;height:100%!important;margin:0;padding:0;color:#000}body{font:12px Arial,Helvetica,sans-serif;background:#fff}.box{position:relative;height:100%;min-height:100%;width:850px;margin:0 0 0 11%}.head{height:96px;margin:0 10px}.main{padding:0 0 0 70px}h1{margin:10px 0 40px;font-size:24px;font-weight:normal}p{margin:0 0 10px}.list{list-style-type:none;padding:0 0 0 10px;margin:0 0 10px}.list li{line-height:1.4;margin:0 0 10px}.list li:before{content:'\2014';padding-right:10px}a,a:visited,a:hover{color:#009edb;text-decoration:none}a img{border:0;outline:0}</style></head><body><div class=box><div class=head></div><div class=main> <h1><strong>Уважаемые пользователи!<br/><br/>Мы приносим свои извинения, но доступ к запрашиваемому ресурсу ограничен.</strong></h1> <p><b>Возможные причины ограничения доступа:</b></p> <ol> <li>Доступ ограничен по решению суда или по иным основаниям, установленным законодательством Российской Федерации.</li><br/> <li>Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в <a target="_blank" href="http://www.zapret-info.gov.ru/">Единый Реестр</a> доменных имен, указателей страниц сайтов сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено. <br/><br/>Проверить наличие сетевого адреса в Едином реестре можно в разделе «Просмотр реестра» на сайте <a target="_blank" href="http://www.zapret-info.gov.ru/">www.zapret-info.gov.ru</a>.</li><br/> <li>Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в <a target="_blank" href="http://nap.rkn.gov.ru/">Реестр</a> доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространяемую с нарушением исключительных прав. <br/><br/>Проверить наличие сетевого адреса в Реестре можно в разделе «Просмотр реестра» на сайте <a target="_blank" href="http://nap.rkn.gov.ru/">nap.rkn.gov.ru</a>.</li><br/> </ol> </div></div></body></html> Ну и создаем в папке с виртуалхостом файл .htaccess ErrorDocument 404 "/index.html" # Запрещение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control <IfModule mod_headers.c> Header append Cache-Control "no-store, no-cache, must-revalidate" </IfModule> # Заголовок Expires <IfModule mad_expires.c> ExpiresActive On ExpiresDefault "now" </IfModule> Для работы скриптов нам требуется установить следующие порты : cd /usr/ports/net/p5-SOAP-Lite; make install cd /usr/ports/converters/p5-MIME-Base64; make install cd /usr/ports/sysutils/p5-Sys-Syslog; make install cd /usr/ports/textproc/p5-XML-Simple; make install cd /usr/ports/devel/p5-Data-Dumper; make install cd /usr/ports/converters/p5-Encode; make install cd /usr/ports/net/p5-URI; make install cd /usr/ports/converters/p5-Text-Iconv; make install Минусы, блокировка идет по IP, следовательно будут заблокированы все сайты на этом IP скрипт zapretinfo.sh добавить в cron
  2. Demid

    Тарифы в ЛК

    Вариант посложней, картинка рядом с надписью счет активен: В файле /userstats/modules/engine/api.userstats.php Найти: // pasive state check if ($passive) { $passive_state=__('Account frozen'); } else { $passive_state=__('Account active'); } //down state check if ($down) { $down_state=' + '.__('Disabled'); } else { $down_state=''; } Заменить на: // pasive state check if ($passive) { $passive_state=__('Account frozen'); $passive_state_img=__('Account frozen img'); } else { $passive_state=''; $passive_state_img=''; //down state check if ($down) { $down_state=__('Disabled'); $down_state_img=__('Disabled img'); } else { $down_state=__('Account active'); $down_state_img=__('Account active img'); } } Строку: <td>'.$passive_state.$down_state.'</td> Заменить на: <td>'.$passive_state.$down_state.$passive_state_img.$down_state_img.'</td> В файле /userstats/languages/Russian/lang.php (ну если язык русский конечн) Найти: $lang['def']['Account active'] = 'Счет активен'; $lang['def']['Disabled'] = 'Отключен'; $lang['def']['Account frozen'] = 'Счет заморожен'; Заменить на: $lang['def']['Account active'] = 'Счет активен'; $lang['def']['Account active img'] = ' <img src="ссылка на картинку" alt="" title="Счет активен" />'; $lang['def']['Disabled'] = 'Отключен'; $lang['def']['Disabled img'] = ' <img src="ссылка на картинку" alt="" title="Отключен " />'; $lang['def']['Account frozen'] = 'Счет заморожен'; $lang['def']['Account frozen img'] = ' <img src="ссылка на картинку" alt="" title="Счет заморожен" />'; Получится как то так:
  3. Demid

    Тарифы в ЛК

    Простой вариант: В файле /userstats/languages/Russian/lang.php (ну если язык русский конечн) Найти: $lang['def']['Account active'] = 'Счет активен'; Заменить на: $lang['def']['Account active'] = '<img src="ссылка на картинку" alt="Счет активен" title="Счет активен" />'; Остальное по аналогии...
  4. Demid

    Редірект користувачів https!

    теоритически должно сработать, создать файл .htaccess еще с 1 редиректом на страницу с 80 портом
  5. Я же написал, что через одно место...(но никто не запрещает делать так, это мы с вами понимаем что это неправильно....) Решение завтра выложу, сегодня не в адеквате немного
  6. Demid

    Турбо кнопка

    подскажите с какой стороны подойти...
  7. Demid

    Турбо кнопка

    а как?
  8. А можно реализовать данную услугу?
  9. Demid

    Вопрос по ЛК Ubilling

    Было бы неплохо, еще в изменении тарифа что бы плюсом к стоимости перехода и абонплате еще и скорость отображал.
  10. ну скачивание списков -> блокировку по IP -> перенаправлялку на страницу организовали, думаем как прикрутить по адресам , кому надо поделюсь. (через одно место, но пока как то так)
  11. Demid

    Релизы Ubilling 2014

    Спасибо!
  12. Demid

    Тарифы в ЛК

    я как раз посмотрел и повторюсь, в окне выбора тарифов все на русском, подменилось, а вот "Ваш текущий тариф: FTTh-3500 с абонплатой..." хотя он должен быть "Базовый"
  13. Demid

    Тарифы в ЛК

    все работает, но тут не меняется, где посмотреть подскажите? Ваш текущий тариф: "отображается название на английском" с абонплатой ...
  14. Demid

    Релизы Ubilling 2014

    тоже проблема с DOCX Fatal error: Call to undefined function gzinflate() in /usr/local/www/apache22/data/billing/api/libs/api.docx.php on line 198
×
×
  • Створити нове...