zabezpieczenie servera SSH

Aby zminimalizować możliwość włamania na nasz serwer warto poświęcić chwilę aby odpowiednio zabezpieczyć serwer SSH.

Plik konfiguracyjny serwera SSH możemy znaleźć w

/etc/ssh/sshd_config

Otwieramy plik jakimś edytorem i przystępujemy do jego edycji:

nano /etc/ssh/sshd_config

Ustaw odpowiednią wersje protokołu dla SSH
Pierwszą, rzeczą na która warto zwrócić uwagę w pliku konfiguracyjnym jest wersja protokołu obsługiwana przez serwer SSH. Istnieją dwie. Ze względów bezpieczeństwa należy używać wersji nr 2, która została przeprojektowana od zera ze względu na ujawnione w wersji 1.5 podatności na ataki krypto analityczne, umożliwiające wstrzykiwanie komend do zaszyfrowanego strumienia SSH.

Jeżeli używasz Debiana to domyślnie masz już ustawioną odpowiednia wersje protokołu (nr 2). Jeśli używasz innych dystrybucji możesz spotkać się z taką linijka:

Protocol 2,1

należy ją zmieniać na:

Protocol 2

Zablokuj zdalne logowanie dla konta root’a

Dużym zagrożeniem dla naszego serwera są różnego typu boty, które w większości przypadków próbują złamać hasło root’a. Aby tego uniknąć należy wyłączyć możliwość bezpośredniego logowania użytkownika root poprzez SSH na serwer.

Uwaga: Przed wyłączeniem logowania na konto root należy utworzyć konto nowego użytkownika, którego dane wykorzystamy do późniejszego logowania. Jeśli tego nie zrobimy a mimo tego zablokujemy dostęp dla roota uniemożliwimy sobie możliwość zalogowania na nasz serwer.

Aby to zrobić należy zmienić linijkę:

PermitRootLogin yes

na

PermitRootLogin no

Zmiana portu SSH

Domyślnie serwer SSH oczekuje połączeń na porcie 22. Często wykorzystują to boty które próbują dokonać ataku na tym właśnie porcie. Kolejnym zagrożeniem są skanery portów które mogą dostarczyć atakującym informacji jakie usługi są uruchomione na jakiś portach. Skanują one zazwyczaj domyślnie tylko do portu 1024 (gdzie jak widzimy łapie się port 22 – z naszym serwerem SSH). Warto by to zmienić na port jakiś powyżej 1024 a najlepiej na 5000+.

Znajdujemy linię:

Port 22

i zamieniamy ją na np.

Port 5250

restartujemy serwer

/etc/init.d/ssh restart

teraz aby połączyć się z naszym serwerem należy wydać polecenie:

ssh uzytkownik@ipserwera -p 5250

gdzie 5250 oznacza nr ustawionego portu

Kontrola dostępu

Kolejnym krokiem jaki można wykonać jest ograniczenie dostępu do SSH dla określonych użytkowników lub grup użytkowników.

Odpowiadają za to opcje:

AllowUsers user1_zSSH user2
DenyUsers user3_bezSSH user4
AllowGroups nazwa_grupy_z_SSH
DenyGroups grupa_bez_ssh

Dodatkowe opcje

PermintEmpty no – zabrania logowania się na konto bez podania hasła
StrictModes yes – tryb rygorystyczny

Dodatkowym zabezpieczeniem może być umożliwienie logowania się na serwer tylko z określonych adresów IP. Jeśli posiadamy stałe IP (neostrada np takiego nie posiada). W pliku /etc/hosts.allow możemy wpisać:

sshd : 127.0.0.1 : allow
sshd : Twoj-adres-IP : allow

a w pliku /etc/hosts.deny

sshd: ALL

na koniec restartujemy usługę:

sudo service ssh restart

Następnym krokiem w zabezpieczeniu serwera będzie konfiguracja uwierzytelniania za pomocą klucza publicznego dla naszego nowego użytkownika. Ustawienie tego klucza zwiększy bezpieczeństwo Twojego serwera wymagając przy każdym logowaniu klucz SSH.

Generowanie klucza

