Перейти до

Фильтрация по спискам запрещенных сайтов Роскомнадзора России


Рекомендованные сообщения

Добрый день, Думаю Вашим биллингом пользуется много Россиян, и данный вопрос будет актуален. Мы понимаем, что данный модуль будет непросто реализовать. Вопрос цены?

Ссылка на сообщение
Поделиться на других сайтах

Добрый день, Думаю Вашим биллингом пользуется много Россиян, и данный вопрос будет актуален. Мы понимаем, что данный модуль будет непросто реализовать. Вопрос цены?

официально никто не пользуется, т.к. нужен сертифицированный :)
Ссылка на сообщение
Поделиться на других сайтах

 

Добрый день, Думаю Вашим биллингом пользуется много Россиян, и данный вопрос будет актуален. Мы понимаем, что данный модуль будет непросто реализовать. Вопрос цены?

официально никто не пользуется, т.к. нужен сертифицированный :)

 

Ну официально и мы не пользуемся :), Но модуль так хочется.

Ссылка на сообщение
Поделиться на других сайтах

1. Автоматическое скачивание обновленных списков по cron.

2. Автоподгрузка в биллинг (+ возможность добавления списков блокировки провайдером)

3. Перенаправлялка на страничку пользователя при доступе к блокированному ресурсу.

Ссылка на сообщение
Поделиться на других сайтах

 

Добрый день, Думаю Вашим биллингом пользуется много Россиян, и данный вопрос будет актуален. Мы понимаем, что данный модуль будет непросто реализовать. Вопрос цены?

официально никто не пользуется, т.к. нужен сертифицированный :)

 

сертификация биллинга нужна если он будет считать траффик, если все тарифы анлимы и он считает только абонплату то не нужен сертификат

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

ну скачивание списков -> блокировку по IP -> перенаправлялку на страницу организовали, думаем как прикрутить по адресам :), кому надо поделюсь. (через одно место, но пока как то так)

Відредаговано Demid
Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

ну скачивание списков -> блокировку по IP -> перенаправлялку на страницу организовали, думаем как прикрутить по адресам :), кому надо поделюсь. (через одно место, но пока как то так)

 

отличная идея схоронить все сайты на одном ip из-за одного сайта, попавшего в реестр.

Ссылка на сообщение
Поделиться на других сайтах

Я же написал, что через одно место...(но никто не запрещает делать так, это мы с вами понимаем что это неправильно....) Решение завтра выложу, сегодня не в адеквате немного :)

Відредаговано Demid
Ссылка на сообщение
Поделиться на других сайтах

Ну собсно корявая реализация, спасибо гуглу и опеннет:

 

Для начала нам надо вытащить электронную подпись с рутокена, полученного в роскомнадзоре. Для этого воспользуемся утилитой 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

Ссылка на сообщение
Поделиться на других сайтах

Т.е. если там есть ссылки на вконтакт и ютуб(а они там есть, и вы обязаны их блокировать), то вы эти ресурсы блокируете? Элегантно.

Ссылка на сообщение
Поделиться на других сайтах

Редиректите не на страницу блокировки а на сервер squid или webproxy микротика (прямо в фаерволе микротика), далее в сквиде или микротике генерите список ссылок на подмену страницей блокировки, остальное пропускать. На выходе получите бюджетный блокировщик http/https для squid и http для микротика.

 

P.S. Есть рекомендации роскомнадзора, в документе рекомендован следующий порядок действий:

 

1. разрешение адресов по доменам в ссылках (именно самостоятельное разрешение)

2. Вывод трафика на эти адреса через PBR

3. Фильтрация ответвленного трафика

 

Но тут есть нюанс, TTL DNS записей гугла например не превышает 5 минут. Раз в 5 минут обновлять карту PBR не есть айс, так что придется агрегировать ип адреса для доменов своим скриптом за несколько дней и фильтровать по всем ип адресам.

 

Если кто-то думает что достаточно ПБРить адреса указанные в реестре, увы это не так, они там массово неправильные (процентов эдак 50), а судебным органам на это плевать.

Відредаговано dimmons
Ссылка на сообщение
Поделиться на других сайтах
  • 11 months later...

