Я запускаю сайт Wordpress на цифровой капле океана, и капля работает под управлением CentOS с CWP. Веб-сайт новый, поэтому у него очень мало реального трафика, в среднем около 3-5 посетителей в день. Однако последние пару недель сайт находится под атакой.
Я почти ежедневно получаю по электронной почте уведомление от службы lfd
о «Чрезмерном выполнении процесса под пользователем XYZ». Сразу после этого пришло второе электронное письмо с заголовком «Предупреждение о высокой 5-минутной средней нагрузке».
Пример строки из первого электронного письма : (последнее электронное письмо с уведомлением содержит около 143 счетчика процессов со статусом , не убит )
User:XYZ PID:29096 PPID:26959 Run Time:58(secs) Memory:230140(kb) RSS:10104(kb) exe:/usr/local/bin/php-cgi cmd:/usr/local/bin/php-cgi /home/XYZ/public_html/wp-login.php
Второе электронное письмо содержит вывод из разных команды ps.txt
, vnstat.txt
, netstat.txt
, apachestatus.html
В последнем электронном письме с уведомлением есть ошибка в все файлы, кроме apachestatus.html
. Сообщение об ошибке: «Невозможно получить вывод SERVICE_NAME в течение 10 секунд - истекло время ожидания».
В файле apachestatus
я вижу 243 незанятых потоков на wp -login.php
из одиночного IP .
Мои вопросы:
Приведенное ниже на самом деле просто ответ на ваш комментарий/вопрос Fail2Ban - я не смог ответить достаточно подробно в качестве комментария.
Для использования fail2ban требуются не только базовые опции. Вот мой «секретный соус»
apache-wplogin.conf:
# Fail2Ban configuration file
#
# Author: Tim Connors
# Tweeked by David Go
#
[Definition]
# Option: failregex
# Notes.: Regexp to catch Apache dictionary attacks on Wrodpress wp-login
# Values: TEXT
#
#failregex = <HOST>.*] "POST /wp-login.php
#failregex = :80 <HOST> -.*"(GET|POST).*/wp-login.php
# :443 <HOST> -.*"(GET|POST).*/wp-login.php
failregex = :80 <HOST> -.*(GET|POST).*/wp-login.php.*(HTTP)
:443 <HOST> -.*(GET|POST).*/wp-login.php.*(HTTP)
apache-wpxmlrpc.conf
[Definition]
# Option: failregex
# Notes.: Regexp to catch xmlrpc attacks on Wordpress
# Values: TEXT
#
failregex = :80 <HOST>\ -.*(GET|POST).*/xmlrpc\.php.*(HTTP)
:443 <HOST>\ -.*(GET|POST).*/xmlrpc\.php.*(HTTP)
Дополнительные строки в jail.local для вышеизложенного:
# Short term lockout for Wordpress Brute Force
[apache-wplogin]
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 8
bantime = 300
findtime = 300
enabled = true
Обратите внимание, что мой Apache регистрируется в «комбинированном» режиме. format извне директив VirtualHost - у меня есть строки конфигурации:
# Define an access log for VirtualHosts that don't define their own logfile
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined