È stato presentato il rilascio del firewall dinamicamente gestito firewalld 1.0, implementato come un'interfaccia sopra ai filtri dei pacchetti nftables e iptables. Firewalld viene eseguito come processo in background, consentendo di modificare dinamicamente le regole del filtro dei pacchetti tramite D-Bus, senza la necessità di ricaricare le regole del filtro dei pacchetti e senza interrompere le connessioni stabilite. Il progetto è già in uso in molte distribuzioni Linux, tra cui RHEL 7+, Fedora 18+ e SUSE/openSUSE 15+. Il codice di firewalld è scritto in Python ed è distribuito sotto licenza GPLv2.
Per gestire il firewall viene utilizzata l'utility firewall-cmd, che si basa non su indirizzi IP, interfacce di rete e numeri di porta, e dai nomi dei servizi (ad esempio, per aprire l'accesso a SSH è necessario eseguire «firewall-cmd —add —service=ssh», per chiudere SSH — «firewall-cmd —remove —service=ssh»). Per modificare la configurazione del firewall è possibile utilizzare anche l'interfaccia grafica firewall-config (GTK) e l'applet firewall-applet (Qt). Il supporto per la gestione del firewall tramite D-BUS API di firewalld è presente in progetti come NetworkManager, libvirt, podman, docker e fail2ban.
Il significativo cambiamento del numero di versione è legato all'introduzione di modifiche che compromettono la compatibilità inversa e alterano il comportamento di gestione delle zone. Tutti i parametri di filtraggio definiti in una zona si applicano ora solo al traffico diretto all'host su cui è in esecuzione firewalld, mentre per il filtraggio del traffico transitivo è necessaria la configurazione delle politiche. Le modifiche più evidenti sono:
- È stata dichiarata obsoleta l'interfaccia backend che consentiva di lavorare sopra iptables. Il supporto per iptables verrà mantenuto nel prossimo futuro, ma questo backend non verrà ulteriormente sviluppato.
- È stato attivato di default per tutte le nuove zone il modo intra-zone-forwarding, che consente il libero movimento dei pacchetti tra interfacce di rete o fonti di traffico all'interno di una stessa zona (pubblica, bloccata, fidata, interna, ecc.). Per ripristinare il comportamento precedente e vietare il reindirizzamento dei pacchetti all'interno di una stessa zona, è possibile utilizzare il comando «firewall-cmd —permanent —zone public —remove-forward».
- Le regole relative alla traduzione degli indirizzi (NAT) sono state spostate nella famiglia di protocolli «inet» (in precedenza erano aggiunte alle famiglie «ip» e «ip6», con la conseguenza di dover duplicare le regole per IPv4 e IPv6). Questa modifica ha permesso di eliminare i duplicati quando si utilizza ipset: invece di tre copie delle voci ipset, ora viene utilizzata una sola.
- L'azione «default», indicata nel parametro «—set-target», è ora equivalente a «reject», cioè tutti i pacchetti che non rientrano in regole specifiche della zona saranno bloccati per impostazione predefinita. Sono escluse solo le ICMP, che continuano a essere autorizzate. Per ripristinare il comportamento precedente per la zona pubblica «trusted», si possono utilizzare le seguenti regole: firewall-cmd —permanent —new-policy allowForward firewall-cmd —permanent —policy allowForward —set-target ACCEPT firewall-cmd —permanent —policy allowForward —add-ingress-zone public firewall-cmd —permanent —policy allowForward —add-egress-zone trusted firewall-cmd —reload
- Le politiche con priorità positiva vengono ora eseguite immediatamente prima dell'applicazione della regola «—set-target catch-all», cioè nel momento antecedente all'aggiunta delle regole finali drop, reject o accept, anche per le zone in cui si utilizzano «—set-target drop|reject|accept».
- Il blocco ICMP ora si applica solo ai pacchetti in entrata indirizzati all'host corrente (input) e non influisce sui pacchetti inoltrati tra le zone (forward).
- Il servizio tftp-client, destinato a monitorare le connessioni per il protocollo TFTP ma reso inutilizzabile, è stato rimosso.
- È stato dichiarato obsoleto l'interfaccia «direct», che consentiva di inserire direttamente regole di filtraggio dei pacchetti. La necessità di questa interfaccia è venuta meno dopo l'aggiunta della possibilità di filtrare i pacchetti inoltrati e in uscita.
- È stato aggiunto il parametro CleanupModulesOnExit, che per impostazione predefinita è stato cambiato in «no». Questo parametro consente di gestire il caricamento dei moduli del kernel dopo la chiusura di firewalld.
- È stato autorizzato l'uso di ipset nella definizione del sistema di destinazione (destination).
- Sono state aggiunte le definizioni dei servizi WireGuard, Kubernetes e netbios-ns.
- È stata implementata la regola di completamento automatico per zsh.
- È terminato il supporto per Python 2.
- È stata ridotto l'elenco delle dipendenze. Per il funzionamento di firewalld, oltre al kernel Linux, sono ora richieste solo le librerie Python dbus, gobject e nftables, mentre i pacchetti ebtables, ipset e iptables sono stati classificati come opzionali. Dall'elenco delle dipendenze sono state rimosse le librerie Python decorator e slip.
Fonte: opennet.ru
