Perché un router “pulito” è pericoloso?

Negli howto del Dojo partiamo spesso da /system reset-configuration no-defaults=yes: è il modo migliore per capire ogni passaggio, senza configurazioni nascoste. Ma il router che ne esce:

  • ha l’utente admin (il primo nome che provano tutti i bot);
  • ha attivi servizi come telnet, FTP, WebFig e API, raggiungibili da qualunque interfaccia;
  • non ha un firewall: se la WAN ha un indirizzo pubblico, WinBox e SSH sono esposti a internet.

Bastano pochi minuti online perché arrivino i primi tentativi di accesso. Un router configurato solo per scopi didattici non è installabile in produzione: prima si fa l’hardening descritto qui.

Lo schema dell’esempio, con gli indirizzi del mio laboratorio:

  • WAN: ether1, 10.6.0.10/12, gateway e DNS 10.0.0.1;
  • LAN: bridge, 192.168.88.1/24;
  • VPN di gestione: WireGuard, rete 10.255.255.0/24.

⚠️ Attenzione: adatta interfacce e indirizzi alla tua rete. Per calcolare reti e maschere c’è l’IP calculator del Dojo. E lavora sempre in Safe Mode (in WinBox il pulsante Safe Mode, da terminale Ctrl+X): se una regola ti taglia fuori, alla disconnessione il router annulla le modifiche da solo.

Schema: router MikroTik con WAN chiusa in input, LAN 192.168.88.0/24 e accesso di gestione via WireGuard wg-admin
Dopo l’hardening, WinBox e SSH rispondono solo dalla LAN e dalla VPN di gestione; dalla WAN il resto viene scartato.

Passo 1: come aggiorno RouterOS?

La prima difesa è un sistema aggiornato: molte vulnerabilità di RouterOS (sul Dojo trovi le schede CVE) sono già corrette nelle versioni recenti.

/system package update set channel=stable
/system package update check-for-updates
/system package update install

Dopo il riavvio, sui RouterBOARD si aggiorna anche il firmware della scheda (RouterBOOT), con un secondo riavvio. Sul CHR e sugli x86 questo menu non esiste e il passaggio si salta:

/system routerboard upgrade
/system reboot

Passo 2: come sostituisco l’utente admin?

Il nome admin è il primo che ogni attacco brute force prova. Creiamo un utente con un nome diverso, nel gruppo full, con una password lunga:

/user add name=gianni-adm group=full password="una-password-lunga-e-unica"

Disconnettiti e rientra con il nuovo utente, poi disabilita admin:

/user disable admin

Non cancellarlo prima di aver verificato che il nuovo utente funziona: è il modo più rapido per restare chiusi fuori. Se lavorate in più persone, un utente per persona: nel log resta chi ha fatto cosa.

Passo 3: quali servizi lascio attivi?

Solo quelli che usi davvero. Vediamo cosa è attivo:

/ip service print

Di solito bastano WinBox e SSH. Tutto il resto si spegne:

/ip service disable telnet,ftp,www,api,api-ssl,reverse-proxy

Ai servizi rimasti si aggiunge il campo Available From (available-from; nei vecchi tutorial si chiama address, che funziona ancora ma è deprecato), cioè le reti da cui possono essere usati: la LAN e la VPN di gestione.

/ip service set winbox available-from=192.168.88.0/24,10.255.255.0/24
/ip service set ssh available-from=192.168.88.0/24,10.255.255.0/24

Da un altro indirizzo il router chiude subito la connessione, senza mostrare il login. Attenzione però: la porta resta visibile. In laboratorio, da un indirizzo esterno alla lista, la connessione TCP alla 8291 si apriva e veniva chiusa subito dopo. A nascondere davvero i servizi ci pensa il firewall del passo 5: Available From è la seconda cintura, non la prima. Tutti i servizi e le loro porte sono nel manuale MikroTik: Services.

Passo 4: come chiudo i servizi “di contorno”?

