Come bloccare il tuo server SSH

Contenuti

SSH, che significa Secure Shell, non molto sicuro per impostazione predefinita, optando per l'autenticazione della password di base senza altri limiti. Se vuoi davvero bloccare il tuo server, dovrai fare più impostazioni.

Non consentire accessi con password: usa le chiavi SSH

La prima cosa da fare è eliminare completamente l'autenticazione della password e passare all'uso delle chiavi SSH. Le chiavi SSH sono una forma di crittografia a chiave pubblica; hai una chiave pubblica che funge da nome utente e una chiave privata che funge da password (tranne che questa password ha 2048 caratteri). La tua chiave privata è memorizzata sul tuo disco, ma è crittografato con una passphrase e ssh-agent. Quando accedi a SSH su un server, invece di chiedere la tua password, l'agente ssh si connette al server usando le sue chiavi.

Anche se stai già utilizzando le chiavi SSH, ti consigliamo di assicurarti che i tuoi accessi con password siano disabilitati, poiché i due non si escludono a vicenda.

IMPARENTATO: Che cos'è l'inoltro dell'agente SSH e come viene utilizzato??

Genera chiavi SSH

Puoi generare una nuova chiave SSH usando il tasto ssh-keygen utilità, installato di default sulla maggior parte dei sistemi Unix.

ssh-keygen

Questo ti chiederà una passphrase per crittografare il file della chiave locale. Non utilizzato per l'autenticazione con il server, ma deve essere tenuto segreto.

ssh-keygen salverà la tua chiave privata in ~/.ssh/id_rsae salverà anche la tua chiave pubblica in ~/.ssh/id_rsa.pub. La chiave privata rimane sul tuo disco rigido, ma la chiave pubblica deve essere caricata sul server in modo che il server possa verificare la tua identità e verificare che tu abbia il permesso di entrare in quel server.

Il server mantiene un elenco di utenti autorizzati, regolarmente immagazzinato in ~/.ssh/authorized_keys. Puoi aggiungere manualmente il tuo file chiave a questo file, oppure puoi usare il ssh-copy-id utilità:

ssh-copy-id -i ~/.ssh/id_rsa.pub utente@host

Sostituire user@host con il tuo nome utente e nome host del server. Ti verrà chiesto di accedere con la tua vecchia password ancora una volta, dopodiché non dovresti più essere richiesto e puoi disabilitare l'accesso con password.

Disabilita l'accesso con password SSH

Ora che puoi entrare nel server con le tue chiavi, puoi disabilitare completamente l'autenticazione della password. Assicurati che l'autenticazione basata su chiave funzioni o il tuo server verrà bloccato.

Sul server, aprire /etc/ssh/sshd_config nel tuo editor di testo preferito e trova la riga che inizia con:

#Autenticazione password

