Marvin Pascale

[B.Log]

03 Maggio 2023

SSH server

Serrature Ho già trattato questo argomento in passato, ma oggi vedremo 10 passi per rendere più sicuri i nostri server openSSH.

Il decalogo del buon sistemostro

Di seguito elencherò le mie 10 regole + 2 bonus per avere un accettabile livello di sicurezza. Alcune di queste regole sono rivolte a chi deve esporre per forza il servizio e/o non ha un ip statico come sorgente.

1. Disabilitiamo la login come utente root

Prima regola e forse la più sottovalutata; creiamo degli utenti da inserire nel gruppo sudoers (o wheel) per limitare di tanto il bacino di attacco.

NB: è molto più facile spammare attacchi verso l’utente root, che è certamente attivo, piuttosto che tirare ad indovinare con nomi utenti a caso.

useradd -m marvinux
passwd marvinux
usermod -aG sudo marvinux

Successivamente ediamo il file /etc/ssh/sshd_config e configuriamo

PermitRootLogin no
AllowUsers marvinux

Non lo ripeterò più ma tutte le volte che modifichiamo una configurazione in sshd dobbiamo riavviare il servizio

systemctl restart ssh

oppure

systemctl restart sshd

2. Cambiamo la porta di ascolto

Un metodo abbastanza efficace per scoraggiare le botnet è quello di modificare la porta di ascolto del demone.

Sempre nel file /etc/ssh/sshd_config

Port 6048

3. La versione conta

La versione 2 di ssh fu rilasciata per sopperire a gravi vulnerabilità per cui assicuriamoci si utilizzarla Nel file /etc/ssh/sshd_config

Protocol 2

4. Mai accettare le password vuote

Indovinate dove… Sempre nel file /etc/ssh/sshd_config

PermitEmptyPasswords no

5. Se sbagli più di 3 volte

Ma no, non mi dire che devo editare il file /etc/ssh/sshd_config

MaxAuthTries 3

6. Disabilitiamo TCP Port Forwarding and X11 Forwarding

Se sono funzionalità che non vi servono, disabilitatele. Stavolta è il file /etc/ssh/sshd_config

X11Forwarding no
AllowTcpForwarding no

7. Crittografia asimmetrica

Di questo ne ho parlato più approfonditamente in questo post, per cui fai un ripasso.

8. White list

I file /etc/hosts.allow e /etc/hosts.deny sono presenti in GNU/Linux da che io abbia memoria ma sono molto spesso snobbati. Fanno proprio quello che promettono: accettano connessioni provenienti da certi ip e rifiutano con altrettanta dedizione.

Nel file /etc/hosts.allow

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "rpcbind" for the
# daemon name. See rpcbind(8) and rpc.mountd(8) for further information.
sshd : 10.0.0.0/24 : ALLOW

9. Solo utenti e gruppi indicati

AllowUsers: marvinux sshuser@ip:port
AllowGroups: sistemostri
DenyUsers: luca fabio sshuser@ip:port
DenyGroups: sviluppatori

10. Forziamo algoritmi MAC forti

MAC, parlando di SSH, sta per Message Authentication Code.

E’ un algoritmo crittografico utilizzato per verificare e convalidare le trasmissioni di dati tra client e server. È importante impostare algoritmi MAC forti per garantire l’integrità e la riservatezza dei dati, che sono e restano sempre i due pilastri fondamentali della sicurezza informatica.

So che non ci avresti mai pensato ma nel file /etc/ssh/sshd_config

MACs hmac-sha1,hmac-sha2-256,hmac-sha2-512

Bonus

11. Monitoriamo gli accessi

È possibile monitorare l’attività. Consiglia di attivare questa funzione e impostarla a INFO in modo da registrare solo gli errori, i messaggi, le autenticazione tramite chiave, le attività di accesso e disconnessione degli utenti.

Ecco la riga che devi aggiungere al tuo file /etc/ssh/sshd_config

LogLevel INFO

12. Crowdsec

Mettere al sicuro le nostre installazioni esposte con Crowdsec resta sempre un’ottima idea per aggiungere un significativo livello di sicurezza basato sulla reputazione degli ip.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: