Jump to content
Калькуляторы
Блокировка веб ресурса  

538 members have voted

  1. 1. Для блокировка используем



Блокировка сайтов провайдерами маневры с DNS

В программе добавлена возможность подстановки своего http кода и варианта доп. параметра при редиректе (см. комментарии в .ini файле).

Share this post


Link to post
Share on other sites

Вот и хорошо.

я бы сказал - не совсем хорошо

Кстати, как парсер работает в коммерчиских системах

Share this post


Link to post
Share on other sites

Кстати, max1976. Какие переменные отвечают за движение трафика в nfq_filter.

 

overty, покажи свои правила и настройки

Share this post


Link to post
Share on other sites

Кстати, max1976. Какие переменные отвечают за движение трафика в nfq_filter.

 

overty, покажи свои правила и настройки

 

ne-vlezay80 Вы совершенно правы, в браузерах у меня не ловит с MTU меньше URL или/и значение заголовка host:

Так же проверил это на операторе МТС - все открывается если http запрос происходит в несколько IP пакетов.

Попросил коллегу проверить на своей сети, где работает Карбон, и на мое удивление тоже пролетело. Хотя блокировка по доменам работает за счет DNS спуфинга.

Всех больше удивил ЭР-Телеком, там такая штука не сработала, но возможно PBR у них по IP из реестра на прокси или офисный роутер проксирует в той конторе, в которой проверял. По доменам так же получаю поддельный IP даже с собственных DNS серверов. DNS спуфят тоже.

 

Настройки у меня стандартные, nfqfilter запущен 8 экземпляров. Трафик поступает с SPAN порта коммутатора.

 

-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 80 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 443 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set PROTOS dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set HOSTS dst,dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set ALLIP dst -j NFQUEUE --queue-balance 0:7 --queue-bypass

 

ipset-ы

PROTOS - порты из файла protos

HOSTS - IP и порты из файла hosts

ALLIP - Все IP из конфига кваги.

 

Проблему просмотра нескольких пакетов непросто решить их нужно гже-то буферизовать и потом пачкой просматривать. iptables сливает их в nfqueue по одному и ждет вердикта по ним.

DNS спуфинг, как дополнителная защита нужна бы. Дело в том что RKN могут в реестр добавить только запись о блокировании домена. И неизвестно на каком порту и какой сервис должен быть заблокирован.

Edited by overty

Share this post


Link to post
Share on other sites

Кстати, max1976. Какие переменные отвечают за движение трафика в nfq_filter.

 

overty, покажи свои правила и настройки

 

ne-vlezay80 Вы совершенно правы, в браузерах у меня не ловит с MTU меньше URL или/и значение заголовка host:

Так же проверил это на операторе МТС - все открывается если http запрос происходит в несколько IP пакетов.

Попросил коллегу проверить на своей сети, где работает Карбон, и на мое удивление тоже пролетело. Хотя блокировка по доменам работает за счет DNS спуфинга.

Всех больше удивил ЭР-Телеком, там такая штука не сработала, но возможно PBR у них по IP из реестра на прокси или офисный роутер проксирует в той конторе, в которой проверял. По доменам так же получаю поддельный IP даже с собственных DNS серверов. DNS спуфят тоже.

 

Настройки у меня стандартные, nfqfilter запущен 8 экземпляров. Трафик поступает с SPAN порта коммутатора.

 

-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 80 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 443 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set PROTOS dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set HOSTS dst,dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set ALLIP dst -j NFQUEUE --queue-balance 0:7 --queue-bypass

 

ipset-ы

PROTOS - порты из файла protos

HOSTS - IP и порты из файла hosts

ALLIP - Все IP из конфига кваги.

 

Проблему просмотра нескольких пакетов непросто решить их нужно гже-то буферизовать и потом пачкой просматривать. iptables сливает их в nfqueue по одному и ждет вердикта по ним.

DNS спуфинг, как дополнителная защита нужна бы. Дело в том что RKN могут в реестр добавить только запись о блокировании домена. И неизвестно на каком порту и какой сервис должен быть заблокирован.

Сейчас проверю на своей симке

Share this post


Link to post
Share on other sites

Кстати, max1976. Какие переменные отвечают за движение трафика в nfq_filter.

 

overty, покажи свои правила и настройки

 

ne-vlezay80 Вы совершенно правы, в браузерах у меня не ловит с MTU меньше URL или/и значение заголовка host:

Так же проверил это на операторе МТС - все открывается если http запрос происходит в несколько IP пакетов.

