snvoronkov Опубликовано 14 ноября, 2012 (изменено) · Жалоба Сейчас в лабе дорабатываем напильником следующее решение по организации фильтрации (без мега DPI:)) 1. берём список с сайта Роскомнадзора. 2. Парсим, получаем пары ip+URL 3. Полученые ip анонсим (кваггой) по бгп в наш транспорт. 4. В результате аплинк-трафик на данные адреса отправляется на фильтрующий сервер. Даунлинк при этом идёт мимо. 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. Т.е. матчится только GET запрос. 6. из NFQUEUE их ловит перловый (пока) скрипт, который делает tcp hijacking (т.е. отвечает от имени удалённого сервера двумя пакетами: АСК-ом, и 301 редиректом на страницу блокировки. 7. для трафика на 443й порт, делаем редирект на локальный nginx, опять же отдающий редирект на страницу блокировки. П.п. 3,4,5,6 уже работают, остальное - думаю, также скоро допилим. Покритикуйте, может быть есть более интересные идеи. Присоединюсь к просьбе: скриптом и iptables-частью не поделитесь? (п.п. 5-6) Изменено 14 ноября, 2012 пользователем snvoronkov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
с3845 Опубликовано 14 ноября, 2012 · Жалоба C помощью выше приведенных перловых скриптов получаем реестр, разгрызаем его на ip и url, из url берем доменные имена и через dns блокируем их. решили пока так сделать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 14 ноября, 2012 · Жалоба C помощью выше приведенных перловых скриптов получаем реестр, разгрызаем его на ip и url, из url берем доменные имена и через dns блокируем их. url через DNS вроде не заблокировать, только домен целиком. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
с3845 Опубликовано 14 ноября, 2012 · Жалоба я и написал C помощью выше приведенных перловых скриптов получаем реестр, разгрызаем его на ip и url, из url берем доменные имена и через dns блокируем их. решили пока так сделать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Atlant Опубликовано 14 ноября, 2012 · Жалоба Прошу прощения, если пропустил где-то уже эту мысль. Но мне кажется блокировать по IP лучше тем, что мы даем ресурсу возможность поменять за полчаса DNS-запись и продолжить работу... При этом не нарушая закон. А по URL - мы потеряем привычные сайты, типа либрусека. //Спасибо за внимание. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 14 ноября, 2012 · Жалоба А кто-нибудь уже посчитал, сколько трафика идет на не заблокированные сайты на заблокированных IP-ах? И есть ли он вообще :)). За пару часов при общем трафике 7-8г, с заблокированных ипов в среднем ~250 кбит, редкие пики до 1.5 мбит Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Soltik Опубликовано 14 ноября, 2012 · Жалоба Небольшой оффтопик.. А кто-нибудь знает где можно брать обновляемую бд с категориями сайтов? А то есть задумка родительский контроль сделать на базе ДНС. Сам механизм уже реализован, дело за малым - категории в дефиците (( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ohfsgcscft Опубликовано 14 ноября, 2012 · Жалоба А вот еще такие ссылки: http://запретный.сайт:666/isp_sucks https://запретный.сайт:80/isp_sucks_again Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Irsi Опубликовано 14 ноября, 2012 · Жалоба Небольшой оффтопик.. А кто-нибудь знает где можно брать обновляемую бд с категориями сайтов? А то есть задумка родительский контроль сделать на базе ДНС. Сам механизм уже реализован, дело за малым - категории в дефиците (( Ну начни поиск отсюда - http://netpolice.ru/ Они делают свою систему на основе какой-то подобной БД - вообщем по ссылкам на их сайте найдешь. А вообще это больная тема... Более 10-ти лет назад было предложение вносить категории непосредственно в ТХТ-записи DNS-ов, но... защитники прав и свобод, противники цензуры и правоверные либерасты с дерьмократами зарезали идею на корню. :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
rps Опубликовано 14 ноября, 2012 · Жалоба Для решения проблемы мелких пакетов и keep-alive-ов вместо string matсh можно использовать l7-filter. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alks Опубликовано 14 ноября, 2012 (изменено) · Жалоба http://webdoska.msk.ru/бла-бла.html у трансов и РТ этой сетки нет в BGP через анонимайзер получаем страничку билайна где выпилен весь IP это какой-то фееричный ***ец господа Изменено 14 ноября, 2012 пользователем alks Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Bushi Опубликовано 14 ноября, 2012 · Жалоба А кто-нибудь знает где можно брать обновляемую бд с категориями сайтов? А то есть задумка родительский контроль сделать на базе ДНС. Сам механизм уже реализован, дело за малым - категории в дефиците (( Поищите коммерческую обновляемую базу, их навалом продают. Лет наверное 8 назад покупал cyberpatrol, были ежесуточные обновления, десяток категорий сайтов, для того времени база была очень неплохая (но софт был кривущий). Нормальных некоммерческих баз не видел. Ну и все нормальные сайты для взрослых имеют метки RTA, только механизм фильтрации на DNS уже не применишь - нужен контент-фильтр. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Stak Опубликовано 14 ноября, 2012 · Жалоба Кто там просил iptables конфигурацию для матча по строке? Она тривиальная: *mangle :PREROUTING ACCEPT [515896:28987359] :INPUT ACCEPT [514357:28806292] :FORWARD ACCEPT [1374:147744] :OUTPUT ACCEPT [1066767:144759434] :POSTROUTING ACCEPT [1067940:144880593] -A PREROUTING -p tcp -m string --string "/art/01/03" --algo bm --to 65535 -j NFQUEUE --queue-num 0 COMMIT Скрипт для отсылки редиректа (пока это просто маленький грязный хак, без оптимизации): #!/usr/bin/perl # # see http://search.cpan.org/~atrak/NetPacket-0.04/ #use strict; BEGIN { push @INC,"perl"; push @INC,"build/perl"; push @INC,"NetPacket-0.04"; }; use nfqueue; use NetPacket::IP qw(IP_PROTO_TCP); use NetPacket::TCP; use Socket qw(AF_INET AF_INET6); use Data::Dumper; use Net::RawIP; use CGI; my $cgi = CGI->new(); my $q; sub cleanup() { print "unbind\n"; $q->unbind(AF_INET); print "close\n"; $q->close(); } sub swap_values { my ( $src, $dst ) = @_; my $old_dst = $dst; $dst = $src; $src = $old_dst; return ( $src, $dst ); } sub create_packet { my ( $payload ) = @_; my $ip_obj = NetPacket::IP->decode($payload->get_data()); if($ip_obj->{proto} == IP_PROTO_TCP) { # decode the TCP header my $tcp_obj = NetPacket::TCP->decode($ip_obj->{data}); my $data_len = 0; if ($tcp_obj->{flags} & NetPacket::TCP::PSH && length($tcp_obj->{data})) { $data_len = length( $tcp_obj->{data} ); } $tcp_obj->{data} = $cgi->redirect( -uri => 'http://zapret-info.gov.ru/', -status => 301, -nph => 1, ); $tcp_obj->{checksum} = 0; $ip_obj->{checksum} = 0; ( $tcp_obj->{seqnum}, $tcp_obj->{acknum} ) = swap_values( $tcp_obj->{seqnum}, $tcp_obj->{acknum} ); $tcp_obj->{acknum} = $tcp_obj->{acknum} + $data_len; ( $ip_obj->{src_ip}, $ip_obj->{dest_ip} ) = swap_values( $ip_obj->{src_ip}, $ip_obj->{dest_ip} ); ( $tcp_obj->{src_port}, $tcp_obj->{dest_port} ) = swap_values( $tcp_obj->{src_port}, $tcp_obj->{dest_port} ); $ip_obj->{data} = $tcp_obj->encode($ip_obj); my $modified_payload = $ip_obj->encode(); my $packet = new Net::RawIP; $packet->set({ ip => { saddr => $ip_obj->{src_ip}, daddr => $ip_obj->{dest_ip}, }, tcp => { source => $tcp_obj->{src_port}, dest => $tcp_obj->{dest_port}, seq => $tcp_obj->{seqnum}, ack_seq => $tcp_obj->{acknum}, ack => 1, syn => 0, fin => 0, psh => 0, } }); $packet->send; my $ip2 = NetPacket::IP->decode($modified_payload); my $tcp2 = NetPacket::TCP->decode($ip2->{data}); my $ret = $payload->set_verdict_modified($nfqueue::NF_ACCEPT,$modified_payload,length($modified_payload)); return; } $payload->set_verdict($nfqueue::NF_ACCEPT); return; } sub cb() { my ($dummy,$payload) = @_; print "Perl callback called!\n"; print "dummy is $dummy\n" if $dummy; if ($payload) { create_packet( $payload ); } $payload->set_verdict($nfqueue::NF_ACCEPT); } $q = new nfqueue::queue(); $SIG{INT} = "cleanup"; print "setting callback\n"; $q->set_callback(\&cb); print "open\n"; $q->fast_open(0, AF_INET); print "trying to run\n"; $q->try_run(); Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Stak Опубликовано 14 ноября, 2012 · Жалоба 7. для трафика на 443й порт, делаем редирект на локальный nginx, опять же отдающий редирект на страницу блокировки. А что будет, когда клиенты увидят поддельный сертификат? И чем это лучше бана по IP ? Они не увидят поддельного сертификата. Это тупо блокировка https на данные ip, с показом forbidden-странички. 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. Т.е. матчится только GET запрос. 6. из NFQUEUE их ловит перловый (пока) скрипт, который делает tcp hijacking (т.е. отвечает от имени удалённого сервера двумя пакетами: АСК-ом, и 301 редиректом на страницу блокировки. А как оно будет работать для HTTP/1.1 с keepalive, когда GET /blabla будет не в начале TCP соединения, а на несколько мегабайт "глубже" ? Ну и новая мода с протоколом http://ru.wikipedia.org/wiki/SPDY ... Точно также оно будет работать. iptables ищет матч строки в теле всех tcp пакетов c dport 80 , которые попали на этот сервер. И кидаеет их в NFQUEUE. А по поводу SPDY - если без шифрования - то редеректа не покажет, но и на сайт не пустит. А если шифрованный - будем блокировать, как и https. Или есть другие предложения? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snvoronkov Опубликовано 14 ноября, 2012 · Жалоба Кто там просил iptables конфигурацию для матча по строке? Она тривиальная: // skip code Премного благодарен. Никогда с этой возможностью iptables не работал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Serhio Go Опубликовано 14 ноября, 2012 (изменено) · Жалоба Сейчас в лабе дорабатываем напильником следующее решение по организации фильтрации (без мега DPI:)) <skip> 3. Полученые ip анонсим (кваггой) по бгп в наш транспорт. 4. В результате аплинк-трафик на данные адреса отправляется на фильтрующий сервер. Даунлинк при этом идёт мимо. 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. <skip> Наверное, я тормоз, но никак не могу понять, как в таком случае избежать маршрутной петли. Квагга анонсит more specific, транспорт кидает пакет серверу; тот, к примеру, решает, что ничего в пакете трогать не надо и отдает его обратно в транспорт; транспорт получает пакет от сервера и по идее должен снова вернуть его серверу согласно таблице роутинга. Петля, не? Или на серверном SVI висит роут-мап? Остальное более или менее понятно. Изменено 14 ноября, 2012 пользователем Serhio Go Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Sergey Gilfanov Опубликовано 14 ноября, 2012 · Жалоба 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. Т.е. матчится только GET запрос. А что произойдет, если на какой-то странице на том же 'плохом' IP прямо в тексте страницы (а не в http обмене) будет "GET <плохой URL>"? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Soltik Опубликовано 14 ноября, 2012 · Жалоба Они там что, сами себе трафик нагнетают? Только что сливал реестр, до этого слил в полночь. Абсолютно идентичные за исключением времени обновления. Перед закачкой, конечно выполнял SOAP-запрос на проверку времени, оно тоже было новое, скачал, сравнил - зря качал.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snvoronkov Опубликовано 14 ноября, 2012 · Жалоба А что произойдет, если на какой-то странице на том же 'плохом' IP прямо в тексте страницы (а не в http обмене) будет "GET <плохой URL>"? Кстати, не обязательно GET. Может быть и POST, и еще куча вариантов... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Stak Опубликовано 14 ноября, 2012 · Жалоба Сейчас в лабе дорабатываем напильником следующее решение по организации фильтрации (без мега DPI:)) <skip> 3. Полученые ip анонсим (кваггой) по бгп в наш транспорт. 4. В результате аплинк-трафик на данные адреса отправляется на фильтрующий сервер. Даунлинк при этом идёт мимо. 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. <skip> Наверное, я тормоз, но никак не могу понять, как в таком случае избежать маршрутной петли. Квагга анонсит more specific, транспорт кидает пакет серверу; тот, к примеру, решает, что ничего в пакете трогать не надо и отдает его обратно в транспорт; транспорт получает пакет от сервера и по идее должен снова вернуть его серверу согласно таблице роутинга. Петля, не? Или на серверном SVI висит роут-мап? Остальное более или менее понятно. Зависит от топологии сети, могут быть разные варианты. У нас например, входной и выходной интерфейсы сервера в разных vrf. Cоответственно, на внутреннюю ногу принимаем по бгп абонентские сети, а анонсим плохие ип, на внешнюю - принимаем дефолт, и ничего не анонсируем. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Stak Опубликовано 14 ноября, 2012 · Жалоба 5. На сервере с помошью iptables (string matсh) перекидываем пакетики, в которых есть соответствующий URL (из п.2) в NFQUEUE. tcp handshake и другой трафик на эти адреса пролетает насквозь. Т.е. матчится только GET запрос. А что произойдет, если на какой-то странице на том же 'плохом' IP прямо в тексте страницы (а не в http обмене) будет "GET <плохой URL>"? Вы забыли, что смотрим мы только аплинк трафик (от абонента к серверу). Хотя могу предположить прикольную ситуацию - абонент пытается, к примеру, запостить на форум, размещённый на том "же плохом ip", некий текст с искомым URL, а его редиректит на сайт надзора :) P/S: кстати, string в iptables max.128 символов. Хотя вроде бы при сборке можно задать больше. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vIv Опубликовано 14 ноября, 2012 · Жалоба Небольшой оффтопик.. А кто-нибудь знает где можно брать обновляемую бд с категориями сайтов? А то есть задумка родительский контроль сделать на базе ДНС. Сам механизм уже реализован, дело за малым - категории в дефиците (( Ну начни поиск отсюда - http://netpolice.ru/ Они делают свою систему на основе какой-то подобной БД - вообщем по ссылкам на их сайте найдешь. А вообще это больная тема... Более 10-ти лет назад было предложение вносить категории непосредственно в ТХТ-записи DNS-ов, но... защитники прав и свобод, противники цензуры и правоверные либерасты с дерьмократами зарезали идею на корню. :( Давно всем известно: всё порно в зоне .XXX, что в других зонах - не порно. Аналогично и со спамом: то, что в сабже помечено как "Ad: ..." - спам, что без этой пометки - не спам. Эта схема даже должна работать в стране непуганных эльфов... наверное... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Soltik Опубликовано 14 ноября, 2012 · Жалоба vIv вот шутки - шутками, а глаза ты мне открыл. Внатуре, какая нафиг категоризация в наши дни, пожалуй откажусь от этого, и оставлю только индивидуальные блэклисты для родителей, пусть в личном кабинете сами вносят куда ходить, а куда нет. Тогда вопрос в зал. Если надо на уровне DNS ввести запреты, кто как решает? У меня самописная DNS-прокладка типа прокси. Проверяются хосты на наличие в глобальном и индивидуальном блэклисте запрашивающего. При запрете вываливается статичекий ип, при разрешении перезапрашивается на нормальном ДНС и отдается абоненту. Кто-то тут упоминал про "бэкенд" для PowerDNS, что за зверь и с чем его едят? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Картуччо Опубликовано 14 ноября, 2012 · Жалоба Это тогда только вайтлисты, так как самостоятельно составлять блэк это как-то слабо реально. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Red911 Опубликовано 14 ноября, 2012 · Жалоба vIv вот шутки - шутками, а глаза ты мне открыл. Внатуре, какая нафиг категоризация в наши дни, пожалуй откажусь от этого, и оставлю только индивидуальные блэклисты для родителей, пусть в личном кабинете сами вносят куда ходить, а куда нет. Тогда вопрос в зал. Если надо на уровне DNS ввести запреты, кто как решает? У меня самописная DNS-прокладка типа прокси. Проверяются хосты на наличие в глобальном и индивидуальном блэклисте запрашивающего. При запрете вываливается статичекий ип, при разрешении перезапрашивается на нормальном ДНС и отдается абоненту. Кто-то тут упоминал про "бэкенд" для PowerDNS, что за зверь и с чем его едят? Интересно. А кого вы хотите ДНС фильтром остановить? Пионеры в отличии от родителей уже давно умеют прописывать ДНС типа 8.8.8.8 8.8.4.4 и спокойно правят hosts. Не говоря уж о торе, анонимайзерах и прочем. Или лавры SkyDNS покоя не дают? Так есть альтернативный бесплатный rejector.ru. Есть еще фильтр (бесплатный) icensor.ru разработчики которого говорят о готовности на коммерческой основе поделиться базой сайтов и по их же заверениям услугой пользуется Мегафон. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...