Hardening del servizio SSH via Tor su sistemi Debian-like
🎯 Obiettivo
In questa terza parte della guida, implementeremo protezioni avanzate per blindare ulteriormente il nostro servizio SSH accessibile via Tor. Dopo aver eliminato l’accesso root e la password, ora configureremo:
- Firewall UFW per limitare l’accesso alla sola porta .onion
- Fail2Ban per prevenire attacchi brute-force anche su reti Tor
- Watchdog per Tor per garantire l’autoricupero in caso di crash
Questi strumenti forniranno una solida base di difesa in profondità, incrementando la resilienza del server a tentativi di intrusione.
⚡️ Richiede accesso root o sudo.
✅ Requisiti
- Parte 1 completata con successo.
- Parte 2 completata con successo.
🔒 1. Configurare il firewall UFW (Server)
⚠️ Importante: è consigliabile mantenere due sessioni SSH contemporanee durante questa configurazione: una attiva con privilegi root per eventuali correzioni, e l’altra per testare i nuovi accessi. Un errore nel firewall potrebbe bloccare l’accesso al sistema, anche via Tor.
Accesso attuale
In questa fase il server è accessibile tramite:
- IP (es.
ssh -i ~/.ssh/id_ed25519_stealth-ssh netsec@IP -p 2222
) – IP usato come esempio per comodità (es. 172.16.35.110) - .onion (es.
torsocks ssh -i ~/.ssh/id_ed25519_stealth-ssh -p 2222 netsec@fjiswfc5qssgycfnt4g4zrwt4k7rdi7ze4v5gxvdfwvk75dselqvezad.onion
) – indirizzo .onion di esempio utilizzato nella guida
Installazione
sudo apt install ufw -y
Politica predefinita (tutto bloccato)
sudo ufw default deny incoming
sudo ufw default allow outgoing
Consenti connessioni Tor locali (localhost)
sudo ufw allow from 127.0.0.1 to any port 2222 proto tcp
Abilita UFW
sudo ufw enable
sudo ufw status verbose
Dovresti vedere un output simile a questo:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
2222/tcp ALLOW IN 127.0.0.1
⚠️ Attenzione: Non aprire porte pubbliche! L’SSH deve rimanere accessibile solo da localhost (via Tor).
✅ Test di accesso consigliato
Dopo aver abilitato UFW, è fondamentale verificare che:
- L’accesso via IP venga bloccato:
ssh -i ~/.ssh/id_ed25519_stealth-ssh netsec@IP -p 2222
Dovrebbe restituire un errore di timeout o connessione rifiutata. - L’accesso via Tor .onion funzioni correttamente:
torsocks ssh -i ~/.ssh/id_ed25519_stealth-ssh -p 2222 netsec@fjiswfc5qssgycfnt4g4zrwt4k7rdi7ze4v5gxvdfwvk75dselqvezad.onion
Se entrambi i test hanno l’esito atteso, la configurazione è corretta.
🔐 2. Fail2Ban per SSH via .onion
Anche se l’accesso SSH è limitato a .onion, eventuali attacchi automatizzati o tentativi brute-force dall’interno della rete Tor sono ancora possibili. Fail2Ban monitora i log del demone sshd, anche se configurato su porta 2222, e può bloccare temporaneamente i client .onion dopo tentativi falliti.
Installazione
sudo apt install -y fail2ban
⚠️ Su Debian 12 imposta manualmente il backend a systemd per evitare errori:
Modifica /etc/fail2ban/jail.conf
:
sudo nano /etc/fail2ban/jail.conf
Trova la voce backend = auto
e cambiala in:
backend = systemd
Poi crea il file:
sudo nano /etc/fail2ban/jail.local
Inserisci:
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
findtime = 3600
bantime = 86400
banaction = ufw
Riavvia Fail2Ban
sudo systemctl restart fail2ban
Verifica lo stato di Fail2Ban
sudo systemctl status fail2ban.service
sudo fail2ban-client status
sudo fail2ban-client status sshd
Visualizza gli IP attualmente bannati
sudo fail2ban-client get sshd banned
Per sbloccare manualmente un IP
sudo fail2ban-client set sshd unbanip IP_DA_SBLOCCARE
🔄 Watchdog per Tor (obbligatorio)
Il servizio Tor è l’unico canale di accesso al server. Se si arresta inaspettatamente e non viene riavviato, perderai il controllo completo della macchina (salvo accesso diretto tramite console VPS o hypervisor). Per questo motivo, un watchdog è obbligatorio.
Creare uno script di monitoraggio
sudo nano /usr/local/bin/check-tor.sh
Contenuto:
#!/bin/bash
if ! systemctl is-active --quiet [email protected]; then
logger "Tor non è attivo, eseguo riavvio"
systemctl restart [email protected]
fi
Rendi lo script eseguibile:
sudo chmod +x /usr/local/bin/check-tor.sh
Servizio systemd
sudo nano /etc/systemd/system/check-tor.service
Contenuto:
[Unit]
Description=Controlla se Tor è attivo e lo riavvia se necessario
[Service]
Type=oneshot
ExecStart=/usr/local/bin/check-tor.sh
Timer systemd
sudo nano /etc/systemd/system/check-tor.timer
Contenuto:
[Unit]
Description=Controllo periodico del servizio Tor
[Timer]
OnBootSec=5min
OnUnitActiveSec=10min
Persistent=true
[Install]
WantedBy=timers.target
Attivazione
sudo systemctl daemon-reexec
sudo systemctl enable --now check-tor.timer
✅ Test del watchdog Tor
Per verificare il corretto funzionamento del watchdog:
Esegui da una sessione SSH via Tor:
sudo systemctl stop [email protected]
La connessione SSH verrà interrotta con un messaggio come:
client_loop: send disconnect: Broken pipe
Se provi a riconnetterti prima che il timer esegua il controllo:
Host unreachable (in socks5_recv_connect_reply() at socks5.c:539)
fjiswfc5qssgycfnt4g4zrwt4k7rdi7ze4v5gxvdfwvk75dselqvezad.onion [127.42.42.0] 2222 (?) : No route to host
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
Dopo l’intervallo previsto, se il watchdog è attivo, sarai nuovamente in grado di accedere:
torsocks ssh -i ~/.ssh/id_ed25519_stealth-ssh -p 2222 netsec@fjiswfc5qssgycfnt4g4zrwt4k7rdi7ze4v5gxvdfwvk75dselqvezad.onion
📁 Configurazione SSH client (opzionale)
Per evitare di dover specificare ogni volta la porta e la chiave con -p
e -i
, puoi configurare il file ~/.ssh/config
sul tuo client SSH.
🐧 Esempio per Linux/WSL (con torsocks)
Host tor-stealth
HostName fjiswfc5qssgycfnt4g4zrwt4k7rdi7ze4v5gxvdfwvk75dselqvezad.onion
Port 2222
User netsec
IdentityFile ~/.ssh/id_ed25519_stealth-ssh
ProxyCommand torsocks nc %h %p
Dopo la configurazione, potrai collegarti semplicemente con il comando:
ssh tor-stealth
🔧 Conclusione
Con queste configurazioni:
- Solo connessioni Tor potranno accedere a
sshd
- Tentativi di accesso non autorizzati saranno bannati
- Il servizio Tor sarà monitorato e riavviato automaticamente in caso di problemi
La tua macchina ora è un bastion host stealth, invisibile e inattaccabile dalla rete pubblica.