Bender – bezpieczne ssh

SSH jest w dzisiejszych czasach standardowym sposobem na zdalne logowanie się do systemów *nix’owych. W tym poradniku opiszę jak zainstalować i skonfigurować serwer ssh na debianie do bezpiecznej obsługi naszego serwera.

1. Instalacja

# aptitude install openssh-server

2.  Konfiguracja

Konfiguracja serwera openssh znajduje się w pliku

/etc/ssh/sshd_config

3. Zmiana portów

Port 22

Standardowo serwer ssh nasłuchuje na porcie 22 przez co boty które skanują sieć mają ułatwioną sprawę, podobnie mają ISP. Jeżeli wolisz mieć serwer na innym porcie wystarczy zmienić powyższą wartość na wybrany port docelowy. Jeśli zaś wolisz mieć serwer ssh na kilku portach (np. do obejścia proxy firmowego) wystarczy podać to pole ponownie z drugim wybranym portem np.

Port 22
Port 443

4. Nasłuchiwanie na wybranych numerach ip

Standardowo serwer nasłuchuje połączeń na wszystkich numerach ip. Jeżeli chcemy aby serwer nasłuchiwał tylko na wybranym numerze ip należy odkomentować pole

# ListenAddress 0.0.0.0

i zamienić 0.0.0.0 na swój numer ip. Jeśli chcemy nasłuchiwać na większej ilości numerów ip wystarczy powtórzyć pole z kolejnymi ip.

5. Blokada logowania się na root’a

Ponieważ w systemach unix root może wszystko i jest zawsze w systemie (przez co często boty próbują się na niego zalogować) lepiej jest zablokować dostęp do tego konta przez ssh’a. Blokada logowania na konto root przez ssh’a nie blokuje korzystania z tego konta przez ssh’a, wystarczy się zalogować na normalnego użytkownika i przełączyć się na konto roota za pomocą polecenia su lub sudo. Powyższą blokadę zakładamy po przez zmianę opcji z

PermitRootLogin yes

na

PermitRootLogin no

6. Autoryzacja kluczami publicznymi

Standardowo nasz serwer ma włączoną opcję autoryzacji po kluczach publicznych użytkowników (w ~/.ssh/authorized_keys), jeśli z jakiegoś powodu (np. autoryzacja dwuetapowa) potrzebujesz wyłączyć tą autoryzację należy przestawić opcję z

PubkeyAuthentication yes

na

PubkeyAuthentication no

7. Autoryzacja z użyciem PAM

Jeśli potrzebujesz dodatkowej autoryzacji przy użyciu PAM (Pluggable Authentication Modules) wystarczy zmienić opcję z

ChallengeResponseAuthentication no

na

ChallengeResponseAuthentication yes

8. Autoryzacja dwuetapowa

Aby zwiększyć bezpieczeństwo dostępu zdalnego polecam użycie autoryzacji dwuetapowej która wymaga spełnienia dwóch wymogów:

  • Musisz coś znać – hasło
  • Musisz coś mieć – autentykator na komórce

Osobiście wykorzystuję do tego celu Google Autenticatora który jest dostępny na Androida i iOS’a oraz jest otwartoźródłowy.

Ze względu na zasadę wg. której działa debian aktualnie w repozytorium stabilnym nie ma pakietu libpam-google-authenticator dlatego trzeba go ręcznie pobrać z https://packages.debian.org/jessie/libpam-google-authenticator i zainstalować przez

# dpkg -i pakiet.deb

Podczas instalacji może wystąpić błąd niespełnienia zależności pakietu, aby to naprawić trzeba użyć polecenia

# aptitude -f install

i wybrać opcję naprawy niespełnionych zależności po przez instalację brakujących pakietów.

Autoryzacja Google Authenticatorem wymaga włączenia dodatkowej autoryzacji pam, którą opisałem w poprzednim punkcie, następnie musimy zmodyfikować plik pam odpowiedzialny za autoryzację ssh

/etc/pam.d/sshd

i dopisać po

# Standard Un*x authentication.
@include common-auth

następującą opcję

# Two factor auth
 auth required pam_google_authenticator.so

Teraz należy skonfigurować token dla swojego konta po przez polecenie:

$ google-authenticator

Program zada nam kilka pytań na które polecam odpowiedzieć następująco:

Do you want authentication tokens to be time-based (y/n)  y

Teraz program wyświetli nam QR Code z naszym kluczem do logowania, nasz klucz w wersji tekstowej (jakbyśmy nie mogli go zeskanować) i pięć jednorazowych awaryjnych kodów jakbyśmy nie mieli dostępu do naszej komórki.

Do you want me to update your "/home/username/.google_authenticator" file (y/n) y

Tutaj musimy się zgodzić bo inaczej nie zostanie zapisany nasz nowy token.

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Pozostałe opcje są wystarczająco opisane więc nie będę o nich więcej pisał.

9. Restart serwera po zmianach

Po ustawieniu wszystkich wybranych przez nas opcji restartujemy serwer

# service ssh restart

Jeśli konfigurowaliśmy serwer ssh przez ssh’a to polecam sprawdzenie nowych ustawień po przez otwarcie połączenia z serwerem w nowej karcie lub przez ssh’a na localhost w serwerze, daje to nam możliwość naprawy ustawień serwera zanim się rozłączymy.

10. Na koniec

Podane powyżej informacje powinny wystarczyć aby bezpiecznie wystawić na świat serwer ssh’a. Jeśli chcielibyśmy bardziej zabezpieczyć serwer możemy dodatkowo skorzystać z programów typu fail2ban, który zapewne opiszę w następnych wpisach (choć nic nie obiecuję).

Dodaj komentarz

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