Jak zabezpieczyć serwer Linux VPS: Klucze Ed25519, blokada hasła i konfiguracja Fail2Ban
· 6 min czytania
Każdy serwer podłączony do publicznego adresu IPv4 w ciągu pierwszych kilkunastu minut staje się celem zautomatyzowanych botnetów skanujących domyślny port 22 w poszukiwaniu podatnych haseł. Pozostawienie domyślnej konfiguracji SSH z możliwością logowania użytkownika root na hasło to jedno z największych zagrożeń dla bezpieczeństwa infrastruktury.
1. Generowanie nowoczesnej pary kluczy kryptograficznych Ed25519
Algorytm Ed25519 (oparty na krzywej eliptycznej Curve25519) jest obecnie znacznie bezpieczniejszy, szybszy i bardziej odporny na ataki czasowe niż tradycyjne klucze RSA 2048/4096-bitowe. Wygeneruj klucz na swoim komputerze lokalnym:
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_server
Następnie prześlij klucz publiczny na serwer docelowy za pomocą narzędzia ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519_server.pub user@twoj-adres-ip
2. Twarda konfiguracja demona OpenSSH (sshd_config)
Otwórz plik konfiguracyjny /etc/ssh/sshd_config.d/security.conf (lub główny /etc/ssh/sshd_config) i wprowadź następujące restrykcje:
# Wyłączenie logowania bezpośredniego na konto root
PermitRootLogin no
# Całkowity zakaz uwierzytelniania hasłem (tylko klucze publiczne)
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
# Ograniczenie liczby prób autoryzacji
MaxAuthTries 3
# Wyłączenie przestarzałych mechanizmów
X11Forwarding no
KbdInteractiveAuthentication no
Przed zrestartowaniem usługi upewnij się w drugim oknie terminala, że klucz działa poprawnie, po czym przeładuj usługę:
sudo sshd -t && sudo systemctl restart sshd
3. Ochrona przed skanowaniem portów za pomocą Fail2Ban
Fail2Ban analizuje pliki dziennika systemowego (np. /var/log/auth.log) i automatycznie blokuje adresy IP w zaporze sieciowej (iptables / nftables) po wykryciu wielokrotnych nieudanych prób logowania.
Zainstaluj pakiet w systemie Debian/Ubuntu:
sudo apt update && sudo apt install fail2ban -y
Utwórz kopię konfiguracyjną w /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
bantime = 86400 powoduje zbanowanie atakującego IP na pełne 24 godziny już po 3 nieudanych próbach w ciągu 10 minut.