Il primo ora con la tua VPS: guida completa da macchina nuda a server sicuro e pronto (per rendere più sicuro il tuo OpenClaw)
Un VPS appena acquistato è come una porta senza serratura, con script kiddie di tutto il mondo che bussano alla porta. Questo articolo ti guida a mettere una bella serratura. Così il tuo “gamberetto” (openclaw) non se ne va in giro a combinare guai.
0. Prima di iniziare
Hai appena preso un VPS, tutto gasato con IP e password di root in mano, e poi?
L’approccio di molti è: partire subito a installare roba e deployare progetti.
È un’abitudine pericolosa.
Il tuo VPS ha un IP pubblico, il che significa che chiunque nel mondo può provare a connettersi. E nella configurazione di default:
- La porta esposta è la 22
- L’utente è il classico root
- A proteggerti è rimasta solo una password
Ogni giorno un’infinità di script automatizzati scansiona interi range di IP, provando a forzare l’accesso con password comuni. Il tuo server è già sotto attacco dal momento esatto in cui va online.
Quindi, la primissima cosa da fare appena ottenuto un VPS non è installare software, ma eseguire l’hardening iniziale.
1. L’obiettivo
L’obiettivo di questo articolo è:
- ✅ Metti in piedi un accesso remoto sicuro: login con chiave SSH + porta non di default
- ✅ Crea un utente normale: evita di usare direttamente root
- ✅ Configura il firewall: apri solo le porte strettamente necessarie
- ✅ Attiva l’accelerazione di rete: con BBR la connessione decolla
- ✅ Blocca i tentativi di brute-force: fail2ban banna in automatico gli IP malevoli
Fatto tutto questo, il tuo VPS avrà una base solida e potrai distribuire i tuoi servizi in tutta tranquillità.
2. Pianificazione e ragionamento
Perché fare tutte queste configurazioni?
Un VPS appena acquistato è come un appartamento appena consegnato, grezzo e da sistemare:
| Situazione di default | Rischio | La nostra soluzione |
|---|---|---|
| Login diretto con root | Troppi permessi, rischio altissimo se sbagli | Creare un utente normale + sudo |
| Login con password | Vulnerabile a attacchi brute-force | Login con chiave SSH |
| Porta 22 di default | Primo bersaglio degli scanner | Cambiare a una porta non standard |
| Firewall disattivato | Tutte le porte esposte | UFW: aprire solo le porte necessarie |
| Rete nativa | Tasso di packet loss alto, latenza elevata | Algoritmo di controllo della congestione BBR |
Flusso generale

Seguiamo esattamente quest’ordine, e ti spiego il perché di ogni passaggio man mano che andiamo avanti.
3. Passaggi operativi
3.1 Primo accesso e aggiornamento del sistema
Recuperare l’IP del server
Dopo aver comprato il VPS, il provider ti darà:
- Indirizzo IP: ad esempio
192.168.1.100 - Porta: di solito è
22(alcuni provider potrebbero usarne una diversa) - Username: di solito è
root - Password: una stringa di caratteri generata casualmente

Connessione SSH
Utenti Mac / Linux: aprite il terminale e digitate direttamente:
1 | ssh root@你的服务器IP |
Utenti Windows:
- Windows 10/11 ha OpenSSH già integrato, quindi potete usare lo stesso comando direttamente in PowerShell o CMD
- In alternativa, potete appoggiarvi a tool come Termius o MobaXterm
Al primo accesso vi imbatterete in un avviso per confermare l’impronta digitale:
1 | The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. |
In pratica vi sta chiedendo: «Non conosco questa macchina, sei sicuro di volerti connettere?»
Digitate yes e premete Invio. Poi inserite la password (attenzione: mentre la digitate non comparirà nessun carattere a schermo, è una normale misura di sicurezza) e premete di nuovo Invio.

Se vi ritrovate davanti a un prompt simile a questo, il login è andato a buon fine:
1 | Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64) |
💡 Perché verificare l’impronta digitale?
Serve a prevenire gli attacchi “man-in-the-middle”. Al primo accesso ti segni l’impronta digitale del server: se in futuro dovesse cambiare, significa che qualcuno potrebbe star fingendo di essere il tuo server.

Prendi confidenza con il tuo server
Appena fatto login, diamo un’occhiata alle informazioni di base di questa macchina:
1 | # 查看系统版本 |