В свете давних изменений давно поменялся скрипт download.pl

   #!/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://vigruzki.rkn.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 $dfv = "2.0";

   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,
	$dfv );

   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");
   };

Так же изменили скрипт zapretinfo.sh, что бы не дергал ipfw постоянно:

#!/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
/sbin/ipfw -q table 33 flush
cat /var/db/zapret-info/zapretinfo_ip | while read ip; do 
/sbin/ipfw -q table 33 add $ip 
done 


Так же удаляем из firewall.conf следующие строки:

cat /var/db/zapret-info/zapretinfo_ip | while read ip; do 
${FwCMD} table 3 add $ip 
done 
Ссылка на сообщение
Поделиться на других сайтах

ну и заглушка

<!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://eais.rkn.gov.ru/">Единый Реестр</a> доменных имен, указателей страниц сайтов сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено.<br/>
<br/>Проверить наличие сетевого адреса в Едином реестре можно в разделе «Просмотр реестра» на сайте <a target="_blank" href="http://eais.rkn.gov.ru/">eais.rkn.gov.ru</a>.</li><br/><li>Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в <a target="_blank" href="http://nap.rkn.gov.ru/reestr/">Реестр</a> доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространяемую с нарушением исключительных прав.<br/><br/>Проверить наличие сетевого адреса в Реестре можно в разделе «Просмотр реестра» на сайте <a target="_blank" href="http://nap.rkn.gov.ru/reestr/">nap.rkn.gov.ru/reestr</a>.</li><br/><li>Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в <a target="_blank" href="http://398-fz.rkn.gov.ru/">Реестр</a> доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие призывы к массовым беспорядкам, осуществлению экстремистской деятельности, участию в массовых (публичных) мероприятиях, проводимых с нарушением установленного порядка.<br/><br/>Проверить наличие сетевого адреса в Реестре можно в разделе «Просмотр реестра» на сайте <a target="_blank" href="http://398-fz.rkn.gov.ru/">398-fz.rkn.gov.ru</a>.</li><br/></ol>
</div></div></body></html>
Ссылка на сообщение
Поделиться на других сайтах

это не правильный подход

Вы блочите по ip, а нужно по ресурсу

по ip Вы можете заблочить не только нужную страницу , но и все сайты висящие на данном ip

Вам нужен механизм dpi для анализа запроса и принятия решения

Ссылка на сообщение
Поделиться на других сайтах
это не правильный подход

ага...  "вы живете в неправильной стране"  :lol:  

 

table 33 вообще не обязательно заворачивать в заглушку на себя. Можно, например, передавать айпишки из нее  в прозрачный squid, и уже там ACL-ками разбирать по URL-ам более детально.  

 

Все зависит от желания заморачиваться над самой по себе убогой идеей "запрещенных сайтов". 

Відредаговано anxiolytic
Ссылка на сообщение
Поделиться на других сайтах

те запрещенные каналы могут быть, а сайты нет ?!

 

через сквид можно конечно фильтровать, заворачивая туда только трафик для нужных ip

Ссылка на сообщение
Поделиться на других сайтах

Редирект на squid

# тридцать третья табличка - zapret.info. Она должна блокироваться бай дефолт на внутреннем интерфейсе. IP 1.1.1.1 адрес сервера со squid
${FwCMD} add 3 fwd 1.1.1.1, 3128 tcp from table\(10\) to table\(33\) dst-port 80 via bce0
${FwCMD} add 4 fwd 1.1.1.1, 3129 tcp from table\(10\) to table\(33\) dst-port 443 via bce0

squid.conf

