RegEx для использования с fail2ban на nginx с wordpress и настраиваемым форматом журнала

Мне нужно заблокировать определенные запросы с помощью fail2ban на основе настраиваемого формата файла журнала для веб-сервера nginx access.log.

Оскорбительные строки, которые должны совпадать, находятся в access.log и выглядят следующим образом:

06/Oct/2016:18:44:29 +0200 191.96.249.53 - - mydomain.com "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
06/Oct/2016:18:44:29 +0200 191.96.249.53 - - mydomain.com "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
06/Oct/2016:18:44:29 +0200 191.96.249.53 - - mydomain.com "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"

Моя fail2ban конфигурация wordpress-xmlrpc.conf с RegEx:

[Definition]
failregex = ^<HOST>.*POST .*.(*wp-login\.php|*xmlrpc\.php).*.(403|499)*
ignoreregex =

Тюрьма запущена, но никогда не находит оскорбительных строк:

Статус тюрьмы: wordpress-xmlrpc (упрощенный):
- Список файлов: /var/log/nginx/access.log
- Текущий сбой: 0
- Всего сбой: 0

- Забаненых: 0
- Забаненных всего: 0

Любая помощь приветствуется!


person N. De    schedule 06.10.2016    source источник


Ответы (1)


Вот как в настоящее время работает ваше регулярное выражение: онлайн-демонстрация

Я бы изменил его на:

^.*POST .*(wp-login|xmlrpc)\.php.*(403|499)*
person Thomas Ayoub    schedule 09.10.2016
comment
... но это не решает проблему. ‹Host› необходим для работы, см. Документ fail2ban: ссылка In every line of failregex, the part that matches the host name or IP address must be wrapped in a (?P<host> ... ) sandwich. This is a Python-specific regex extension that assigns the contents of the match to the name <host>. The <host> tag is how you tell fail2ban which host was connecting, so it has to be present in every line of failregex. ‹ Хост ›- это псевдоним для этого. - person N. De; 09.10.2016
comment
похоже, это работает. Я проверил это с помощью двух строк из access.log, используя fail2ban-regex -v --print-all-missed, и обе строки совпадают! Спасибо! тем не менее, я не получаю заблокированных IP-адресов, хотя есть строки в access.log, служба была перезапущена и не вижу никаких ошибок в fail2ban.log (уровень журнала 4) - person N. De; 09.10.2016