Tieni a mente queste info, ti torneranno utili più avanti per risolvere eventuali problemi.
Aggiornamento del sistema
Dopo aver controllato le info del server, la prima cosa seria da fare è aggiornare il sistema. L’immagine di sistema di un server nuovo potrebbe risalire a qualche mese fa, e nel frattempo potrebbero essere usciti dei patch di sicurezza:
1 | # 更新软件包列表 + 升级所有软件 + 清理 |
Spiegazione dei parametri:
apt update: aggiorna l’indice dei pacchettiapt full-upgrade: aggiorna tutti i software, kernel compreso-y: conferma automatica, così non devi digitare yes a manoapt autoremove: rimuove le dipendenze che non servono piùapt autoclean: pulisce la cache dei pacchetti di installazione scaricati

⏱️ Questo passaggio potrebbe richiedere qualche minuto, dipende da quanti aggiornamenti ci sono. Se ogni tanto ti chiede conferma, praticamente basta seguire la sua logica e vai tranquillo.
Controlla se serve un riavvio
Dopo un aggiornamento del kernel, in genere serve un riavvio per farlo andare effettivamente:
1 | # 检查是否需要重启 |

Se ti dice che serve riavviare:
1 | reboot |
Dopo il riavvio dovrai riconnetterti via SSH.
Installa gli strumenti di uso comune
1 | apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch |
A cosa servono 'sti attrezzi:
| Strumento | Uso | |
|---|---|---|
sudo |
Permette agli utenti normali di eseguire comandi come amministratore | |
curl / wget |
Scaricare file | |
git |
Controllo versione | |
vim |
Editor di testo | |
htop |
Monitor dei processi più carino | |
tree |
Mostra la struttura delle directory ad albero | |
net-tools |
Strumenti di rete (ifconfig, netstat, ecc.) | |
ufw |
Firewall semplice e facile da usare | |
fail2ban |
Protezione contro il brute-force | |
neofetch |
Mostra le informazioni di sistema in modo carino | |
![]() |
3.2 Creare un utente non root
Perché non usare direttamente root?
I permessi dell’utente root sono troppo ampi: un semplice errore di distrazione con rm -rf / e saluta tutto. Per le operazioni di tutti i giorni usa un utente normale; quando ti servono i privilegi di amministratore, basta lanciare sudo.
L’aragosta (openclaw) è una bestia, mica posso darle l’accesso root!
Creare l’utente
1 | # 创建用户(把 ittinker 换成你想要的用户名) |
Il sistema ti chiederà di impostare una password e qualche altra informazione:
1 | New password: # 输入密码(不会显示) |

Assegnare i privilegi sudo
1 | # 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户 |
Facciamo una verifica:
1 | # 切换到新用户 ittinker 换成你自己上面创建的那个用户 |
Se l’output è root, significa che sudo è configurato correttamente.

💡 Dritta
Se digiti
exittorni all’utente root. Per le prossime configurazioni continuiamo a usare root, poi, a lavoro finito, passeremo al nostro utente normale.
3.3 Configurare il login con chiavi SSH
Autenticazione a chiave vs autenticazione a password

L’autenticazione a chiave è molto più sicura della password:
- Le password possono subire attacchi brute force, le chiavi praticamente impossibili
- Niente più password da digitare ogni volta, molto più comodo
- Anche se la password venisse compromessa, senza la chiave privata non entra nessuno
Passaggio 1: generare la coppia di chiavi in locale
Esegui sul tuo computer (non sul server):
1 | # 生成 ED25519 密钥(推荐,更安全更快) |
Ti verrà chiesto:
1 | Enter file in which to save the key (/Users/你/.ssh/id_ed25519): |
Premi direttamente Invio per usare il percorso predefinito. Noi qui abbiamo usato ./ittinker, che significa semplicemente salvare il file nella directory corrente con il nome ittinker.
1 | Enter passphrase (empty for no passphrase): |
Puoi impostare una password per la chiave (uno strato extra di protezione) oppure premere direttamente Invio per lasciare vuoto.

Una volta completata la generazione, troverai due file nella directory ~/.ssh/ (qui sotto ci sono i nomi predefiniti, se hai premuto Invio prima verranno chiamati così):
id_ed25519: la chiave privata, non deve mai assolutamente finire in mani sbagliate!id_ed25519.pub: la chiave pubblica, da caricare sul server
💡 ed25519 vs RSA
ed25519è l’algoritmo attualmente consigliato, più sicuro e con chiavi più corte rispetto al tradizionale RSA. Se il tuo sistema è troppo vecchio e non lo supporta, puoi usaressh-keygen -t rsa -b 4096.
Un piccolo dettaglio: le chiavi generate con ed25519 sono più piccole, mentre i file RSA sono grandi. L’ho chiesto all’AI e ho scoperto che le dimensioni non contano, dipende solo dal tipo di algoritmo.
Passaggio due: carica la chiave pubblica sul server
Metodo A: usa ssh-copy-id (consigliato)
1 | # 在你的电脑上执行 |
Dopo aver inserito la password, la chiave pubblica verrà copiata automaticamente sul server.

