Ansy Опубликовано 12 декабря, 2012 · Жалоба А на MIkrotik ктонибуть реализовывал автоматическую блокировку запрещенных сайтов ?Полный скрипт описан здесьhttp://forum.nag.ru/forum/index.php?showtopic=79836&view=findpost&p=776576 Работает в автомате. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvk Опубликовано 21 февраля, 2013 (изменено) · Жалоба Вопрос что у нас есть из программного DPI ? напрмер под линукс? статья была на эту тему - здесь. Как раз про блокировку и система вся на линуксе. Изменено 2 апреля, 2013 пользователем Shiva Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ansy Опубликовано 22 февраля, 2013 (изменено) · Жалоба Вопрос что у нас есть из программного DPI ? напрмер под линукс?статья была на эту тему - здесь. Как раз про блокировку и система вся на линуксе.А ценничек так ничего себе... ;) 95 тыщ в месяц, 200 тыщ в месяц...Эт чо, попил откатов уже пошел от "аффилированных" к сему закону "сколиков"? Изменено 2 апреля, 2013 пользователем Shiva Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Bigmazy Опубликовано 16 апреля, 2013 (изменено) · Жалоба Вопрос что у нас есть из программного DPI ? напрмер под линукс?статья была на эту тему - здесь. Как раз про блокировку и система вся на линуксе.А ценничек так ничего себе... ;) 95 тыщ в месяц, 200 тыщ в месяц...Эт чо, попил откатов уже пошел от "аффилированных" к сему закону "сколиков"? Жестко с ценником :), а в не "аффилированных" это сколько? DPI с бесплатной опцией фильтрации, не аффилированный :) даже если вдруг акция закончится пишите что с НАГ всегда договоримся о включении. Изменено 18 октября, 2013 пользователем Bigmazy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
gavru Опубликовано 21 октября, 2013 · Жалоба Согласно государственным законам нашей необъятной страны блокировка трафика должна осуществлятся как по доменному имени так и по IP, так что опрос конечно интересный но нашим законотворцам без разницы наше мнение, они хотят и так и так, столкнулся с данной проблемой при написании модуля для автоматического обновления запрещённых ресурсов согласно реестра, для traffpro. Изначально для traffpro из реестра выгружались только домены и подсовывались в виде *blabla.ru, но пришли из контролирующих органов, забили ip и сказали всё исправить, теперь в список загружается ещё и ip. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 13 декабря, 2013 · Жалоба Согласно государственным законам нашей необъятной страны блокировка трафика должна осуществлятся как по доменному имени так и по IP Да щаззз! Нет такого в законе, лапшу на уши не вешайте и сами не ведитесь. Есть лишь рекомендации Роскомнадзора, и то оформленные в виде "лучше только по доменному имени". Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
yegorov-p Опубликовано 16 декабря, 2013 · Жалоба Согласно государственным законам нашей необъятной страны блокировка трафика должна может осуществлятся как по доменному имени так и по IP Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 14 марта, 2014 · Жалоба Забыл флаг ACK выставить, заработало. Вот такая штука получилась. #!/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='((src net 1.2.3.0/23) or (src net 2.3.4.0/21) or (src net 3.4.5.0/22)) and dst port 80'; my $promisc=0; my $to_ms=1000; my $pcap_t; my $err; my $count = -1; $SIG{CHLD} = 'IGNORE'; my $optimize=0; my $netmask=0; my $snaplen = 4096; my @URL = ("www.ya.ru/test6","www.youtube.com/watch?v=1234567"); my %URL_ARR = (); foreach (@URL) { $URL_ARR{$_} = 1; } print "Filter: $filter_str\n"; $pcap_t=Net::Pcap::open_live($dev, $snaplen, $promisc, $to_ms, \$err) || die "Error opening pcap: $err\n"; my $filter_t; my $result=Net::Pcap::compile($pcap_t, \$filter_t, $filter_str,$optimize,$netmask); Net::Pcap::setfilter($pcap_t, $filter_t); Net::Pcap::loop($pcap_t, $count, \&process_pkt,"xyz"); 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; $packet->set({ip => { saddr => $dstip, daddr => $srcip }, tcp => { source => $dstport, dest => $srcport, seq => $acknum, ack_seq => $seqnum+1, ack => 1, data => $header } }); $packet->send(); } Подскажите, как можно указать чтение из файла со списком урлов? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
disappointed Опубликовано 17 марта, 2014 · Жалоба Подскажите, как можно указать чтение из файла со списком урлов? Заменить это my @URL = ("www.ya.ru/test6","www.youtube.com/watch?v=1234567"); my %URL_ARR = (); foreach (@URL) { $URL_ARR{$_} = 1; } на это open(URLFILE,"< path_to_file_with_urls"); while (<URLFILE>) { $URL_ARR{$_} = 1; } Если урлы в файле начинаются с http:// то заменить if ($URL_ARR{$host . $query}) { на if ($URL_ARR{"http://" . $host . $query}) { У меня кстати эта задумка с редиректорм так и осталась брошенной. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
holyspirit Опубликовано 18 марта, 2014 · Жалоба У меня кстати эта задумка с редиректорм так и осталась брошенной. А не подскажите как в процессе работы данного скрипта очистить память? А то несколько дней мучаемся чтобы добавить очистку памяти, но ничего пока не получается. А ребутать скрипт каждые 15 минут как сжирается память не интересно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 19 марта, 2014 · Жалоба Кто и как фильтрует по URL? Думаем купить железку или решение на pc. Посоветуйте Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 19 марта, 2014 · Жалоба Кто и как фильтрует по URL? Думаем купить железку или решение на pc. Посоветуйте SCE Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 19 марта, 2014 · Жалоба Кто и как фильтрует по URL? Думаем купить железку или решение на pc. Посоветуйте SCE Бюджетнее нечего? Просто все купили себе SCE или рубят по IP/домену? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
shaggy_ Опубликовано 26 марта, 2014 · Жалоба Подскажите, как можно указать чтение из файла со списком урлов? Заменить это my @URL = ("www.ya.ru/test6","www.youtube.com/watch?v=1234567"); my %URL_ARR = (); foreach (@URL) { $URL_ARR{$_} = 1; } на это open(URLFILE,"< path_to_file_with_urls"); while (<URLFILE>) { $URL_ARR{$_} = 1; } Если урлы в файле начинаются с http:// то заменить if ($URL_ARR{$host . $query}) { на if ($URL_ARR{"http://" . $host . $query}) { Извеняюсь за глупость, но у меня при замене 2е ошибки выдает Global symbol "%URL_ARR" requires explicit package name at ./block.py line 39. Global symbol "%URL_ARR" requires explicit package name at ./block.py line 86. где есть $URL_ARR{$_} = 1; (в цикле wile и if ($URL_ARR{"http://" . $host . $query}) ). Что сделал: поменял #my @URL = ("http://yandex.ru/test6","www.youtube.com/watch?v=1234567"); #my %URL_ARR = (); #foreach (@URL) { # $URL_ARR{$_} = 1; #} open(URL,"< /media/500Gb/tmp/URLFILE"); while (my $row = <URL>) { chomp $row; $URL_ARR{$_} = 1; print "$row\n"; } и #if ($URL_ARR{$host . $query}) { if ($URL_ARR{"http://" . $host . $query}) { URLFILE вида : http://yandex.ru/test6 www.youtube.com/watch?v=1234567 Подскажите пожалуйста, что я сделал не так? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 26 марта, 2014 · Жалоба Подскажите, как можно указать чтение из файла со списком урлов? Заменить это my @URL = ("www.ya.ru/test6","www.youtube.com/watch?v=1234567"); my %URL_ARR = (); foreach (@URL) { $URL_ARR{$_} = 1; } на это open(URLFILE,"< path_to_file_with_urls"); while (<URLFILE>) { $URL_ARR{$_} = 1; } Если урлы в файле начинаются с http:// то заменить if ($URL_ARR{$host . $query}) { на if ($URL_ARR{"http://" . $host . $query}) { Извеняюсь за глупость, но у меня при замене 2е ошибки выдает Global symbol "%URL_ARR" requires explicit package name at ./block.py line 39. Global symbol "%URL_ARR" requires explicit package name at ./block.py line 86. где есть $URL_ARR{$_} = 1; (в цикле wile и if ($URL_ARR{"http://" . $host . $query}) ). Что сделал: поменял #my @URL = ("http://yandex.ru/test6","www.youtube.com/watch?v=1234567"); #my %URL_ARR = (); #foreach (@URL) { # $URL_ARR{$_} = 1; #} open(URL,"< /media/500Gb/tmp/URLFILE"); while (my $row = <URL>) { chomp $row; $URL_ARR{$_} = 1; print "$row\n"; } и #if ($URL_ARR{$host . $query}) { if ($URL_ARR{"http://" . $host . $query}) { URLFILE вида : http://yandex.ru/test6 www.youtube.com/watch?v=1234567 Подскажите пожалуйста, что я сделал не так? Аналогичная ошибка вываливается Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 26 марта, 2014 · Жалоба Разобрались не коменти my %URL_ARR = (); Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 26 марта, 2014 (изменено) · Жалоба С файла читает только последнию строку. Изменено 26 марта, 2014 пользователем roysbike Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 26 марта, 2014 (изменено) · Жалоба Подскажите, как можно указать чтение из файла со списком урлов? Заменить это my @URL = ("www.ya.ru/test6","www.youtube.com/watch?v=1234567"); my %URL_ARR = (); foreach (@URL) { $URL_ARR{$_} = 1; } на это open(URLFILE,"< path_to_file_with_urls"); while (<URLFILE>) { $URL_ARR{$_} = 1; } Если урлы в файле начинаются с http:// то заменить if ($URL_ARR{$host . $query}) { на if ($URL_ARR{"http://" . $host . $query}) { У меня кстати эта задумка с редиректорм так и осталась брошенной. Спасибо за помощь, пробуем закрывать вашим скриптом . Идея хорошая. Есть проблема, с файла читает только последнию строку. В файл заносим url в таком виде ya.ru/test1 ya.ru/test2 ya.ru/test3 Возможно ли блокировать url https? Изменено 26 марта, 2014 пользователем roysbike Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
shaggy_ Опубликовано 26 марта, 2014 · Жалоба Разобрались не коменти my %URL_ARR = (); Это первое что я пробовал. Скрипт запускается, но эффекта нет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 26 марта, 2014 · Жалоба Разобрались не коменти my %URL_ARR = (); Это первое что я пробовал. Скрипт запускается, но эффекта нет. Как я писал выше, читает только последнию строку. Проверьте у себя Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
shaggy_ Опубликовано 26 марта, 2014 · Жалоба Разобрались не коменти my %URL_ARR = (); Это первое что я пробовал. Скрипт запускается, но эффекта нет. Как я писал выше, читает только последнию строку. Проверьте у себя неа ни одну из страниц не перенаправляет. И в консоле не видно чтобы что-то писал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 30 марта, 2014 · Жалоба В пятницу какие-то редиски срезолвили что-то в cname vk.com (и мой squid/tproxy жутко затупил), а вслед за этим у меня выдались скучные выходные... Решил тоже попробовать написать программку для фильтрации через nfqueue, и что-то даже получилось :) Софтина крутится на сервере, через который зарулен трафик от юзеров на фильтрующиеся IP-адреса. Через nfqueue пакеты с 80 порта попадают ей на вход, она их парсит, если это get/post запрос - парсит домен и урл, и сверяет со своим списком. Если нужно блокировать -- пакет дальше не пускает, юзеру шлёт соспуфленный пакет с 301 moved, серверу - tcp rst. Пока вроде работает :) Как-то так: # wget http://navalny.zta.lk --2014-03-30 20:53:19-- http://navalny.zta.lk/ Resolving navalny.zta.lk... 46.4.98.148, 2a01:4f8:140:9001::2 Connecting to navalny.zta.lk|46.4.98.148|:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://zapret.ip-home.net [following] --2014-03-30 20:53:19-- http://zapret.ip-home.net/ Resolving zapret.ip-home.net... 109.206.159.40 Connecting to zapret.ip-home.net|109.206.159.40|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html’ [ <=> ] 704 --.-K/s in 0s 2014-03-30 20:53:19 (77,6 MB/s) - ‘index.html’ saved [704] Если кому интересно, доступно для тестирования тут: http://ip-home.net/files/nfq_filter.tar.gz Требования для сборки - в системе должны быть: - cmake - netfilter_queue - boost, boost_regex, boost_program_options - более-менее свежий gcc Сборка: # cd nfq_filter/build # cmake ../ -- The C compiler identification is GNU 4.7.3 ............ -- Found the following Boost libraries: ............ -- Configuring done # make Scanning dependencies of target sender [ 50%] Building CXX object CMakeFiles/sender.dir/sender.cpp.o [ 50%] Built target sender [100%] Building CXX object CMakeFiles/nfq_filter.dir/nfq.cpp.o [100%] Built target nfq_filter Возможна проблема: не знаю, на какой версии, но в libnetfilter в какой-то момент изменлся дефайн функции nfq_get_payload. Если вылезет ошибка вида nfq.cpp: In function ‘int nfqueue_cb(nfq_q_handle*, nfgenmsg*, nfq_data*, void*)’: nfq.cpp:466: error: invalid conversion from ‘unsigned char**’ to ‘char**’ попробуйте обновить пакет libnetfilter_queue (в разных дистрах, очевидно, по-разному); у меня всё ок с net-libs/libnetfilter_queue 1.0.1 Использование (Трафик в сторону интернета идёт через данный сервер, например, нужные ипы анонсируются nas`ам по бгп): Трафик на 80 порт с нужных сетей заруливаем в очередь №0 iptables -t mangle -A PREROUTING -s нужная_сеть/24 -p tcp -m tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass в /etc/nfq/nfq_filter.cfg указываем `queue = 0` и указываем нужный redirect_url Запускаем `nfq_filter -c /etc/nfq/nfq_filter.cfg` - пока не демонизируется, можно запустить в скрине, можно просто так И смотрим `tail -f /tmp/nfq_filter.log` Например: 30.03.2014 20:42:18: Packet (size 977): 109.206.xxx.yy:49934 -> 87.252.216.112:80 Header:*AP**F Seq: 0xdbf51709 Ack: 0x9d4ac577 Win: 0x200a TcpLen: 32 Method: 'GET', Host: 'www.eurogrand.com',URL: '/geo/?var6=Ptier2HP&var5=15451303' Domain found! Blocking. 30.03.2014 20:42:24: Packet (size 262): 109.206.xxx.yy:45391 -> 46.229.165.138:80 Header:*AP*** Seq: 0xf861a316 Ack: 0x6c7b5779 Win: 0xe5 TcpLen: 32 Method: 'GET', Host: 'stop-sex.com',URL: '/ru/' Full url: stop-sex.com/ru/ URL match! hash: 8954467087673850458, url: stop-sex.com/ru/, blocking! Сейчас через сервер летает ~15 мбит/с, сквиду было очень плохо, а этой хреновинке пофиг, изредка вылазит в топе 2-3% загрузки. К тому же, в iptables можно задавать рейнж очередей ( --queue-balance 0:3 ), и натравить несколько копий программки на разные очереди. Дописал её только сегодня - может крешится, может течь, может взорвать вам серверную :) as is, то есть. И вообще, пейсатель на сях из меня так себе :) В списках url/domain всего по несколько записей - сами себе заполните. Ах да - для правильной фильтрации русских url, нужно их записывать в точности так, как передаёт браузер - типа "%D0%B5%D0%BA%D0%B0%D1%82%D". Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
metalsoft Опубликовано 3 апреля, 2014 · Жалоба [root@zapret build]# cmake ../ -- The C compiler identification is GNU 4.7.2 -- The CXX compiler identification is GNU 4.7.2 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Checking for C++11 compiler -- Checking for C++11 compiler - available -- Boost version: 1.53.0 -- Found the following Boost libraries: -- regex -- program_options -- Configuring done -- Generating done -- Build files have been written to: /root/nfq_filter/build [root@zapret build]# make Scanning dependencies of target sender [ 50%] Building CXX object CMakeFiles/sender.dir/sender.cpp.o Linking CXX static library libsender.a [ 50%] Built target sender Scanning dependencies of target nfq_filter [100%] Building CXX object CMakeFiles/nfq_filter.dir/nfq.cpp.o Linking CXX executable nfq_filter /usr/bin/ld: CMakeFiles/nfq_filter.dir/nfq.cpp.o: неопределённая ссылка на символ «nfnl_fd» /usr/lib64/libnfnetlink.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [nfq_filter] Ошибка 1 make[1]: *** [CMakeFiles/nfq_filter.dir/all] Ошибка 2 make: *** [all] Ошибка 2 [root@zapret build]# Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 3 апреля, 2014 · Жалоба metalsoft Попробуйте версию посвежее отсюда: https://github.com/ircop/nfq_filter # git clone https://github.com/ircop/nfq_filter.git # cd nfq_filter/ # mkdir build && cd build # cmake ../ # make "Причесал" софтину, добавил фич, избавился от пары багов. - нормально логирует события, 4 уровня дебага - возможность полного дебага запросов с конкретного IP-адреса в отдельный файл - демонизируется - не требует рестарта, раз в полчаса перечитывает файлы доменов и урлов - Не взрывает серверные :D В "contrib" лежит пример конфигов и инит-скрипта ------------------- Для тех, у кого libnetfilter-queue < 1.0.1 ( например, debian 6 ), и у кого вываливается ошибка компиляции: nfq.cpp: In function ‘int nfqueue_cb(nfq_q_handle*, nfgenmsg*, nfq_data*, void*)’: nfq.cpp:524: error: invalid conversion from ‘unsigned char**’ to ‘char**’ nfq.cpp:524: error: initializing argument 2 of ‘int nfq_get_payload(nfq_data*, char**)’ nfq.cpp:525: error: invalid conversion from ‘unsigned char**’ to ‘char**’ nfq.cpp:525: error: initializing argument 2 of ‘int nfq_get_payload(nfq_data*, char**)’ Достаточно просто поправить руками. В файле nfq.cpp находим и меняем строки: -- size = nfq_get_payload(nfa, (unsigned char **)&full_packet); -- len = nfq_get_payload(nfa, &data); ++ size = nfq_get_payload(nfa, (char **)&full_packet); ++ len = nfq_get_payload(nfa, (char **)&data); ----- з.ы. Интересны отзывы, если кто будет использовать... А если кто будет добавлять фичи / кроссплатформенность - делайте заодно пулл реквесты на гитхабе :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 3 апреля, 2014 · Жалоба Заюзай autotools для сборки, с их помощью как то можно и версию либы детектить автоматом. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...