Hardening per l’infrastruttura di un nodo Tor
In questa seconda parte della guida ci concentriamo sul rafforzamento della sicurezza del sistema Debian 12 che ospiterà il nodo Tor. Nella Parte 1 – Preparare l’ambiente per un nodo Tor sicuro abbiamo visto come predisporre il sistema in modo corretto; ora ci occuperemo delle configurazioni necessarie a ridurre la superficie d’attacco e migliorare la resilienza complessiva del nodo. Implementeremo misure difensive a livello di rete e configurazione per ridurre la superficie d’attacco e garantire una maggiore affidabilità nel tempo.
Obiettivi del sistema hardening
- Ridurre le porte esposte e i servizi attivi
- Limitare le possibilità di brute force su SSH
- Prevenire attacchi di rete e manipolazioni
- Stabilizzare e proteggere i parametri del kernel
1. Firewall minimale con UFW
Un firewall filtra il traffico in entrata e uscita, limitando l’accesso solo ai servizi realmente necessari. UFW è un’interfaccia semplificata per gestire iptables, ideale per utenti di ogni livello.
Abilitiamo e configuriamo ufw
(Uncomplicated Firewall) per accettare solo il traffico necessario.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 9001/tcp # ORPort del nodo Tor
sudo ufw enable
sudo ufw status verbose
2. Difesa da brute force con Fail2Ban
Fail2Ban monitora i log del sistema alla ricerca di accessi sospetti o tentativi di forza bruta su SSH, bloccando automaticamente gli IP malevoli con regole firewall temporanee.
Tuttavia, se l’autenticazione con password è disabilitata (come consigliato in questa guida), i tentativi di accesso non autorizzati vengono già impediti a monte: un utente non in possesso della chiave pubblica corretta non potrà comunque connettersi.
L’utilizzo di Fail2Ban in questo contesto aggiunge comunque un ulteriore livello di difesa, ad esempio per loggare i tentativi e bloccare eventuali scansioni automatizzate.
Installa Fail2Ban:
sudo apt install -y fail2ban
⚠️ Se stai usando Debian 12, imposta manualmente il backend a systemd
per evitare errori legati alla lettura dei log:
sudo nano /etc/fail2ban/jail.conf
Cerca la riga:
backend = auto
e modificala in:
backend = systemd
Poi crea il file jail.local
con la configurazione personalizzata per SSH:
sudo nano /etc/fail2ban/jail.local
E inserisci:
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
findtime = 3600
bantime = 86400
banaction = ufw
maxretry = 3
: massimo 3 tentativi fallitifindtime = 3600
: finestra di osservazione di 1 orabantime = 86400
: ban dell’IP per 24 ore
Riavvia Fail2Ban:
sudo systemctl restart fail2ban
Verifica che Fail2Ban sia attivo e stia proteggendo SSH:
sudo systemctl status fail2ban.service
sudo fail2ban-client status
sudo fail2ban-client status sshd
# Per vedere gli IP attualmente bannati:
sudo fail2ban-client get sshd banned
# Per sbloccare manualmente un IP bannato:
sudo fail2ban-client set sshd unbanip IP_DA_SBLOCCARE
3. Riduzione della superficie d’attacco
Ogni servizio in ascolto rappresenta un potenziale punto di attacco. Su sistemi minimali (come LXC container o VPS dedicati al nodo Tor), dovresti vedere in ascolto solo le porte essenziali:
- TCP 22 per SSH
- TCP 9001 (o quella scelta come ORPort da Tor)
- UDP 123 (se usi ntpd per la sincronizzazione oraria)
Puoi verificare i servizi in ascolto con:
sudo ss -tulpn
Se compaiono altri servizi non indispensabili che non stai utilizzando (come un server mail, Samba o web), valuta la disattivazione o la rimozione per ridurre la superficie esposta.`
4. Hardening del kernel Linux via sysctl
La configurazione del file /etc/sysctl.conf
permette di controllare il comportamento del kernel Linux in termini di sicurezza di rete e protezioni a basso livello. Queste modifiche sono utili per ridurre la superficie d’attacco del sistema e aumentare la resilienza contro scansioni e attacchi automatizzati.
Apri il file con:
sudo nano /etc/sysctl.conf
Scorri fino in fondo al file ed aggiungi le seguenti impostazioni. Il file è quasi interamente commentato di default, quindi è buona pratica inserire le modifiche in fondo per una gestione più ordinata:
# Sicurezza rete
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Protezione SYN
net.ipv4.tcp_syncookies = 1
# Hardening
kernel.randomize_va_space = 2
# Disattivazione IP forwarding (inutile per un nodo Relay)
net.ipv4.ip_forward = 0
Applica le modifiche:
sudo sysctl -p
5. Gestione log e risorse di sistema
Una corretta gestione dei log aiuta nella diagnosi di problemi e nella sicurezza post-evento. Impostare limiti adeguati con ulimit
previene il consumo eccessivo di risorse da parte dei processi.
Logging persistente con journald (opzionale)
Se il sistema non salva i log in modo persistente (come spesso avviene nei container), puoi abilitare il salvataggio locale con:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Impostare limiti di sistema con ulimit
Per aumentare la capacità dell’utente toradmin
di gestire file descriptor (connessioni aperte), modifica:
sudo nano /etc/security/limits.conf
Scorri fino in fondo al file e aggiungi (esempio):
toradmin soft nofile 4096
toradmin hard nofile 8192
Per rendere attivi questi limiti anche nelle sessioni SSH, modifica:
sudo nano /etc/pam.d/common-session
Aggiungi in fondo:
session required pam_limits.so
✅ Consiglio: salva una copia dei file modificati (come sysctl.conf
e jail.local
) per facilitarne il ripristino o la replica in ambienti simili.
Questi limiti sono utili, ma su sistemi basati su systemd potrebbero non essere sufficienti. Per renderli effettivi per i servizi gestiti da systemd (come Tor), è preferibile creare un override specifico che tratteremo nella Parte 4.
Nella Parte 3 installeremo Tor dai repository ufficiali, verificheremo le firme GPG e configureremo correttamente il servizio.