
Легковесный и быстрый межсетевой экран на основе XDP
Siper — это высокопроизводительный межсетевой экран для IP-черных списков на основе XDP, написанный на Go и C (eBPF). Он позволяет отбрасывать вредоносный трафик на самом раннем этапе стека сети Linux — на уровне сетевого драйвера. Используя XDP (Express Data Path), Siper обрабатывает пакеты до того, как они попадут в тяжеловесную сетевую подсистему ядра, обеспечивая экстремальную производительность даже в условиях сильных DDoS-атак.
Производительность на базе XDP: Фильтрация пакетов происходит на уровне драйвера NIC с помощью XDP_DROP, что приводит к значительно меньшей нагрузке на ЦП по сравнению с iptables или nftables.
LPM (Longest Prefix Match): Поддерживает блокировку на основе CIDR (например, 192.168.1.0/24) с использованием специализированных BPF-карт LPM Trie для эффективного поиска IP-диапазонов.
Постоянная конфигурация: Правилами управляют через локальный черный список на основе JSON, что упрощает аудит и версионирование заблокированных адресов.
Наблюдаемость в реальном времени: Встроенные метрики для отслеживания счетчиков пакетов и байтов как для отброшенного, так и для пропущенного трафика.
Минималистичная архитектура: Скомпилированный BPF-объект обрабатывает плоскость данных, а CLI на Go управляет плоскостью управления.
Siper работает по принципу разделения плоскости управления (пространство пользователя) и плоскости данных (пространство ядра).
siper run приложение Go анализирует JSON, компилирует/загружает объект eBPF и заполняет BPF-карту IP-префиксами.Входящий трафик: Пакет прибывает на сетевой интерфейс.
Поиск: Программа XDP перехватывает пакет и выполняет поиск в карте block_list.
Вердикт:
Необходимые предварительные условия
make
Перейдите в каталог build/.
Добавляйте или удаляйте IP-диапазоны из локального конфигурационного файла:
# Add a CIDR to the list
sudo ./siper add --cidr 1.2.3.0/24 --comment "Known botnet"
# Delete a rule
sudo ./siper del --cidr 1.2.3.0/24
Прикрепите межсетевой экран к определенному сетевому интерфейсу:
# Start the firewall
sudo ./siper run --iface eth0 --path ./blacklist.json
# Stop and detach the firewall
sudo ./siper stop --iface eth0
Просмотрите, что происходит внутри ядра:
# See currently active keys in the BPF map
sudo ./siper dump-keys
# Monitor drop/pass statistics
sudo ./siper dump-metrics
Pull request'ы приветствуются. Для исправлений ошибок и небольших улучшений отправляйте pull request. Для больших изменений сначала откройте issue, чтобы обсудить, что вы хотели бы изменить.
Этот проект является свободным программным обеспечением; вы можете распространять и/или изменять его в соответствии с условиями лицензии GPLv3. См. файл LICENSE для подробностей.