LINUX.ORG.RU
ФорумAdmin

почему fail2ban такой тормоз ?

 ,


1

3

Есть ли способ ускорить его?

Всего 1 jail c 1 простым фильтром!

читает лог со скоростью менее 2 мегабайт/с! С ssd.

egrep уделывает его в десятки раз.

Или выкинуть эту питонячью поделку и заменить перловым скриптом?

Задача простая - пихать ip адреса в ipset.

питон 3.9

★★★★★

Потому что python. Нужно найти какую-нибудь адекватную замену.

The_Coon
()
Ответ на: комментарий от adn
[Definition]

failregex = ^<HOST>\s\S+\s-.*\"(GET|POST|HEAD).*script\.php.*$

ignoreregex =

Есть какой-нибудь способ показать результирующий конфиг fail2ban?

А нельзя попросить fail2ban не читать файл сначала?

vel ★★★★★
() автор топика

Вообще идея читать логи, чтобы на их основе принимать какие-то решения — так себе идея. Особенно парсить много раз одно и то же. Прокатывает, если логи небольшие, решений нужно принимать мало, и вообще, производительность не является особой проблемой.

Думаю, какой-нибудь наколеночный скрипт уделает fail2ban в специфических задачах. Ты упомянул, что тебе нужно банить тех, кто делает HTTP-запросы к конкретному скрипту. В этом случае можно, скажем, настроить веб-сервер так, чтобы он логи писал в syslog, направить их на свой скрипт, а в нём уже писать IP-адреса в ipset. Возможно, придётся написать ещё один скрипт, который один раз пропарсит уже существующие логи, чтобы найти адреса из прошлого.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от vel

А нельзя попросить fail2ban не читать файл сначала?

У меня такое ощущение, что уважаемый vel или после ковида или у него угнали акк :)

anc ★★★★★
()

Или выкинуть эту питонячью поделку и заменить перловым скриптом?

Лучше выкинуть все скриптоподелки вместе с регэкспами и заменить программой на Си, в которой парсер написан полностью вручную (побайтово) оптимально под конкретный формат логов. Сам всегда так делал (правда не для банов).

firkax ★★★★★
()
Ответ на: комментарий от anc

я могу тормозить, мне уже возраст позволяет, а ковид вносит незначительную попроавку :)

fail2ban было первое, что вспомнилось про обработку логов. Для почтовика/ssh его хватало.

Хочу чтоб fail2ban читал файл через «tail -f .....»

Но как оказалось бесполезно :( лог пишется быстрее - 12Mb/s

Но какого хрена оно так тормозит? Я не замечаю чего-то очевидного?

du -m /var/log/nginx/access.log.1
20389	/var/log/nginx/access.log.1

time cat access.log.1 >/dev/zero 2.2 секунды.

time fail2ban-regex -v  /var/log/nginx/access.log.1 /etc/fail2ban/filter.d/nginx-php.conf

за 7.5 минут оно обработало 318Мб

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Надеюсь это за сутки?

Можно ли настроить логирование nginx так чтобы для разных запросов шли разные логи?

В идеале было бы сделать такой лог, чтобы его не нужно было парсить а можно было тупо брать оттуда адреса.

sin_a ★★★★★
()
Ответ на: комментарий от firkax

Да, в питонячие потроха старался не заглядывать, пока оно приемлемо работало :)

Пару недель назад заглянул в питон, удивился, но пришлось сожрать.

На перле с регекспами оно работает шустро. Поэтому и возник вопрос - с чего питон так тормозит? Это же современный, универсальный язык.

Может есть вариант заставить fail2ban работать быстрее через/спомощью PyPy ?

vel ★★★★★
() автор топика

На хабре была статья «Как я разогнал fail2ban* в тысячу раз с помощью SIMD»

sniper21 ★★★★★
()
Ответ на: комментарий от sin_a

nginx про регекспы знает и умеет писать логи по условию.

Писать в отдельный лог будет проще и быстрее.

$ wc access.log.1
169726696  3924234536 42876626878 access.log.1

жалких 47к rps

vel ★★★★★
() автор топика
Ответ на: комментарий от kindof

0.75Mb/s вместо 0.65Mb/s при замене <HOST> на <ADDR>

usedns не влияет т.к. я fail2ban-regex запускаю

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Свой парсер написать не пробовали? Я без шуток, токмо с учетом вашего огромного опыта. Бывает что готовые парсеры превращаются в тыкву по той или иной причине и своё любимое оказывается отличным решением. Но бывает и наоборот :)

anc ★★★★★
()
Ответ на: комментарий от anc

У меня есть на перле, но для обратной задачи. Подправить не долго.

sin_a подсказал очень разумную вещь - разделить логи.

туда и писать меньше надо и парсить еще проще.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Но как оказалось бесполезно :( лог пишется быстрее - 12Mb/s

а с какой целью их столько пишется?

adn ★★★★
()
Ответ на: комментарий от vel

У меня есть на перле

Более 20 лет назад у меня такое решение превратилось в тыкву :) Сишечка наше всё :)

anc ★★★★★
()

Зачем тебе fail2ban при живом blacklistd?

untitl3d
()
Ответ на: комментарий от vel

Просто возьми и просто настрой rate_limit на проблемный локейшн.
Как видишь, всё просто

zolden ★★★★★
()

Или выкинуть эту питонячью поделку и заменить перловым скриптом?

this

Psilocybe ★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 1)
Ответ на: комментарий от Psilocybe

Насколько помню, у fail2ban есть какой-то индекс, где он сохраняет предыдущую длину лога, чтобы не перечитывать его весь заново. Хотя могу путать с чем-то другим.

alegz ★★★★
()

Меня в нём другое убивает. При достаточном количестве атак оно выедало память и не могло даже ip в set добавить для nftables. Заменил работу с nftables на команду по ssh микротику - проблема исчезла.

yu-boot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.