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
Dodanie klucza publicznego (Zalecane)
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:
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 Port
określa, na którym numerze portu demon ssh nasłuchuje połączeń przychodzących. Domyślny port to 22.
ListenAddress 192.168.1.1
ListenAddress
okreś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
HostKey
określa lokalizację zawierającą prywatny klucz hosta.
LoginGraceTime 600
LoginGraceTime
okreś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
PermitRootLogin
określa, czy root może się zalogować przy użyciu ssh.
StrictModes yes
Ta opcja StrictModes
okreś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, yes
ponieważ czasami użytkownicy mogą przypadkowo pozostawić swój katalog lub pliki do zapisu na całym świecie.
X11Forwarding no
X11Forwarding
określa, czy X11 powinno być włączone na tym serwerze.
PrintMotd yes
PrintMotd
określa, czy demon ssh powinien pokazać zawartość /etc/motd (
znany jako wiadomość dnia) .
RSAAuthentication yes
RSAAuthentication
określa, czy próbować uwierzytelnienia RSA . Ta opcja musi być ustawiona na yes
dla większego bezpieczeństwa. RSA używa par kluczy publicznych i prywatnych utworzonych za pomocą ssh-keygen1utility do celów uwierzytelnienia.
PasswordAuthentication yes
PasswordAuthentication
okreś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
PermitEmptyPasswords
określa, czy serwer zezwala na logowanie się na konta bez hasła.
AllowUsers admin
Ta opcja AllowUsers
okreś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