Vorrai decommentare questo (rimuovi l'hashtag) e cambiare “sì” un “no”:

PasswordAuthentication no

Quindi, Riavviare sshd insieme a:

systemctl restart sshd

Dovresti essere costretto a riconnetterti e, Se il file chiave non è corretto, Non verrà richiesta una password.

Se desideri, È inoltre possibile forzare l'autenticazione basata su chiave pubblica, che bloccherà tutti gli altri metodi di autenticazione. Aggiungi le seguenti righe a /etc/ssh/sshd_config:

AuthenticationMethods publickey
PubkeyAuthentication yes

e riavvia sshd.

IMPARENTATO: Che cos'è un file PEM e come viene utilizzato?

Blocca gli aggressori con denyhosts

denyhosts è un'utilità per evitare ripetuti tentativi di accesso falliti tramite SSH, equivalente a come il tuo telefono lo blocca dopo troppi tentativi. Non è installato di default, quindi dovrai installarlo dal gestore di pacchetti della tua distribuzione. Per sistemi basati su Debian come Ubuntu, sarebbe:

sudo apt-get install requirehosts -y

Una volta installato, abilitalo con:

sudo systemctl abilita negahosts

denyhosts dovrebbe funzionare automaticamente ora, ma ti consigliamo di inserire nella whitelist il tuo indirizzo IP nel caso venga bloccato. Puoi sempre riprovare da un indirizzo IP diverso, ma questo ti farà risparmiare qualche problema.

Aprire /etc/hosts.allow, e in fondo al file aggiungi:

sshd: il-tuo-indirizzo-ip

sostituzione your-ip-address insieme a il tuo indirizzo IP.

Predefinito, denyhosts andrà in crash dopo un tentativo fallito per gli utenti root e cinque tentativi falliti per altri utenti. Puoi cambiare questo comportamento modificando /etc/denyhosts.conf.

Se è stato accidentalmente bloccato, Devi fermarti denyhosts e rimuovere il tuo indirizzo IP da alcuni posti:

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

Ricomincia denyhosts e dovrebbe essere in grado di connettersi di nuovo.

Lista bianca di accesso SSH

Anche quando si forzano le chiavi SSH con denyhosts probabilmente è abbastanza sicurezza, puoi includere indirizzi IP specifici nella lista bianca. La maggior parte dei fornitori di server fornirà strumenti per farlo da un'interfaccia web. Se questa è un'alternativa, vorrai inserirlo nella whitelist da lì invece che dal server SSH, poiché sarai sempre in grado di modificare l'IP della whitelist nel caso in cui venga bloccato.

  Alterare le regole di ingresso.

Se non un'alternativa, dovrai configurare manualmente /etc/hosts.deny per bloccare tutto il traffico da host non autorizzati.

Una nota importante: Se includi la tua casa nella lista bianca, il tuo ISP potrebbe non fornirti un indirizzo IP statico e il tuo indirizzo IP può cambiare in qualsiasi momento. Dovrai assicurarti che ciò non accada prima di inserire nella lista nera tutti gli altri indirizzi IP, o aggiungi più indirizzi come backup, o semplicemente salta completamente questo passaggio.

Aprire /etc/hosts.allow e assicurati che il tuo indirizzo IP sia in archivio:

sshd: il-tuo-indirizzo-ip

Se è così, puoi andare avanti e rifiutare tutte le altre connessioni:

echo 'sshd: TUTTI' >> /etc/hosts.deny

Ricomincia sshd e dovresti vedere le tue modifiche.

In alternativa, imposta un proxy davanti al tuo server SSH

Se non vuoi esporre il tuo server SSH a Internet, ma è necessario accedervi da più indirizzi IP, puoi impostare un proxy davanti ad esso per gestire la connessione. Questo potrebbe essere un altro server cloud o anche una scatola che gira in casa tua..

Il server SSH deve essere configurato per accettare solo connessioni dal server proxy, e il server proxy dovrebbe accettare connessioni da qualsiasi luogo. Puoi configurare il server proxy come preferisci, ma anche un semplice connessione netcat funzionerà. Tieni presente che questo server proxy sarà l'unico punto di accesso per il tuo server SSH, quindi se il proxy smette di funzionare, verrà bloccato a meno che tu non abbia un indirizzo di backup.

Non consentire l'accesso come root

Anziché, crea un nuovo utente e concedi a quell'utente il privilegio sudo. effettivamente, Questo è lo stesso, ma ha una grande differenza: i potenziali aggressori dovranno conoscere il nome del tuo account utente per iniziare ad attaccare il tuo server, perché non sarà così semplice root@yourserver.

A parte la sicurezza, in generale è una buona politica Unix non accedere come root tutto il tempo, perché root non crea log e non richiede l'accesso a risorse protette.

Crea un nuovo utente sul tuo server SSH:

adduser myfancyusername

e imposta una password per quell'utente:

passwd myfancyusername

Non accederai con questa password perché continuerai a utilizzare le chiavi SSH, ma è obbligatorio. Idealmente, fallo in modo diverso dalla tua password di root.

Aggiungi questo utente a /etc/sudoers per concedere i permessi di amministratore:

echo 'myfancyusername ALL=(TUTTI) TUTTI' >> /ecc/sudoers

Passa a quell'utente con su myfancyusernamee verifica di poter tornare all'utente root con sudo su (non hai bisogno della password di root). Se puoi, avere accesso a sudo.

Ora vuoi bloccare il login di root. Sopra /etc/ssh/sshd_config, vorrai cambiare:

#PermitRootLogin si

Rimuovere l'hastag e modificare “sì” un “no”:

PermitRootLogin no

Ricomincia sshd e il tuo server dovrebbe bloccare tutte le richieste di accesso come root.

Configurare l'autenticazione a due fattori

Questo è certamente esagerato., ma se sei paranoico riguardo a qualcuno che si impossessa delle tue chiavi SSH private, puoi configurare il tuo server SSH per utilizzare 2FA.

Il modo più semplice per farlo è usare Google Authenticator con un dispositivo Android o iOS, anche se SSH supporta molti metodi a due fattori. Con Google Authenticator, ti verrà dato un codice QR che puoi scansionare dall'app mobile Google Authenticator per collegare il tuo telefono al server, e inoltre ti verranno forniti alcuni codici di backup da recuperare in caso di smarrimento del telefono. . Non memorizzare questi codici sulla macchina principale, caso opposto, non si tratta di due fattori.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.