Попросил коллегу проверить на своей сети, где работает Карбон, и на мое удивление тоже пролетело. Хотя блокировка по доменам работает за счет DNS спуфинга.

Всех больше удивил ЭР-Телеком, там такая штука не сработала, но возможно PBR у них по IP из реестра на прокси или офисный роутер проксирует в той конторе, в которой проверял. По доменам так же получаю поддельный IP даже с собственных DNS серверов. DNS спуфят тоже.

 

Настройки у меня стандартные, nfqfilter запущен 8 экземпляров. Трафик поступает с SPAN порта коммутатора.

 

-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 80 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m tcp --dport 443 -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set PROTOS dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set HOSTS dst,dst -j NFQUEUE --queue-balance 0:7 --queue-bypass
-A ZAPRET -p tcp -m physdev --physdev-in enp4s0f0 -m set --match-set ALLIP dst -j NFQUEUE --queue-balance 0:7 --queue-bypass

 

ipset-ы

PROTOS - порты из файла protos

HOSTS - IP и порты из файла hosts

ALLIP - Все IP из конфига кваги.

 

Проблему просмотра нескольких пакетов непросто решить их нужно гже-то буферизовать и потом пачкой просматривать. iptables сливает их в nfqueue по одному и ждет вердикта по ним.

DNS спуфинг, как дополнителная защита нужна бы. Дело в том что RKN могут в реестр добавить только запись о блокировании домена. И неизвестно на каком порту и какой сервис должен быть заблокирован.

Сейчас проверю на своей симке

Кстати, вот тест моего провайдера:

root@servl:~# nc kasparov.ru 80
GET / HTTP/1.1
Host: www.kasparov.ru

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 130
Connection: close

<html><head><title>404 Not Found</title></head><body>
<h1>Not Found</h1>
<p>The requested URL was not found.</p></body></html>

 

root@servl:~# nc ya.ru 80
GET / HTTP/1.1
Host: www.kasparov.ru

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 130
Connection: close

<html><head><title>404 Not Found</title></head><body>
<h1>Not Found</h1>
<p>The requested URL was not found.</p></body></html>
^C

 

Провайдер каким-то образом определяет трафик в разных пакетах. Скорее всего они как-то его кещируют, или записывают в переменную. А потом анализируют. Реально ли такое сделать на perl?

 

Кстати, есть очень интересный perl скрипт:

#!/usr/bin/perl

use strict;
use Net::Pcap;
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP qw(:strip);
use NetPacket::TCP;
use Net::RawIP;

$|=1;
my $dev='eth1';
my $filter_str='dst port 80';

my @URL = ("hospital-vrn.ru",);
my %URL_ARR = ();
foreach (@URL) {
   $URL_ARR{$_} = 1;
}

print "Filter: $filter_str\n";

my $pcap_t = Net::RawIP->pcapinit($dev, $filter_str, 1500, 250);
loop($pcap_t, -1, \&process_pkt,"0");

sub process_pkt {

my($pktuser, $hdr, $pkt) = @_;

my $ip_obj=NetPacket::IP->decode(eth_strip($pkt));
my $srcip=$ip_obj->{src_ip};
my $dstip=$ip_obj->{dest_ip};
my $proto=$ip_obj->{proto};
my ($tcp_obj, $srcport, $dstport, $dataset, $seqnum, $acknum);

if($proto==6){
       $tcp_obj=NetPacket::TCP->decode(ip_strip(eth_strip($pkt)));
       $srcport=$tcp_obj->{src_port};
       $dstport=$tcp_obj->{dest_port};
       $dataset=$tcp_obj->{data};
       $seqnum=$tcp_obj->{seqnum};
       $acknum=$tcp_obj->{acknum};

       http_handler($dataset, $srcip, $dstip, $srcport, $dstport, $seqnum, $acknum);
   }
}

sub http_handler {
my ($dataset, $srcip, $dstip, $srcport, $dstport, $seqnum, $acknum) = @_;
my ($dataportion, $query, $host);

$dataportion = unpack("A*", $dataset);
#    print "\nDEBUG\n" . unpack("A*",$dataset);
   if ($dataportion =~ s/^GET\s(.+)\sHTTP\/1\.\d\r\n//) {
       $query = unpack("A*",$1);
       $query =~ s/^\/$//;
       if ($dataportion =~ s/Host:\s(.+)\r\n//) {
           $host = unpack("A*",$1);
           if ($URL_ARR{$host . $query}) {
               print "Matched: $host$query ($srcip)\n";
               send_answer($srcip, $dstip, $srcport, $dstport, $seqnum, $acknum);
           }
       }
   }
}

