GNU/Linux >> Linux Esercitazione >  >> Linux

Come migliorare la sicurezza SSH su Ubuntu 18.04

Il servizio SSH è il principale punto di accesso al tuo Cloud Server e, allo stesso tempo, uno dei servizi più esposti agli attacchi. Questa guida ti aiuterà a migliorare la sicurezza del servizio grazie a diversi trucchi e tecniche.

Cambiare la porta di ascolto

La porta predefinita per l'ascolto della connessione SSH è 22:la modifica di questa impostazione consentirà di cloudare il servizio e aumentare la sicurezza della connessione.

Per evitare interferenze con altri servizi esistenti sulla macchina, è buona norma controllare quali porte sono attualmente in uso, utilizzando il comando netstat:

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

Attraverso il parametro -l passato a netstat, forzalo a stampare tutte le connessioni che sono nello stato LISTEN. In questo esempio vengono utilizzate le seguenti porte:

  • Servizio MySQL 3306

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

Per cambiare le porte, basta modificare il file di configurazione in /etc/ssh/sshd_config, decommentando la direttiva Port:

#Port 22

Quindi imposta un nuovo valore, possibilmente alto, per evitare che venga intercettato da qualsiasi software di scansione automatica delle porte (ad esempio 2200, 5574, 1022):

Port 5574

Per applicare la modifica, carica il servizio tramite:

$ sudo service sshd reload

. Mantieni attiva la connessione utilizzando reload in modo da correggere eventuali errori e verificare eventuali nuovi accessi con un altro client SSH

Una volta applicata la modifica, connettiti al tuo server specificando la nuova porta. Ad esempio, se stai utilizzando il client SSH dalla riga di comando:

$ ssh [email protected]<SERVER.IP> -p 5574

Utilizzo delle chiavi per l'autenticazione

Ampiamente utilizzato per la sua sicurezza, l'accesso tramite chiavi RSA è un'alternativa all'accesso basato su password. In questo tipo di autenticazione, il client genera una chiave privata e la relativa chiave pubblica che viene installata sulla macchina server per autenticare inequivocabilmente il client. .

Per installare la chiave pubblica, il client deve prima generare la coppia di chiavi utilizzando il comando ssh-keygen:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Prima di procedere con la generazione, ssh-keygen richiede una passphrase opzionale che può essere utilizzata per l'autenticazione. In questo esempio per facilitare l'accesso il seguente file è stato lasciato vuoto.

Una volta terminato, il software salverà due file nell'apposito :

  • id_rsa:la chiave privata del client, da non condividere con nessuno.

  • id_rsa.pub:la chiave pubblica condivisibile .

Per preparare l'ambiente server, crea un file chiamato authorized_keys nella cartella .ssh all'interno della cartella utente che utilizzerai per il login:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Assicurati che il file abbia i permessi di cui sopra .

Procedi quindi incollando la chiave pubblica precedentemente preparata dalla macchina client:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd [email protected]

Salva il file e ricarica il servizio SSH:

$ sudo service sshd reload

A questo punto dovrebbe essere possibile accedere al server senza che venga richiesta alcuna password:

$ ssh [email protected]<SERVER.IP>

Se tutto funziona correttamente, disabilitare l'accesso con password dalla macchina server modificando il file /etc/ssh/sshd_config, con i seguenti parametri:

ChallengeResponseAuthentication no
    PasswordAuthentication no

Ricorda che puoi aggiungere altre chiavi pubbliche semplicemente salvandole alla fine del file ~ / .ssh / file authorized_keys nella macchina server.

Limitazione dei tempi di disponibilità del servizio

Una strategia per ridurre gli accessi indesiderati e gli attacchi di forza bruta consiste nel ridurre i tempi di disponibilità del servizio SSH. Se sei sicuro di non aver bisogno di collegarti al server in determinati orari (ad esempio dalle 23:00 alle 08:00 del giorno successivo), imposta una pianificazione automatica per bloccare la porta di connessione.

Per farlo, usa il firewall di default chiamato iptables, ma, prima di procedere con la configurazione, ricorda che iptables, per sua natura, non salva la configurazione inserita.

Per salvare e caricare la configurazione più velocemente, usa il pacchetto iptables-persistent, che ricarica la configurazione salvata all'avvio del sistema.

Quindi continua a installare il pacchetto:

$ sudo apt-get install iptables-persistent

Dopo aver completato la sua installazione, inserisci una "catena" per bloccare il servizio SSH:

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

In questo modo, tutte le connessioni destinate alla porta 22 (se il tuo servizio SSH utilizza un'altra porta, cambia questo valore) passeranno attraverso la catena "chain-ssh" appena creata.

Salva la configurazione corrente (che verrà caricata da iptables-persistent) con il comando:

$ sudo iptables-save > /etc/iptables/rules.v4

Quindi crea una pianificazione temporale per inserire ed eliminare la regola sulla catena modificando crontab come segue:

$ sudo crontab -e
    
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

Come puoi vedere, con la prima operazione si aggiunge una regola DROP delle connessioni alle 23.00, mentre la seconda operazione svuota la catena alle 08.00 per ripristinare il servizio.

Salva il file per applicare le modifiche.


Linux
  1. Come configurare l'accesso SSH senza password

  2. Come generare una coppia di chiavi SSH (con esempi)

  3. Come impostare le chiavi SSH

  4. Come configurare le chiavi SSH su Ubuntu 16.04

  5. Come configurare le chiavi SSH su Ubuntu 18.04

Come creare una passphrase chiave SSH in Linux

Come abilitare il server SSH su Ubuntu 22.04

Come modificare la porta SSH in Ubuntu

Come aggiungere la chiave pubblica SSH al server

Come cambiare la porta SSH su Ubuntu?

Come installare Ansible su Ubuntu 18.04