borgkun Опубликовано 1 апреля, 2016 (изменено) · Жалоба Привет. Ковыряю сурикату. Есть у кого опыт? Система вроде как крутая, но нормальной документации с примерами сильно не хватает. Если используете, то в каком режиме, AF_PACKET? Как можно сделать редирект трафика на заглушку? С меня что-нибудь. Я пока в тесте запуская в AF_PACKET, правила примерно такие drop http any any -> any any (content:"GET";content:"site.org";http_header;content:"/general_info.shtml";http_uri; sid:13;) Изменено 1 апреля, 2016 пользователем borgkun Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
cagami Опубликовано 1 апреля, 2016 (изменено) · Жалоба Max1976, спасибо за труд, и хотел вас попросить обновить информацию на главной(README) github у вас там до сих пор написано, что Для блокировки SSL/ip:port трафика необходимо использовать следующее правило: iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset где 17, это значение из конфига nfqfilter. хотя по треду я понял, что вы уже реализовали такую же фильтрацию что и http Изменено 1 апреля, 2016 пользователем cagami Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 1 апреля, 2016 · Жалоба хотя по треду я понял, что вы уже реализовали такую же фильтрацию что и http SSL фильтруется по имени хоста в сертификате. Если имени хоста нет, то либо не фильтруется, либо блокируется на основании ip адреса и протокола SSL (см. параметр block_undetected_ssl). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
cagami Опубликовано 1 апреля, 2016 · Жалоба хотя по треду я понял, что вы уже реализовали такую же фильтрацию что и http SSL фильтруется по имени хоста в сертификате. Если имени хоста нет, то либо не фильтруется, либо блокируется на основании ip адреса и протокола SSL (см. параметр block_undetected_ssl). можно другой глупый вопрос, как мне через nfqfilter не отсылать 302, а форвордить на другой порт с nginx на этой же машине Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 1 апреля, 2016 (изменено) · Жалоба хотя по треду я понял, что вы уже реализовали такую же фильтрацию что и http SSL фильтруется по имени хоста в сертификате. Если имени хоста нет, то либо не фильтруется, либо блокируется на основании ip адреса и протокола SSL (см. параметр block_undetected_ssl). можно другой глупый вопрос, как мне через nfqfilter не отсылать 302, а форвордить на другой порт с nginx на этой же машине Никак. nfqfilter - это L7. А что ты хочишь - L3-L4. Разве что можно сделать репликацию пакетов. На счёт склеивания пакетов - это сложный процесс, для которого нужно писать давольно таки много кода. Хотя, код можно взять из wireshark Изменено 1 апреля, 2016 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 6 апреля, 2016 (изменено) · Жалоба Есть у кого нибудь пример заглушки на nginx для 302 moved редиректов? программа ркн ругается в любом случае, если при проверке она не получает стандартную "заглушку" системы фильтрации контента. Изменено 6 апреля, 2016 пользователем hsvt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 6 апреля, 2016 · Жалоба Установил nfqfilter. Автору спасибо. В целом все работает, осталось несколько моментов. Какая правильная реакция на https трафик для nfqfilter по отношению к клиенту? Сброс соединения? Какая правильная реакция с точки зрения роскомнадзора? В домашнем тестовом окружении их программа проверки RegisterCheck проходит отлично: встречая https записи реестра в логе видно, что URL не доступен (URL not assigned). А вот сегодня проверил с другого компьютера уже другую инсталляцию nfqfilter - и на каждую https запись RegisterCheck выдал "доступен". Хотя, в браузере вся также соединения рвутся как в первом случае дома. Баг в RegisterCheck? P.S. чтобы собрать nfqfilter под gentoo пришлось добавить #include <signal.h> в main.cpp, иначе не собиралось. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AN111 Опубликовано 6 апреля, 2016 · Жалоба Установил nfqfilter. Автору спасибо. В целом все работает, осталось несколько моментов. Какая правильная реакция на https трафик для nfqfilter по отношению к клиенту? Сброс соединения? Какая правильная реакция с точки зрения роскомнадзора? В домашнем тестовом окружении их программа проверки RegisterCheck проходит отлично: встречая https записи реестра в логе видно, что URL не доступен (URL not assigned). А вот сегодня проверил с другого компьютера уже другую инсталляцию nfqfilter - и на каждую https запись RegisterCheck выдал "доступен". Хотя, в браузере вся также соединения рвутся как в первом случае дома. Баг в RegisterCheck? Цитирую: ----------------- SSL фильтруется по имени хоста в сертификате. Если имени хоста нет, то либо не фильтруется, либо блокируется на основании ip адреса и протокола SSL (см. параметр block_undetected_ssl). Для блокировки SSL/ip:port трафика необходимо использовать следующее правило: iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset где 17, это значение из конфига nfqfilter ----------------- Разные браузеры вероятно по разному отправляют сертификат. Одни и те же url c https (без iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset) - в firefox блокировались - в IE (и в RegisterCheck) проходили. Для полной блокировки (согласно цитате) добавить: iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 6 апреля, 2016 · Жалоба Для полной блокировки (согласно цитате) добавить: iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset Не совсем так. Есть 2 способа сброса соединения - при помощи iptables и с помощью самого nfqfilter. Если в конфиге nfqfilter есть send_rst = true, то использовать iptables не нужно. Если при установлении SSL соединения в клиентском запросе не будет имени хоста, то при block_undetected_ssl = false блокировки не будет, а при block_undetected_ssl = true будет блокировка при совпадении ip сервера из файла sslips. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 6 апреля, 2016 · Жалоба Для полной блокировки (согласно цитате) добавить: iptables -A FORWARD -m mark --mark 17 -p tcp -j REJECT --reject-with tcp-reset Не совсем так. Есть 2 способа сброса соединения - при помощи iptables и с помощью самого nfqfilter. Если в конфиге nfqfilter есть send_rst = true, то использовать iptables не нужно. Если при установлении SSL соединения в клиентском запросе не будет имени хоста, то при block_undetected_ssl = false блокировки не будет, а при block_undetected_ssl = true будет блокировка при совпадении ip сервера из файла sslips. send_rst у меня включен. А вот block_undetected_ssl строчка закомментирована. Если предположить, что по умолчанию это параметр false, то блокировка https в моих случаях зависела только от сертификата. Странно, что на другой машине с теми же настройками nfqfilter register_check не видит https сайты. Получается, registercheck то шлет сертификаты, то нет. Видимо, надо включать дополнительные параметры блокировки block_undetected_ssl. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 7 апреля, 2016 · Жалоба end_rst у меня включен. А вот block_undetected_ssl строчка закомментирована. Если предположить, что по умолчанию это параметр false, то блокировка https в моих случаях зависела только от сертификата. Странно, что на другой машине с теми же настройками nfqfilter register_check не видит https сайты. Получается, registercheck то шлет сертификаты, то нет. Видимо, надо включать дополнительные параметры блокировки block_undetected_ssl. Если в системе установлен старый IE, который не вставляет имя хоста в ssl hello, то и программа проверки выдаст что сайт не заблокирован. block_undetected_ssl по умолчанию false. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 7 апреля, 2016 · Жалоба Только сейчас обратил внимание в программе на проверку доступности IP-адресов, она делает ping или tracert и значит доступно? По статистике снизу в конце проверки набирается 90% доступности IP. При официальной проверке IP тоже проверяются и нужно все блокировать? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Phantom Опубликовано 12 апреля, 2016 · Жалоба ... При официальной проверке IP тоже проверяются и нужно все блокировать? Тоже интересует этот момент.Всё нужно или только блокировать запрещённые URLs ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 12 апреля, 2016 · Жалоба Тут ранее писали о добавлении в файлик hosts ip адресов и max1976 добавил данный функционал. Те адреса у которых в реестре block type = ip, отлично добавляются в blackhole. Другой вопрос, если в программе проверки rkn выбирать "Проверять ip адреса" - она начинает проверять доступность ВСЕХ ip адресов. Уже готова версия с поддержкой zap2_only_ips - эти адреса добавляются в квагу в виде ip route ip/mask null0. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 13 апреля, 2016 · Жалоба end_rst у меня включен. А вот block_undetected_ssl строчка закомментирована. Если предположить, что по умолчанию это параметр false, то блокировка https в моих случаях зависела только от сертификата. Странно, что на другой машине с теми же настройками nfqfilter register_check не видит https сайты. Получается, registercheck то шлет сертификаты, то нет. Видимо, надо включать дополнительные параметры блокировки block_undetected_ssl. Если в системе установлен старый IE, который не вставляет имя хоста в ssl hello, то и программа проверки выдаст что сайт не заблокирован. block_undetected_ssl по умолчанию false. Даже с 11 IE такая же ситуация - ssl сайты открываются. Включил block_undetected_ssl. Все равно продолжают открываться. Перепроверил наличие файла sslips и присутствия в нем ip адреса сайта. Все на месте. Полез в исходники, добавил несколько контрольных точек логгирования: c m0 до m4. _logger.debug("m0: %d, %d", (int)_config.block_undetected_ssl, (int)flow->l4.tcp.ssl_stage); struct ndpi_packet_struct *packet_s = &flow->packet; if(_config.block_undetected_ssl && flow->l4.tcp.ssl_stage >= 1) { _logger.debug("m1"); if(packet_s->payload[0] == 0x16 /* Handshake */) { _logger.debug("m2"); u_int8_t handshake_protocol = packet_s->payload[5]; /* handshake protocol a bit misleading, it is message type according TLS specs */ if(handshake_protocol == 0x01 /* Client Hello */) { _logger.debug("m3"); Poco::ScopedReadRWLock lock(nfqFilter::_sslIpsSetMutex); if(nfqFilter::_sslIpsSet->find(*dst_ip.get()) != nfqFilter::_sslIpsSet->end()) { _logger.debug("m4"); _parent->inc_matched_ssl_ip(); _logger.debug("Blocking/Marking SSL client hello packet from %s:%d to %s:%d", src_ip->toString(),tcp_src_port,dst_ip->toString(),tcp_dst_port); if(_config.send_rst) { _logger.debug("SSLClientHello: Send RST to the client (%s) and server (%s) (packet no %d)",src_ip->toString(),dst_ip->toString(),id); std::string empty_str; SenderTask::queue.enqueueNotification(new RedirectNotification(tcp_src_port, tcp_dst_port,src_ip.get(), dst_ip.get(),/*acknum*/ tcph->ack_seq, /*seqnum*/ tcph->seq,/* flag psh */ (tcph->psh ? 1 : 0 ),empty_str,true)); _parent->inc_sended_rst(); nfq_set_verdict(qh,id,NF_DROP,0,NULL); } else { _logger.debug("SSLClientHello: Set mark %d to packet no %d",_config.mark_value,id); _parent->inc_marked_ssl(); nfq_set_verdict2(qh,id,NF_ACCEPT,_config.mark_value,0,NULL); } return ; } } } } _logger.debug("No ssl client certificate found! Accept packet from %s:%d to %s:%d.",src_ip->toString(),tcp_src_port,dst_ip->toString(),tcp_dst_port); В логах в результате вижу: 2016-04-13 15:05:28.570 [775] Debug PktAnalyzer 1 - Analysing SSL protocol 2016-04-13 15:05:28.570 [775] Debug PktAnalyzer 1 - m0: 1, 2 2016-04-13 15:05:28.570 [775] Debug PktAnalyzer 1 - m1 2016-04-13 15:05:28.570 [775] Debug PktAnalyzer 1 - No ssl client certificate found! Accept packet from 10.50.7.89:60845 to 104.20.72.182:443. Может ослабить условия проверок? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 13 апреля, 2016 · Жалоба А иногда даже вот такая ситуация в логах, т.е. все на первом же условии останавливается и сайт открывается. 2016-04-13 17:02:06.224 [1915] Debug PktAnalyzer 2 - m0: 1, 0 2016-04-13 17:02:06.224 [1915] Debug PktAnalyzer 2 - No ssl client certificate found! Accept packet from 10.50.7.89:64866 to 212.56.159.134:443. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Phantom Опубликовано 13 апреля, 2016 · Жалоба Quagga ругается на: Apr 13 16:41:00 filter quagga[31088]: Starting Quagga daemons (prio:10): zebra bgpd. Apr 13 16:41:00 filter quagga[31088]: % Unknown command: network 162.243.97.71/32 Apr 13 16:41:00 filter quagga[31088]: % Unknown command: network 149.202.99.111/32 Это результат после отработки скрипта генерации конфигов. Где-то ошибка? P.S с кваггой не особо знаком и может сам что-то не так делаю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 14 апреля, 2016 · Жалоба Даже с 11 IE такая же ситуация - ssl сайты открываются. Включил block_undetected_ssl. Все равно продолжают открываться. Пришлите дамп с такими сайтами. Это результат после отработки скрипта генерации конфигов. Где-то ошибка? Смотрите весь конфиг bgpd. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 14 апреля, 2016 · Жалоба Один раз поймал такой краш, с чем может быть связано? -- Logs begin at Tue 2016-03-22 07:45:27 MSK. -- Apr 11 14:22:57 dpi.domain.net systemd[1]: Starting Nfqilter filtering daemon... Apr 11 14:22:57 dpi.domain.net systemd[1]: Started Nfqilter filtering daemon. Apr 11 14:31:57 dpi.domain.net systemd[1]: Stopping Nfqilter filtering daemon... Apr 11 14:31:57 dpi.domain.net systemd[1]: Starting Nfqilter filtering daemon... Apr 11 14:31:57 dpi.domain.net systemd[1]: Started Nfqilter filtering daemon. Apr 11 19:24:56 dpi.domain.net systemd[1]: nfqfilter.service: main process exited, code=killed, status=6/ABRT Apr 11 19:24:56 dpi.domain.net systemd[1]: Unit nfqfilter.service entered failed state. Apr 11 19:24:56 dpi.domain.net systemd[1]: nfqfilter.service failed. Apr 14 14:01:10 dpi.domain.net systemd[1]: Starting Nfqilter filtering daemon... Apr 14 14:01:10 dpi.domain.net systemd[1]: Started Nfqilter filtering daemon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 14 апреля, 2016 · Жалоба Один раз поймал такой краш, с чем может быть связано? Наверное было что-то не то в конфигах. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 18 апреля, 2016 · Жалоба Даже с 11 IE такая же ситуация - ssl сайты открываются. Включил block_undetected_ssl. Все равно продолжают открываться. Пришлите дамп с такими сайтами. дамп - https://drive.google.com/file/d/0B5FyoK7xVd-pVXFGQnFsUFFwcGM/view?usp=sharing в дампе: 196.40.69.110 - https://www.mvpaction.ag/ 10.50.7.89 - клиентский хост Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 19 апреля, 2016 · Жалоба Даже с 11 IE такая же ситуация - ssl сайты открываются. Включил block_undetected_ssl. Все равно продолжают открываться. Пришлите дамп с такими сайтами. дамп - https://drive.google.com/file/d/0B5FyoK7xVd-pVXFGQnFsUFFwcGM/view?usp=sharing в дампе: 196.40.69.110 - https://www.mvpaction.ag/ 10.50.7.89 - клиентский хост В дампе видно, что доступ к сайту блокируется (попытка установки tls соединения). Затем клиентское устройство переходит на sslv2 и тогда уже соединение устанавливается. Думаю что надо упростить проверки в алгоритме блокировки ssl/ip, тогда проблема будет решена. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 19 апреля, 2016 · Жалоба Даже с 11 IE такая же ситуация - ssl сайты открываются. Включил block_undetected_ssl. Все равно продолжают открываться. Пришлите дамп с такими сайтами. дамп - https://drive.google.com/file/d/0B5FyoK7xVd-pVXFGQnFsUFFwcGM/view?usp=sharing в дампе: 196.40.69.110 - https://www.mvpaction.ag/ 10.50.7.89 - клиентский хост В дампе видно, что доступ к сайту блокируется (попытка установки tls соединения). Затем клиентское устройство переходит на sslv2 и тогда уже соединение устанавливается. Думаю что надо упростить проверки в алгоритме блокировки ssl/ip, тогда проблема будет решена. Да, именно это я и предлагал. Там много проверок, часть из них я у себя выключил, стало лучше, но все равно некоторые сайты проходят. Это как раз был один из них. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
max1976 Опубликовано 19 апреля, 2016 · Жалоба Обновите nfqfilter и не забудьте выставить block_undetected_ssl в true. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kisa Опубликовано 20 апреля, 2016 · Жалоба в main.cpp все также приходится добавлять вручную #include <signal.h>, иначе не собирается. Making all in src make[1]: Entering directory `/usr/src/nfqfilter/src' g++ -DHAVE_CONFIG_H -I. -I../include -I../nDPI/src/include -std=c++0x -O2 -pthread -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp main.cpp: In member function 'virtual int nfqFilter::main(const ArgVec&)': main.cpp:255:20: error: aggregate 'nfqFilter::main(const ArgVec&)::sigaction handler' has incomplete type and cannot be defined main.cpp:258:31: error: 'sigemptyset' was not declared in this scope main.cpp:259:13: error: 'SIGHUP' was not declared in this scope main.cpp:259:35: error: invalid use of incomplete type 'struct nfqFilter::main(const ArgVec&)::sigaction' main.cpp:255:10: error: forward declaration of 'struct nfqFilter::main(const ArgVec&)::sigaction' make[1]: *** [main.o] Error 1 make[1]: Leaving directory `/usr/src/nfqfilter/src' make: *** [all-recursive] Error 1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...