Jeśli jeszcze nie masz pary kluczy SSH, która składa się z publicznego i prywatnego kluczy, trzeba stworzyć jedną taką. Jeśli już masz klucze, który chcesz użyć, przejdź do następnego rozdziału.

Dla wygenerowania klucze wpisz w konsoli swojego lokalnego systemu Linux następne polecenie:

ssh-keygen

Dla Windowsa musisz użyć specjalnego oprogramowania, które nazywa się Puttygen.

Zakładamy, że Twój lokalny użytkownik ma na imię „user” dla którego zobaczysz następny komunikat:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa):

Wciśnij „Enter” dla potwierdzenia nazwy pliku i ścieżki do niego (oczywiście możesz zmienić znaczenie).

Dalej system poprosi Cię o ustawienia passphrase (hasła) do Twojego klucza. Możesz podać hasło albo możesz zostawić znaczenie pustym.

Uwaga: jeśli nie wypełnisz passphrase, będziesz mógł użyć prywatnego klucza do autoryzacji bez wpisywania dodatkowego hasła. Jeśli wpisałeś hasło, potrzebny będzie i klucz prywatny i hasło, aby zalogować się na serwer. Dodanie hasła do klucza pozwoli zwiększyć poziom bezpieczeństwa Twojego VPS.

Więc został utworzony klucz prywatny id_rsa i klucz publiczny id_rsa.pub w katalogu .ssh w folderze naszego lokalnego użytkownika. Pamiętaj, że klucz prywatny nie można udostępniać osobom trzecim, które nie muszą mieść dostępu do Twoich serwerów!

Kopiowania publicznego klucza

Po wygenerowaniu pary kluczy SSH, musimy skopiować swój klucz publiczny na nowy serwer. Weźmiemy do uwagi dwa proste sposoby, za pomocą których można to zrobić.

Pierwsza opcja: Skorzystać z ssh-copy-id

Jeżeli Twoja maszyna lokalna posiada moduł ssh-copy-id, możesz z niego skorzystać dla instalacji klucza dla dowolnego użytkownika, do którego masz dostępy.

Uruchom skrypt ssh-copy-id, podając nazwę użytkownika i adres IP serwera, na który chcesz wysłać i ustawić klucz:

ssh-copy-id demo@ADRES_IP_SERWERA

Po podaniu hasła przy poprzednim poleceniu Twój klucz publiczny zostanie dodany do pliku zdalnego użytkownika .ssh/authorized_keys. Teraz można użyć odpowiedniego klucza prywatnego do logowania się na serwer.

Druga opcja: Ręczna instalacja klucza

Jeżeli klucz SSH został wygenerowany za pomocą poprzedniego kroku, to należy użyć następnego polecenia w terminalu lokalnego komputera, żeby zobaczyć zawartość klucza publicznego (id_rsa.pub):
cat ~/.ssh/id_rsa.pub

Teraz możesz w terminalu zobaczyć swój klucz, który, mniej więcej, będzie wyglądał następująco:

id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBGTO0tsVejssuaYR5R3Y/i73SppJAhme1dH7W2c47d4gOqB4izP0+fRLfvbz/tnXFz4iOP/H6eCV05hqUhF+KYRxt9Y8tVMrpDZR2l75o6+xSbUOMu6xN+uVF0T9XzKcxmzTmnV7Na5up3QM3DoSRYX/EP3utr2+zAqpJIfKPLdA74w7g56oYWI9blpnpzxkEd3edVJOivUkpZ4JoenWManvIaSdMTJXMy3MtlQhva+j9CgguyVbUkdzK9KKEuah+pFZvaugtebsU+bllPTB0nlXGIJk98Ie9ZtxuY3nCKneB+KjKiXrAvXUPCI9mWkYS/1rggpFmu3HbXBnWSUdf localuser@machine.local

Za pomocą myszki wybierz klucz i skopiuj go (Ctrl + C).

Dodanie klucza publicznego do zdalnego użytkownika

Aby korzystać z klucza SSH do logowania się nowym zdalnym użytkownikiem, należy dodać klucz publiczny do specjalnego pliku w katalogu domowym użytkownika.
Na serwerze VPS jako użytkownik root wpisujemy następne polecenie, aby przełączyć się na nowego użytkownika (podstawić swoją nazwę użytkownika):

