Я веду сайт Wordpress на цифровой капле океана, и капля работает под управлением CentOS с CWP. Веб-сайт новый, поэтому у него очень мало реального трафика, в среднем около 3-5 посетителей в день. Однако последние пару недель сайт находится под атакой.
Я почти ежедневно получаю уведомление по электронной почте от lfd
service, про "Чрезмерно запущенный процесс под пользователем 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 регистрируется в "комбинированном" формате вне директив 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