SSH (Secure Shell) è un protocollo che consente di creare una connessione verificata e privata, mettendo in sicurezza il canale tramite chiavi crittografiche, per lanciare una shell remota su un'altra macchina. Usando questa connessione, puoi eseguire comandi remoti, avviare trasferimenti di file sicuri, inoltrare socket, display e servizi e molto altro.
Prima della comparsa di SSH, la maggior parte dell'amministrazione remota veniva eseguita tramite telnet e, per essere onesti, una volta stabilita una sessione remota, potevi fare praticamente tutto ciò di cui hai bisogno. Il problema con questo protocollo era che il traffico viaggiava non crittografato come puro testo in chiaro. Non ci è voluto molto 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 al giorno d'oggi questo è più rilevante che mai, con tutti i server cloud amministrati da tutto il mondo.
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
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 simili a Linux e Unix. 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 prudenti, ma tendo ad apportare alcune modifiche per ottimizzare la mia esperienza SSH e proteggere i miei server da accessi non autorizzati.
1. Modifica la porta predefinita
Questo è quello che non tutti gli amministratori ricordano. Chiunque disponga di uno scanner di porte può scoprire una porta SSH anche dopo averla spostata, quindi difficilmente ti eliminerai dal pericolo, ma eviti convenientemente centinaia di script non sofisticati lanciati contro il tuo server. È un favore che puoi farti eliminare una buona quantità di rumore dai tuoi registri.
Per questo articolo, avevo una porta predefinita del server SSH TCP 22 su un provider cloud e gli attacchi medi al minuto erano 24. Dopo aver modificato la porta in 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 di Port
da 22 a un numero maggiore di 1024. La riga può essere commentata perché 22 è l'impostazione predefinita (quindi non è necessario dichiararla 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ò autenticarsi utilizzando chiavi asimmetriche, quindi non c'è bisogno di ricordare password complesse, tanto meno di ruotarle ogni pochi mesi, o temere che qualcuno stesse "navigando a spalla" mentre stavi stabilendo la tua sessione remota. L'uso delle chiavi SSH consente di accedere alle apparecchiature remote in modo rapido e sicuro. Questo spesso significa meno tempo per l'elaborazione di nomi utente e password errati per il server stesso. Il login è piacevolmente semplice. Quando non c'è chiave, non c'è voce, nemmeno un prompt.
Per utilizzare questa funzione, devi configurare sia il client (il computer fisicamente di fronte a te) che il server (la macchina remota).
Sul computer client, è necessario generare una coppia di chiavi SSH. Questa è composta da una chiave pubblica e una privata. Come suggeriscono i loro nomi, una chiave è per te da distribuire ai server a cui desideri accedere e l'altra è privata e deve essere condivisa con nessuno. Crea una nuova chiave con ssh-keygen
comando e usa il -t
opzione per specificare una buona libreria di crittografia 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 viene chiesto di nominare il file. Puoi premere Invio per accettare l'impostazione predefinita. Se dovessi creare più chiavi in futuro, puoi assegnare a ciascuna un nome personalizzato, ma avere più chiavi significa specificare quale chiave vuoi usare per ogni interazione, quindi per ora accetta solo 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 sia in grado di utilizzarla senza la tua passphrase. È un'utile protezione per alcune chiavi, mentre non è appropriato per altre (soprattutto quelle utilizzate negli script). Premi Invio per lasciare la tua chiave senza passphrase o creare una passphrase se lo desideri.
Per copiare la tua chiave su un server, utilizza il ssh-copy-id
comando. Ad esempio, se possiedo un server denominato example.com
, quindi posso copiarvi la mia chiave pubblica con questo comando:
$ ssh-copy-id [email protected]
Questo crea o modifica il file authorized_keys
nel .ssh
del server directory con la tua chiave pubblica.
Una volta che il ssh-copy-id
comando ha confermato ciò che è stato fatto, prova ad accedere dal tuo computer per verificare che puoi accedere senza una password (o con la passphrase della tua chiave se scegli di usarne una).
Una volta che sei sul tuo server senza utilizzare la password del tuo account server, modifica il sshd_config
del server e imposta PasswordAuthentication
a no
.
PasswordAuthentication no
Riavvia ssh
servizio 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 sudo
comando per aumentare i privilegi come richiesto. Ciò impedisce a un obiettivo (root) notevole e dolorosamente ovvio di attacchi con script semplici ma fin troppo comuni.
Allo stesso modo, una funzionalità 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 sshd_config
file nel tuo editor di testo preferito e aggiungi una riga come questa:
AllowUsers jgarrido jane tux
Riavvia 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 funzioni e opzioni che puoi attivare o disattivare all'interno di sshd_config
e ci sono molte fantastiche applicazioni come Fail2ban che puoi utilizzare per salvaguardare ulteriormente il tuo servizio SSH.