Zgodnie z zaleceniami CISecurity, nieużywane usługi należy usunąć. W przypadku SSH:

# apt purge openssh-server

po każdej zaś zmianie w konfiguracji (jeśli korzystamy z usługi), należy ją zrestartować:

# systemctl reload sshd

Jeśli zaś potrzebujemy zainstalować:

sudo apt install openssh-server

konfiguracja zaś znajduje się tutaj, aby ją edytować:

sudo nano /etc/ssh/sshd_config

Wśród zaleceń m.in. sprawdzenie czy jest wyłączone tunelowanie obrazu X11forwarding (i wyłączenie, jeśli włączone):

wiks@qrgo:~$ sudo sshd -T | grep x11forwarding
X11Forwarding no

Ustawiona maksymalna liczba nieudanych logowań na 4 (ew. korekta, bo domyślnie było 6):

wiks@qrgo:~$ sudo sshd -T | grep maxauthtries
maxauthtries 4

Dozwolone logowanie jako root (było ustawione jako 'without-password’, należy ustawić 'no’):

wiks@qrgo:~$ sudo sshd -T | grep permitrootlogin
permitrootlogin no

Zalecane progi czasu bezczynności oraz maksymalnej liczby wiadomości poprzez SSH od klienta w ciągu sekundy (domyślne ustawienie czasu bezczynności to 0 – wyłączone, zaleca się ustawić tutaj np. 5 minut – 300 sekund):

wiks@qrgo:~$ sudo sshd -T | grep clientaliveinterval
clientaliveinterval 300
wiks@qrgo:~$ sudo sshd -T | grep clientalivecountmax
clientalivecountmax 3

Zalecany maksymalny czas autentyfikacji (od połączenia do podania poprawnego hasła) należy ustawić na 60 sekund (domyślnie to 120 sekund):

wiks@qrgo:~$ sudo sshd -T | grep logingracetime
logingracetime 60

W zaleceniach znalazła się podpowiedź, aby ograniczyć liczbę użytkowników dozwolonych do łączenia się poprzez SSH. Można również wskazać grupy dozwolone, albo użytkowników i grupy, którym nie zezwalamy na takie połączenia.

Domyślnie opcje te są wyłączone. Korzystając z sugestii należy ustalić tych użytkowników, którym zezwalamy i sprawdzić czy działa:

wiks@qrgo:~$ sudo nano /etc/ssh/sshd_config

# [...]

# dopisujemy np.:
AllowUsers wiks sftp

# [...]

sprawdzenie:

wiks@qrgo:~$ sudo sshd -T | grep allowusers
allowusers wiks
allowusers sftp

Zalecane wyłączenie AllowTcpForwarding (domyślnie dozwolone =yes). Jeśli nieużywane, należy ustawić na 'no’. Tutaj trzeba być oczywiście ostrożnym, jeśli używamy np. VNC via TSL, przy zablokowanym i próbie połączenia VNC zobaczymy:

wiks@dellwiks:~$ ssh -L 5901:localhost:5901 -N -f -l wiks 192.168.1.101 -p 57655
wiks@192.168.0.101's password: 
wiks@dellwiks:~$ channel 2: open failed: administratively prohibited: open failed

Wymieniono jedynie wybrane elementy, przeważnie te, których ustawienia domyślne były inne niż zalecane. Zalecam oczywiście zerknąć do źródła i sprawdzić wszystkie rekomendacje.