3 modi in cui configuro SSH per la privacy
Ecco come ottimizzo la mia esperienza SSH e proteggo i miei server da accessi non autorizzati.
SSH (Secure Shell) è un protocollo che consente di creare una connessione verificata e privata, proteggendo il canale utilizzando chiavi crittografiche, per avviare una shell remota su un'altra macchina. Utilizzando questa connessione è possibile eseguire comandi remoti, avviare trasferimenti sicuri di file, inoltrare socket, display e servizi e molto altro ancora.
Prima della comparsa di SSH, la maggior parte dell'amministrazione remota veniva eseguita tramite telnet e, ad essere onesti, una volta stabilita una sessione remota, potevi fare praticamente tutto ciò di cui avevi bisogno. Il problema con questo protocollo era che il traffico viaggiava non crittografato come puro testo in chiaro. Non ci è voluto molto sforzo per utilizzare uno sniffer di traffico per vedere tutti i pacchetti all'interno di una sessione, compresi quelli contenenti un nome utente e una password.
Con SSH, grazie all'utilizzo di chiavi asimmetriche, le sessioni tra gli apparati coinvolti nella comunicazione vengono crittografate. E oggigiorno questo è più rilevante che mai, con tutti i server cloud amministrati da tutto il mondo.
3 suggerimenti per la configurazione SSH
L'implementazione più comune del protocollo SSH è OpenSSH, sviluppato dal progetto OpenBSD e disponibile per la maggior parte dei sistemi operativi Linux e Unix-like. Una volta installato questo pacchetto, hai un file chiamato sshd_config
che controlla la maggior parte del comportamento del servizio. Le impostazioni predefinite sono generalmente molto conservatrici, ma tendo ad apportare alcune modifiche per ottimizzare la mia esperienza SSH e proteggere i miei server da accessi non autorizzati.
1. Modificare la porta predefinita
Questo è quello che non tutti gli amministratori ricordano. Chiunque abbia uno scanner di porte può scoprire una porta SSH anche dopo averla spostata, quindi difficilmente ti eviterai dal pericolo, ma eviterai comodamente centinaia di script non sofisticati lanciati contro il tuo server. È un favore che puoi fare a te stesso eliminare una buona quantità di rumore dai tuoi registri.
Per questo articolo, avevo una porta TCP 22 predefinita del server SSH su un provider cloud e la media degli attacchi al minuto era 24. Dopo aver cambiato la porta con un numero molto più alto, TCP 45678, la media delle persone che si connettono e indovinano qualsiasi nome utente o la password era due al giorno.
Per modificare la porta predefinita per SSH, apri /etc/ssh/sshd_config
nel tuo editor di testo preferito e modifica il valore della Porta
da 22 a un numero maggiore di 1024. La riga potrebbe essere commentata perché 22 è il valore predefinito (quindi non è necessario dichiararlo esplicitamente nella configurazione), quindi decommenta la riga prima di salvare.
#Port 22122
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Dopo aver modificato la porta e salvato il file, riavvia il server SSH:
$ sudo systemctl restart sshd
2. Niente più password
C'è un movimento generale per smettere di usare le password come mezzo di autenticazione, con metodi come l'autenticazione a due fattori che stanno guadagnando popolarità. OpenSSH può eseguire l'autenticazione utilizzando chiavi asimmetriche, quindi non è necessario ricordare password complesse, tanto meno ruotarle ogni pochi mesi, o temere che qualcuno stesse "navigando sulle spalle" mentre stavi stabilendo la sessione remota. L'uso delle chiavi SSH ti consente di accedere alle tue apparecchiature remote in modo rapido e sicuro. Ciò spesso significa meno tempo per l'elaborazione di nomi utente e password errati per il server stesso. L'accesso è piacevolmente semplice. Quando non c'è la chiave, non c'è alcuna voce, nemmeno un messaggio.
Per utilizzare questa funzionalità è necessario configurare sia il client (il computer fisicamente di fronte a voi) che il server (la macchina remota).
Sul computer client è necessario generare una coppia di chiavi SSH. Questo è costituito da una chiave pubblica e da una privata. Come suggerisce il nome, una chiave deve essere distribuita ai server a cui desideri accedere e l'altra è privata e non deve essere condivisa con nessuno. Crea una nuova chiave con il comando ssh-keygen
e utilizza l'opzione -t
per specificare una libreria di crittografia valida e recente come ed25519
:
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
Durante la creazione della chiave, ti verrà richiesto di nominare il file. Puoi premere Invio per accettare l'impostazione predefinita. Se in futuro dovessi creare più chiavi, puoi assegnare a ciascuna un nome personalizzato, ma avere più chiavi significa specificare quale chiave desideri utilizzare per ciascuna interazione, quindi per ora accetta semplicemente l'impostazione predefinita.
Puoi anche dare alla tua chiave una passphrase. Ciò garantisce che anche se qualcun altro riesce a ottenere la tua chiave privata (cosa che di per sé non dovrebbe mai accadere), non sarà in grado di utilizzarla senza la tua passphrase. È una protezione utile per alcune chiavi, mentre non è appropriata per altre (specialmente quelle utilizzate negli script). Premi Invio per lasciare la chiave senza passphrase o creare una passphrase, se lo desideri.
Per copiare la tua chiave su un server, utilizza il comando ssh-copy-id
. Ad esempio, se possiedo un server chiamato example.com
, posso copiarvi la mia chiave pubblica con questo comando:
$ ssh-copy-id jgarrido@example.com
Ciò crea o modifica il file authorized_keys
nella directory .ssh
del server con la tua chiave pubblica.
Una volta che il comando ssh-copy-id
ha confermato l'operazione, prova ad accedere dal tuo computer per verificare di poter accedere senza password (o con la passphrase della chiave se scegli di usarne una) .
Una volta che sei sul tuo server senza utilizzare la password del tuo account server, modifica sshd_config
del server e imposta PasswordAuthentication
su no
.
PasswordAuthentication no
Riavvia il servizio ssh
per caricare la nuova configurazione:
$ sudo systemctl restart sshd
3. Decidi chi può accedere
La maggior parte delle distribuzioni non consente all'utente root di accedere tramite SSH, il che garantisce che siano attivi solo gli account non privilegiati, utilizzando il comando sudo
per aumentare i privilegi come richiesto. Ciò impedisce a un obiettivo notevole e dolorosamente ovvio (root) di attacchi basati su script semplici ma fin troppo comuni.
Allo stesso modo, una caratteristica semplice e potente di OpenSSH è la capacità di decidere quali utenti possono accedere a una macchina. Per impostare a quali utenti viene concesso l'accesso SSH, apri il file sshd_config
nel tuo editor di testo preferito e aggiungi una riga come questa:
AllowUsers jgarrido jane tux
Riavviare il servizio SSH per caricare le nuove opzioni di configurazione.
Ciò consente solo ai tre utenti (jgarrido, jane e tux) di accedere o eseguire qualsiasi operazione sulla macchina remota.
Pensieri finali
Puoi utilizzare OpenSSH per implementare un server SSH forte e robusto. Queste erano solo tre opzioni utili per rafforzare la tua installazione. Tuttavia, ci sono tantissime funzionalità e opzioni che puoi attivare o disattivare nel file sshd_config
e ci sono molte fantastiche applicazioni come Fail2ban che puoi utilizzare per salvaguardare ulteriormente il tuo servizio SSH.