Un server Linux appena installato non è un server sicuro. Le configurazioni di default sono pensate per la compatibilità, non per la sicurezza. Queste sono le 10 configurazioni che applico sistematicamente su ogni server che installo o prendo in gestione.

1. Aggiornamenti automatici di sicurezza

La prima cosa da fare è sempre abilitare gli aggiornamenti di sicurezza automatici. Su Ubuntu/Debian:

apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

Configura il riavvio automatico notturno se necessario in /etc/apt/apt.conf.d/50unattended-upgrades.

2. SSH: chiavi invece di password

Disabilita l'autenticazione via password SSH e usa esclusivamente chiavi asimmetriche. In /etc/ssh/sshd_config:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
X11Forwarding no
MaxAuthTries 3

Genera una chiave Ed25519 (più sicura di RSA 2048): ssh-keygen -t ed25519 -C "server-name"

3. Cambia la porta SSH

Non elimina il rischio, ma riduce drasticamente il rumore nei log da bot automatici. Scegli una porta >1024, aggiornala in sshd_config e nel firewall.

4. Firewall con UFW

Principio del minimo privilegio: blocca tutto, apri solo quello che serve.

ufw default deny incoming
ufw default allow outgoing
ufw allow [porta-ssh]/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

5. Fail2ban: blocca i tentativi di brute force

apt install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Configura bantime = 1h, maxretry = 5, findtime = 10m per SSH come minimo. Fail2ban funziona anche per Nginx, Apache, Postfix e molti altri servizi.

6. Utenti e privilegi: no root diretto

Crea un utente amministratore dedicato, aggiungilo al gruppo sudo, e disabilita il login root diretto. Ogni azione privilegiata deve passare da sudo e lasciare traccia nei log.

adduser adminuser
usermod -aG sudo adminuser

7. Disabilita i servizi non necessari

Ogni servizio in ascolto è una potenziale superficie di attacco. Verifica cosa è in ascolto:

ss -tlnp
systemctl list-units --type=service --state=running

Disabilita e rimuovi tutto ciò che non usi: avahi-daemon, cups, bluetooth, snapd se non necessario.

8. Kernel hardening con sysctl

Aggiungi in /etc/sysctl.d/99-hardening.conf:

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2

9. Audit dei login e delle azioni sudo

Assicurati che auditd sia attivo e configurato per registrare i comandi sudo. Considera l'invio centralizzato dei log su un server syslog separato — se un attaccante compromette il server, i log locali non sono attendibili.

10. Verifica periodica con Lynis

Lynis è uno strumento di audit open source che analizza la configurazione del server e produce un report con le aree di miglioramento:

apt install lynis
lynis audit system

Punta a un hardening index superiore a 75. Eseguilo dopo ogni modifica importante alla configurazione.

Nota: il hardening non è un'operazione una tantum. Pianifica una revisione trimestrale della configurazione e tieni aggiornati questi parametri al crescere della superficie di attacco del server.

Posso aiutarti con la tua infrastruttura?

Che tu abbia un progetto da zero o un problema da risolvere, scrivimi o prenota una call gratuita di 30 minuti.

Invia un messaggio → Prenota una call gratuita ↗