#regex #wordpress #nginx #logfile #fail2ban
#регулярное выражение #wordpress #nginx #файл журнала #fail2ban
Вопрос:
Мне нужно блокировать определенные запросы с помощью fail2ban на основе пользовательского формата файла журнала для веб-сервера nginx access.log.
Нарушающие строки, которые должны совпадать, находятся в access.регистрируйте и выглядите так:
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 с регулярным выражением:
[Definition]
failregex = ^<HOST>.*POST .*.(*wp-login.php|*xmlrpc.php).*.(403|499)*
ignoreregex =
Тюрьма запущена, но никогда не находит нарушающие строки:
Статус тюрьмы: wordpress-xmlrpc (упрощенный):
— Список файлов: /var/log/nginx/access.log
— Текущий сбой: 0
— Общий сбой: 0
— В настоящее время запрещено: 0
— Всего запрещено: 0
Любая помощь приветствуется!
Ответ №1:
Вот как работает ваше регулярное выражение в настоящее время: онлайн-демонстрация
Я бы изменил его на:
^.*POST .*(wp-login|xmlrpc).php.*(403|499)*
Комментарии:
1. … но это не решает проблему. Для работы необходим <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.
<Host> — это псевдоним для этого.2. кажется, это работает. Я проверил его с помощью двух строк из access. войдите в систему с помощью fail2ban-regex -v —print-all-missed и обе строки совпадают! спасибо! тем не менее, я не получаю никаких запрещенных IP-адресов, хотя в access.log есть строки, служба была перезапущена и не вижу никаких ошибок в fail2ban.log (уровень журнала 4)