SSH server
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: