Jak zabezpieczyć dostęp SSH do VPS LWS: tylko klucze i fail2ban

Procédure

Aby zabezpieczyć dostęp SSH do Twojego VPS LWS, zaleca się całkowite wyłączenie uwierzytelniania hasłem na rzecz klucza SSH, a następnie zainstalowanie fail2ban. Taka konfiguracja chroni serwer przed atakami brute force i eliminuje ryzyko związane z przechwyconymi lub odgadniętymi hasłami. W tym poradniku skopiujesz swój publiczny klucz SSH, dostosujesz konfigurację SSH, aby zneutralizować domyślne ustawienia cloud-init, a następnie zainstalujesz i sprawdzisz aktywną ochronę fail2ban.

Instalacja klucza SSH

  1. Zaloguj się po raz pierwszy przez SSH, a następnie się rozłącz

    Otwórz terminal na swoim komputerze i połącz się z serwerem, używając hasła root otrzymanego w wiadomości e-mail z dostarczeniem usługi. Przy pierwszym połączeniu zaakceptuj odcisk palca klucza serwera, wpisując yes. Po połączeniu natychmiast zakończ sesję, wykonując exit, aby wrócić na lokalną maszynę.

    ⌨ Na twoim komputerze
    ssh root@203.0.113.10
    exit
  2. Skopiuj swój publiczny klucz SSH na VPS

    Z poziomu swojego komputera użyj polecenia ssh-copy-id, aby skopiować swój publiczny klucz na serwer. Wpisz hasło root po raz ostatni, gdy terminal Cię o to poprosi. Jeśli wcześniej dodałeś już swój klucz SSH podczas zamówienia lub reinstalacji z panelu KVM, ten krok nie jest potrzebny.

    ⌨ Na twoim komputerze
    ssh-copy-id root@203.0.113.10
    Oczekiwany wynik
    Number of key(s) added: 1
    
    Now try logging into the machine, with: "ssh 'root@203.0.113.10'"
    and check to make sure that only the key(s) you wanted were added.
  3. Sprawdź połączenie za pomocą klucza SSH

    Połącz się ponownie z VPS przez SSH z poziomu komputera. Połączenie powinno zostać ustanowione natychmiast, bez żądania hasła root serwera, co potwierdza, że publiczny klucz został poprawnie zainstalowany.

    ⌨ Na twoim komputerze
    ssh root@203.0.113.10

Wyłączenie logowania hasłem

  1. Wykryj pułapkę w pliku cloud-init

    Wyświetl listę plików znajdujących się w katalogu /etc/ssh/sshd_config.d/ oraz zawartość 50-cloud-init.conf. Ten plik włącza uwierzytelnianie hasłem. Ponieważ serwer SSH zachowuje pierwszą napotkaną dyrektywę podczas odczytu plików w kolejności alfabetycznej, Twoja własna konfiguracja musi zostać odczytana przed nim.

    ⌨ Na serwerze
    ls /etc/ssh/sshd_config.d/
    cat /etc/ssh/sshd_config.d/50-cloud-init.conf
    Oczekiwany wynik
    PasswordAuthentication yes
  2. Utwórz priorytetowy plik konfiguracji SSH

    Otwórz edytor nano, aby utworzyć plik 00-cles-uniquement.conf. Prefiks 00 gwarantuje, że ten plik zostanie przetworzony przed 50-cloud-init.conf. Wpisz w nim dyrektywy wyłączające hasła i ograniczające dostęp root do kluczy, a następnie zapisz za pomocą Ctrl+X, potwierdź klawiszem O (lub Y zależnie od języka) i naciśnij Enter.

    ⌨ Na serwerze
    nano /etc/ssh/sshd_config.d/00-cles-uniquement.conf
    📄 /etc/ssh/sshd_config.d/00-cles-uniquement.conf
    # Logowanie SSH wyłącznie za pomocą klucza
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PermitRootLogin prohibit-password
  3. Sprawdź składnię i zastosuj konfigurację

    Uruchom sshd -t, aby sprawdzić brak błędów składniowych, a następnie zweryfikuj aktywne wartości za pomocą sshd -T. Zwróć uwagę, że permitrootlogin wyświetla without-password, co odpowiada prohibit-password. Jeśli wszystko jest poprawne, przeładuj usługę SSH, aby zastosować nowe ustawienia bez przerywania sesji.

    ⌨ Na serwerze
    sshd -t
    sshd -T | grep -E "^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)"
    systemctl reload ssh
    Oczekiwany wynik
    permitrootlogin without-password
    passwordauthentication no
    kbdinteractiveauthentication no

Testowanie dostępu SSH

  1. Potwierdź odrzucenie hasła i dostęp kluczem

    Bez zamykania aktywnej sesji otwórz drugie okno terminala na swoim komputerze. Najpierw spróbuj połączyć się, wymuszając odrzucenie kluczy opcją PubkeyAuthentication=no: serwer powinien odmówić dostępu. Następnie uruchom zwykłe połączenie: uwierzytelnianie kluczem powinno zakończyć się sukcesem.

    ⌨ Na twoim komputerze
    ssh -o PubkeyAuthentication=no root@203.0.113.10
    ssh root@203.0.113.10
    Oczekiwany wynik
    root@203.0.113.10: Permission denied (publickey).