RouterOS ha diversi servizi di rete che sulla WAN non servono e che conviene limitare alla LAN o spegnere. Prima definiamo le liste di interfacce, che useremo anche nel firewall:

/interface list add name=WAN
/interface list add name=LAN
/interface list member add list=WAN interface=ether1
/interface list member add list=LAN interface=bridge

Poi:

/ip neighbor discovery-settings set discover-interface-list=LAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN
/tool mac-server ping set enabled=no
/tool bandwidth-server set enabled=no
/ip proxy set enabled=no
/ip socks set enabled=no
/ip upnp set enabled=no
  • Neighbor discovery e MAC server: il router si fa vedere (e gestire via MAC con WinBox) solo dalla LAN;
  • bandwidth-server: utilissimo per i test, ma da accendere solo quando serve;
  • proxy, socks, UPnP: se non li usi, spenti.

Se il router fa da DNS per la LAN, allow-remote-requests=yes va bene solo con il firewall del passo 5, che blocca le richieste DNS da internet; altrimenti il router diventa un amplificatore per attacchi DDoS.

Passo 5: qual è il firewall minimo?

Il principio è semplice: dalla WAN entra solo ciò che ho chiesto io. Il router accetta le risposte alle connessioni già aperte, il ping, la VPN di gestione e il traffico della LAN; tutto il resto che arriva da internet viene scartato.

/ip firewall filter
add chain=input action=accept connection-state=established,related,untracked comment="IN: risposte"
add chain=input action=drop connection-state=invalid comment="IN: pacchetti invalidi"
add chain=input action=accept protocol=icmp comment="IN: ping"
add chain=input action=accept protocol=udp dst-port=13231 in-interface-list=WAN comment="IN: WireGuard di gestione"
add chain=input action=accept in-interface-list=LAN comment="IN: dalla LAN"
add chain=input action=accept in-interface=wg-admin comment="IN: dalla VPN di gestione"
add chain=input action=drop comment="IN: tutto il resto"
add chain=forward action=fasttrack-connection connection-state=established,related comment="FW: fasttrack"
add chain=forward action=accept connection-state=established,related,untracked comment="FW: risposte"
add chain=forward action=drop connection-state=invalid comment="FW: pacchetti invalidi"
add chain=forward action=drop in-interface-list=WAN connection-nat-state=!dstnat comment="FW: niente da internet se non port forward"

L’ordine conta: le regole si leggono dall’alto in basso e vince la prima che corrisponde. La regola drop finale della chain input è quella che chiude il router a internet: mettila solo dopo aver verificato che la regola della LAN ti fa entrare (è qui che il Safe Mode ti salva).

Sugli switch CRS3xx e CRS5xx e sui CCR2116 e CCR2216 la regola di fasttrack accetta anche hw-offload=yes, che passa le connessioni al chip dello switch. Sugli altri router quel parametro non esiste: RouterOS risponde bad parameter hw-offload e la regola non viene creata. Per questo qui non c’è.

Con IPv6 il ragionamento è lo stesso, e va fatto anche se non usi IPv6: molti operatori lo assegnano senza chiedere.

/ipv6 firewall filter
add chain=input action=accept connection-state=established,related,untracked comment="IN6: risposte"
add chain=input action=drop connection-state=invalid comment="IN6: invalidi"
add chain=input action=accept protocol=icmpv6 comment="IN6: ICMPv6 (indispensabile)"
add chain=input action=accept protocol=udp dst-port=546 src-address=fe80::/10 comment="IN6: client DHCPv6"
add chain=input action=accept in-interface-list=LAN comment="IN6: dalla LAN"
add chain=input action=drop comment="IN6: tutto il resto"
add chain=forward action=accept connection-state=established,related,untracked comment="FW6: risposte"
add chain=forward action=drop connection-state=invalid comment="FW6: invalidi"
add chain=forward action=accept protocol=icmpv6 comment="FW6: ICMPv6"
add chain=forward action=drop in-interface-list=WAN comment="FW6: niente da internet"

