Постановка задачи
Как fail2ban сможет определить, что произошла неудачная попытка авторизации именно в WordPress? Для этого со стороны WordPress необходимо сообщить о наступлении этого события. По-умолчанию WordPress пишет в логи HTTP код 200, причём делает это даже при неудачных попытках авторизации. По этой причине невозможно точно определить была ли авторизация успешной. При этом, неважно какой использовался веб-сервер Apache или nginx. О какой-то нездоровой активности могут поведать только многочисленные попытки авторизации запросы одной и той же страницы авторизации с одного ip. Поэтому, для записи в логи кода 403 при неудачной попытке авторизации необходимо написать следующий плагин.
Плагин WordPress для fail2ban
1 2 3 4 5 6 7 |
/** * Plugin Name: Return 403 on Failed Login */ function my_login_failed_403() { status_header( 403 ); } add_action( 'wp_login_failed', 'my_login_failed_403' ); |
Фильтр fail2ban для WordPress
Для того, чтобы fail2ban смог искать ответ веб-сервера 403 при доступе к станицам авторизации — необходимо создать соответствующий фильтр.
В директории /etc/fail2ban/filter.d создаём файл с именем wp-auth.conf, в него записываем текст фильтра:
1 2 |
[Definition] failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 403 |
Поиск обращений к wp-login.php или к xmlrpc.php (это самые часто атакуемые страницы wordpress).
Настройка jail.conf
Находим файл /etc/fail2ban/jail.conf и добавляем в него следующие строки
1 2 3 4 5 6 7 |
[wordpress-auth] enabled = true port = http,https filter = wp-auth logpath = /var/log/nginx/access.log maxretry = 3 bantime = 3600 |
После внесения изменений следует перезапустить сервис fail2ban.
Проверка работоспособности.
Заходим на страницу авторизации WordPress и несколько раз имитируем неудачную авторизацию. Следующий этап — просмотр логов доступа веб-сервера по адресу /var/log/nginx/access.log для nginx, или /var/log/apache2/access.log для Apache. Там должно быть что-то вроде этого:
1 2 3 |
95.0.83.xx — - [07/Aug/2016:06:41:33 +0400] «POST /wp-login.php HTTP/1.0» 200 5791 "-" "-" 95.0.83.xx — - [07/Aug/2016:06:41:40 +0400] «POST /wp-login.php HTTP/1.0» 200 5791 "-" "-" 95.0.83.xx — - [07/Aug/2016:06:41:57 +0400] «POST /wp-login.php HTTP/1.0» 200 5791 "-" "-" |
Далее следует проверить логи fail2ban, там можно будет увидеть что-то вроде этого:
1 2 3 |
tail -f /var/log/fail2ban.log 2014-08-07 06:42:02,818 fail2ban.actions: WARNING [wordpress-auth] Ban 95.0.83.xx |
Если эти записи появляются в логах, это означает, что защита успешно срабатывает.
Свежие комментарии