Zabezpieczenie serwera ssh

  • Data: 2016

Wstęp

Jedną z najmocniejszych stron systemów z rodziny Unix jest ich zdalne zarządzanie. Bez znaczenia, czy maszyna znajduje się obok nas, czy za oceanem. Po połączeniu się z naszym serwerem mamy wrażenie, jakbyśmy siedzieli przed monitorem naszego serwera.

Przed laty standardowym sposobem dostępu był protokół telnet. Główną wadą tegoż protokołu, która go dyskwalifikuje jest nieszyfrowana komunikacja między hostami. Oznacza to, że każdy, kto na trasie połączenia zainstaluje tzw.sniffer, będzie widział całą naszą komunikacje tj. nazwa użytkownika, hasła, polecenia i ich wyniki.
Alternatywą dla telnetu jest protokół ssh, który w przeciwieństwie do telnet-u jest w pełni zaszyfrowany. Jednak domyślna konfiguracja serwera ssh nie jest doskonała, istnieje kilka prostych czynności, które mogą znacząco podnieść poziom bezpieczeństwa.

Zmian będziemy dokonywać głównie w pliku konfiguracyjnym ssh: /etc/ssh/sshd_config i oczywiście po dokonywanych zmianach restartujemy usługę ssh.

Wersja protokołu

Wszystkie nowoczesne instalacje ssh domyślnie mają ustawioną wersję 2, która m.in. eliminuje ataki man in the middle, ale nie zaszkodzi sprawdzić:

Protocol 2

Zmiana portu

W tym przypadku odsyłam do: zmiana portu ssh

Blokada zdalnego logowania na konto root

PermitRootLogin no
Domyślnie OpenSSH umożliwia bezpośrednie logowanie się na konto administratora. Jest to niebezpieczne, ponieważ przejęcie jednego hasła wystarcza do przejęcia pełnej kontroli nad serwerem. Znacznie lepszym pomysłem jest logowanie się na zwykłego użytkownika, a dopiero później poprzez polecenie su przełączali się na konto root.

Ograniczenie ilości prób logowania

MaxAuthTries 3
Ta opcja określa liczbę prób wpisywania hasła, jakie możemy podjąć podczas połączenia. Po przekroczeniu tego limitu następuje zerwanie połączenia. Rozważając tą opcję polecam: Instalacja i konfiguracja Fail2Ban

Ograniczenie dostępu do ssh dla użytkowników / grup

Domyślnie logować na serwer może się każdy kto ma dostęp do powłoki. Możemy zmienić ten stan rzeczy za pomocą opcji: AllowGroups, DenyGroups, AllowUsers, DenyUsers. Oczywiście można dodać kilku użytkowników, grup wedle uznania, oddzielając przecinkiem lub spacją.

Ograniczenie dostępu do ssh dla adresów IP (TCP Wrappers)

Jeżeli możemy sobie pozwolić na tak restrykcyjna politykę bezpieczeństwa to warto z niej skorzystać. Warunkiem jest ssh skompilowane z obsługą biblioteki libwrap. Najpewniej właśnie tak jest ale zawsze można sprawdzić:

# whereis ssh
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
# ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x000061fbfb994000)

TCP Wrappers wykorzystuje reguły dostępu zapisane w plikach /etc/hosts.allow i /etc/hosts.deny. Tworząc reguły trzeba pamiętać co najmniej o kilku rzeczach. Pierwsza kwestia jest ważna, gdyż możemy w łatwy sposób odciąć dostęp przez ssh. Zawsze musimy sprawdzić czy plik kończy się znakiem nowej linii, w przypadku, gdy /etc/hosts.allow nie mamy żadnego wpisu dotyczącego ssh, a w pliku /etc/hosts.deny mamy jakiklowiek adres IP i zapomnimy o "enterze" nie zalogujemy się przez ssh z żadnego adresu.
Przy tworzeniu musimy wziąć pod uwagę kolejność prasowania plików. W pierwszej kolejności przetwarzany jest /etc/hosts.allow, a dopiero później /etc/hosts.deny. Dlatego też, jeśli mamy regułę akurat w tym przypadku dotycząca ssh w /etc/hosts.allow, reguła w /etc/hosts.deny będzie ignorowana.

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
# ALL: PARANOID

sshd : adresIP, adresIP :spawn /bin/echo Login attempt `/bin/date` from %h >> /var/log/ssh.log

Powyżej blokujemy dwa adresy IP, opcjonalnie zapisujemy próbę logowania do pliku. Analogicznie tworzymy reguły w /etc/hosts.allow. W polu adresIP zamiast pojedynczych adresów IP możemy użyć adresów podsieci w postaci: 192.168.1.0/255.255.255.0 lub 192.168.1. jak również nazwy domenowe.

Po dodaniu reguł i zapisaniu zmian w plikach, nic już nie trzeba restartować.

Powrót »