sub send_answer {
my ($srcip, $dstip, $srcport, $dstport, $seqnum, $acknum) = @_;

my $header = "HTTP/1.1 301 Moved Permanently
Location: http://google.com
Connection: close
";

my  $packet = new Net::RawIP({ip =>
               {
                   saddr => $dstip,
                   daddr => $srcip
               },
               tcp =>
               {
                   source => $dstport,
                   dest => $srcport,
                   seq => $acknum,
                   ack_seq => $seqnum+1,
                   ack => 1,
                   data => $header
               }
               });
       $packet->send(0,1);
exit 0;
}

 

Но внём есть косяки:

1. Блокируется только первый url, а остальные потом не блокируются, если не перезапустить скрипт

2. Как же сделать так, чтобы этот скрипт кешировал http пакеты, а потом анализировал их

Share this post


Link to post
Share on other sites

Провайдер каким-то образом определяет трафик в разных пакетах.

А что говорит

host kasparov.ru

Share this post


Link to post
Share on other sites

Провайдер каким-то образом определяет трафик в разных пакетах.

А что говорит

host kasparov.ru

 

Вот:

system@ne-vlezay80:~$ host kasparov.ru
kasparov.ru has address 216.92.111.41
kasparov.ru mail is handled by 50 mail1.g1.pair.com.

 

как он это делает? странно

Хотя, если блокировщик на perl:

можно сваливать весь трафик через libpcap в файл, там его склеивать и анализировать. А потом отправлять RST.

Единственный минус: может навернуться жёсткий диск или SSD.

Кстати, так может COPM получиться

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites

max1976 C SSL проблема обнаружилась.

curl -v https://www.noxwin.com

не сбрасывает подключение, хотя

curl -v https://kinokubik.com

сбрасывает без проблем.

Share this post


Link to post
Share on other sites

Провайдер каким-то образом определяет трафик в разных пакетах.

А что говорит

host kasparov.ru

 

Вот:

system@ne-vlezay80:~$ host kasparov.ru
kasparov.ru has address 216.92.111.41
kasparov.ru mail is handled by 50 mail1.g1.pair.com.

 

как он это делает? странно

Хотя, если блокировщик на perl:

можно сваливать весь трафик через libpcap в файл, там его склеивать и анализировать. А потом отправлять RST.

Единственный минус: может навернуться жёсткий диск или SSD.

Кстати, так может COPM получиться

 

Не вариант, быстрее ответ от веб сервера придет с такой логикой чем RSP пакет.

И libpcap теряет пакеты, perl возможно ляжет, это все таки не C++.

nfqfilter только дорабатывать, если получиться сложить payload нескольких пакетов и далее обработать, но тут слово за max1976.

Судя по коду это еще должен и ndpi поддерживать.

И очень хотелось бы видеть поддержку DNS спуфинга тоже.

Edited by overty

Share this post


Link to post
Share on other sites

Провайдер каким-то образом определяет трафик в разных пакетах.

А что говорит

host kasparov.ru

 

Вот:

system@ne-vlezay80:~$ host kasparov.ru
kasparov.ru has address 216.92.111.41
kasparov.ru mail is handled by 50 mail1.g1.pair.com.

 

как он это делает? странно

Хотя, если блокировщик на perl:

можно сваливать весь трафик через libpcap в файл, там его склеивать и анализировать. А потом отправлять RST.

Единственный минус: может навернуться жёсткий диск или SSD.

Кстати, так может COPM получиться

 

Не вариант, быстрее ответ от веб сервера придет с такой логикой чем RSP пакет.

И libpcap теряет пакеты, perl возможно ляжет, это все таки не C++.

nfqfilter только дорабатывать, если получиться сложить payload нескольких пакетов и далее обработать, но тут слово за max1976.

Судя по коду это еще должен и ndpi поддерживать.

И очень хотелось бы видеть поддержку DNS спуфинга тоже.

 

На счёт сложения payload: тут по любому придётся в файл писать, а потом уже этот файл анализировать. На счёт ответа от сервера: в nfqueue пожно "придержать" пакет пока он небудет проинспектирован. Размещять этот файл лучше в /dev/ram0

 

Я max1976 спрашивал. Вот что он мне в ЛС прислал:

