Guida MikroTik
Firewall e QoSIntermedio

Address-List dinamiche — Anti brute-force SSH e Winbox a stadi

Le address-list dinamiche con timeout escalante permettono di bloccare automaticamente gli attacchi brute-force su SSH e Winbox, con punizione progressiva: da 5 minuti fino a 1 giorno di blacklist.

Le address-list in RouterOS possono essere statiche (inserite manualmente) o dinamiche (popolate automaticamente da regole firewall con action=add-src-to-address-list). La tecnica a stadi con timeout escalante è il modo più efficace per bloccare brute-force senza bloccare erroneamente utenti legittimi.

Logica di funzionamento a stadi

Ogni nuova connessione SSH da un IP non ancora in blacklist viene aggiunta alla lista connection1 (5 min). Se entro quei 5 minuti tenta di nuovo, finisce in connection2 (15 min). Al terzo tentativo va in connection3 (1 ora). Al quarto: blacklist per 1 giorno. Questo limita l'attaccante a circa 3 tentativi ogni 5 minuti invece di migliaia al secondo.

Anti brute-force SSH a 4 stadi con timeout escalante
# ================================================================
# ANTI BRUTE-FORCE SSH — 4 stadi con timeout crescente
# IMPORTANTE: queste regole devono essere PRIMA delle regole accept SSH.
# L'ordine conta: le regole vengono valutate dall'alto verso il basso.
# ================================================================

# STADIO 1: primo tentativo → connection1 per 5 minuti
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   connection-state=new   action=add-src-to-address-list   address-list=ssh-stage1   address-list-timeout=5m   comment="SSH brute-force: primo tentativo (5 min)"

# STADIO 2: secondo tentativo (IP già in stage1) → stage2 per 15 minuti
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   connection-state=new   src-address-list=ssh-stage1   action=add-src-to-address-list   address-list=ssh-stage2   address-list-timeout=15m   comment="SSH brute-force: secondo tentativo (15 min)"

# STADIO 3: terzo tentativo (IP in stage2) → stage3 per 1 ora
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   connection-state=new   src-address-list=ssh-stage2   action=add-src-to-address-list   address-list=ssh-stage3   address-list-timeout=1h   comment="SSH brute-force: terzo tentativo (1 ora)"

# STADIO 4: IP in stage3 → blacklist definitiva per 24 ore
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   connection-state=new   src-address-list=ssh-stage3   action=add-src-to-address-list   address-list=ssh-blacklist   address-list-timeout=1d   log=yes log-prefix="SSH-BLACKLIST"   comment="SSH brute-force: blacklist 24 ore"

# DROP per tutti gli IP in blacklist
/ip firewall filter add   chain=input   src-address-list=ssh-blacklist   action=drop   comment="Blocca IP in SSH blacklist"

# ACCETTA SSH legittimo (solo da IP admin — vedi ruleset base)
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   src-address-list=admin   action=accept   comment="SSH: accetta solo da IP admin"

# DROP finale SSH da tutti gli altri
/ip firewall filter add   chain=input   protocol=tcp dst-port=22   action=drop   comment="SSH: blocca tutto il resto"
Anti brute-force Winbox (porta 8291)
# Stesso schema per Winbox — 3 stadi + blacklist
/ip firewall filter add   chain=input protocol=tcp dst-port=8291 connection-state=new   action=add-src-to-address-list address-list=wb-stage1   address-list-timeout=3m comment="Winbox BF: stadio 1 (3 min)"

/ip firewall filter add   chain=input protocol=tcp dst-port=8291 connection-state=new   src-address-list=wb-stage1   action=add-src-to-address-list address-list=wb-stage2   address-list-timeout=10m comment="Winbox BF: stadio 2 (10 min)"

/ip firewall filter add   chain=input protocol=tcp dst-port=8291 connection-state=new   src-address-list=wb-stage2   action=add-src-to-address-list address-list=wb-blacklist   address-list-timeout=4h log=yes log-prefix="WB-BLACKLIST"   comment="Winbox BF: blacklist 4 ore"

/ip firewall filter add   chain=input src-address-list=wb-blacklist   action=drop comment="Blocca IP in Winbox blacklist"

