Blog / Baza Wiedzy

Jak zabezpieczyć SSH na Ubuntu i Debian: Kompletny przewodnik serwera

(Zaktualizowano: )
7 min czytania
Jak zabezpieczyć SSH na Ubuntu i Debian: Kompletny przewodnik serwera

Port 22 jest ciągle skanowany. Moment gdy uruchamiasz VPS z publicznym IP, zautomatyzowane boty zaczynają go bombardować w poszukiwaniu słabych haseł i domyślnych danych z obrazów chmurowych które nie były dotknięte. Utwardzanie SSH zajmuje około 15 minut i sprawia że twój serwer jest dramatycznie mniej interesujący dla każdego kto próbuje się włamać.

Wymaganie: Ten przewodnik wyłącza logowanie root. Musisz mieć niestandardowego użytkownika z uprawnieniami sudo gotowego przed uruchomieniem jakichkolwiek z tych kroków. Jeśli jeszcze tego nie zrobiłeś, postępuj zgodnie z naszym przewodnikiem Jak utworzyć użytkownika sudo na Ubuntu i Debian, potem wróć tutaj.

Wygeneruj parę kluczy SSH

Jedna najskuteczniejsza zmiana jaką możesz zrobić. Logowania hasłowe mogą być siłowo złamane. Uwierzytelnianie oparte na kluczach nie może, nie w żadnym realistycznym przedziale czasowym.

Na swojej maszynie lokalnej, wygeneruj parę kluczy:

Uruchamianie ssh-keygen -t ed25519 -C "your-server-label" aby wygenerować nową parę kluczy SSH

ssh-keygen -t ed25519 -C "your-server-label"

Użyj ed25519, jest szybszy i bezpieczniejszy od starszego algorytmu RSA. Gdy zostaniesz poproszony o hasło, ustaw je. Szyfruje klucz prywatny na dysku, więc nawet jeśli ktoś naruszy twój laptop, wciąż nie będzie mógł użyć klucza bez niego.

Skopiuj swój klucz publiczny na serwer

Skopiuj klucz publiczny na serwer. Zastąp youruser swoim rzeczywistym nazwą użytkownika sudo:

Uruchamianie ssh-copy-id -i ~/.ssh/id_ed25519.pub youruser@your-server-ip aby skopiować klucz publiczny na serwer

ssh-copy-id -i ~/.ssh/id_ed25519.pub youruser@your-server-ip

Przetestuj że klucz działa przed przejściem dalej. Otwórz nowe okno terminala i połącz się. Jeśli logujesz się bez monitu o hasło, klucz jest zainstalowany poprawnie. Nie zamykaj jeszcze swojej obecnej sesji, wciąż potrzebujesz jej jako zapasowej jeśli coś pójdzie nie tak w późniejszych krokach.

Opcjonalnie: dodaj wpis do ~/.ssh/config na swojej maszynie lokalnej dla szybkiego dostępu:

Szybkie połączenie z serwerem

Host myserver
    HostName your-server-ip
    User youruser
    IdentityFile ~/.ssh/id_ed25519

Szybkie połączenie z serwerem

Po tym, ssh myserver to wszystko co musisz wpisać.

Wyłącz logowanie root

Loguj się przez SSH jako swój użytkownik sudo od tego momentu. Bezpośrednie logowanie root to ryzyko bezpieczeństwa, jeśli twoja sesja zostanie naruszona, atakujący ma pełny nieograniczony dostęp bez dodatkowych kroków.

Otwórz konfigurację demona SSH:

Wyłączanie logowania root w sshd_config

sudo nano /etc/ssh/sshd_config

Znajdź i zaktualizuj tę linię:

PermitRootLogin no

Jeśli kiedykolwiek potrzebujesz dostępu root na serwerze, zaloguj się jako swój użytkownik sudo i uruchom sudo su stamtąd.

Wyłącz uwierzytelnianie hasłem

Twój klucz działa, więc teraz wyeliminuj logowania hasłowe całkowicie:

sudo nano /etc/ssh/sshd_config

Ustaw oba te:

PasswordAuthentication no
PubkeyAuthentication yes

Ważne: Niektóre wersje Ubuntu i Debian ustawiają PasswordAuthentication w pliku drop-in pod /etc/ssh/sshd_config.d/ który nadpisuje główną konfigurację. Sprawdź to:

grep -r "PasswordAuthentication" /etc/ssh/

Jeśli widzisz że jest ustawione na yes gdziekolwiek w wynikach, edytuj ten konkretny plik, nie główny sshd_config.

Zaostrz kilka dodatkowych ustawień

Podczas gdy masz otwarty sshd_config, dodaj te aby dalej zredukować powierzchnię ataku:

# Rozłącz po 3 nieudanych próbach
MaxAuthTries 3

