На этом как и на других доменах многих сайтов, сделанных на базе wordpress, ендпоинт «/admin» ведет в /wp-login.php, который в свою очередь ведет в админ панель. Да он защищен паролем и защиту можно расширить вполне «дефолтными» средствами nginx + fail2ban.
Цель следующая — на «админский» ендпоинт мы добавляем базовую авторизацию на строне nginx, а в fail2ban добавляем парсер error.log nginx-a.
Воспользуемся утилитой htpasswd и создадим файл с хешом пароля.
htpasswd -c /etc/nginx/.htpasswd <user_name>
Теперь включаем базовую авторизацию на стороне nginx
location = /wp-login.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Перезапускаем nginx и проверяем работу, если все ок, двигаемся дальше.
Создадим в /etc/fail2ban/filter.d/wordpress-auth.conf следующий конфиг
[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(, referrer: "\S+")?\s*$
ignoreregex =
И в /etc/fail2ban/jail.conf добавим
[wordpress]
enabled = true
port = http,https
filter = wordpress-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 43200
Рестартим fail2ban, делаем парочку не удачных попыток и смотрим лог.