Jak zabezpieczyć SSH na VPS z Linuksem
Publiczny VPS otrzymuje zautomatyzowane próby logowania w ciągu kilku minut od uruchomienia. Poniższe kroki znacznie utrudniają atak na SSH. Zostały napisane dla Ubuntu lub Debiana; jeśli nie utworzyłeś jeszcze serwera, możesz wynająć VPS z Linuksem i zacząć od czystego obrazu. Zachowaj obecną sesję SSH otwartą, dopóki nie przetestujesz nowych ustawień z drugiego okna.
1. Utwórz zwykłego użytkownika z uprawnieniami sudo
adduser deploy
usermod -aG sudo deploy2. Używaj kluczy SSH zamiast haseł
Na swoim komputerze:
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IPZaloguj się raz kluczem, aby potwierdzić, że działa, zanim wyłączysz logowanie hasłem.
3. Wyłącz logowanie hasłem i rootem
Utwórz plik /etc/ssh/sshd_config.d/99-hardening.conf:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3Sprawdź składnię i przeładuj usługę. Usługa nazywa się ssh na Ubuntu i Debianie, a sshd w systemach opartych na RHEL:
sudo sshd -t && sudo systemctl reload sshOtwórz drugie okno terminala i zaloguj się ponownie. Dopiero potem zamknij starą sesję.
4. Włącz zaporę sieciową
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verboseOtwieraj tylko porty, których potrzebujesz, na przykład 80 i 443 dla serwera WWW. Możesz też ograniczyć dostęp SSH do swojego adresu IP, dodając regułę zapory w panelu chmury.
5. Blokuj powtarzające się błędy za pomocą Fail2ban
sudo apt install -y fail2banUtwórz plik /etc/fail2ban/jail.local:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd6. Instaluj aktualizacje bezpieczeństwa automatycznie
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades7. Opcjonalne dodatki
- Zmiana portu SSH zmniejsza szum w logach, ale sama w sobie nie jest środkiem bezpieczeństwa.
- Zabezpiecz klucz prywatny hasłem i przechowuj jego kopię w bezpiecznym miejscu.
- Sprawdzaj logowania poleceniami
lastisudo journalctl -u ssh --since today. - Wykonaj migawkę po skonfigurowaniu serwera, aby móc przywrócić czysty stan wyjściowy.
Jeśli straciłeś dostęp, użyj konsoli przeglądarkowej w panelu chmury, aby zalogować się i naprawić konfigurację. Nasz przewodnik po ochronie przed DDoS opisuje kolejną warstwę zabezpieczeń.
Najczęściej zadawane pytania
Czy bezpiecznie jest wyłączyć logowanie rootem?
Tak, jeśli najpierw utworzysz użytkownika sudo i sprawdzisz, czy jego klucz działa. Polecenia administracyjne nadal możesz uruchamiać przez sudo.
Czy potrzebuję Fail2ban, jeśli używam tylko kluczy?
Nie jest to konieczne. Przy wyłączonym logowaniu hasłem ataki siłowe nie mogą się powieść, ale Fail2ban ogranicza szum w logach i obciążenie.
Co zrobić, jeśli zgubię klucz SSH?
Użyj konsoli w panelu chmury, aby się zalogować, dodaj nowy klucz publiczny do ~/.ssh/authorized_keys i usuń stary.