# Zamykaj nieuwierzytelnione połączenia szybciej
LoginGraceTime 30

# Wyłącz nieużywane funkcje
X11Forwarding no
AllowTcpForwarding no

Jeśli tylko konkretne nazwy użytkowników powinny móc logować się zdalnie, dodaj listę dozwolonych:

AllowUsers youruser

Żadne konto niewymienione na liście zostanie odrzucone na poziomie SSH, nawet z ważnym kluczem.

Zmień domyślny port SSH

Port 22 pojawia się na każdej liście celów domyślnych skanerów. Przeniesienie SSH na niestandardowy port nie powstrzyma zdeterminowanego atakującego od skanowania portów, ale eliminuje praktycznie cały zautomatyzowany szum. Logi autoryzacji spadają z setek nieudanych prób logowania dziennie do efektywnie zera.

W sshd_config, zaktualizuj port:

Port 2222

Wybierz dowolny nieużywany port powyżej 1024. Przed restartem SSH, zaktualizuj swoją zaporę aby zezwolić na nowy port i zamknąć stary:

sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw status

Upewnij się że 2222 pokazuje się jako ALLOW w wynikach przed przejściem dalej.

Zrestartuj SSH i zweryfikuj

Zastosuj wszystkie swoje zmiany:

sudo systemctl restart ssh

Potem, w nowym oknie terminala (zachowaj swoją obecną sesję otwartą), przetestuj połączenie na nowym porcie:

ssh -p 2222 youruser@your-server-ip

Jeśli łączy się czysto, skończone. Jeśli nie, wróć do swojej obecnej sesji i debuguj. Uruchom sudo sshd -t aby sprawdzić sshd_config pod kątem błędów składni przed ponownym restartowaniem.

Typowe problemy:

  • Zapora nie zaktualizowana dla nowego portu
  • PasswordAuthentication no ustawione w pominiętym pliku który został przeoczony

Sprawdź co serwer faktycznie widzi

Po zablokowaniu, sprawdź na żywo próby autoryzacji:

sudo journalctl -u ssh --since "1 hour ago" | grep "Failed"

Na poprawnie utwardzonym serwerze powinieneś nic nie widzieć, lub tylko garstkę prób na starym porcie cicho porzucanych przez zaporę.

Uwaga o fail2ban

Z włączonym uwierzytelnianiem kluczowym SSH i wyłączonym uwierzytelnianiem hasłem, ataki siłowe na SSH są już niemożliwe. fail2ban staje się mniej krytyczny dla samego SSH. Mówiąc to, wciąż jest przydatny do ochrony innych usług jak Nginx i Apache, a uruchamianie go obok tych ustawień dodaje rozsądną warstwę obrony w głąb. Zobacz nasz przewodnik konfiguracji fail2ban fail2ban setup guide jeśli chcesz go dodać.

Jeśli chcesz bezpieczne miejsce do poćwiczenia tego procesu utwardzania bez ryzykowania serwera produkcyjnego, nasze plany Budget VPS są przystępną piaskownicą aby zablokować, zepsuć i zacząć od nowa tyle razy ile potrzebujesz.

Najczęściej zadawane pytania

Tak. Choć nie powstrzyma to celowego ataku hakera, zmiana portu z 22 na niestandardowy (np. 2222) odrzuca 99% automatycznych skanerów i botów. Dzięki temu plik /var/log/auth.log nie rośnie do ogromnych rozmiarów, a procesor nie jest obciążany ciągłymi próbami logowania.
Plik sshd_config służy do konfiguracji demona SSH (po stronie serwera, dla połączeń przychodzących), natomiast ssh_config konfiguruje klienta SSH (dla połączeń wychodzących z Twojego serwera).
Jeżeli logowanie hasłem jest wyłączone, stracisz dostęp. Musisz zalogować się do VPS przez konsolę awaryjną VNC w panelu dostawcy hostingu, aby tymczasowo włączyć logowanie hasłem lub wgrać nowy klucz publiczny.
Jeśli zmienisz port SSH w konfiguracji na np. 2222, ale nie odblokujesz go najpierw w firewallu za pomocą sudo ufw allow 2222/tcp, to po restarcie usługi SSH zapora zablokuje ruch na nowym porcie, co odetnie Cię od serwera.
Tak. Dodając linijkę AllowUsers nazwa_uzytkownika1 nazwa_uzytkownika2 w pliku /etc/ssh/sshd_config sprawisz, że nikt inny (nawet z poprawnym kluczem) nie będzie mógł się zalogować.

Sugeruj poprawki na GitHubie

Zauważyłeś literówkę lub chcesz ulepszyć ten poradnik? Ten wpis jest open-source i możesz go edytować.

Edytuj ten wpis
Wróć do listy wpisów

Języki