# Gestione manuale delle liste: visualizza chi è in blacklist
/ip firewall address-list print where list=ssh-blacklist
/ip firewall address-list print where list=wb-blacklist

# Rimuovi un IP dalla blacklist (es. se hai bloccato te stesso)
/ip firewall address-list remove [find list=ssh-blacklist address=1.2.3.4]

Address-list statiche per whitelist e blacklist permanenti

Gestione address-list statiche
# Aggiungi IP alla lista admin (whitelist permanente)
/ip firewall address-list add list=admin address=203.0.113.50   comment="VPN office - accesso permanente"

# Blocco permanente di un range sospetto (senza timeout = permanente)
/ip firewall address-list add list=permanent-blacklist   address=185.220.0.0/16 comment="Tor exit nodes / rete sospetta"

# Regola per bloccare permanentemente in RAW (prima del conntrack)
/ip firewall raw add chain=prerouting   src-address-list=permanent-blacklist   action=drop comment="RAW: blocco permanente IP lista nera"

# Visualizza tutte le entry dinamiche con timeout rimanente
/ip firewall address-list print where dynamic=yes
Se hai accidentalmente bloccato te stesso: accedi fisicamente al router (console seriale), oppure usa un altro IP nella lista admin, oppure aspetta la scadenza del timeout. Per prevenire il problema, aggiungi SEMPRE l'IP del tuo PC alla lista admin PRIMA di configurare le regole brute-force. Considera anche di cambiare la porta SSH (es. 2222) tramite /ip ssh set port=2222.

Port Knocking — aprire l'accesso solo a chi conosce la sequenza

Il port knocking nasconde completamente i servizi di gestione: il router non risponde su Winbox/SSH a nessuno, finché un IP non 'bussa' a una sequenza segreta di porte nell'ordine giusto. Solo dopo la sequenza corretta quell'IP viene aggiunto a una lista knock-ok con timeout, e gli viene concesso l'accesso. È un'ottima difesa per i WISP che devono gestire il router da IP dinamici (non puoi fare una whitelist statica).

Port knocking a 2 colpi → accesso temporaneo
# ================================================================
# PORT KNOCKING — sequenza: bussa su 1234, poi su 5678 -> accesso 1h
# Da inserire PRIMA delle regole di accept dei servizi.
# ================================================================

# COLPO 1: chi contatta la porta 1234 entra in fase 'knock1' (10s per il 2° colpo)
/ip firewall filter add   chain=input protocol=tcp dst-port=1234   action=add-src-to-address-list address-list=knock1   address-list-timeout=10s comment="Knock 1: porta 1234"

# COLPO 2: chi è già in knock1 e contatta 5678 -> knock-ok (accesso 1 ora)
/ip firewall filter add   chain=input protocol=tcp dst-port=5678 src-address-list=knock1   action=add-src-to-address-list address-list=knock-ok   address-list-timeout=1h comment="Knock 2: porta 5678 -> accesso 1h"

# ACCESSO: Winbox/SSH consentiti SOLO a chi è in knock-ok
/ip firewall filter add   chain=input protocol=tcp dst-port=22,8291 src-address-list=knock-ok   action=accept comment="Accesso gestione dopo knock corretto"

# Tutto il resto verso i servizi di gestione: drop (lo fa il drop finale input)

# Per 'bussare' dal proprio PC (Windows/Linux con nc o PowerShell):
#   nc -z ROUTER_IP 1234 ; sleep 1 ; nc -z ROUTER_IP 5678
# poi connetti Winbox/SSH normalmente entro l'ora.
Il port knocking NON è cifratura: la sequenza viaggia in chiaro e un attaccante che sniffa la tua rete locale la vede. È security-through-obscurity utile contro gli scanner automatici (che provano milioni di IP ma non indovinano la sequenza), non contro un attaccante mirato sul tuo segmento. Per la gestione remota seria abbina sempre VPN (WireGuard) + chiavi SSH. Usa porte alte e non ovvie per la sequenza.
address-listbrute forceSSH protectionWinbox securityadd-src-to-address-listtimeoutblacklistanti-scanport knockingdynamic blocking

Configura senza fatica con l'AI

In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.

Prova WispOS