Защищаем Wordpress от brutforce и других атак средствами fail2ban

Wordpress — самая популярная CMS. Следовательно, и самая востребованная в плане осуществления атак. Достаточно появиться очередному сайту на wordpress, как тут же в логах побегут сообщения вроде:

91.200.12.28 - - [27/Sep/2017:00:33:33 +0300] "POST /wp-login.php HTTP/1.1" 200 3824 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
91.200.12.28 - - [27/Sep/2017:00:33:33 +0300] "POST /wp-login.php HTTP/1.1" 200 3824 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
91.200.12.28 - - [27/Sep/2017:00:33:33 +0300] "POST /wp-login.php HTTP/1.1" 200 3824 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
91.200.12.28 - - [27/Sep/2017:00:33:34 +0300] "POST /wp-login.php HTTP/1.1" 200 3824 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
91.200.12.28 - - [27/Sep/2017:00:33:36 +0300] "POST /wp-login.php HTTP/1.1" 200 3824 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"

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

Под Wordpress существует огромное кол-во плагинов для защиты от хакерских атак. Но во-первых, эти средства будут работать с правами от которых работает wordpress. Во-вторых, это загромождает wordpress (а это сказывается на скорости и безопасности). В-третьих, такие плагины вряд ли будут гибко настраиваться.

Но плюсы плагинов в том, что обычно они начинают работать сразу при их активации (минимум мозговых и физических действий), плюс они спасут вас, если на сервере вы не имеете root-доступа.

Поговорим о защите, которая находится на более низком уровне, нежели wordpress.

Использование fail2ban

fail2ban — программа, позволяющая анализировать логи на определённые вхождения и задавать правила относительно того, что делать в случаях, когда лимиты с конкретного IP исчерпываются.

Для fail2ban существует огромное кол-во готовых правил, которые можно активировать через /etc/fail2ban/filter.d, скачать с оф. сайта, либо написать самостоятельно.

Ставим:

sudo apt install fail2ban
sudo systemctl enable fail2ban

Создаём файл /etc/fail2ban/filter.d/wordpress.conf с правилами для поиска вхождений:

[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
            ^<HOST> .* "POST .*xmlrpc.php
ignoreregex =

И файл /etc/fail2ban/jail.d/wordpress.conf:

[wordpress]
enabled = true
port = http,https
filter = wordpress
action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath = /var/log/httpd/access_log
          /var/log/apache2/access*log
          /var/log/nginx/*log
maxretry = 10
findtime = 600

где в logpath прописываем пути к логам веб-сервера (в том числе можно несколько и по маске), а maxretry — кол-во допустимых попыток.

Перезапускаем fail2ban:

sudo systemctl restart fail2ban

Всё, теперь если кто-то попробует брутфорсить админку, или сканить xmlrpc на наличие уязвимостей — попадёт в бан.

В заключение

Точно таким же способом можно проанализировать логи веб-сервера и написать с десяток других правил, направленных на поиск уязвимых мест в wordpress, поставив лимит и блокировку по IP, дабы вас не сканировали и не расходовали ценные ресурсы вашего сервера/wps, предоставив их пользователям ваших сайтов.