Metodo B: copia manuale
Se ssh-copy-id non è disponibile, puoi farlo manualmente:
1 | # 1. 在你的电脑上,查看公钥内容 |
Copia l’output (una lunga stringa di testo che inizia con ssh-ed25519).
1 | # 2. 在服务器上,为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名 |
⚠️ I permessi sono fondamentali!
SSH è molto pignolo sui permessi dei file:
.sshdirectory: 700 (accessibile solo dal tuo utente)authorized_keysfile: 600 (leggibile e scrivibile solo dal tuo utente)Se i permessi non sono esatti, SSH rifiuterà di usare la chiave per il login.
Passaggio 3: Testa il login con la chiave
Apri una nuova finestra del terminale (non chiudere quella originale, così se sbagli qualcosa puoi sempre rimediare) e testa il login con la chiave:
1 | ssh ittinker@你的服务器IP |
Se riesci ad accedere senza inserire la password, la configurazione della chiave è andata a buon fine! 🎉
(Se hai impostato una passphrase per la chiave privata, ti verrà chiesta: è del tutto normale)

Qui abbiamo aggiunto il parametro -i perché questa chiave non si trova nel percorso predefinito, ma nella directory corrente. Se non lo specifichi, il sistema userà la chiave di default.
3.4 Rafforzare la sicurezza di SSH
Ora che il login con la chiave funziona, andiamo a blindare un po’ la configurazione SSH:
- Cambia la porta predefinita (così eviti le scansioni automatiche)
- Disabilita il login con password
- Impedisci il login diretto come root
Modifica il file di configurazione SSH
1 | # 备份原配置 |

