msa Posted April 17, 2014 На хосте-фильтре нужные IP-адреса загоняются в bgpd и анонсируются на все имеющиеся шлюзы, соответственно, трафик со шлюзов на эти адреса идёт через фильтрующий хост. Ну и уже на нём весь трафик по 80 порту проходит через софтину, остальной - прозрачно роутится А можно пример конфигов bgpd, чтобы заворачивать некошерные ip на фильтр? В идеале вместе со скриптом, который заливает список ip на этот bgpd. Можно в ПМ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 17, 2014 (edited) Я использую setfib на freebsd. 172.30.0.3 шлюз где запущен фильтр url 172.30.0.0/16 , клиентская сеть #${fwcmd} setfib 1 route delete default setfib 1 route add default 172.30.0.3 ${fwcmd} add setfib 1 ip from 172.30.0.0/16 to 'table(3)' в таблице 3 , 1к не кошерных ip Edited April 17, 2014 by roysbike Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted June 3, 2014 Я использую setfib на freebsd. 172.30.0.3 шлюз где запущен фильтр url 172.30.0.0/16 , клиентская сеть #${fwcmd} setfib 1 route delete default setfib 1 route add default 172.30.0.3 ${fwcmd} add setfib 1 ip from 172.30.0.0/16 to 'table(3)' в таблице 3 , 1к не кошерных ip setfib 1 - не ошибка ? вроде fib 1 это основная таблица ? Хотя поправляюсь, всё нормально. Давно setfib не баловался. И кстати и setfib гораздо меньше грузит проц чем ipfw fwd Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
^rage^ Posted June 4, 2014 я очень надеюсь, что кто-нибудь чистый ipv6-only хост с запрещенным контентом и доступом к нему через teredo/6to4. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 9, 2014 [metalsoft@metalsoft build]$ make Scanning dependencies of target nfq_filter [ 25%] Building CXX object CMakeFiles/nfq_filter.dir/nfq.cpp.o [ 50%] Building CXX object CMakeFiles/nfq_filter.dir/config.cpp.o [ 75%] Building CXX object CMakeFiles/nfq_filter.dir/sender.cpp.o [100%] Building CXX object CMakeFiles/nfq_filter.dir/parser.cpp.o Linking CXX executable nfq_filter CMakeFiles/nfq_filter.dir/nfq.cpp.o: In function `netlink_loop(unsigned short)': nfq.cpp:(.text+0x1545): undefined reference to `nfq_open()' nfq.cpp:(.text+0x1582): undefined reference to `nfq_unbind_pf(nfq_handle*, unsigned short)' nfq.cpp:(.text+0x15b7): undefined reference to `nfq_bind_pf(nfq_handle*, unsigned short)' nfq.cpp:(.text+0x1616): undefined reference to `nfq_create_queue(nfq_handle*, unsigned short, int (*)(nfq_q_handle*, nfgenmsg*, nfq_data*, void*), void*)' nfq.cpp:(.text+0x165b): undefined reference to `nfq_set_mode(nfq_q_handle*, unsigned char, unsigned int)' nfq.cpp:(.text+0x1688): undefined reference to `nfq_nfnlh(nfq_handle*)' nfq.cpp:(.text+0x16c6): undefined reference to `nfq_handle_packet(nfq_handle*, char*, int)' nfq.cpp:(.text+0x173b): undefined reference to `nfq_destroy_queue(nfq_q_handle*)' nfq.cpp:(.text+0x1749): undefined reference to `nfq_close(nfq_handle*)' CMakeFiles/nfq_filter.dir/nfq.cpp.o: In function `nfqueue_cb(nfq_q_handle*, nfgenmsg*, nfq_data*, void*)': nfq.cpp:(.text+0x1868): undefined reference to `nfq_get_msg_packet_hdr(nfq_data*)' nfq.cpp:(.text+0x18e6): undefined reference to `nfq_get_payload(nfq_data*, char**)' nfq.cpp:(.text+0x1904): undefined reference to `nfq_get_payload(nfq_data*, char**)' nfq.cpp:(.text+0x19bd): undefined reference to `nfq_set_verdict(nfq_q_handle*, unsigned int, unsigned int, unsigned int, unsigned char*)' nfq.cpp:(.text+0x1da1): undefined reference to `nfq_set_verdict(nfq_q_handle*, unsigned int, unsigned int, unsigned int, unsigned char*)' nfq.cpp:(.text+0x20e0): undefined reference to `nfq_set_verdict(nfq_q_handle*, unsigned int, unsigned int, unsigned int, unsigned char*)' nfq.cpp:(.text+0x239e): undefined reference to `nfq_set_verdict(nfq_q_handle*, unsigned int, unsigned int, unsigned int, unsigned char*)' nfq.cpp:(.text+0x2620): undefined reference to `nfq_set_verdict(nfq_q_handle*, unsigned int, unsigned int, unsigned int, unsigned char*)' collect2: ld returned 1 exit status make[2]: *** [nfq_filter] Ошибка 1 make[1]: *** [CMakeFiles/nfq_filter.dir/all] Ошибка 2 make: *** [all] Ошибка 2 [metalsoft@metalsoft build]$ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted June 9, 2014 пакет libnetfilter_queue в системе присутствует? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 10, 2014 Да: [metalsoft@metalsoft ~]$ rpm -qa| grep libnetfilter_queue libnetfilter_queue-devel-0.0.15-alt1.1 libnetfilter_queue-0.0.15-alt1.1 [metalsoft@metalsoft ~]$ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 11, 2014 Мда... Провел dist-upgrade, все собралось :) Спасибо за участие! Будем пробовать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Evolution23 Posted June 11, 2014 пакет libnetfilter_queue в системе присутствует? Объясните дураку, пожалуйста. Система debian 7. Собрал nfq_filter по инструкции. Он даже запускается, но такое ощущение, что не читает файл cfg, который я ему подсовываю. nfq_filter -c /etc/nfq/nfq_filter.cfg 12.06.2014 03:39:09: -------------------------- Starting program. Queue: 0 Log file: /tmp/nfq_filter.log Debug: 1 URLs and Domains files reading done. Thread: sniffing packet...started. Thread: write log file...started Thread: read config files...started NFQ: Binding to queue '0' При том, что в файле /etc/nfq/nfq_filter.cfg лежит следующее queue = 1 logfile = /tmp/nfq_filter.log pidfile = /tmp/nfq_filter.pid # 1: print out filtered packets info (from, to) # 2: print out full filtered packets: from/to and content # 3: print out all packets info (from, to) # 4: print out full info of all captured packets: from/to + content debug = 4 # Single ip-address requests debugging #debug_from_ip = 10.10.10.10 #debug_ip_file = /tmp/nfq_ip.log domainlist = /etc/nfq/domains urllist = /etc/nfq/urls redirect_url = http://ya.ru Таким образом, даже если файл конфигурации подхватывается, то данные из него, судя по всему, не используются (как минимум, значение queue=1 и debug=4 точно нет). Отсюда вопрос, что я делаю не так? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted June 12, 2014 Evolution23, если честно, хз :) Собрал из гита на debian 7, всё подхватывается: # ./nfq_filter -c /etc/nfq/nfq_filter.cfg 12.06.2014 19:49:15: -------------------------- Starting program. Queue: 1 Log file: /tmp/nfq_filter.log Debug: 4 URLs and Domains files reading done. Thread: sniffing packet...started. Thread: write log file...started Thread: read config files...started NFQ: Binding to queue '1' Как вариант, можете на некоторое время дать мне доступ к серверу, я посмотрю; а так - особо предположений нет --- Всем, кто использует: замечена проблема - через несколько часов работы в софтину как будто перестаёт поступать трафик из iptables. Работает, пишет логи, но входящих пакетов - нет. Уже голову сломал, дебажил и так и сяк - причины не нашёл. Ни у кого такого не наблюдается при длительной работе софтины? Если нет - возможно, это какой-то баг libnetfilter_queue на моей генте. Пока решил простым рестартом раз в полчаса :) Единственное, что ещё могу предположить - переписать без многопоточности, но влом, времени особо нет, работает и так с рестартами. ( плановая проверка блокировок роскомнадзором прошла на ура :) ) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 17, 2014 Работает уже несколько дней без перезапуска, полет нормальный. Правда, пока без нагрузки. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 20, 2014 (edited) Наблюдаю непонятки... Чтоб на основном шлюзе ничего не трогать, подключил к нему сбоку отдельной сетевухой отдельный серв, на котором запускаю nfq_filter. Зеркалирую трафик со шлюза на nfq-серв таким образом: iptables -t mangle -A PREROUTING -s x.x.x.x/32 -i eth0 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 Все выглядит нормальным, пакеты на nfq ходят, запрещенные страницы блокируются. В течение нескольких дней все отлично. Но стоит только вместо одного ip сделать зеркалирование _всего_ трафика: iptables -t mangle -A PREROUTING -s a.a.a.0/22 -i eth0 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s a.a.a.0/22 -i eth2 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s a.a.a.0/22 -i eth5 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s b.b.b.0/22 -i eth0 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s b.b.b.0/22 -i eth2 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s b.b.b.0/22 -i eth5 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s c.c.c.0/21 -i eth0 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s c.c.c.0/21 -i eth2 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s c.c.c.0/21 -i eth5 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s d.d.d.0/22 -i eth0 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s d.d.d.0/22 -i eth2 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 iptables -t mangle -A PREROUTING -s d.d.d.0/22 -i eth5 -p tcp --dport 80 -j TEE --gateway 192.168.0.2 через несколько минут получаю на сервере с nfq глухой зависон. Только reset. После загрузки - в логах все чисто, нигде никакого намека, что была проблема. Трафик получается небольшой, порядка 20-30 МБит. Если зеркалировать не все сети (уменьшить трафик), работает дольше. Ломаю голову, как диагностировать проблему... Edited June 20, 2014 by metalsoft Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted June 22, 2014 А если нагрузку увеличивать постепенно, добавляя по одной сетке? Софтина начинает постепенно отжирать процессор, или всё так же резко с какого-то момента виснет? А если запустить, например, 4 копии софтины, повесив их на разные очереди, и трафик с разных сетей направить (-j NFQUEUE --queue-num X) на разные инстансы софтины? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 23, 2014 Резко висло.Вобщем, проблема решилась обновлением ядра. Видать, проблема была в nfq. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted June 25, 2014 Ни у кого такого не наблюдается при длительной работе софтины? Да, проблема наблюдается.Запускаю в nfq один конкретный ip: /sbin/iptables -t mangle -A PREROUTING -s a.b.c.d/32 -p tcp -m tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass Фильтр нормально работает минут 10. После чего фильтровать перестает, как будто до него пакеты не доходят (или до него доходят, но он их не обрабатывает, или еще что). Запускаю в nfq одну подсеть /22 - работает буквально пару минут, потом опять такая же картина. Несколько раз пробовал - явно налицо зависимость от потока пакетов. Запускаю опять подсеть /22, включаю дебаг по ip - тоже через пару минут фильтровать перестает, вывод в ip_log прекращается, хотя в nfq_filter.log вывод идет как ни в чем не бывало. Хорошая идея, хороший фильтр, вот только до ума бы довести... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 27, 2014 А чисто open source решений задачи ниужели до сих пор не существует? Ведь это поидее довольно простенький L7 proxy. Я себе вижу схему так: 1) Если нужно какой-то узел фильтровать по URL и на одном IP куча хостов, то весь IP заворачивается на отдельный хост, где и фильтруется 2) Сама фильтрация поидее красиво должна обработать через аппаратные правила 82599 - просто забрасываем часть трафика в юзерспейс и если он некошерный, отбрасываем его. Или же все хотят красивое не тормозное решение, которое прямо на бордере будет извлекать обращения к некошерным айпи и следом их блокировать именно по хосту? В целом, такое тоже думаю реально, но без hw фильтров сетевой тоже не обойтись. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 27, 2014 Опенсорса нет - потому что: 1. Это нах обществу не нужно, ибо минус в карму, плевать что там какие то деньги и интересы непонятной группы лиц. 2. Это сложно и на коленке за вечер не сделаешь. Проблема далеко не в железе сетевух. И аппаратные фильтры тут далеко не то на что нужно смотреть. Проблема тут в том, что нужно прозрачно вклиниваться в HTTP, это означает что нужно IP + TCP + HTTP разбирать. Всё потому что нужно получить полный GET запрос из, вероятно, кучи ip/tcp ошмётков, выделить от туда host и url и прогнать их по большой базе. В случае если этот урл + хост в базе есть то нужно отдать юзеру редирект, те перехватить ip+tcp и сэмулировать дальше самому, не забыв оборвать/отбросив ответ от оригинального дст хоста. Помимо фрагментации и перепосылок в ip и tcp ещё есть keep-alive в http, те GET ++ нужно искать постоянно во всём передаваемом потоке. Это если всё по правильному делать. Причём тут какие то аппаратные фильтры в каких то там сетевухах - не очень понятно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 27, 2014 Этическая сторона, безусловно, есть. Но так или иначе блокируется в основном откровенный треш. Да, он в 100% случаев абсолютно безвреден и не требует вмешательства с точки зрения здравого смысла. Но конторы-паразиты будут на этом рынке итак. А открытое решение по крайне мере лишит их возможности паразитировать на гхм этой падальщине. А фильтры сетевой при том, что ими можно извлечь поток конкретного клиента и завернуть его в user space. А там уже силами того же PF_RING провести дефаргаментацию и подменить чужие пакеты на свои. Безусловно, с вклиниванием в tcp сессию будет сложно, но вполне реализуемо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 27, 2014 Этическая сторона, безусловно, есть. Но так или иначе блокируется в основном откровенный треш. Да, он в 100% случаев абсолютно безвреден и не требует вмешательства с точки зрения здравого смысла. Но конторы-паразиты будут на этом рынке итак. А открытое решение по крайне мере лишит их возможности паразитировать на гхм этой падальщине. Каждый должен лично решать что ему смотреть/читать а что нет. Автоматом можно только спам и эксплоиты резать. Кроме СКАТ никого и нет кто себя позиционирует именно по этой теме. Да и те, поняли что туда совсем не трудно добавить и полезный функционал, для нормальных людей. А фильтры сетевой при том, что ими можно извлечь поток конкретного клиента и завернуть его в user space. А там уже силами того же PF_RING провести дефаргаментацию и подменить чужие пакеты на свои. Безусловно, с вклиниванием в tcp сессию будет сложно, но вполне реализуемо. Трафик и так пойдёт через ядро ОС, она ведь его роутит. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 27, 2014 Да, ваша правда. Цели дерьмовые и помогать никому в этом не стоит, ни бесплатно, ни за деньги. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Diamont Posted July 5, 2014 У нас провайдер по ходу выстроил приоритет. Всякие торрент сайты блочит по днс: помогает указать 8.8.8.8 в качестве альтернативного днс. А вот таким сайтам, как кавказцентр это не помогает. Там наверняка блок по ip. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
rvr.online Posted July 27, 2014 Evolution23, если честно, хз :) У меня не читались queue и debug, пока в config.cpp после строк "param = _val;" не поставил "return true;". Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted August 8, 2014 rvr.online, угу, спасибо, был такой баг Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ichthyandr Posted August 13, 2014 вопрос в тему - у кого какой DPI Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted August 14, 2014 sce8000. Но заглядываюсь на СКАТ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...