Защищаем 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, предоставив их пользователям ваших сайтов.