Git Product home page Git Product logo

extfilter's Introduction

extFilter

Программа для блокирования сайтов из списка РКН с использованием DPDK.

Функционал

Программа осуществляет блокировку сайтов путем анализа зеркалированного трафика от пользователей. В случае нахождения вызываемого абонентом HTTP ресурса в списке блокировки, пользователю отсылается редирект на специальную страницу или сбрасывается соединение. Блокировка HTTPS ресурсов осуществляется на основе имени сервера в client hello запросе от пользователя или ip адреса сервера, если имени сервера нет в client hello запросе. В случае нахождения вызываемого абонентом HTTPS ресурса в списке блокировки, соединение с данными ресурсом будет сброшено.

Требования

Для сборки программы необходимы следующие библиотеки и программы:

  • Poco >= 1.6
  • DPDK = 17.05.01
  • git

Для работы программы требуется не менее двух интерфейсов, подключенных в DPDK. Один из интерфейсов для приёма зекралированного трафика, а другой для отправки ответов программы. Зеркалированный трафик может приниматься на один или более интерфейсов. Ответы отправляются только с одного интерфейса.

Сборка

./autogen.sh
  • Запустить configure
./configure --with-dpdk_target=<target> --with-dpdk_home=<path_to_compiled_dpdk>
  • Скомпилировать программу
make

Настройка DPDK

Для работы DPDK необходимо настроить huge-pages и подключить необходимые сетевые адаптеры в DPDK.

Пример настройки для CentOS 7:

  • Создаем в каталоге /usr/lib/tuned папку dpdk-tune

  • Создаем в dpdk-tune файл tuned.conf:

[main]
include=latency-performance

[bootloader]
cmdline=isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=4

isolcpus=1,2,3 - Какие ядра освободить для работы dpdk/extfilter. default_hugepagesz=1G hugepagesz=1G - Размер страницы памяти для dpdk/extfilter. hugepages=4 - Количество страниц памяти для dpdk/extfilter (в данном примере под dpdk/extfilter будет выделено 4 Гигабайта памяти).

  • Активируем профиль
tuned-adm profile dpdk-tune
  • Отправляем сервер на перезагрузку.

  • Загружаем необходимые драйвера

modprobe uio
insmod /path/to/dpdk/build/kmod/igb_uio.ko
  • Подключаем сетевую карту к dpdk
/path/to/dpdk/usertools/dpdk-devbind.py --bind=igb_uio dev_pci_num

Получить dev_pci_num можно при помощи команды:

/path/to/dpdk/usertools/dpdk-devbind.py --status

Запуск

Параметры работы программы задаются в конфигурационном файле. Для запуска программы необходимо указать путь к конфигурационному .ini файлу (--config-file в командой строке). Для запуска в режиме daemon необходимо указать ключи --daemon и --pidfile=/path/to/file.pid

Файлы списков блокировки

Файлы с данными для блокировки (домены, url и т.д.) должны быть в формате nfqfilter.

Обновление списков блокировки

Для загрузки обновленных списков блокировки без перезапуска программы необходимо подать сигнал HUP.

Поддержка проекта

Если вы используете программу и она вам нравится, то вы можете отблагодарить автора через Yandex.Money 410014706910423

extfilter's People

Contributors

big-town avatar gonzopancho avatar max197616 avatar nikean avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.