5 Steps per mettere al sicuro Linux
In questo post mostrerò come con 5 piccole procedure poter mettere in sicurezza il tuo ambiente linux (e proteggerlo dagli hacker).
Step 1. Abilitare aggiornamenti automatici (opzionale)
Uno dei fondamenti è quello di avere sempre un ambiente aggiornato periodicamente per essere protetti da gran parte delle possibili falle che possono annidarsi, di solito per eserienza non consiglio di permettere al tuo ambiente di aggiornarsi automaticamente, è sempre buona cosa e giusta sapere cosa viene installato, anche per poter risolvere senza troppo impegno problemi relativi a le varie fix e pacchetti.
I comandi usati in questo caso per procedere all’aggiornamento manuale sono i seguenti:
1
2
apt update
apt dist-upgrade
Se invece non abbiamo troppa voglia e non vogliamo stare troppo tempo a mantenere questo aspetto è possibile automatizzarlo con i seguenti comani:
1
2
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
Step 2. Creare Utente con privilegi limitati
Entrare in un server con utente root o con gli stessi privilegi non è assolutamente consigliato, anche se spesso necessitiamo di avere gli stessi privilegi per effettuare determinate attività. In questo caso creiamo una nuova utenza:
1
adduser <nome user>
ti chiederà di definire una password e altri valori per la profilazione.
Dobbiamo aggiungere l’utenza appena creata nel gruppo sudo in modo da permettergli l’utilizzo dei privilegi di root:
1
usermod -aG sudo <nome user>
autenticarsi con quest’ultima nell’ambiente, per poter richiamare i comandi con i privilegi di root dobbiamo aggiungere il sudo davanti ad ogni comando che lo richiede es:
1
sudo adduser
Step 3. Passwords are for Suckers
Le password possono essere violate, anche se sono formate da 30 caratteri e diversi simboli, perfino da degli attacchi di brute force magari, perchè correre questo rischio? quindi cacciamoci questo pensiero creando un authentication key pair.
Nella home della nostra utenza andremo a definire il luogo dove metteremo al sicuro la nostra chiave pubblica (pensatela come ad un lucchetto):
1
mkdir ~/.ssh && chmod 700 ~/.ssh
ora creeremo su Windows le due chiavi, pubblica e privata. Attraverso la powershell digitiamo
1
ssh-keygen -b 4096
Consiglio di generarla con la crittografia
ed25519
questo perchè: più veloce da generare e verificare, più sicura e più resistente da possibili attacchi hash-function collision attacks (tipo di attacco dove con dei tentativi si cerca di trovare due o più input diversi che producano lo stesso valore di hash quando vengono elaborati dalla stessa funzione di hash.) le chiavi sono più piccole di grandezza (quindi più facili da trasferire copiare/incollare)
1
ssh-keygen -t ed25519
verrà richiesto il path dove verranno create (es. C:\Users\utente.ssh\id_rsa (se in rsa o id_ed25519) e la definizione di una frase d’accesso (una password) per poter utilizzare la chiave e accederci
una volta che le nostre due chiavi sono state create, copiamo il nostro lucchetto nella directory precedentemente creata sulla macchina che vogliamo proteggere
1
scp $env:USERPROFILE/.ssh/id_rsa.pub <nomeutente>@<ipdellamacchina>:~/.ssh/authorized_keys
o
1
ssh-copy-id -i ~/.ssh/id_ed25519.pub [nomeutente]@[ipdellamacchina]
Step 4. Irrobustire la Login SSH
Per poter abilitare esclusivamente il login con queste chiavi (e non più autenticarsi attraverso la password) dobbiamo andare a modificare dei parametri presenti in questo file:
/etc/ssh/sshd_config
oltre ad abilitare l’autenticazione da chiave pubblica andremo a modificare dei parametri che è consigliato cambiare, in primis la porta che utilizziamo per l’accesso al server:
1
Port 22
dato che è un numero di porta standard e tutti la conoscono! cambiatelo con un numero più alto es. 700 cercando di non utlizzare una possibile porta in uso (è consigliato non scegliere una porta superiore a 1024, l’SSH su una porta non-privilegiata (quindi qualsiasi porta >= 1024) comporta un rischio di sicurezza. Questo perchè ogni utente non-root è capace di aprire porte dalla 1024 in su)
L’altro parametro da modificare è poco sotto:
1
AddressFamily inet
da cambiare da any a inet
, questo farà sì che l’accesso sarà limitato soltanto al protocollo ip ipv4 (per adesso ancora non utilizzeremo il protocollo ipv6)
Altro parametro cruciale è levare il permesso di login con root
1
PermitRootLogin no
Ora è arrivato il turno di disabilitare l’accesso attraverso la password
1
PasswordAuthentication no
non rimane altro che salvare le modifiche appena approntate e riavviare il servizio sshd sulla macchina:
1
sudo systemctl restart sshd
in questo modo quando andremo ad autenticarci (ricordate che avete cambiato la porta ssh standard dobbiamo specificarlo aggiungendo un semplice parametro)
1
ssh [nome utente]@[ip del server] -p [porta ssh definita]
ci verrà chiesto per entrare di inserire la passphrase (se durante la creazione della chiave ne avete definita una).
Step 5. FIREWALL
Ci rimane solo di costruire una bella cinta muraria a protezione del nostro insediamento ehm.. al nostro server… prima controlliamo le porte che i nostri servizi esporranno
1
sudo ss -tupln
(è probabile che come output avrete una lista con diverse porte, controllate/cercate su internet per avere maggiori informazioni sulle porte che visualizzerete e a che servizio possano essere collegate)
andremo ad installare un firewall per gestire le iptables in maniera semplificata chiamato ufw
: Uncomplicated Firewall
1
sudo apt install ufw
con il comando
1
sudo ufw status
verificheremo che i nostri cancelli siano aperti e prima di tirare su le difese definiamo correttamente almeno la regola per poter accedere alla macchina in modo di non rimanere bloccati fuori dall’ambiente:
di seguito inserirò dei comandi utili per definire diverse possibilità di definizione della regole su la nostra porta definita per l’accesso ssh o su un possibile servizio erogato dalle due porte http e https:
1
2
3
sudo ufw allow 700
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
o
1
sudo ufw allow from <ip/subnet mask> to <ip> port 700
con la regola del deny
andremo a fare l’opposto della regola di allow
, impediremo il traffico
più sarà definita con maggiore precisione e più sarà “controllato” e limitato l’accesso per la porta/ip specificato
vi ricordo di dichiarare le regole con delle priorità e con un ordine, se dovete bloccare con il deny indirizzi specifici è corretto metterlo in cima alle regole precedentemente dichiarate
1
sudo ufw insert 1 deny from 192.168.1.0
per vedere le regole a quali numeri fanno riferimento
1
sudo ufw status numbered
per poter limitare anche una determinata porta (es. la porta scelta per l’ssh in modo da proteggerci da possibili attacchi brute force) possiamo usare la seguente regola:
1
sudo ufw limit 700
cosi facendo avremo la possibilità di autenticarci 6 volte nei 30 secondi a disposizione, la settima volta verremo bloccati.
una volta definite correttamente tutte le regole non rimane che tirare su le nostre difese:
1
sudo ufw enable
sicuramente c’è tanto da dire sulla definizione delle regole firewall cercherò di ampliare l’argomento prossimamente.