In IPv6 l’ICMP non si blocca: senza, la rete non funziona (neighbor discovery, path MTU).

Passo 6: come gestisco il router da remoto?

Con una VPN, mai esponendo WinBox o SSH su internet. WireGuard è integrato in RouterOS 7, è veloce e si configura in pochi comandi:

/interface wireguard add name=wg-admin listen-port=13231
/ip address add address=10.255.255.1/24 interface=wg-admin
/interface wireguard print

La rete della VPN (10.255.255.0/24) deve essere diversa da tutte quelle già usate: controllala con l’IP calculator.

L’ultimo comando mostra la chiave pubblica del router, da inserire nel client WireGuard del tuo portatile. Poi si aggiunge il portatile come peer, con la sua chiave pubblica:

/interface wireguard peers add interface=wg-admin public-key="CHIAVE-PUBBLICA-DEL-PORTATILE" \
    allowed-address=10.255.255.2/32 comment="Portatile Gianni"

Il firewall del passo 5 accetta già la porta UDP 13231 dalla WAN e il traffico che arriva dall’interfaccia wg-admin; i servizi del passo 3 accettano già la rete 10.255.255.0/24. Dal portatile, con la VPN accesa, si entra in WinBox su 10.255.255.1.

Passo 7: cosa controllo alla fine?

Una verifica veloce, da ripetere su ogni router prima di consegnarlo:

/user print
/ip service print where !disabled
/ip firewall filter print stats
/ipv6 firewall filter print stats
/system package update print

Poi due prove dall’esterno (per esempio da un telefono senza WiFi): WinBox e SSH verso l’indirizzo WAN non devono rispondere, mentre con la VPN accesa devono funzionare.

Ultima cosa: un backup della configurazione, conservato fuori dal router.

/system backup save name=dopo-hardening
/export file=dopo-hardening

Per approfondire, MikroTik ha una sua lista di controllo nel manuale MikroTik: Securing your router.

Come funziona dentro, nella Knowledge base del Dojo: le interface list, chain e ordine delle regole del firewall, il Safe Mode, le address list.

Provato in laboratorio su PNETLab con CHR RouterOS 7.24.5 (stable), partendo da un router resettato con no-defaults=yes: tutti i comandi dei passi 1–7, firewall IPv4 e IPv6, porte della WAN provate da un client esterno prima e dopo il firewall, VPN WireGuard di gestione da un secondo router. L’aggiornamento del RouterBOOT non si può provare su un CHR.

Domande frequenti

Un MikroTik resettato con no-defaults=yes ha un firewall?

No. Con no-defaults=yes il router riparte senza nessuna regola di firewall e con i servizi di gestione attivi: va bene per il laboratorio, ma prima di metterlo in rete serve l’hardening.

Basta cambiare la password dell’utente admin?

È il minimo, ma non basta: conviene creare un utente con un nome diverso nel gruppo full e disabilitare admin, così un attacco brute force deve indovinare anche il nome utente.

A cosa serve Available From nei servizi IP?

Il campo Available From (available-from in /ip service) limita un servizio, per esempio WinBox o SSH, alle reti indicate: da un altro indirizzo il router chiude subito la connessione. La porta però resta visibile, quindi serve comunque il firewall in input.

Posso lasciare WinBox aperto su internet con una password forte?

Meglio di no: le vulnerabilità del servizio WinBox in passato sono state sfruttate senza bisogno di password. La gestione remota si fa attraverso una VPN, per esempio WireGuard, tenendo WinBox chiuso verso internet.

Il firewall IPv6 serve anche se non uso IPv6?

Sì. Molti operatori assegnano indirizzi IPv6 automaticamente: senza firewall IPv6 il router e i dispositivi della LAN possono essere raggiungibili da internet senza che tu lo sappia.