Wingman Posted April 4, 2014 · Report post Да cmake теоретически тоже умеет, осталось только понять, как :) Или, по-хорошему, найти (если есть) обьявление версии в хидерах либы и #ifdef / #else / #endif ... -- Подчистил код, убрал лишние зависимости (boost), завернул и ютуб, который до этого не фильтровали от греха подальше :) За пару часов распарсил ~5кк http-запросов, отфильтровано из них ~1к В топе в среднем 4-8%, очень редко вылазит до 12-14%. Потенциал получается очень неплохой, особенно если направить трафик не в одну queue, а в range, и запустить несколько инстансов софтинки по числу ядер, например йа доволен :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 15, 2014 (edited) · Report post добрый день, пытаюсь собрать: root@server:~/nfq_filter/build# cmake ../ -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- 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 -- Looking for include files HAVE_NFQUEUE_H -- Looking for include files HAVE_NFQUEUE_H - found -- Configuring done CMake Error at CMakeLists.txt:29 (add_executable): Cannot find source file: config.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx -- Build files have been written to: /home/zeleniy/nfq_filter/build Где взять этот файл? скачивал как описано git clone https://github.com/ircop/nfq_filter.git Edited April 15, 2014 by zeleniy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post добрый день, пытаюсь собрать: root@server:~/nfq_filter/build# cmake ../ -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- 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 -- Looking for include files HAVE_NFQUEUE_H -- Looking for include files HAVE_NFQUEUE_H - found -- Configuring done CMake Error at CMakeLists.txt:29 (add_executable): Cannot find source file: config.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx -- Build files have been written to: /home/zeleniy/nfq_filter/build Где взять этот файл? скачивал как описано git clone https://github.com/ircop/nfq_filter.git Таже проблема , ubuntu 12.04 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post Упс... Перекачайте заново, не добавил пару файлов в гит, пардон Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 · Report post Упс... Перекачайте заново, не добавил пару файлов в гит, пардон теперь вылазит: root@server:~/nfq_filter/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 /usr/bin/ld: CMakeFiles/nfq_filter.dir/nfq.cpp.o: undefined reference to symbol 'nfnl_fd' /usr/bin/ld: note: 'nfnl_fd' is defined in DSO /usr/lib/libnfnetlink.so.0 so try adding it to the linker command line /usr/lib/libnfnetlink.so.0: could not read symbols: Invalid operation collect2: выполнение ld завершилось с кодом возврата 1 make[2]: *** [nfq_filter] Ошибка 1 make[1]: *** [CMakeFiles/nfq_filter.dir/all] Ошибка 2 make: *** [all] Ошибка 2 Версия libnetfilter_queue: root@server:~/nfq_filter/build# apt-cache show libnetfilter-queue-dev Package: libnetfilter-queue-dev Priority: optional Section: universe/libdevel Installed-Size: 72 Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com> Original-Maintainer: netfilter maintainers <netfilter-maintainers@ned.snow-crash.org> Architecture: amd64 Source: libnetfilter-queue Version: 0.0.17-1 Depends: pkg-config, libnetfilter-queue1 (= 0.0.17-1), libnfnetlink-dev (>= 0.0.25) Filename: pool/universe/libn/libnetfilter-queue/libnetfilter-queue-dev_0.0.17-1_amd64.deb Size: 8740 В файлике nfq.cpp заменил строчки на: ++ size = nfq_get_payload(nfa, (char **)&full_packet); ++ len = nfq_get_payload(nfa, (char **)&data); Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post Тоже заменил В файлике nfq.cpp заменил строчки на: ++ size = nfq_get_payload(nfa, (char **)&full_packet); ++ len = nfq_get_payload(nfa, (char **)&data); Ругается теперь на символ root@pppoe3a:/opt/billing/work/nfq_filter/build# make [ 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 /usr/bin/ld: CMakeFiles/nfq_filter.dir/nfq.cpp.o: undefined reference to symbol 'nfnl_fd' /usr/bin/ld: note: 'nfnl_fd' is defined in DSO /usr/lib/libnfnetlink.so.0 so try adding it to the linker command line /usr/lib/libnfnetlink.so.0: could not read symbols: Invalid operation collect2: ld returned 1 exit status make[2]: *** [nfq_filter] Error 1 make[1]: *** [CMakeFiles/nfq_filter.dir/all] Error 2 make: *** [all] Error 2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 (edited) · Report post попробовал собрать на Ubuntu 13.10, там версия libnetfilter-queue 1.0.2, ругается на отсутствие: root@server:~/nfq_filter/build# cmake ../ -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- 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 -- Looking for include files HAVE_NFQUEUE_H -- Looking for include files HAVE_NFQUEUE_H - not found. CMake Error at CMakeLists.txt:21 (message): libnetfilter_queue.h not found! -- Configuring incomplete, errors occurred! Хотя: root@server:~# find / -name libnetfilter_queue.h /usr/include/libnetfilter_queue/libnetfilter_queue.h Edited April 16, 2014 by zeleniy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post попробовал собрать на Ubuntu 13.10, там версия libnetfilter-queue 1.0.2, ругается на отсутствие: Попробуйте сейчас перекачать: чуть изменил CMakeLists Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 · Report post попробовал собрать на Ubuntu 13.10, там версия libnetfilter-queue 1.0.2, ругается на отсутствие: Попробуйте сейчас перекачать: чуть изменил CMakeLists то же самое: root@server:~/nfq_filter/build# cmake ../ -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- 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 -- Looking for include files HAVE_NFQUEUE_H -- Looking for include files HAVE_NFQUEUE_H - not found. CMake Error at CMakeLists.txt:23 (message): libnetfilter_queue.h not found! -- Configuring incomplete, errors occurred! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post Нарыл у добрых людей ubuntu 13.04, сейчас поковыряю :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post Скачал Ubuntu 12.04 root@pppoe3a:/opt/billing/work/nfq_filter/build# make [ 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 /usr/bin/ld: CMakeFiles/nfq_filter.dir/nfq.cpp.o: undefined reference to symbol 'nfnl_fd' /usr/bin/ld: note: 'nfnl_fd' is defined in DSO /usr/lib/libnfnetlink.so.0 so try adding it to the linker command line /usr/lib/libnfnetlink.so.0: could not read symbols: Invalid operation collect2: ld returned 1 exit status make[2]: *** [nfq_filter] Error 1 make[1]: *** [CMakeFiles/nfq_filter.dir/all] Error 2 make: *** [all] Error 2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post roysbike, zeleniy Вроде бы всё пофиксил, попробуйте сейчас Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 (edited) · Report post roysbike, zeleniy Вроде бы всё пофиксил, попробуйте сейчас Ту же ошибку выдает. А у Вас на 13.04 собралось? Edited April 16, 2014 by zeleniy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post Да, собралось: oot@Workmashine:/home/wingman/nfq_filter-master/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 [100%] Built target nfq_filter root@Workmashine:/home/wingman/nfq_filter-master/build# ^C root@Workmashine:/home/wingman/nfq_filter-master/build# ./nfq_filter nfq_filter Version 0.11 ................ А вы точно скачали всё заново с гитхаба? Мало ли :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 · Report post Взял чистую машину с 12.04, изменил две строчки в nfq.cpp - собралось. А какой у Вас сейчас трафик? Хочу попробовать на 800-900 Мбитах/сек Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post У нас трафик гигабит 15 в пиках :) Но сквозь хост с фильтрацией отправляется только трафик на ip-адреса из реестра, выходит до 30 мбит/с Кстати, как вариант, если вы хотите на шлюзе это дело мастрячить, можно попробовать, например, ip-адреса из реестра загонять в ipset, и в nfqueue загонять тоже тольео трафик на них Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 (edited) · Report post У нас трафик гигабит 15 в пиках :) Но сквозь хост с фильтрацией отправляется только трафик на ip-адреса из реестра, выходит до 30 мбит/с Кстати, как вариант, если вы хотите на шлюзе это дело мастрячить, можно попробовать, например, ip-адреса из реестра загонять в ipset, и в nfqueue загонять тоже тольео трафик на них Я пока не определился со схемой, пока поставил на отдельный роутер, но мне более нравится Ваша схема. Вы на шлюзе трафик по dst отправляете на сервер с nfq_filter или как? Ну в смысле как вы разделяете трафик? Edited April 16, 2014 by zeleniy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post Да , собралось! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post Я пока не определился со схемой, пока поставил на отдельный роутер, но мне более нравится Ваша схема. Вы на шлюзе трафик по dst отправляете на сервер с nfq_filter или как? Ну в смысле как вы разделяете трафик? На хосте-фильтре нужные IP-адреса загоняются в bgpd и анонсируются на все имеющиеся шлюзы, соответственно, трафик со шлюзов на эти адреса идёт через фильтрующий хост. Ну и уже на нём весь трафик по 80 порту проходит через софтину, остальной - прозрачно роутится Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 · Report post Я пока не определился со схемой, пока поставил на отдельный роутер, но мне более нравится Ваша схема. Вы на шлюзе трафик по dst отправляете на сервер с nfq_filter или как? Ну в смысле как вы разделяете трафик? На хосте-фильтре нужные IP-адреса загоняются в bgpd и анонсируются на все имеющиеся шлюзы, соответственно, трафик со шлюзов на эти адреса идёт через фильтрующий хост. Ну и уже на нём весь трафик по 80 порту проходит через софтину, остальной - прозрачно роутится Я так и думал сделать, трафик с 80 порта отправляем на фильтр, а все остальное прозрачно пропускаем. У нас 1 шлюз - попроще. Спасибо Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 (edited) · Report post Подскажите пожалуйста, что нужно еще добавить в iptables, после bsd еще пока не въехал . $IPTABLES -A PREROUTING -s 172.30.0.0/16 -p tcp -m tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass Ругается iptables: No chain/target/match by that name. Как я понял, нужен модуль? NFQUEUE Edited April 16, 2014 by roysbike Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zeleniy Posted April 16, 2014 · Report post Подскажите пожалуйста, что нужно еще добавить в iptables, после bsd еще пока не въехал . $IPTABLES -A PREROUTING -s 172.30.0.0/16 -p tcp -m tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass Ругается iptables: No chain/target/match by that name. $IPTABLES -t mangle -A PREROUTING -s 172.30.0.0/16 -p tcp -m tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post спасибо , помогло! . Как фильтровать https? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted April 16, 2014 · Report post по ip-адресам :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
roysbike Posted April 16, 2014 · Report post по ip-адресам :) на dns фильтрую) домен Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...