Как защитить WordPress при помощи fail2ban

Постановка задачи

Как fail2ban сможет определить, что произошла неудачная попытка авторизации именно в WordPress? Для этого со стороны WordPress необходимо сообщить о наступлении этого события. По-умолчанию WordPress пишет в логи HTTP код 200, причём делает это даже при неудачных попытках авторизации. По этой причине невозможно точно определить была ли авторизация успешной. При этом, неважно какой использовался веб-сервер Apache или nginx.  О какой-то нездоровой активности могут поведать только многочисленные попытки авторизации запросы одной и той же страницы авторизации с одного ip. Поэтому, для записи в логи кода 403 при неудачной попытке авторизации необходимо написать следующий плагин.

Плагин WordPress для fail2ban

 

Фильтр fail2ban для WordPress

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

В директории /etc/fail2ban/filter.d создаём файл с именем wp-auth.conf, в него записываем текст фильтра:

Поиск обращений к wp-login.php или к xmlrpc.php (это самые часто атакуемые страницы wordpress).

Настройка jail.conf

Находим файл /etc/fail2ban/jail.conf и добавляем в него следующие строки

После внесения изменений следует перезапустить сервис fail2ban.

Проверка работоспособности.

Заходим на страницу авторизации WordPress и несколько раз имитируем неудачную авторизацию. Следующий этап — просмотр логов доступа веб-сервера по адресу /var/log/nginx/access.log для nginx, или /var/log/apache2/access.log для Apache. Там должно быть что-то вроде этого:

Далее следует проверить логи fail2ban, там можно будет увидеть что-то вроде этого:

Если эти записи появляются в логах, это означает, что защита успешно срабатывает.