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 😉
Fajny blog. Pozdrawiam.
Super.