"62.60.130.58 - - [07/Nov/2026:10:38:48 +0700] "GET /wp-admin/css/ HTTP/1.1" 404 711 "binance.com" "Mozilla/5.0..."
"62.60.130.58 - - [07/Nov/2026:10:38:48 +0700] "GET /.well-known/ HTTP/1.1" 404 9226 "binance.com" "Mozilla/5.0..."
"62.60.130.240 - - [06/Nov/2026:23:23:26 +0700] "GET /filefuns.php HTTP/1.1" 404 8052 "://google.com" "Mozlila/5.0..."
filefuns.php или cache.php — это типичные имена веб-шеллов (бэкдоров), которые хакеры загружают на взломанные сайты для скрытого управления./uploads/, /wp-admin/css/, /.well-known/).binance.com в поле источника перехода, пытаясь обмануть базовые спам-фильтры.Mozlila вместо Mozilla)."62.60...). Стандартный токен спотыкается о нее и отказывается парсить строку.web-scansudo nano /etc/fail2ban/filter.d/web-scan.conf
Вставьте в него следующую конфигурацию:
[Definition]
failregex = ^"?<HOST> \- \- \[.*\] "GET .*(\.zsh_history|sftp-config\.json|babel\.config\.js|webpack\.config\.js|package\.json|composer\.json) HTTP/.*" (404|403|301)
^"?<HOST> \- \- \[.*\] "GET .*(filefuns\.php|cache\.php) HTTP/.*" 404
^"?<HOST> \- \- \[.*\] "GET .* HTTP/.*" 404 .* "Mozlila/.*"
^"?<HOST> \- \- \[.*\] "GET .* HTTP/.*" 404 "binance\.com"
^"?<HOST> \- \- \[.*\] "GET \/(wp-admin\/css|\.well-known|sites\/default|admin\/controller|uploads|files|images)[^"]*" 404
^"?<HOST> \- \- \[.*\] "GET \/wp-json\/(wemail|wp\/v2\/users|ultimate-member|ldlms|wp-user-manager|wc\/v3)[^"]*" (404|401)
^"?<HOST> \- \- \[.*\] "POST \/(api\/graphql|xmlrpc\.php)[^"]*" (404|403)
ignoreregex =
package.json, composer.json, .zsh_history).filefuns.php, cache.php).Mozlila).binance.com./wp-admin/css/, /uploads/)./wp-json/) на предмет уязвимостей в плагинах пользователей.xmlrpc.php и GraphQL.sudo nano /etc/fail2ban/jail.local
[web-scan]
enabled = true
port = http,https
filter = web-scan
# Маска путей автоматически найдет access-логи всех ваших доменов в CyberPanel
logpath = /home/*/logs/*.access_log
findtime = 600
maxretry = 2
bantime = 172800
Параметры findtime = 600 и maxretry = 2 означают, что если бот совершит хотя бы 2 подозрительных запроса в течение 10 минут, он мгновенно отправится в бан на 48 часов (bantime = 172800).
sudo fail2ban-regex /home/yourdomain.ru/logs/yourdomain.ru.access_log /etc/fail2ban/filter.d/web-scan.conf
Failregex: X total total), подтверждающую, что маска ложится на логи идеально.sudo systemctl restart fail2ban
Чтобы посмотреть список заблокированных IP-адресов, которые брандмауэр сервера отсек на сетевом уровне, выполните команду статуса:
sudo fail2ban-client status web-scan
Banned IP list отобразятся адреса всех нарушителей, которые больше не смогут нагружать ваш процессор генерацией пустых страниц.xmlrpc.php. Чтобы полностью снять нагрузку с PHP-обработчиков, этот файл лучше закрыть железно на уровне сервера. Добавьте в начало вашего файла .htaccess в корне WordPress следующие строки:<Files xmlrpc.php>
order deny,allow
deny from all
</Files>