OpenSSH - Logowanie dwuskładnikowe (2FA) lub przy pomocy kluczy szyfrujących

Tagi: #<Tag:0x00007f2ae003b940> #<Tag:0x00007f2ae003b738> #<Tag:0x00007f2ae003b530> #<Tag:0x00007f2ae003b350>

Witam, w dzisiejszym poradniku opiszę jak wzmocnić zabezpieczenia serwera OpenSSH.

Na wstępie (prawie) każdy wie że w sieci grasują boty próbujące złamać hasło do konsoli SSH, metody typu zmiana portu od konsoli serwera SSH już niewiele dają. Dzisiejsze boty skanują porty w celu wyszukania odpowiedniego portu. Przedstawię jak krok po kroku wzmocnić zabezpieczenie konsoli aby zminimalizować szanse ataku, będą przedstawione dwie metody:

  • Logowanie przy pomocy kluczy szyfrujących.
  • Logowanie 2FA przy pomocy hasła i jednorazowego tokenu.

Pierwsza metoda jest najbezpieczniejsza i pod względami technicznymi złamanie klucza szyfrującego o dużym rozmiarze jest niemożliwe (bo to kwestia milionów lat) zaś druga metoda nie jest tak bezpieczna jak pierwsza ale szansa że jednorazowy token zostanie odgadnięty jest znikoma. Więc przejdźmy do rzeczy.

Logowanie przy pomocy kluczy szyfrujących.

1. Instalujemy serwer OpenSSH tym poleceniem: (domyślnie jest zainstalowany, piszę aby nie było pytań w komentarzach jak zainstalować taki serwer)

apt install openssh-server

2. Generujemy klucze szyfrujące dla konta root (lub dla innego przez was wybranego).

ssh-keygen

Wyświetlą się następujące pytania, należy na nie odpowiedzieć następująco:

Enter file in which to save the key (/root/.ssh/id_rsa): [Kilkamy Enter]
Enter passphrase (empty for no passphrase): [Wpisujemy nowe hasło przy pomocy którego klucz zostanie zabezpieczony]
Enter same passphrase again: Potwierdzamy hasło

Para kluczy została wygenerowana i jest zapisana w /root/.ssh.

3. Tworzymy plik w /root/.ssh z kluczem publicznym, klucz publiczny jest zapisany w pliku id_rsa.pub ale aby móc logować się kluczem trzeba plik id_rsa.pub skopiować i stworzyć plik authorized_keys:

cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

4. Kopiujemy plik id_rsa na komputer. W katalogu /root/.ssh znajduje się plik id_rsa z kluczem prywatnym który będzie wymagany aby móc połączyć się z konsolą SSH.

cat /root/.ssh/id_rsa

5. Zmieniamy konfigurację OpenSSH. Aby to uczynić należy przejść do katalogu /etc/ssh.

cd /etc/ssh
nano sshd_config

W linijce nr. 52 jest pozycja

#PasswordAuthentication yes

Usuwamy znak # i wartość yes zmieniamy na no, czyli wpis w linijce nr. 52 powinien wyglądać tak:

PasswordAuthentication no

Zapisujemy plik i restartujemy serwer OpenSSH poleceniem:

service ssh restart

6. Importowanie klucza prywatnego do PuTTY.
Skopiowany klucz wklejamy do notatnika i zapisujemy go, otwieramy aplikację PuTTYgen, na górnym pasku aplikacji PuTTYgen jest zakładka Conversions, otwieramy ją i wybieramy pozycję Import key.


Wybieramy plik z kluczem i klikamy “Otwórz”, następnie zostaniemy poproszeni o hasło do klucza prywatnego, wpisujemy je i zatwierdzamy przyciskiem OK.

Po wpisaniu poprawnego hasła możemy ustawić nazwę klucza prywatnego, domyślna to imported-openssh-key, możemy ją zmienić. Wystarczy edytować to pole i wpisać własną. Następnie klikamy przycisk Save private key i wybieramy gdzie ma być zapisany klucz prywatny.

Po zapisaniu klucza prywatnego możemy zamknąć aplikację PuTTYgen.

