Have You Tried IT ?

Information Technology from scratch

Bezpieczeństwo SSH

Dodano przez Kategoria: Linux

SSH służy do łączenia się ze zdalnym serwerem, standardowo do połączenia wykorzystuje się port 22 i domyślną nazwę użytkownika root. Niesie to ze sobą spore niebezpieczeństwo, gdyż po Internecie grasują sobie chociażby boty próbujące zalogować się na konto root do pierwszych lepszych serwerów. Dlatego na tak domyślnie skonfigurowanym serwerze, w codziennych raportach programu logwatch, można dostrzec rozmaite próby zalogowania do SSH z różnych dziwnych adresów IP.
Wyglądać to może mniej więcej tak:

--------------------- pam_unix Begin ------------------------ 

 sshd:
    Authentication Failures:
       root (190.221.115.155): 216 Time(s)
       unknown (208.89.214.79): 3 Time(s)
       root (60.195.249.67): 2 Time(s)
       root (62.225.155.90): 2 Time(s)
       root (202.100.80.21): 1 Time(s)
       root (202.133.244.250): 1 Time(s)
       root (61.78.62.43): 1 Time(s)
       root (88-149-159-194.vps.virtuo.it): 1 Time(s)
       root (rs.hntelecom.net.cn): 1 Time(s)
       root (xs.5460.net): 1 Time(s)
    Invalid Users:
       Unknown Account: 3 Time(s)

 ---------------------- pam_unix End ------------------------- 

 --------------------- SSHD Begin ------------------------ 

 Failed logins from:
    60.195.249.67: 2 times
    61.78.62.43: 1 time
    62.225.155.90: 2 times
    88.149.159.194 (88-149-159-194.vps.virtuo.it): 1 time
    190.221.115.155 (host155.190-221-115.telmex.net.ar): 216 times
    202.100.80.21: 1 time
    202.133.244.250: 1 time
    218.77.120.135 (xs.5460.net): 2 times

 Illegal users from:
    208.89.214.79: 3 times

 Received disconnect:
    11: Bye Bye : 2 Time(s)
    11: Goodbye : 216 Time(s)

 **Unmatched Entries**
 reverse mapping checking getaddrinfo for host155.190-221-115.telmex.net.ar failed - POSSIBLE BREAK-IN ATTEMPT! : 216 time(s)

 ---------------------- SSHD End -------------------------

Boty zapewne najczęściej próbują metodą bruteforce zalogować się na konto root, przy wielu różnych próbach może się im to udać. Aby zminimalizować ryzyko włamania należy zmaksymalizować zasady bezpieczeństwa 😉 przy połączeniach przez SSH.

Na początek należy utworzyć sobie w systemie nowego użytkownika, którego będziemy używać do logowania (zamiast konta root)

useradd nowyuzytkownik
passwd nowyuzytkownik

Następnie trzeba będzie pogrzebać trochę w pliku konfiguracyjnym SSH
/etc/ssh/sshd_config

 

Dla pewności najlepiej utworzyć sobie jeszcze jedno połączenie z konta root i zostawić to okienko w tle. W razie jakby coś poszło nie tak w trakcie modyfikowania tego pliku (można sobie np. zablokować możliwość zalogowania), to będzie takie awaryjne połączenie. Nawet po zapisaniu pliku sshd_config i zrestartowaniu usługi, istniejące sesje pozostają nadal aktywne.

 

1. Zmiana domyślnego portu SSH

vi /etc/ssh/sshd_config

Należy w pliku znaleźć linię:

# Port 22

odkomentować ją i zmienić wartość portu na jakąś niestandardową. Polecam przejrzeć tę listę i wybrać jakiś nieużywany port lub jakiś z zakresu 49152–65535.

Port 39997

Dla pewności po każdym kroku można zapisać plik i zrestartować sshd

/etc/init.d/sshd restart

Jeśli próba zalogowania na nowym porcie się powiodła można przejść do następnego kroku.

 

2. Maksymalna liczba prób i czas na zalogowanie

W tym samym pliku sshd_config należy odnaleźć wiersze zawierające parametry LoginGraceTime i MaxAuthTries

LoginGraceTime 45
MaxAuthTries 3
  • LoginGraceTime – to czas w jakim użytkownik musi wpisać swoje hasło. Jeśli w podanym czasie nie poda hasła, połączenie jest rozłączane. Wartość podana w sekundach (można również zamiast 120 zapisać w postaci 2m)
  • MaxAuthTries – maksymalna ilość błędnych prób logowania. Po przekroczeniu połączenie jest rozłączane

Ustawienia te przede wszystkim mają utrudnić życie botom, które będą musiały łączyć się na nowo po nieudanych próbach.

 

3.  Wyłączenie możliwości logowania dla konta root oraz logowania bez podania hasła

Cały czas w tym samym pliku należy odnaleźć parametry PermitRootLogin i PermitEmptyPasswords

PermitRootLogin no
PermitEmptyPasswords no
  • PermitRootLogin – root nie może zalogować się bezpośrednio przez SSH
  • PermitEmptyPasswords – zabrania się logowania bez podania hasła

Aby przejść na konto root po zalogowaniu należy użyć komendy su.

 

4. Ustalenie użytkowników, którzy mogą logować się przez SSH

Ponadto można również ustalić, którzy użytkownicy mogą się wyłącznie logować przez SSH. Wówczas należy dopisać linię i wymienić po odstępach nazwy użytkowników:

AllowUsers nowyuzytkownik robertmateja niedzwiedz janusz

 

Po zapisaniu pliku należy jeszcze zrestartować usługę sshd

/etc/init.d/sshd restart

Jeśli wszystko działa i można się zalogować wg. nowych zasad, to można już spokojnie zamknąć sesję z awaryjnym okienkiem 😉

2 komentarze

Dodaj komentarz do Piotr

XHTML: Dozwolone znaczniki: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">