La gestione del firewall in Arch Linux

Introduzione

Quando un computer è collegato a una rete, questo avrà a che fare con la gestione di pacchetti IP che gli arrivano: il sistema dovrà prendere decisioni su cosa farne. In GNU/Linux la loro gestione è demandata a un componente del kernel che si chiama netfilter: con questo componente è possibile rispondere a questi pacchetti, ignorarli, bloccarli, instradarli da qualche altra parte. In poche parole, netfilter funge da firewall per la nostra macchina in rete. Per poter dire a netfilter cosa fare si possono usare due strumenti: iptables, quello storico per questa operazione, e nftables, più recente e proposto come sostituto del primo.

Ora, poiché iptables e nftables hanno una loro sintassi che non è proprio semplicissima, è disponibile da tempo uno strumento che rende la gestione del firewall alla portata di tutti: Uncomplicated firewall, noto anche come UFW.

UFW può gestire sia iptables che nftables. Nella mia installazione di Arch Linux uso iptables, anche perché è quello che conosco da più tempo ed è quello che è installato già di default.

Installazione di Uncomplicated firewall

Per installare UFW su Arch Linux, eseguire:

sudo pacman -S ufw

Dopo l’installazione, assicurarsi che il servizio sia attivo e che venga avviato assieme al sistema:

sudo systemctl enable ufw
sudo systemctl start ufw

Abilitare UFW con:

sudo ufw enable

Gestione delle regole

In questo momento, cioè subito dopo l’installazione, UFW è impostato così:

  • blocca tutte le connessioni in ingresso;
  • permette tutte le connessioni in uscita.

Dobbiamo quindi aggiungere delle regole. Ci sono due modi per farlo:

  • usare regole (app) preimpostate;
  • impostare delle regole personalizzate.

Uso delle regole preimpostate

UFW fornisce alcune configurazioni predefinite per applicazioni comuni. Per visualizzare l’elenco delle configurazioni disponibili, dare:

sudo ufw app list

L’output mostrerà un elenco di applicazioni con profili preconfigurati:

Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  LDAP
  LDAPS
  LPD
  MSN
  MSN SSL
  Mail submission
  NFS
  POP3
  POP3S
  PeopleNearby
  SMTP
  SSH
  Socks
  Telnet
  Transmission
  Transparent Proxy
  VNC
  WWW
  WWW Cache
  WWW Full
  WWW Secure
  XMPP
  Yahoo
  qBittorrent
  svnserve

Per ottenere maggiori dettagli su un profilo specifico, dare:

sudo ufw app info NOME_APP

Ad esempio, per visualizzare le informazioni sul profilo SSH:

sudo ufw app info SSH

Una volta individuata la regola preimpostata (ad esempio SSH), applicarla con questo comando:

sudo ufw allow SSH

Uso di regole personalizzate

La sintassi per impostare una regola personalizzata è più o meno la seguente:

sudo ufw [allow|deny] from [indirizzo_IP] to [indirizzo_IP|any] port [numero_porta] comment "[commento]"

Ad esempio:

sudo ufw allow from 192.168.0.0/24 to any port 22 comment "SSH"
Nota
Il to any significa che è permesso il traffico a qualunque nostro indirizzo IP. Potremmo ad esempio avere due schede di rete che hanno quindi due indirizzi IP differenti, per cui permettiamo con questa regola il traffico verso (to) qualunque indirizzo (any).

Oppure si può usare un modo più breve. In questo esempio si utilizza una porta personalizzata per SSH (2222):

sudo ufw allow 2222/tcp

Altri esempi:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny from 192.168.1.100
sudo ufw deny 8080/tcp
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp

Visualizzare le regole attuali

Si possono vedere le regole attuali in modi diversi, ognuno con un suo output:

sudo ufw status
sudo ufw status verbose
sudo ufw status numbered

Ad esempio:

$ sudo ufw status verbose 
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.0/24             # SSH
137,138/udp                ALLOW IN    192.168.0.0/24             # Samba NetBIOS UDP
139,445/tcp                ALLOW IN    192.168.0.0/24             # Samba SMB TCP
1714:1764/tcp              ALLOW IN    192.168.0.0/24             # KDE Connect TCP
1714:1764/udp              ALLOW IN    192.168.0.0/24             # KDE Connect UDP

Eliminare una regola

Individuare il numero della regola con:

sudo ufw status numbered

e quindi:

sudo ufw delete NUMERO_REGOLA

Monitorare il firewall

Abilitare il logging

La registrazione degli eventi (logging) di UFW va attivata con:

sudo ufw logging on

È possibile poi specificare quali log conservare. I livelli di log disponibili sono:

  • off → nessun log
  • low → solo i pacchetti bloccati
  • medium → connessioni accettate e bloccate
  • high → dettagli estesi su ogni pacchetto
  • full → ancora più dettagli

Il livello che solitamente scelgo è low:

sudo ufw logging low

Controllare i log

Su Arch Linux, i log di UFW non vengono salvati in /var/log/ufw.log, come avviene in altre distribuzioni. Arch invece utilizza systemd-journald per la gestione dei log di UFW.

Per vedere i log dare:

sudo journalctl -k | grep 'UFW'

Oppure:

sudo dmesg | grep 'UFW'
Consiglio

Poiché dmesg sarà popolato da messaggi di UFW, è possibile avviare dmesg senza visualizzarli. Dare:

sudo dmesg | sed '/UFW/d'

Disabilitare e reimpostare il firewall

Se si ha bisogno di disattivare temporaneamente UFW:

sudo ufw disable

Per rimuovere completamente tutte le regole e reimpostare UFW:

sudo ufw reset

Regole che solitamente uso

Io solitamente non uso le regole preimpostate, ma preferisco definirle a mano. Scrivo qui quelle che uso io.

SSH

SSH usa questa porta e protocollo:

Porta Protocollo Uso
22 TCP Connessione SSH

Per cui questa la regola da impostare:

sudo ufw allow from 192.168.0.0/24 to any port 22 comment "SSH"

Come si vede non è necessario specificare proto tcp.

Samba

Samba usa queste porte e protocolli:

Porta Protocollo Uso
137 UDP NetBIOS Name Service
138 UDP NetBIOS Datagram Service
139 TCP NetBIOS Session Service
445 TCP SMB Direct

Per cui queste le regole da impostare:

sudo ufw allow from 192.168.0.0/24 to any port 137,138 proto udp comment "Samba NetBIOS UDP"
sudo ufw allow from 192.168.0.0/24 to any port 139,445 proto tcp comment "Samba SMB TCP"

KDE Connect

KDE Connect usa queste porte e protocolli:

Porta Protocollo Uso
1714-1764 TCP Comunicazione principale tra dispositivi
1714-1764 UDP Scoperta automatica dei dispositivi nella rete

Per cui queste le regole da impostare:

sudo ufw allow from 192.168.0.0/24 to any port 1714:1764 proto tcp comment "KDE Connect TCP"
sudo ufw allow from 192.168.0.0/24 to any port 1714:1764 proto udp comment "KDE Connect UDP"