Serwer przeciążony, logi nginx pełne requestów do /admin. Boty próbowały się zalogować do panelu admina przez 72 godziny – 50 000 prób. Jeden z kont admin miał słabe hasło. Czas reakcji: 30 minut, wzmocnienie: 2 godziny.
Objawy
- Serwer pod dużym obciążeniem bez widocznego powodu biznesowego
- Nginx access log: setki requestów POST do
/admin/admin/index/na sekundę - Konto admina zablokowane przez mechanizm ochrony Magento
- W
var/log/debug.log: tysiące wpisów o nieudanych logowaniach
Natychmiastowa reakcja
# Zablokuj IP atakujących w nginx
# Znajdź top IP z logów
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# Zablokuj w nginx
# /etc/nginx/conf.d/block.conf:
# deny 185.220.101.0/24;
# deny 45.153.160.0/24;
nginx -s reload
# Lub użyj fail2ban
apt-get install fail2ban
# /etc/fail2ban/jail.local:
# [nginx-magento-admin]
# enabled = true
# port = http,https
# filter = nginx-magento-admin
# logpath = /var/log/nginx/access.log
# maxretry = 10
# bantime = 3600
Wzmocnienie ochrony
# 1. Zmień URL admina na unikalny
bin/magento setup:config:set --backend-frontname=myadmin_$(openssl rand -hex 4)
# 2. Ogranicz dostęp do admina po IP w nginx
location /myadmin_abc123/ {
allow 1.2.3.4; # IP biura
allow 5.6.7.8; # IP VPN
deny all;
# Reszta konfiguracji...
}
# 3. Włącz 2FA dla wszystkich kont admin
bin/magento module:enable Magento_TwoFactorAuth
bin/magento setup:upgrade
# 4. Wymuś silne hasła
# Stores > Configuration > Customers > Customer Configuration > Password Options
# Minimum Password Length: 12
# Number of Required Character Classes: 4
Wnioski
URL admina /admin to pierwszy cel każdego skanera. Zmiana URL + whitelist IP + 2FA to minimum. Fail2ban automatycznie blokuje atakujących na podstawie wzorców w logach.
