Salta al contenuto principale

L'Accesso da Remoto Sicuro (SSH)

Inviato da tuxsa il
ssh

Ben tornati nella nostra serie. Dopo aver configurato le fondamenta della sicurezza, oggi approfondiamo l'accesso remoto sicuro via SSH, essenziale per gestire il nostro server da qualsiasi luogo in modo protetto.

Obiettivo della puntata: Configurare SSH per un accesso remoto massimamente sicuro, utilizzando autenticazione a chiavi crittografiche, porte non standard e tecniche avanzate di hardening.

1. Perché rafforzare SSH è cruciale

SSH (Secure Shell) è il metodo principale per accedere al server da remoto, ma è anche un obiettivo comune per attacchi brute force. Ecco perché dobbiamo renderlo il più sicuro possibile:

  • Gli attacchi brute force a SSH sono tra i più comuni su Internet

  • Un accesso SSH compromesso significa controllo completo del server

  • Configurazioni predefinite spesso non sono sufficientemente sicure

2. Autenticazione a chiavi crittografiche

L'autenticazione con chiavi è molto più sicura delle password. Ecco come configurarla:

Generare una coppia di chiavi (sul client):

  1. Su Linux/macOS: Aprire un terminale e digitare:

    ssh-keygen -t ed25519 -a 100 -C "commento per identificare la chiave"
  2. Su Windows (con WSL o Git Bash): Stesso comando

  3. Scegliere una passphrase complessa quando richiesto (non lasciare vuota)

Copiare la chiave pubblica sul server:

  1. Metodo semplice con ssh-copy-id:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub il_tuo_utente@indirizzo_server
  2. Metodo manuale (se ssh-copy-id non funziona):

    cat ~/.ssh/id_ed25519.pub | ssh il_tuo_utente@indirizzo_server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Disabilitare l'autenticazione via password (sul server):

  1. Modificare il file di configurazione SSH:

    sudo nano /etc/ssh/sshd_config
  2. Trovare e modificare queste linee:

    PasswordAuthentication no
    PubkeyAuthentication yes
  3. Riavviare il servizio SSH: sudo systemctl restart ssh

  4. Importante: Verificare di poter accedere con le chiavi prima di chiudere la sessione corrente

3. Cambiare la porta SSH

Cambiare la porta SSH standard (22) riduce notevolmente gli attacchi automatici:

  1. Modificare il file di configurazione:

    sudo nano /etc/ssh/sshd_config
  2. Trovare la linea #Port 22 e modificarla in:

    Port 2222  # Scegliere una porta tra 1024 e 65535
  3. Aggiornare il firewall per permettere la nuova porta:

    sudo ufw allow 2222/tcp
    sudo ufw deny ssh  # Blocca la porta 22
  4. Riavviare SSH: sudo systemctl restart ssh

  5. Per connettersi alla nuova porta:

    ssh -p 2222 il_tuo_utente@indirizzo_server

Nota: Cambiare porta non è sicurezza tramite oscuramento, ma riduce drasticamente il rumore nei log dagli attacchi automatici.

4. Configurazione avanzata di SSH

Altre importanti opzioni di sicurezza nel file /etc/ssh/sshd_config:

# Disabilita login root
PermitRootLogin no

# Limita gli utenti che possono connettersi via SSH
AllowUsers il_tuo_utente altro_utente_autorizzato

# Numero massimo di tentativi di login
MaxAuthTries 3

# Timeout per login lenti
LoginGraceTime 30

# Disabilita forwarding X11 (a meno non serva)
X11Forwarding no

# Disabilita altri forwarding non necessari
AllowTcpForwarding no
AllowStreamLocalForwarding no

# Configurazione cifrari, MAC e algoritmi di scambio chiave
KexAlgorithms curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

5. Utilizzare un client SSH configurato correttamente

Anche il client deve essere configurato per la massima sicurezza:

Configurazione del client SSH (~/.ssh/config):

Host myserver
    HostName indirizzo_ip_server
    Port 2222
    User il_tuo_utente
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

Dopo questa configurazione, potrete connettervi semplicemente con: ssh myserver

6. Monitoraggio e mantenimento

Dopo aver configurato SSH, è importante monitorarne gli accessi:

  1. Controllare i log di autenticazione:

    sudo grep "ssh" /var/log/auth.log | tail -20
  2. Verificare gli accessi correnti:

    who
    last
  3. Controllare lo stato di fail2ban per SSH:

    sudo fail2ban-client status sshd

7. Accesso tramite smartphone

Per accedere al server dallo smartphone:

  • Android: App Termux o ConnectBot

  • iOS: App Termius o Prompt

  • Importare la chiave privata nell'app scelta

  • Utilizzare sempre connessioni sicure (evitare reti Wi-Fi pubbliche non affidabili)

Consiglio avanzato: Per accesso ancor più sicuro, considerare l'uso di un bastion host o VPN, che affronteremo in una puntata futura.

Prepariamoci per la prossima puntata

Ora il nostro SSH è fortificato contro la maggior parte degli attacchi. Nel prossimo articolo parleremo di reverse proxy con Nginx, che ci permetterà di:

  • Esporre servizi web in modo sicuro

  • Utilizzare certificati SSL per cifrare il traffico

  • Nascondere i servizi interni sulla rete

  • Bilanciare il carico tra più servizi

Problemi con SSH?

Lascia un commento qui sotto con le tue difficoltà, ti aiuterò a risolverle!


Prossima puntata: Reverse Proxy con Nginx - Esporre servizi web in sicurezza

Non dimenticare di iscriverti alla newsletter per non perdere le prossime puntate!