oleg_n Опубликовано 20 июля, 2017 · Жалоба Всем привет! Кому-нибудь ещё нужен фильтр трафика по роскомнадзоровским спискам? Есть готовый проект, находящийся на этапе завершающего тестирования. Думаю что с ним делать... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 20 июля, 2017 · Жалоба ну так выкладывай, поглядим Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 20 июля, 2017 · Жалоба :-) Именно так и хотел сделать, но на проект потрачено время, и хотелось бы возместить хотя бы часть затраченных средств. Думал создать проект на boomstarter.ru для этого, но они хотят 5000р за создание проекта и поэтому хотелось бы знать, надо ли это ещё кому-то, вообще. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 20 июля, 2017 · Жалоба хотелось бы возместить хотя бы часть затраченных средств Опишите ТТХ. Технологии, возможности, нагрузочные испытания, требования к оборудованию. Чем лучше/хуже ExtFilter. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 20 июля, 2017 (изменено) · Жалоба Опишите ТТХ. Технологии, возможности, нагрузочные испытания, требования к оборудованию. - фильтр является приложением выполняющимся в пространстве пользователя; - работает в связке с linux netfilter через NFQUEUE; - многопоточный(по потоку на каждую очередь nfqueue); - блокировка происходит на основе списков с записями: ip-srv: блокировка ip-префикса с определённым протоколом и портом протокола domain: блокировка домена domain-tree: блокировка домена и поддоменов uri: блокировка uri - записи в памяти располагаются в АВЛ-деревьях, а для ip-srv предварительно хэшируются; - разбирает пакеты ip, tcp, udp, dns, http, tls(выбирая из них нужную для блокировки информацию); - фильтрует по ip, tcp-port, udp-port, domain, uri(исходя из собранной на этапе разбора пакета информации); - написан на Си; По поводу нагрузки и требований пока точно не скажу. В пн наверное. Только закончили отладку и тестирование на небольшой сети. Там не больше 100Мб/с. Сейчас приступаем к тестированию на 1Гб/с трафика. Пока не могу ничего сказать. Чем лучше/хуже ExtFilter. nfqfilter видел, а вот extfilter - нет. Сейчас посмотрел бегло. Он на dpdk сделан - круто. Быстро должен работать. Хотя это только для пакетов, попадающих под блокировку, думаю справедливо. Остальные всё равно должны будут пройти весь путь по ядру, если я правильно понял. Но всё равно круто. UPD: Забыл сказать, что прилагается скрипт на perl, который качает список роскомнадзора и преобразует его в конфиг программы-фильтра. Изменено 20 июля, 2017 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 20 июля, 2017 (изменено) · Жалоба Сейчас приступаем к тестированию на 1Гб/с трафика Ну вот когда на 10G протестируете, возможно работу в зеркале трафика, графики ппс/цпу, можете смело предлагать в паблик. Работа через NFQUEUE по очередям, делается и на nfqfilter. Преимуществом будет собирание tcp сессий, правильная обработка загрузки процессора (регулирование максимальной загрузки ЦПУ), отдельный контроль белых списков, перезапуск без пропусков, поддержка форматов файлов extfilter как в генераторе конфигурации, так и в демоне. Возможно модуль ядра, был бы эффективнее. При использовании extfilter в зеркале, так и хочется чего-то связанного с NFQUEUE, но не требовательного к ресурсам, для подстраховки. Изменено 20 июля, 2017 пользователем sanyasi Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n1 Опубликовано 21 июля, 2017 · Жалоба Ну вот когда на 10G протестируете, возможно работу в зеркале трафика, графики ппс/цпу, можете смело предлагать в паблик. К сожалению негде проверить на 10G. Если кто-то имеет возможность, то было бы здорово. Работа через NFQUEUE по очередям, делается и на nfqfilter. Если я не ошибаюсь, то с nfqfilter'ом это делается путём запуска нескольких процессов(по одному на каждую очередь). Это значит расход памяти увеличивается в n-раз, где n кол-во процессов. И управлять кучей процессов не так просто, как с одним, хотя при наличии хорошего обёрточного скрипта не сложно. Преимуществом будет собирание tcp сессий, Этого пока нет, но тут не вижу особых сложностей. правильная обработка загрузки процессора (регулирование максимальной загрузки ЦПУ), А какие тут проблемы? Всё делается через cgroup. отдельный контроль белых списков, Это есть. перезапуск без пропусков, Это есть. Разве в nfqfilter этого нет :-\?.. поддержка форматов файлов extfilter как в генераторе конфигурации, так и в демоне. Этого нет. Если кто-то добавит, то будет. Возможно модуль ядра, был бы эффективнее. Возможно. Но прирост производительности вряд ли будет большой(в сравнению с dpdk, тем более) и думаю этот прирост не перекроет ненадёжность этого варианта. Любой segfault в модуле - kernel panic(повисшая система -> прекращение хождения трафика). В пространстве же пользователя такое приложение перезапускается супервизором и разрыв минимален и не заметен в массе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 3 августа, 2017 (изменено) · Жалоба Выложил код сюда - github Изменено 3 августа, 2017 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zhenya` Опубликовано 3 августа, 2017 · Жалоба если в правиле стоит bypass то при рестарте пакеты будут пролетать насквозь. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 3 августа, 2017 · Жалоба если в правиле стоит bypass то при рестарте пакеты будут пролетать насквозь. Не совсем понял, это Вы к чему? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bomberman Опубликовано 4 августа, 2017 · Жалоба 1. Проект всё таки бесплатный решил быть? 2. Поменяйте подпись в теме, указав что проект относительно запрета по роскомнадзоровским спискам. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 4 августа, 2017 (изменено) · Жалоба 1. Проект всё таки бесплатный решил быть? Согласно заветам Столлмана скорее открытый/свободный :-), а не бесплатный(и уж точно не бесплатный для заказчика под которого это делалось :-)). Собственно, проект с самого начала планировалось выкладывать в открытый доступ под свободной лицензией. Проект изначально делался под 2-х заказчиков, но где-то после середины разработки выяснилось, что второй заказчик как бы не при делах :-). В итоге, было принято решение проект всё равно завершить, т.к. первый заказчик в ситуации не виноват, в общем-то(более того, в последствии он предложил значительно большую сумму со своей стороны, чем было оговорено вначале; это, правда, всё равно не покрывает всех расходов проекта). Была мысль как-то отбить хотя бы часть расходов, но пока не сложилось :-). Поэтому из вариантов - сгноить исходники на диске компа или выложить всё равно в свободный доступ - был выбран второй. Ибо в первом смысла нет никакого. Так-то в проекте есть возможность сделать ещё как минимум 3 модификации, которые, думаю, ускорят его работу. Но, по понятным причинам, пока эти изменения производиться не будут. Они есть в TODO - если кто-то захочет, то сможет это сделать сам. Проект поделён на модули, в результате чего добавить новый парсер протокола или фильтр не сложно. 2. Поменяйте подпись в теме, указав что проект относительно запрета по роскомнадзоровским спискам. Что-то не могу найти где тему менять. Так-то фильтр не привязан к РКН реестру именно(хотя, конечно, делался с этой целью в первую очередь). Там rknr_get.pl - основное, что связывает их. Изменено 4 августа, 2017 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 5 августа, 2017 (изменено) · Жалоба А можно ли фильтровать по ключевым словам, например: Мурад Рагимов пытки мурада рагимова пытки собр мурада рагимова пытали Как это реализовать через iptables или snort? Изменено 5 августа, 2017 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 7 августа, 2017 (изменено) · Жалоба А можно ли фильтровать по ключевым словам, например: Мурад Рагимов пытки мурада рагимова пытки собр мурада рагимова пытали Можно добавить такой фильтр, который, например, будет проверять на совпадения всё тело tcp-пакета. Если делать в лоб, то можно за часов 2-5 такой сделать. Но возможно дольше, если хочется избавиться от ложных срабатываний и побольше производительность. Поиск таких фраз крайне не быстрый процесс - надо привести всё к одному регистру, могут быть разные кодировки(cp1251, utf8, koi8-r) и т.п. - если заниматься этим целенаправленно, может получиться придумать как-то быстрый способ. Как это реализовать через iptables или snort? snort - хз. iptables - возможно какая-то модификация модуля string(модифицированный для приведения к одному регистру, хотя бы). Не очень понятен практический смысл этого. Т.к. одно дело фильтровать uri или домен, другое - содержимое страниц и запросов. Последнее уже будет идти внутри tls-соединения в 70% случаев(если не больше). Поэтому подобное решение грузить машину будет значительно, вносить заметные задержки в трафик и при всём при этом будет крайне не эффективным по результату работы. Изменено 7 августа, 2017 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 7 августа, 2017 · Жалоба Как можно блокировать прокси при помощи iptables? Делал: # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *mangle :PREROUTING ACCEPT [1593459:2305724211] :INPUT ACCEPT [106471:225620613] :FORWARD ACCEPT [1525355:2097124454] :OUTPUT ACCEPT [81512:6491507] :POSTROUTING ACCEPT [1606814:2103556283] -A PREROUTING -m connbytes ! --connbytes 100000 --connbytes-mode bytes --connbytes-dir both -j NFQUEUE --queue-num 20 --queue-bypass COMMIT # Completed on Sun Aug 6 22:01:31 2017 # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *filter :INPUT ACCEPT [51:3352] :FORWARD ACCEPT [95:6333] :OUTPUT ACCEPT [26:2144] -A FORWARD -m string --string "%D0%9C%D1%83%D1%80%D0%B0%D0%B4+%D0%A0%D0%B0%D0%B3%D0%B8%D0%BC%D0%BE%D0%B2" --algo kmp --to 65535 -j CONNMARK --set-xmark 0x2/0xfe #-A FORWARD -p tcp -m string --string "CONNECT " --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -s 10.194.0.0/16 -p tcp -m set --match-set tor dst -j REJECT --reject-with tcp-reset -A FORWARD -p tcp -m string --string "GET http://" --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -p tcp -m string --string "HTTP/" --algo bm --to 65535 -m connmark --mark 0x2/0xfe -j REJECT --reject-with tcp-reset COMMIT # Completed on Sun Aug 6 22:01:31 2017 Однако при скачивании некоторых файлов соединение начало сбрасываться. В чём проблема? Закоментированное правило - виновник всех проблем. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 7 августа, 2017 · Жалоба Как можно блокировать прокси при помощи iptables? Делал: # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *mangle :PREROUTING ACCEPT [1593459:2305724211] :INPUT ACCEPT [106471:225620613] :FORWARD ACCEPT [1525355:2097124454] :OUTPUT ACCEPT [81512:6491507] :POSTROUTING ACCEPT [1606814:2103556283] -A PREROUTING -m connbytes ! --connbytes 100000 --connbytes-mode bytes --connbytes-dir both -j NFQUEUE --queue-num 20 --queue-bypass COMMIT # Completed on Sun Aug 6 22:01:31 2017 # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *filter :INPUT ACCEPT [51:3352] :FORWARD ACCEPT [95:6333] :OUTPUT ACCEPT [26:2144] -A FORWARD -m string --string "%D0%9C%D1%83%D1%80%D0%B0%D0%B4+%D0%A0%D0%B0%D0%B3%D0%B8%D0%BC%D0%BE%D0%B2" --algo kmp --to 65535 -j CONNMARK --set-xmark 0x2/0xfe #-A FORWARD -p tcp -m string --string "CONNECT " --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -s 10.194.0.0/16 -p tcp -m set --match-set tor dst -j REJECT --reject-with tcp-reset -A FORWARD -p tcp -m string --string "GET http://" --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -p tcp -m string --string "HTTP/" --algo bm --to 65535 -m connmark --mark 0x2/0xfe -j REJECT --reject-with tcp-reset COMMIT # Completed on Sun Aug 6 22:01:31 2017 Однако при скачивании некоторых файлов соединение начало сбрасываться. В чём проблема? Думаю проблема в том, что CONNECT у Вас ищется в любом месте пакета. Замените --to 65535 на --to 9 - так Вы уменьшите кол-во ложных срабатываний почти до 0. Других строк с -m string это тоже касается - странно, что они не вызывали подобные ситуации. Собственно, поэтому мне -m string и не нравится применительно к данной задаче. Для уменьшения ложных срабатываний надо пакет разобрать, а не просто искать фразу в теле. Ещё лучше, для сведения к 0 ложных срабатываний, добавить к разбору отслеживание tcp-сессий(сборку пакетов в сессии). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 7 августа, 2017 · Жалоба Как можно блокировать прокси при помощи iptables? Делал: # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *mangle :PREROUTING ACCEPT [1593459:2305724211] :INPUT ACCEPT [106471:225620613] :FORWARD ACCEPT [1525355:2097124454] :OUTPUT ACCEPT [81512:6491507] :POSTROUTING ACCEPT [1606814:2103556283] -A PREROUTING -m connbytes ! --connbytes 100000 --connbytes-mode bytes --connbytes-dir both -j NFQUEUE --queue-num 20 --queue-bypass COMMIT # Completed on Sun Aug 6 22:01:31 2017 # Generated by iptables-save v1.4.21 on Sun Aug 6 22:01:31 2017 *filter :INPUT ACCEPT [51:3352] :FORWARD ACCEPT [95:6333] :OUTPUT ACCEPT [26:2144] -A FORWARD -m string --string "%D0%9C%D1%83%D1%80%D0%B0%D0%B4+%D0%A0%D0%B0%D0%B3%D0%B8%D0%BC%D0%BE%D0%B2" --algo kmp --to 65535 -j CONNMARK --set-xmark 0x2/0xfe #-A FORWARD -p tcp -m string --string "CONNECT " --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -s 10.194.0.0/16 -p tcp -m set --match-set tor dst -j REJECT --reject-with tcp-reset -A FORWARD -p tcp -m string --string "GET http://" --algo bm --to 65535 -j CONNMARK --set-xmark 0x2/0xfe -A FORWARD -p tcp -m string --string "HTTP/" --algo bm --to 65535 -m connmark --mark 0x2/0xfe -j REJECT --reject-with tcp-reset COMMIT # Completed on Sun Aug 6 22:01:31 2017 Однако при скачивании некоторых файлов соединение начало сбрасываться. В чём проблема? Думаю проблема в том, что CONNECT у Вас ищется в любом месте пакета. Замените --to 65535 на --to 9 - так Вы уменьшите кол-во ложных срабатываний почти до 0. Других строк с -m string это тоже касается - странно, что они не вызывали подобные ситуации. Собственно, поэтому мне -m string и не нравится применительно к данной задаче. Для уменьшения ложных срабатываний надо пакет разобрать, а не просто искать фразу в теле. Ещё лучше, для сведения к 0 ложных срабатываний, добавить к разбору отслеживание tcp-сессий(сборку пакетов в сессии). Изменил, блокировка вообще перестала работать Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 7 августа, 2017 (изменено) · Жалоба Изменил, блокировка вообще перестала работать Похоже string проверяет не просто нагрузку tcp-пакета, а ещё и заголовки. Поэтому можно попробовать --to 52. Так же можно добавить --from 20 для уточнения. UPD: Вообще, лучше исходить из того, что теоритический максимум tcp-заголовка 60 байт. Т.е. - --from 20 --to 68. Изменено 7 августа, 2017 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 7 августа, 2017 · Жалоба А как через iptables/ip6tables блокировать openvpn или tor через string? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n1 Опубликовано 7 августа, 2017 · Жалоба А как через iptables/ip6tables блокировать openvpn или tor через string? Вот тут не в курсе :-). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 14 августа, 2017 · Жалоба А можно ли фильтровать по ключевым словам, Где? И в какой кодовой странице? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 14 августа, 2017 · Жалоба А можно ли фильтровать по ключевым словам, Где? И в какой кодовой странице? utf-8 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 14 августа, 2017 · Жалоба Это был не вопрос. Это была подсказка. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 18 августа, 2017 · Жалоба Выложил новую версию - 0.9.2. Изменения коснулись утилиты rknr_get.pl: - улучшена работа с богомерзким soap - реестр скачивается либо если появились срочные записи, либо прошло указанное кол-во времени с последней загрузки(6 часов по-умолчанию) - в конфиге можно указать бинарники, которые будут запускаться в случае изменения версий документации, формата реестра и api сервиса(используется для отправки email с уведомлением) - прочие изменения(подробности можно посмотреть с помощью git-log tags/0.9.1..tags/0.9.2) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
oleg_n Опубликовано 14 сентября, 2017 (изменено) · Жалоба Версия 0.9.5. Основные изменения: - исправлено зависание одного из потока в многопоточном режиме - обработка http-запроса с нестандартными символами в host теперь происходит корректно(при конструировании uri по запросу, всё, что кривое, преобразуется в %XX, согласно rfc3986) - добавлено удаление повторных '/' и финальных '/' в http uri в rknr_get.pl и trfl(uri http://some.domain//any////path// обрабатывается как http://some.domain/any/path) - исправлена проверка уже запущенных копий rknr_get.pl - исправлена некорректная обработка времени последней загрузки реестра в rknr_get.pl, при использовании ключа -i - добавлено в rknr_get.pl удаление userinfo из uri(на всякий случай, вдруг будут кривые записи подобные текущим http uri с fragment) - обновление документации - прочие изменения(подробности можно посмотреть с помощью git-log tags/0.9.2..tags/0.9.5) Изменено 22 февраля, 2018 пользователем oleg_n Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...