7. Używanie klucza prywatnego.
Po uruchomieniu aplikacji PuTTY standardowo wpisujemy adres swojego serwera i wpisujemy port (jeżeli mamy niestandardowy). W gałęzi Connection jest kolejna gałąź o nazwie SSH, rozwijamy ją. Po rozwinięciu gałęzi jest pozycja Auth, klikamy ją (nie rozwijamy). Klikamy przycisk Browse i wybieramy klucz prywatny.

Można sobie zapisać konfigurację aby nie wykonywać tego punktu od początku. Na samej górze jest gałąź Session, klikamy ją, jest tabelka Saved Sessions, w polu pod tym napisem wpisujemy jakąś nazwę jak ta konfiguracja ma się nazywać (np. Serwer VPS) i klikamy przycisk Save. Po włączeniu PuTTY wybieramy konfigurację i klikamy przycisk Load.


Jeżeli chcemy połączyć się z serwerem to klikamy przycisk Open.

Następnie wpisujemy hasło od klucza prywatnego i zatwierdzamy klawiszem ENTER. Jeżeli hasło będzie poprawne to zostaniesz podłączony do serwera.
Hasło służy jako dodatkowe zabezpieczenie klucza jak by ktoś uzyskał dostęp do klucza prywatnego to bez odpowiedniego hasła nie będzie mógł tego klucza użyć.

Logowanie 2FA przy pomocy hasła i jednorazowego tokenu.

1. Instalujemy oprogramowanie:

apt install openssh-server
apt install libpam-google-authenticator

2. Konfigurujemy OpenSSH tak aby wymagał jednorazowego tokenu uwierzytelniającego.
Otwieramy plik poleceniem:

nano /etc/pam.d/sshd

Do pliku /etc/pam.d/sshd dodajemy wartość:

auth required pam_google_authenticator.so

Po wpisaniu wartości zapisujemy i zamykamy plik /etc/pam.d/sshd. Teraz otwieramy plik /etc/ssh/sshd_config poleceniem:

nano /etc/ssh/sshd_config

I przechodzimy do linijki nr. 49 i zmieniamy wartość wpisu ChallengeResponseAuthentication z no na yes. Wpis powinien wyglądać tak:

ChallengeResponseAuthentication yes

Opcjonalnie Można zezwolić na logowanie się na konto root przy pomocy hasła. W pliku /etc/ssh/sshd_config trzeba edytować linijkę nr. 28 zmieniając wartość PermitRootLogin z prohibit-password na yes. W takim przypadku wpis powinien wyglądać tak:

PermitRootLogin yes

Zapisujemy i zamykamy plik.

3. Generujemy token uwierzytelniający na telefon, na telefonie musimy zainstalować aplikację
Google Authenticator. Po zainstalowaniu aplikacji wpisujemy polecenie:

google-authenticator

Wyświetlą się pytania:

Do you want authentication tokens to be time-based (y/n) y
Do you want me to update your “/root/.google_authenticator” file (y/n) y
size of 1:30min to about 4min. Do you want to do so (y/n) y
Do you want to enable rate-limiting (y/n) y

Odpowiadamy na wszystkie pytania odpowiedzią y czyli tak.

Przed pytaniami wyświetlił się kod QR, klucz prywatny secret key oraz klucze awaryjne. Uruchom aplikację na telefonie Google Authenticator i zeskanuj kod QR lub przepisz klucz tajny.

4. Zrestartuj serwer OpenSSH poleceniem:

service ssh restart

5. Łączenie się z serwerem.
Procedura łączenia się z serwerem niczym się nie różni, normalnie się łączymy, wpisujemy nazwę użytkownika np. root, wpisujemy hasło i tymczasowy token uwierzytelniający z Google Authenticator.

To są tylko dwa sposoby które potrafią w dużym stopniu zabezpieczyć konsolę SSH przed botami. Zalecane jest doinstalowanie pakietu fail2ban który zablokuje adres IP po kilku nieudanych próbach logowania. Mam nadzieję że jakoś pomogłem, z mojej strony to wszystko.

Poradnik miesiąca: maj 2019

11lajków

Dziękuję za pomoc :grinning:

1lajk