Nowo uruchomiony VPS bez zabezpieczeń zaczyna otrzymywać próby logowania przez SSH w ciągu 15-30 minut. Automaty skanują cały internet w poszukiwaniu otwartych portów i słabych haseł.
Poniżej 7 kluczowych kroków hardeningu serwera Linux, które powinny być wdrożone na każdym VPS produkcyjnym.
1. SSH Key Authentication — wyłącz logowanie hasłem
SSH key authentication to podstawa bezpieczeństwa serwera. Klucz prywatny jest niemal nie do złamania brute-force (w odróżnieniu od haseł). Po skonfigurowaniu kluczy wyłącz logowanie hasłem: PasswordAuthentication no w /etc/ssh/sshd_config.
- ssh-keygen -t ed25519 -C 'twoj@email.pl' (generowanie klucza)
- ssh-copy-id deployer@ip-serwera (kopiowanie klucza)
- PasswordAuthentication no w sshd_config
- PermitRootLogin no — nie loguj się jako root przez SSH
- Zmień domyślny port SSH z 22 na inny (np. 2222) — zmniejsza szum w logach
2. UFW Firewall — zezwól tylko na potrzebne porty
UFW (Uncomplicated Firewall) to wrapper dla iptables. Konfiguracja: domyślnie zablokuj wszystko przychodzące, zezwól tylko na SSH, HTTP (80), HTTPS (443). Wszystkie inne porty (MySQL 3306, Redis 6379) powinny być dostępne tylko lokalnie.
- ufw default deny incoming
- ufw allow 2222/tcp (SSH na niestandardowym porcie)
- ufw allow 80/tcp && ufw allow 443/tcp
- ufw enable
- MySQL i Redis: bind-address = 127.0.0.1 — tylko lokalny dostęp
3. Fail2ban — automatyczne blokowanie ataków brute-force
Fail2ban monitoruje logi systemowe i automatycznie blokuje IP po określonej liczbie nieudanych prób logowania. Instalacja: apt install fail2ban. Konfiguracja jail.local: [sshd] maxretry = 5, bantime = 3600.
Fail2ban działa też dla Nginx (banowanie IP próbujących xmlrpc.php WordPress) i WordPress wp-login.php. Wbudowane reguły dla wielu serwisów: postfix, dovecot, nginx.