Instalacja i weryfikacja fail2ban

  1. Zainstaluj fail2ban

    Z poziomu sesji połączonej z VPS zaktualizuj listę repozytoriów Debiana poleceniem apt update, a następnie zainstaluj pakiet fail2ban. W nowszych wersjach Debiana fail2ban automatycznie aktywuje ochronę usługi SSH zaraz po zakończeniu instalacji.

    ⌨ Na serwerze
    apt update
    apt install -y fail2ban
  2. Sprawdź status fail2ban i zakończ sesję

    Upewnij się, że usługa fail2ban jest aktywna za pomocą systemctl, a następnie sprawdź więzienie sshd, aby potwierdzić, że filtrowanie działa i monitoruje połączenia. Możesz wtedy bez obaw się rozłączyć.

    ⌨ Na serwerze
    systemctl is-active fail2ban
    fail2ban-client status sshd
    exit
    Oczekiwany wynik
    active
    Status for the jail: sshd
    |- Filter
    |  |- Currently failed: 1
    |  |- Total failed:     3
    |  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
    `- Actions
       |- Currently banned: 0
       |- Total banned:     0
       `- Banned IP list:

Słowniczek

SSH (Secure Shell)
Bezpieczny protokół komunikacyjny umożliwiający łączenie się zdalnie z serwerem i zarządzanie nim z wiersza poleceń.
Klucz publiczny
Plik klucza umieszczany na serwerze zdalnym w celu weryfikacji tożsamości użytkownika bez przesyłania hasła.
Klucz prywatny
Ściśle poufny plik klucza przechowywany na lokalnym komputerze, służący do potwierdzenia Twojej tożsamości przed serwerem.
Cloud-init
Narzędzie automatyzacji używane podczas początkowego wdrażania maszyn wirtualnych do inicjalizacji ich sieci i dostępu.
fail2ban
Oprogramowanie bezpieczeństwa, które monitoruje dzienniki systemowe i tymczasowo blokuje na poziomie zapory podejrzane adresy IP.
Jail (więzienie)
W fail2ban zestaw łączący filtr wykrywania prób nadużyć z regułą blokady dla danego usługi.

Często zadawane pytania

Dlaczego nazwać plik 00-cles-uniquement.conf zamiast modyfikować sshd_config?

Demona OpenSSH odczytuje pliki z katalogu sshd_config.d w kolejności alfabetycznej i stosuje pierwszą napotkaną wartość. Używając prefiksu 00, Twoje dyrektywy są przetwarzane przed tymi z 50-cloud-init.conf, co gwarantuje uwzględnienie zakazu logowania hasłem.

Co zrobić, jeśli zostanę zablokowany poza moim VPS?

Jeśli utracisz dostęp SSH, zaloguj się do panelu klienta LWS i otwórz dostęp konsoli KVM / VNC dostępny dla Twojego VPS. Ta konsola symuluje fizyczny ekran i klawiaturę podłączone do serwera i pozwala poprawić pliki konfiguracyjne bez korzystania z SSH.

Jaka jest różnica między prohibit-password a without-password?

To dokładnie ten sam parametr w OpenSSH. prohibit-password to zalecana nowoczesna składnia, ale polecenie sshd -T wyświetla jego historyczny odpowiednik without-password na liście aktywnych dyrektyw.

Czy trzeba konfigurować fail2ban po jego instalacji na Debianie?

W nowszych dystrybucjach, takich jak Debian 13, fail2ban automatycznie konfiguruje i uruchamia więzienie dla usługi SSH już podczas instalacji pakietu. W razie potrzeby możesz później dostosować czas blokady w pliku jail.local.

help.lws.net/a/7926
Czy ten artykuł był pomocny?

Tak

Nie

Przeczytano 1 razy

Dziękujemy! Zadawaj pytania dotyczące naszej dokumentacji, jeśli potrzebujesz więcej informacji, i pomóż nam ją ulepszyć.

Podobne artykuły

Masz pytanie dotyczące tego artykułu?

Zadaj je zespołowi LWS i społeczności. Odpowiedź zostanie opublikowana po moderacji.

Zadaj pytanie zespołowi LWS i jego społeczności

RODO: Administrator: LWS-Ligne Web Services. Cel: moderacja i publiczna publikacja pytania, ewentualne powiadomienie o odpowiedzi. Podstawa prawna: zgoda (art. 6 ust. 1 lit. a RODO). Przechowywanie adresów e-mail: 90 dni po powiadomieniu, maksymalnie 12 miesięcy bez odpowiedzi. Aby skorzystać ze swoich praw, zobacz sekcję RODO naszego regulaminu.