http_port 1.1.1.1:9090
http_port 1.1.1.1:3128 intercept
https_port 1.1.1.1:3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/etc/squid/ssl/squidCA.pem
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all
always_direct allow all
ssl_bump server-first all 
ssl_bump client-first all
ssl_bump none all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/local/libexec/squid/ssl_crtd -s /var/squid/ssl_db -M 4MB
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
cache_mem 1 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 1 KB
maximum_object_size_in_memory 50 KB
cache_replacement_policy heap LFUDA
cache_dir ufs /var/squid/cache 1 1 1 no-store
logfile_rotate 7
dns_nameservers 8.8.8.8
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
quick_abort_min 0 KB
quick_abort_max 0 KB
half_closed_clients off
acl purge method PURGE
acl CONNECT method CONNECT
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unregistered ports
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow all
http_reply_access allow all
icp_access allow all
cache_mgr admin@isp.com
memory_pools off
log_icp_queries off
cachemgr_passwd q1w2e3r4 all
client_db off
buffered_logs on
redirect_program /usr/local/etc/squid/redirector.pl
url_rewrite_children 20 startup=10 idle=1 concurrency=0

/usr/local/etc/squid/redirector.pl

#!/usr/bin/perl

use IO::Handle;
use POSIX qw(strftime);
use POSIX qw(setsid);

my $db_path	= "/var/db/zapret-info";
my $block_url 	= "http://1.1.1.2"; # адресс страницы заглушки
my $log_file	= "/var/log/squid/redirector.log";

$0 = 'redirect' ;
$| = 1 ;
my @banners ;
my @X ;
my $serial	=0;

sub _log {
    my $log_str = shift;
    my $now_str = strftime "%d-%m-%Y %H:%M:%S", localtime;
    printf(FLOG "[%s] %s\n", $now_str, $log_str);
}

sub _rule_refresh {
    open(SER ,"${db_path}/serial");
    read(SER,$num,6);
    close(SER);

    if (length($num)==0) { $num=0; }
    if ($num > $serial) {
	_log("Reading file ${db_path}/zapretinfo_url serial ${num}");
	open (IN_FILE, "${db_path}/zapretinfo_url") || die $!;
	my @tmp_data = <IN_FILE>;
	chomp @tmp_data;
	@banners=();
	push @banners, map { qr /\Q$_\E/ }  grep { ! /^\s*$/ } @tmp_data;
	close(IN_FILE);
	$serial=$num;
    }
}

$SIG{INT} = \&_rule_refresh;
open(FLOG, ">>${log_file}");
$| = 1 ;
FLOG->autoflush(1);
_log("Redirector started.");

while (<>) {
    chomp ;
    @X = split ;
    ($url, $who, $ident, $method) = @X ;
    _rule_refresh ;
    $url = $block_url if grep ($url=~/$_/i, @banners) ;
    print "$url \n" ;
}

_log("Redirector exited.");
close(FLOG);
exit 0;

xml-parser.pl

#!/usr/bin/perl

use XML::Simple;
use Data::Dumper ;
use Encode ;
use URI::Escape;
use Text::Iconv;

$db_path='/var/db/zapret-info/' ;

$simple=XML::Simple->new( KeepRoot=>1,
    RootName=>'reg:register'
);
$xml=$simple->XMLin($db_path.'dump/dump.xml');
my %list = %{$xml->{'reg:register'}->{'content'}};

open(FURL, ">${db_path}zapretinfo_url");

sub _url {
    eval {
$url=shift;
$url=~s/ //g;
$url=uri_escape_utf8($url, "^A-Za-z0-9\-\._~:/\?\=\&\%");
print(FURL $url."\n");
    }
}
while ( my($key, $value) = each %list) {
    my $domain=$value->{'domain'} ;
    my $ip=$value->{'ip'} ;
    my $url=$value->{'url'} ;
    my $etype=$value->{'entryType'} ;

        if(ref($url) eq 'ARRAY'){
            my @url_list=@{$url};
            foreach $url (@url_list) { _url($url); }
        } else { _url($url); }
}

close(FURL);

open(SER ,"${db_path}/serial");
read(SER,$serial,6);
close(SER);

if (length($serial)==0) { $serial=0; }

$serial+=1;

open(SER ,">${db_path}/serial");
printf(SER "%06d",$serial);
close(SER);

exit 0;

zapretinfo.sh

#!/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
/sbin/ipfw -q table 33 flush
cat /var/db/zapret-info/zapretinfo_ip | while read ip; do 
/sbin/ipfw -q table 33 add $ip 
done 
/usr/bin/perl xml-parser.pl

создаем squidCA.pem