Пока нет свободного времени на решение сложной задачи. Небольшие наработки уже есть' date=' но нужно время.

[/quote']

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites
я бы сказал - не совсем хорошо

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

Сделайте чтобы проверки проходило - наотьебись по русски говоря.

 

Если поищите по форуму все эти грабли в построении DPI/фильтрации я описывал ещё пару лет назад, как и много другое, но отпиливать самому себе интернет просто тупо, даже за деньги на работе, а отпиливать чтобы совсем не работало верх критинизма.

Share this post


Link to post
Share on other sites

max1976 C SSL проблема обнаружилась.

curl -v https://www.noxwin.com

не сбрасывает подключение, хотя

curl -v https://kinokubik.com

сбрасывает без проблем.

Почему же проблема? В реестре указано http://www.noxwin.com, про https://www.noxwin.com ничего нет.

 

я бы сказал - не совсем хорошо

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

Сделайте чтобы проверки проходило - наотьебись по русски говоря.

 

Если поищите по форуму все эти грабли в построении DPI/фильтрации я описывал ещё пару лет назад, как и много другое, но отпиливать самому себе интернет просто тупо, даже за деньги на работе, а отпиливать чтобы совсем не работало верх критинизма.

 

Тест РКН пройден - все хорошо. В любом случае, даже решив проблему с MTU, есть масса других способов, которыми абонент может обойти любой фильтр.

Share this post


Link to post
Share on other sites

max1976 C SSL проблема обнаружилась.

curl -v https://www.noxwin.com

не сбрасывает подключение, хотя

curl -v https://kinokubik.com

сбрасывает без проблем.

Почему же проблема? В реестре указано http://www.noxwin.com, про https://www.noxwin.com ничего нет.

 

я бы сказал - не совсем хорошо

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

Сделайте чтобы проверки проходило - наотьебись по русски говоря.

 

Если поищите по форуму все эти грабли в построении DPI/фильтрации я описывал ещё пару лет назад, как и много другое, но отпиливать самому себе интернет просто тупо, даже за деньги на работе, а отпиливать чтобы совсем не работало верх критинизма.

 

Тест РКН пройден - все хорошо. В любом случае, даже решив проблему с MTU, есть масса других способов, которыми абонент может обойти любой фильтр.

Например, повздорил главврач с жиной главы РКН, и врезультате пришла проверка и оштрафовала учереждение. Несмотря на то, что в учереждении стоял очень мощный DPI, который видел пакеты даже в PPTP. Но проверяющие проверяли иерез tor+vpn+proxy+i2p+vpn+tor+i2p+tor+vpn+ssh на vps+vpn+tor obfsproxy+tor. Шутка.

Share this post


Link to post
Share on other sites

В ndpi есть структуры для flow... В ntopng можно подсмотреть код для тех кому интересно... Не надо писать в файл, это жуть.

Share this post


Link to post
Share on other sites

В ndpi есть структуры для flow... В ntopng можно подсмотреть код для тех кому интересно... Не надо писать в файл, это жуть.

ndpi не видит трафик от старых ОС. А почему нельзя через файл. Мне кажится, через файл - самое надёжное. По крайней мере, скинуть трафик в файл даде просще, чем реализовывать flow

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites

max1976 C SSL проблема обнаружилась.

curl -v https://www.noxwin.com

не сбрасывает подключение, хотя

curl -v https://kinokubik.com

сбрасывает без проблем.

Почему же проблема? В реестре указано http://www.noxwin.com, про https://www.noxwin.com ничего нет.

 

Вот в реестре запись -

<content id="268018" includeTime="2016-02-14T19:38:13" entryType="1" hash="F9613459948CEE6229AA35B5FAC8336C"><decision date="2016-02-05" number="2-6-27/2016-01-19-31-ÀÈ" org="ÔÍÑ"/><url><![CDATA[https://www.noxwin.com/]]></url><domain
><![CDATA[www.noxwin.com]]></domain><ip>109.205.94.28</ip></content>

 

В файле ssl_host запись так же есть, но почемуто не сбрасывает по Hello пакету SSL подключение.

Share this post


Link to post
Share on other sites

Провайдер каким-то образом определяет трафик в разных пакетах.

А что говорит

host kasparov.ru

 

Вот:

system@ne-vlezay80:~$ host kasparov.ru
kasparov.ru has address 216.92.111.41
kasparov.ru mail is handled by 50 mail1.g1.pair.com.

 

как он это делает? странно

Хотя, если блокировщик на perl:

можно сваливать весь трафик через libpcap в файл, там его склеивать и анализировать. А потом отправлять RST.

Единственный минус: может навернуться жёсткий диск или SSD.

Кстати, так может COPM получиться

 

Не вариант, быстрее ответ от веб сервера придет с такой логикой чем RSP пакет.

И libpcap теряет пакеты, perl возможно ляжет, это все таки не C++.

nfqfilter только дорабатывать, если получиться сложить payload нескольких пакетов и далее обработать, но тут слово за max1976.

Судя по коду это еще должен и ndpi поддерживать.

И очень хотелось бы видеть поддержку DNS спуфинга тоже.

 

На счёт сложения payload: тут по любому придётся в файл писать, а потом уже этот файл анализировать. На счёт ответа от сервера: в nfqueue пожно "придержать" пакет пока он небудет проинспектирован. Размещять этот файл лучше в /dev/ram0

 

Я max1976 спрашивал. Вот что он мне в ЛС прислал:

Пока нет свободного времени на решение сложной задачи. Небольшие наработки уже есть' date=' но нужно время.

[/quote']

 

Интересно, какая будет производительность вашей сети, если пакеты будут придерживать.

К вашем сведению nfqueue работает per-flow, а не per-packet.

Даже при queue-balance одно подключение попадает в одну и туже очередь.

Задержали вы первый пакет, как второй смотреть будете, без вердикта первого?

Запись в файл с использованием pcap для меня вообще не вариант.

Share this post


Link to post
Share on other sites

В файле ssl_host запись так же есть, но почемуто не сбрасывает по Hello пакету SSL подключение.

nDPI детектит пакеты к данному хосту как Tor.

Share this post


Link to post
Share on other sites

В файле ssl_host запись так же есть, но почемуто не сбрасывает по Hello пакету SSL подключение.

nDPI детектит пакеты к данному хосту как Tor.

 

т.е. не исправить?

Share this post


Link to post
Share on other sites

В файле ssl_host запись так же есть, но почемуто не сбрасывает по Hello пакету SSL подключение.

nDPI детектит пакеты к данному хосту как Tor.

 

т.е. не исправить?

Исправить можно, если добавить в условие проверки SSL TOR.

Share this post


Link to post
Share on other sites

у меня у одного так скрипт выгрузки работает?

root@skyprox-main:/home/rkn/zapret# ./zapret.pl
binmode() on closed filehandle F at ./zapret.pl line 373.
read() on closed filehandle F at ./zapret.pl line 374.
Use of uninitialized value in numeric ne (!=) at ./zapret.pl line 374.
binmode() on closed filehandle F at ./zapret.pl line 381.
read() on closed filehandle F at ./zapret.pl line 382.
Use of uninitialized value in numeric ne (!=) at ./zapret.pl line 382.
Subroutine _call redefined at (eval 147) line 50.
Subroutine OperatorRequestService::want_som redefined at (eval 147) line 92.
Subroutine AUTOLOAD redefined at (eval 147) line 109.
Subroutine OperatorRequestService::getLastDumpDate redefined at (eval 147) line 107.
Subroutine OperatorRequestService::sendRequest redefined at (eval 147) line 107.
Subroutine OperatorRequestService::getResult redefined at (eval 147) line 107.
Subroutine OperatorRequestService::getLastDumpDateEx redefined at (eval 147) line 107.
Use of uninitialized value in subroutine entry at /usr/local/share/perl/5.20.2/SOAP/Lite.pm line 289.
Use of uninitialized value in subroutine entry at /usr/local/share/perl/5.20.2/SOAP/Lite.pm line 289.
Use of uninitialized value $res in string eq at ./zapret.pl line 395.
Use of uninitialized value $code in concatenation (.) or string at ./zapret.pl line 407.
Died at ./zapret.pl line 409.

Debian 8.3.0

 

скрипт из git-а на данный момент

Edited by yKpon

Share this post


Link to post
Share on other sites

В файле ssl_host запись так же есть, но почемуто не сбрасывает по Hello пакету SSL подключение.

nDPI детектит пакеты к данному хосту как Tor.

 

т.е. не исправить?

Исправить можно, если добавить в условие проверки SSL TOR.

 

Похоже что в nDPI есть баг, напишу разработчикам.

Share this post


Link to post
Share on other sites

binmode() on closed filehandle F at ./zapret.pl line 373.

 

Ошибки при работе с файлами запроса и подписью.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now