Poiché l'accesso SSH è il punto di accesso più importante per l'amministrazione del server, è diventato un vettore di attacco ampiamente utilizzato.
I passaggi di base per proteggere SSH includono: disabilitare l'accesso root, disattivare del tutto l'autenticazione della password (e utilizzare invece le chiavi) e cambiare le porte (poco a che fare con la sicurezza tranne minimizzare gli scanner delle porte comuni e registrare lo spam).
Il prossimo passo sarebbe una soluzione firewall PF con tracciamento della connessione. Questa soluzione gestirà gli stati di connessione e bloccherebbe qualsiasi IP che abbia troppe connessioni. Funziona benissimo ed è molto facile da fare con PF, ma il demone SSH è ancora esposto a Internet.
Che ne dici di rendere SSH completamente inaccessibile dall'esterno? È qui che entra in gioco spiped . Dalla homepage:
Spiped (pronunciato "ess-pipe-dee") è un'utilità per creare pipe crittografate e autenticate simmetricamente tra gli indirizzi socket, in modo che uno possa connettersi a un indirizzo (ad esempio un socket UNIX su localhost) e avere una connessione stabilita in modo trasparente con un altro indirizzo (ad es. un socket UNIX su un sistema diverso). È simile alla funzionalità 'ssh -L', ma non utilizza SSH e richiede una chiave simmetrica precondivisa.
Grande! Fortunatamente per noi, ha un pacchetto OpenBSD di alta qualità che fa tutto il lavoro di preparazione per noi, quindi possiamo iniziare installandolo:
sudo pkg_add spiped
Questo installa anche un bel script di inizializzazione per noi, così possiamo andare avanti e abilitarlo:
sudo rcctl enable spiped
E finalmente avviarlo:
sudo rcctl start spiped
Lo script init si assicura che la chiave venga creata per noi (di cui avremo bisogno su un computer locale tra poco).
Ciò che dobbiamo fare ora è disabilitare l' sshd
ascolto su un indirizzo pubblico, bloccare la porta 22 e consentire la porta 8022 (che viene utilizzata per impostazione predefinita nello script init spiped).
Apri il /etc/ssh/sshd_config
file e modifica (e decommenta) la ListenAddress
riga da leggere 127.0.0.1
:
ListenAddress 127.0.0.1
Se stai usando le regole PF per il blocco delle porte, assicurati di passare la porta 8022 (e puoi lasciare la porta 22 bloccata), ad esempio:
pass in on egress proto tcp from any to any port 8022
Assicurati di ricaricare le regole per renderlo attivo:
sudo pfctl -f /etc/pf.conf
Ora tutto ciò di cui abbiamo bisogno è copiare la chiave generata ( /etc/spiped/spiped.key
) generata dal server su un computer locale e regolare la nostra configurazione SSH, seguendo le seguenti linee:
Host HOSTNAME
ProxyCommand spipe -t %h:8022 -k ~/.ssh/spiped.key
È necessario aver spipe/spiped
installato anche su un computer locale, ovviamente. Se hai copiato la chiave e modificato i nomi / percorsi, dovresti riuscire a connetterti con quella ProxyCommand
linea nel tuo ~/.ssh/config
file.
Dopo aver verificato che funziona, possiamo riavviare sshd
su un server:
sudo rcctl restart sshd
E questo è tutto! Ora hai eliminato completamente un vettore di attacco di grandi dimensioni e hai un servizio in meno in ascolto su un'interfaccia pubblica. Le connessioni SSH ora dovrebbero apparire come provenienti da localhost, ad esempio:
username ttyp0 localhost Thu Nov 06 07:58 still logged in
Un vantaggio nell'uso di Vultr è che ogni VPS Vultr offre un bel client di tipo VNC online disponibile che possiamo usare nel caso in cui ci blocchiamo accidentalmente. Sperimenta via!