Trova e modifica le seguenti impostazioni (alcune potrebbero essere commentate, rimuovi il # all’inizio):
1 | # 修改端口(选一个 1024-65535 之间的数字) |

Salva ed esci (ctrl + o).
Con Nano, per salvare premi ctrl + o: ti chiederà di confermare il nome del file, premi semplicemente Invio. Per uscire, invece, ctrl + x.
Riavvia il servizio SSH
1 | systemctl restart sshd.service |
⚠️ Attenzione!
Non chiudere il terminale attuale! Prima di farlo, apri una nuova finestra e verifica se riesci ad accettare con la nuova configurazione:
1 ssh -p 22000 yourname@你的服务器IPSe il login va a buon fine, puoi chiudere la vecchia finestra. Se non riesci a entrare, puoi comunque correggere la configurazione dalla sessione precedente.
Se hai acquistato un server leggero, è molto probabile che questa porta non sia modificabile. I classici ECS lo permettono, quindi fai attenzione.
3.5 Configura il firewall UFW

UFW (Uncomplicated Firewall) è lo strumento firewall predefinito di Ubuntu: facile da configurare, ma molto potente.
Configurazione di base
1 | # 设置默认策略:拒绝所有入站,允许所有出站 |
Abilita il firewall
1 | ufw enable |
Ti verrà mostrato questo prompt:
1 | Command may disrupt existing ssh connections. Proceed with operation (y|n)? |
Digita y per confermare.
Verifica lo stato
1 | ufw status verbose |

23022 è un refuso mio, regolatevi in base alla vostra situazione reale
Output tipo:
1 | Status: active |
Cheat sheet dei comandi principali
1 | # 查看状态 |
3.6 Attiva l’accelerazione BBR
BBR (Bottleneck Bandwidth and Round-trip propagation time) è un algoritmo di controllo della congestione TCP sviluppato da Google, in grado di migliorare nettamente le prestazioni di rete.
Attivazione con un clic
1 | # 添加 BBR 配置 |
Verifica che sia attivo
1 | # 查看当前拥塞控制算法 |
L’output dovrebbe essere:
1 | net.ipv4.tcp_congestion_control = bbr |
1 | # 确认 BBR 模块已加载 |
Output tipo:
1 | tcp_bbr 20480 3 |
💡 L’effetto di BBR
Una volta attivato BBR, soprattutto in ambienti con rete instabile o latenza elevata, noterai chiaramente:
- Download più veloci
- Operazioni SSH più fluide
- Caricamento delle pagine più rapido

3.7 Configura fail2ban per difenderti dai brute-force
fail2ban monitora i log e banna automaticamente gli IP dopo ripetuti tentativi di login falliti.
Configurazione di base
1 | # 复制默认配置(不要直接修改 jail.conf) |
Trova la sezione [sshd] e assicurati di avere questa configurazione:
1 | [sshd] |

Avvia i servizi
1 | # 重启 fail2ban |
Controlla lo stato
1 | # 查看 fail2ban 状态 |

L’output sarà simile a questo:
1 | Status for the jail: sshd |
Comandi utili
1 | # 手动封禁 IP |
3.8 [Opzionale] Gestire più server con SSH Config
Se hai più server, digitare ssh -p 22000 user@ip ogni volta è una vera scocciatura. Puoi semplificare tutto usando SSH Config.
File di configurazione
Modifica il file ~/.ssh/config sul tuo computer locale:
1 | vim ~/.ssh/config |
Aggiungi questa configurazione:
1 | # 第一台服务器 |
Come usarlo
Ora puoi connetterti direttamente usando l’alias:
1 | # 连接第一台服务器 |
Niente più stress a ricordare IP, porte e nomi utente!
3.9 [Opzionale] Consentire l’accesso solo a Cloudflare
Se il tuo sito si trova completamente dietro Cloudflare, puoi impostare le regole del firewall in modo da consentire l’accesso alle porte 80/443 solo agli IP di Cloudflare, mettendo così una bella sicurezza in più.
⚠️ Attenzione: per fare questa configurazione, il tuo dominio deve essere già integrato con la CDN di Cloudflare.
Script di configurazione automatica
1 | # 下载脚本 |
Questo script si occuperà di:
- Prendi i range IP ufficiali più recenti direttamente da Cloudflare
- Aggiungi le regole UFW per consentire l’accesso alle porte 80/443 solo a questi IP
- Ricarica UFW
Impostare l’aggiornamento automatico
I range IP di Cloudflare possono cambiare nel tempo, quindi impostiamo un aggiornamento automatico settimanale:
1 | # 添加 cron 任务(每周一凌晨执行) |
3.10 Impostare il fuso orario
Il fuso orario di default potrebbe essere UTC: cambialo con il tuo per rendere la lettura dei log molto più comoda:
1 | # 查看当前时区 |

3.11 [Opzionale] Configurare gli aggiornamenti di sicurezza automatici
Facciamo in modo che il sistema installi da solo le patch di sicurezza, così non devi pensarci ogni volta a mano:
1 | # 安装自动更新工具 |
Scegli “Yes” per attivare gli aggiornamenti automatici.
💡 Questa funzione si occupa di installare solo gli aggiornamenti di sicurezza, senza fare il salto a nuove major version. Quindi è abbastanza sicuro.
4. Riepilogo
Checklist di inizializzazione
Finita tutta la configurazione, usa questa checklist per fare un giro di controllo:
| Cosa verificare | Comando | Risultato atteso |
|---|---|---|
| Sistema aggiornato | apt update && apt list --upgradable |
Nessun pacchetto da aggiornare |
| L’utente normale può usare sudo | sudo whoami |
Output root |
| Login con chiave funzionante | ssh yourname@ip -p port |
Accesso senza password |
| Login con password disabilitato | grep PasswordAuth /etc/ssh/sshd_config |
PasswordAuthentication no |
| Porta SSH modificata | grep Port /etc/ssh/sshd_config |
La porta che hai impostato |
| Firewall attivo | ufw status |
Status: active |
| BBR attivato | sysctl net.ipv4.tcp_congestion_control |
= bbr |
| fail2ban in esecuzione | systemctl status fail2ban |
active (running) |
| Fuso orario impostato | timedatectl |
Asia/Shanghai o il tuo fuso orario |
| SSH Config locale | cat ~/.ssh/config |
Alias del server configurato |
Posizione dei file chiave
1 | /etc/ssh/sshd_config # SSH 服务端配置 |
Best practice di sicurezza
- Aggiorna regolarmente il sistema:
apt update && apt upgrade - Controlla spesso i log di accesso:
lastb(login falliti),last(login riusciti) - Tieni d’occhio i ban di fail2ban
- Fai un backup prima di modificare i file di configurazione importanti
5. Troubleshooting
Q1: Login con chiave fallito, ti chiede ancora la password?
Possibili cause:
-
Problemi di permessi (il più comune)
1
2
3# 检查并修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys -
Chiave pubblica non copiata correttamente
1
2
3# 检查 authorized_keys 内容
cat ~/.ssh/authorized_keys
# 应该是一行完整的公钥,以 ssh-ed25519 或 ssh-rsa 开头 -
Interferenza di SELinux (su sistemi CentOS/RHEL)
1
restorecon -Rv ~/.ssh
Q2: Dopo aver cambiato la porta non riesci più a connetterti?
Passaggi per risolvere:
-
Assicurati che la nuova porta sia aperta nel firewall:
1
ufw status | grep 你的端口
-
Verifica che la configurazione di SSH sia corretta:
1
grep Port /etc/ssh/sshd_config
-
Controlla che il servizio SSH sia in esecuzione:
1
systemctl status sshd
-
Se non riesci proprio a connetterti, usa la console VNC del tuo provider per accedere e sistemare il problema.
Q2.5: Il cambio di porta non ha proprio effetto? (Server lightweight dei provider cloud)
Sintomo: hai modificato /etc/ssh/sshd_config, ma dopo aver riavviato il servizio la porta 22 risulta ancora aperta e quella nuova non funziona.
Come diagnosticare:
bash
1 | # 查看是谁在监听 22 端口 |
Se l’output è simile a questo:
1 | tcp 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/init |
significa che la porta 22 è in ascolto da parte di init (PID 1), e non dal processo sshd.
Perché: con alcuni provider cloud, l’SSH dei loro “server applicativi leggeri” o delle “istanze container” passa tramite un proxy a livello di piattaforma, quindi le configurazioni di sshd che fai dentro il tuo server non hanno alcun effetto.
Soluzione:
| Tipo di istanza | Come modificare la porta SSH |
|---|---|
| ECS tradizionale | Modifica sshd_config ✅ |
| Server leggero | Forse va fatto dal pannello di controllo del cloud, oppure non è proprio supportato |
| Istanza container | Di solito non è supportato |
Se la tua istanza non supporta il cambio di porta, le altre misure di sicurezza diventano ancora più importanti:
- ✅ Creare un utente normale + disabilitare il login root
- ✅ Login SSH con chiave + disabilitare il login con password
- ✅ fail2ban per fermare gli attacchi brute-force
Se metti in pratica queste misure, il livello di sicurezza resta comunque molto alto.
Q3: fail2ban mi ha bannato da solo?
1 | # 用 VNC 登录后解封 |
Q4: Dopo aver attivato UFW il sito non è più raggiungibile?
1 | # 检查 80/443 是否开放 |
Q5: Eseguendo un comando mi dice che non trova sudo?
Sull’installazione minimale di Debian potrebbe non esserci sudo, installalo usando root:
1 | apt install sudo |
6. Script di inizializzazione con un clic (da usare quando hai preso confidenza)
Se hai già familiarità con i passaggi precedenti, puoi usare questo script per inizializzare tutto in un attimo.
⚠️ Attenzione: prima di lanciare lo script, assicurati di avere già pronta la tua chiave pubblica SSH.
1 |
|
7. Fatto tutto questo, quanto è migliorata la sicurezza?
| Passaggio | Cosa abbiamo fatto | Perché è importante |
|---|---|---|
| Aggiornamento del sistema | Installazione delle ultime patch | Risolve le vulnerabilità note |
| Creazione di un nuovo utente | Non usare più direttamente root | Riduce il rischio di errori umani |
| Chiavi SSH | Sostituzione della password con una chiave | Impossibile da forzare con attacchi brute force |
| Cambio di porta | Evitare la porta 22 di default | Riduce le probabilità di essere scansionati |
| Disabilitazione della password | Accesso solo tramite chiave | Elimina alla radice gli attacchi basati su password |
| Disabilitazione di root | root non può fare login diretto | Alza l’asticella per gli attacchi |
| Firewall UFW | Apertura solo delle porte necessarie | Riduce la superficie di attacco |
| Accelerazione BBR | Ottimizzazione delle prestazioni di rete | Aumenta la velocità di accesso |
| fail2ban | Ban automatico degli IP malevoli | Blocca gli attacchi prolungati |
Con questa messa a punto, la sicurezza del tuo server ha già superato quella di 90% dei VPS.
Anteprima del prossimo articolo
Nel prossimo parleremo di Configurazione rapida del login con chiavi SSH, entrando più nel dettaglio su:
- Come generare le chiavi sui diversi sistemi operativi
- Gestione di chiavi multiple
- Configurazione di SSH Agent
- Impostazioni dei client SSH più comuni
Ultimo aggiornamento dell’articolo: gennaio 2026
Serie “Cassetta degli attrezzi per indie developer”, seguimi!




