SSH è uno dei metodi più comuni per accedere ai server remoti. SSH è anche uno dei motivi più comuni alla base dei server Linux compromessi.
Non fraintendermi. SSH (Secure Shell) è un protocollo abbastanza sicuro in base alla progettazione, ma ciò non significa che dovresti lasciarlo alla configurazione predefinita.
In questo articolo, condividerò alcuni modi pratici per migliorare la sicurezza SSH e quindi proteggere i tuoi server Linux.
Suggerimenti per la protezione di SSH sui server Linux
Non andare a seguire ciecamente tutti i suggerimenti per l'hardening SSH menzionati qui. Leggili tutti e poi vedi quali si adattano alle tue esigenze. Tieni inoltre presente che alcuni suggerimenti potrebbero non essere compatibili con altri.Ad esempio, se disabiliti l'accesso SSH basato su password, non è necessario utilizzare una soluzione di tipo Fail2Ban.
Se conosci le basi di SSH, sai che i file di configurazione SSH si trovano in /etc/ssh/sshd_config .
La maggior parte dei suggerimenti per rafforzare SSH menzionati qui richiederà la modifica di questo file di configurazione. Questo è il motivo per cui sarà una buona idea eseguire il backup del file originale. Dovrai anche riavviare il servizio SSH se apporti modifiche al file di configurazione SSH.
Vediamo quali passaggi puoi eseguire per proteggere il tuo server SSH.
1. Disabilita le password vuote
Sì. È possibile avere account utente in Linux senza password. Se quegli utenti tentano di utilizzare SSH, non avranno bisogno di password anche per accedere al server tramite SSH.
Questo è un rischio per la sicurezza. Dovresti vietare l'uso di password vuote. Nel file /etc/ssh/sshd_config, assicurati di impostare l'opzione PermitEmptyPasswords su no.
PermitEmptyPasswords no
2. Modifica le porte SSH predefinite
La porta SSH predefinita è 22 e la maggior parte dei controlli degli script di attacco sono scritti solo attorno a questa porta. La modifica della porta SSH predefinita dovrebbe aggiungere un ulteriore livello di sicurezza perché il numero di attacchi (in arrivo alla porta 22) potrebbe ridursi.
Cerca le informazioni sulla porta nel file di configurazione e cambiale in qualcosa di diverso:
Port 2345
Devi ricordare o annotare il numero di porta altrimenti potresti anche non accedere ai tuoi server con SSH.
3. Disabilita l'accesso come root tramite SSH
Ad essere onesti, l'utilizzo del server come root stesso dovrebbe essere proibito. È rischioso e non lascia tracce di controllo. Meccanismi come sudo esistono solo per questo motivo.
Se hai utenti sudo aggiunti al tuo sistema, dovresti usare quell'utente sudo per accedere al server tramite SSH anziché root.
Puoi disabilitare il login di root modificando l'opzione PermitRootLogin e impostandola come no:
PermitRootLogin no
4. Disabilita il protocollo ssh 1
Questo è se stai usando una distribuzione Linux precedente. Alcune versioni SSH precedenti potrebbero avere ancora il protocollo SSH 1 disponibile. Questo protocollo presenta vulnerabilità note e non deve essere utilizzato.
Le versioni SSH più recenti hanno automaticamente il protocollo SSH 2 abilitato, ma non è dannoso controllarlo due volte.
Protocol 2
5. Configura l'intervallo di timeout di inattività
L'intervallo di timeout di inattività è la quantità di tempo in cui una connessione SSH può rimanere attiva senza alcuna attività. Tali sessioni inattive rappresentano anche un rischio per la sicurezza. È una buona idea configurare l'intervallo di timeout di inattività.
L'intervallo di timeout è il conteggio in secondi e per impostazione predefinita è 0. Puoi cambiarlo in 300 per mantenere un intervallo di timeout di cinque minuti.
ClientAliveInterval 300
Dopo questo intervallo, il server SSH invierà un messaggio attivo al client. Se non riceve risposta, la connessione verrà chiusa e l'utente finale verrà disconnesso.
Puoi anche controllare quante volte invia il messaggio vivo prima di disconnettersi:
ClientAliveCountMax 2
6. Consenti l'accesso SSH solo agli utenti selezionati
Quando si tratta di sicurezza, dovresti seguire il principio del privilegio minimo. Non dare diritti quando non è richiesto.
Probabilmente hai diversi utenti sul tuo sistema Linux. È necessario consentire l'accesso SSH a tutti? Forse no.
Un approccio qui sarebbe quello di consentire l'accesso SSH a pochi utenti selezionati e quindi limitare per tutti gli altri utenti.
AllowUsers User1 User2
Puoi anche aggiungere utenti selezionati a un nuovo gruppo e consentire solo a questo gruppo di accedere a SSH.
AllowGroups ssh_group
Puoi anche utilizzare DenyUsers e DenyGroup per negare l'accesso SSH a determinati utenti e gruppi.
7. Disabilita l'inoltro X11
Il server di visualizzazione X11 o X è la struttura di base per un ambiente grafico. L'inoltro X11 ti consente di utilizzare un'applicazione GUI tramite SSH.
Fondamentalmente, il client esegue l'applicazione GUI sul server ma grazie all'inoltro X11, viene aperto un canale tra le macchine e le applicazioni GUI vengono visualizzate sulla macchina client.
Il protocollo X11 non è orientato alla sicurezza. Se non ne hai bisogno, dovresti disabilitare l'inoltro X11 in SSH.
X11Forwarding no
8. Mitiga automaticamente gli attacchi di forza bruta
Per contrastare gli attacchi SSH bruteforce, puoi utilizzare uno strumento di sicurezza come Fail2Ban.
Fail2Ban controlla i tentativi di accesso falliti da indirizzi IP diversi. Se questi tentativi non validi superano una soglia entro un determinato intervallo di tempo, impedisce all'IP di accedere a SSH per un determinato periodo di tempo.
È possibile configurare tutti questi parametri secondo i propri gusti e requisiti. Ho scritto una guida introduttiva dettagliata sull'utilizzo di Fail2Ban che dovresti leggere.
9. Disabilita l'accesso SSH basato su password
Non importa quanto ci provi, vedrai sempre tentativi di accesso sbagliati tramite SSH sul tuo server Linux. Gli aggressori sono intelligenti e gli script che usano spesso si prendono cura delle impostazioni predefinite di strumenti simili a Fail2Ban.
Per sbarazzarti dei continui attacchi di forza bruta, puoi optare per il solo accesso SSH basato su chiave.
In questo approccio, si aggiunge la chiave pubblica dei sistemi client remoti all'elenco delle chiavi conosciute sul server SSH. In questo modo, le macchine client possono accedere a SSH senza inserire la password dell'account utente.
Quando hai questa configurazione, puoi disabilitare l'accesso SSH basato su password. Ora, solo le macchine client che hanno le chiavi SSH specificate possono accedere al server tramite SSH.
Prima di adottare questo approccio, assicurati di aver aggiunto la tua chiave pubblica al server e che funzioni. In caso contrario, ti bloccherai e potresti perdere l'accesso al server remoto, specialmente se stai utilizzando un server cloud come Linode in cui non hai accesso fisico al server.
Leggi questo tutorial dettagliato per sapere come disabilitare l'autenticazione SSH basata su password.
10. Autenticazione a due fattori con SSH
Per portare la sicurezza SSH al livello successivo, puoi anche abilitare l'autenticazione a due fattori. In questo approccio, ricevi una password monouso sul tuo cellulare, e-mail o tramite un'app di autenticazione di terze parti.
Puoi leggere informazioni sull'impostazione dell'autenticazione a due fattori con SSH qui.
Conclusione
Puoi vedere tutti i parametri del tuo server SSH usando questo comando:
sshd -T
In questo modo, puoi facilmente vedere se è necessario modificare qualsiasi parametro per migliorare la sicurezza del server SSH.
Dovresti anche mantenere l'installazione SSH e il sistema aggiornati.
Ho elencato alcuni modi pratici per l'indurimento SSH. Naturalmente, ci possono essere molti altri modi per proteggere SSH e il tuo server Linux. Non è possibile elencarli tutti in un unico articolo.
Spero che questi suggerimenti ti siano utili. Fammi sapere quali suggerimenti ritieni utili.
Conosci altri suggerimenti sulla sicurezza SSH? Perché non condividerlo con noi nella sezione commenti?