fail2ban log parsing слишком медленный на малины Pi – варианты?

Я запускаю fail2ban на малине Pi на 950 МГц, который я не могу разогнать дальше.

Pi иногда подвергается наводнениям SYN на определенных портах. Я установил iptables, чтобы снизить скорость SYN в интересующем порту; при превышении пределов дроссельной заслонки хосты, отправляющие SYN, удаляются в цепочку REJECT, и регистрируется конкретный пакет SYN, который превысил лимит.

fail2ban следит за этими зарегистрированными SYN и, увидев несколько, временно запрещает хост на короткое время (это временная проблема в приложении, с которым я работаю).

Проблема в том, что наводнения SYN могут иногда достигать темпов, которые слишком быстр для fail2ban, чтобы не отставать; Я увижу 20-40 сообщений журнала в секунду, и в итоге fail2ban отстает и станет неэффективным. Чтобы добавить оскорбление к травме, он продолжает потреблять много CPU, когда он пытается догнать.

Я проверил, что пакеты DROP, скопированные с хостов, уже заблокированных fail2ban, не регистрируются и, следовательно, не добавляют к его загрузке.

Какие у меня варианты? У меня есть несколько идей, но нет четкого пути вперед.

  1. Могу ли я сделать регулярное выражение для анализа журнала «проще», чтобы потребовалось меньше циклов? Использует ли iptables -log-префикс поставить маркер рядом с началом сообщения журнала и / или иным образом упрощает / изменяет помощь regex fail2ban? Вот текущая строка конфигурации fail2ban, содержащая регулярное выражение:
    failregex = kernel:.*?SRC=(?:::f{4,6}:)?(?P<host>[\w\-.^_]+) DST.*?SYN

  2. Есть ли более быстрый способ для fail2ban наблюдать за пакетами, превышающими пределы, чем синтаксический анализ kern.log?

  3. Может ли fail2ban запускаться под PyPy вместо CPython с минимальным нестандартным wizardry (ОС – Raspbian 7, поэтому, в основном, Debian 7)?

  4. Есть ли что-то лучше, чем fail2ban, что я мог бы использовать для просмотра пакетов, которые превышают пределы SYN, и после того, как N превысит за X секунд, временно поместите нарушительный IP-адрес в ведро iptables DROP и вытащите его, когда истечет таймер запрета? Опять же, я бы предпочел решение, которое использует как можно больше программного обеспечения в Debian, хотя я могу создать пакеты Debian в крайнем случае.

2 Solutions collect form web for “fail2ban log parsing слишком медленный на малины Pi – варианты?”

Немного не по теме на ваш вопрос, но SYN-файлы cookie могут быть подходящим и простым смягчением при столкновении с умеренным наводнением SYN.

 # echo 1 > /proc/sys/net/ipv4/tcp_syncookies 

Google некоторые из-за причин, почему это может быть хорошей или плохой идеей.

В качестве альтернативы, поскольку у вас уже настроен брандмауэр ядра, вы можете использовать «последний» iptables-модуль как ограничитель, полностью обходящий fail2ban:

 # iptables -A INPUT -p tcp -m state --state NEW -m recent --name ftp_limit --update --seconds 60 --hitcount 20 -j DROP # iptables -A INPUT -p tcp -m state --state NEW -m recent --set --name ftp_limit -m tcp --dport 21 -j ACCEPT 

Эти правила ограничивают скорость запросов SYN (новые соединения) с одного IP на 20 в минуту (строка 1) для IP-адресов в списке с именем ftp_limit и DROP на любые дополнительные запросы. Строка 2 добавит исходный IP-адрес в список ftp_limit всякий раз, когда на порту 21 (ftp) устанавливается новое соединение.

Вы рискуете заблокировать законный трафик, исходящий из сетей за NAT, поскольку они появляются из одного IP-адреса. И вы можете также использовать белые списки доверенных сетей.

Как я уже сказал в своих комментариях.

Переключитесь на CSF, у него больше памяти, но если бы мне пришлось выбирать между использованием ARM-CPU и высоким общим использованием памяти, я бы выбрал последнее.

Другой альтернативой было бы отказаться от использования любого программного обеспечения брандмауэра и переключиться на правила iptables. Переместите сервер на нестандартный порт (8030, 24544 и т. Д.) И используйте iptables для удаления соединений на всех других портах.

Если вы находитесь за NAT, вы можете использовать свой маршрутизатор для отключения переноса портов на всех портах, кроме одного для веб-сервера (при условии, что вы настроили его для прослушивания на другом порту).

  • Как установить python на debian?
  • Пользовательский вывод lsof
  • Разрешение отклонено без подключения ssh
  • Записать исходный файл Python в файл немедленно
  • Как выполнить команду «jobs» unix в среде python
  • Не найдена команда 'foo', даже если 'foo' intsalled
  • Отказ Jupyter от CentOS запрещен
  • Установка trac - «Trac требует Python 2.5 или новее»
  • Как отключить новую функцию истории в Python 3.4?
  • прямое выполнение скриптов python
  • Поиск того, какой конкретный процесс Python был убит убийцей Linux OOM
  • Linux и Unix - лучшая ОС в мире.