su -user 

Teraz jesteś w katalogu domowym użytkownika user.

Utwórz nowy katalog o nazwie .ssh i ustaw dla niego następne uprawnienia za pomocą poleceń:

mkdir .ssh
chmod 700 .ssh

Teraz otwórz plik w folderze .ssh z nazwą authorized_keys przy pomocy edytora tekstu. Będziemy korzystać z nano do edycji pliku:

nano .ssh/authorized_keys

Teraz wklej (Ctrl + V) swój klucz publiczny (który powinien być w schowku) do edytora.

Wciśnij CTRL + X, żeby wyjść z edytora, potem Y dla zapisu wprowadzonych zmian, zatem ENTER, aby potwierdzić nazwę pliku.

Teraz dodamy ograniczenia dostępu dla pliku authorized_keys za pomocą następującego polecenia:

chmod 600 .ssh/authorized_keys

Teraz możesz zalogować się poprzez SSH jako Twój wcześniej stworzony użytkownik z wykorzystaniem Twojego prywatnego klucza

Przykładowy plik konfiguracyjny:

Port 22
          ListenAddress 192.168.1.1
          HostKey /etc/ssh/ssh_host_key
          LoginGraceTime 600
          PermitRootLogin no
          StrictModes yes
          X11Forwarding no
          PrintMotd yes
          PasswordAuthentication yes
          PermitEmptyPasswords no
          AllowUsers admin
          Port 22

Opcja Portokreśla, na którym numerze portu demon ssh nasłuchuje połączeń przychodzących. Domyślny port to 22.

ListenAddress 192.168.1.1

ListenAddressokreśla adres IP sieci interfejsu, z którą wiąże się gniazdo serwera demona ssh. Domyślnie jest to 0.0.0.0; Aby poprawić bezpieczeństwo, możesz określić tylko te wymagane, aby ograniczyć możliwe adresy.

HostKey /etc/ssh/ssh_host_key

HostKeyokreśla lokalizację zawierającą prywatny klucz hosta.

LoginGraceTime 600

LoginGraceTimeokreśla, ile czasu w sekundach po żądaniu połączenia serwer będzie czekał przed rozłączeniem, jeśli użytkownik nie zaloguje się pomyślnie.

PermitRootLogin no

PermitRootLoginokreśla, czy root może się zalogować przy użyciu ssh.

StrictModes yes

Ta opcja StrictModesokreśla, czy ssh powinien sprawdzać uprawnienia użytkownika w swoim katalogu domowym i plikach rhosts przed zaakceptowaniem logowania. Ta opcja musi być zawsze ustawiona na, yesponieważ czasami użytkownicy mogą przypadkowo pozostawić swój katalog lub pliki do zapisu na całym świecie.

X11Forwarding no

X11Forwardingokreśla, czy X11 powinno być włączone na tym serwerze.

PrintMotd yes

PrintMotdokreśla, czy demon ssh powinien pokazać zawartość /etc/motd (znany jako wiadomość dnia) .

RSAAuthentication yes

RSAAuthenticationokreśla, czy próbować uwierzytelnienia RSA . Ta opcja musi być ustawiona na yesdla większego bezpieczeństwa. RSA używa par kluczy publicznych i prywatnych utworzonych za pomocą ssh-keygen1utility do celów uwierzytelnienia.

PasswordAuthentication yes

PasswordAuthenticationokreśla, czy powinniśmy używać uwierzytelniania opartego na haśle. Dla silnego bezpieczeństwa ta opcja musi być zawsze ustawiona na no.

PermitEmptyPasswords no

PermitEmptyPasswordsokreśla, czy serwer zezwala na logowanie się na konta bez hasła.

AllowUsers admin

Ta opcja AllowUsersokreśla i kontroluje, którzy użytkownicy mogą uzyskać dostęp do usług ssh. Można określić wielu użytkowników, oddzielonych spacjami.

 

Reinstalacja serwera Openssh

 

sudo apt-get remove --purge openssh-server && sudo apt-get install openssh-server

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Translate »