La gestione del firewall in Arch Linux
Indice
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"
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 loglow→ solo i pacchetti bloccatimedium→ connessioni accettate e bloccatehigh→ dettagli estesi su ogni pacchettofull→ 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'
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"