mkdir /usr/local/etc/squid/ssl
cd /usr/local/etc/squid/ssl
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
chmod 444 squidCA.pem

инициализируем сертификатную базу данных

/usr/local/libexec/squid/ssl_crtd -c -s  /var/squid/ssl_db 
Відредаговано Demid
Ссылка на сообщение
Поделиться на других сайтах
  • 9 months later...

Я конечно жутко извиняюсь, но если уж берете чужие бесплатные наработки, будьте любезны указывать первоисточник...

Просто некрасиво мой код выдавать за свое, без ссылок на первоисточник, это требует элементарная вежливость. 

Все бесплатно, денег с Вас ни кто не за что не просит. Так какого лешего Вы даже не упоминаете, откуда все это взяли...

И кстати, я рекомендовал связку cisco + squid через wccp ...

===

Оригинал взят отсюда : 

тыц1 http://www.ps-ax.ru/2013/10/20/реестр-роскомнадзора/

тыц2 http://www.ps-ax.ru/2014/08/27/фильтрация-трафика-по-реестру-роском/

на OpenNet лежит с указанием первоисточника https://www.opennet.ru/tips/info/2810.shtml

 

Demid, вы даже не поленились комментарий у меня оставить :

Demid говорит 

15/03/2015 в 12:37 дп:

ошибка 400 при обработке редиректором

Відредаговано yuri_p
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від vadimich
      Совет национальной безопасности и обороны (СНБО) Украины в четверг, 8 июля, принял окончательное решение о создании так называемого реестра "запрещенных сайтов", которые подлежат блокировке. Об этом сообщил в Facebook член Интернет-ассоциации Украины и участник рабочей группы по вопросам технической реализации реестра Максим Тульев.
      В комментарии dev.ua он заявил, что реестр создается с подачи крупных операторов, чтобы понимать, какие сайты подлежат блокировке, а какие нет.
      В комментарии "НВ Бизнес" Тульев уточнил, что рабочая группа, которая будет определять детали создания реестра, начнет полноценную работу с понедельника, 12 июля. Политическое решение о создании реестра уже принято.
      Источник
       
      Таки дождались, спустя 4 года в Украину пришли РКНовсике выгрузки запрещенный сайтов. Ожидаемо, и вроде вроде бы ничего не изменилось, всего лишь закончилась эпоха ручной выборки из судебных решений, и самостоятельного выбора типа блокировки, но тенденция откровенно напрягает. А что дальше мы позаимствуем у руSSкого мира? СОРМ? Симки по паспортам? Ревизор Интернета? ТСПУ? И когда?
    • Від KaYot
      https://www.ixbt.com/news/2018/04/11/roskomnadzor-nachal-blokirovku-domena-googleusercontentcom.html
       
       
      Ну не дибилы?
    • Від igrey
      Не корысти ради а информации для
      Там есть сслочка на форум, тоже интересно
       
       
      Компания «ВымпелКом» настолько увлеклась блокировкой сайтов в РФ, что поневоле стала блокировать некоторые из них и в Украине, правда не для всех абонентов.
       
      Дело в том, что сеть «Домашний интернет» от Киевстар, по сути, представляет собой как новые сети Киевстара, так и поглощенные сети Beeline. Сеть Beeline, в свою очередь, имеет российские корни.
       
      К примеру, при попытке зайти на такие сайты как minecraftskins.info и kavkazcenter.com пользователю КС выводится информационное сообщение о том, что сайт заблокирован по решению органов государственной власти. По всем вопросам страница посылает на российский сайт поддержки «Beeline».
       
       
      Исходя из имеющейся информации, в службе поддержки об этом знают: с некоторых сайтов (по запросу пользователей) запрет снимают, остальные же якобы находятся в России и Киевстар к этому отношения не имеет.
       
      Но, если, со слов техподдержки, «Кавказ-Центр» хостится в России и проблема именно в этом, то почему у других украинских провайдеров этот сайт открывается? Потому, что проблема не в хостинге, а в Киевстаре и структуре его сети.
       
      Так или иначе, но некоторым пользователям украинского «Домашнего интернета», доступ к «плохим» сайтам запрещен, без каких либо законных обоснований.
×
×
  • Створити нове...