È stato rilasciato il firewall dinamico firewalld 1.0, implementato come interfaccia sopra i filtri 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à utilizzato in molte distribuzioni Linux, tra cui RHEL 7+, Fedora 18+ e SUSE/openSUSE 15+. Il codice di firewalld è scritto in Python ed è rilasciato sotto la licenza GPLv2.
Per gestire il firewall si utilizza lo strumento firewall-cmd, che nella creazione delle regole si basa non su IP addresses, interfacce di rete e numeri di porta, mentre si fa riferimento ai 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 l'API D-BUS di firewalld è presente in progetti come NetworkManager, libvirt, podman, docker e fail2ban.
Una modifica significativa del numero di versione è legata a cambiamenti che rompono la compatibilità retroattiva e modificano il comportamento della gestione delle zone. Tutti i parametri di filtraggio definiti nella zona ora si applicano solo al traffico indirizzato all'host su cui è in esecuzione firewalld, mentre per filtrare il traffico di transito è necessaria la configurazione delle politiche. Le modifiche più rilevanti includono:
- È stato dichiarato obsoleto il backend che consentiva di operare sopra iptables. Il supporto per iptables sarà mantenuto nel prossimo futuro, ma questo backend non verrà ulteriormente sviluppato.
- È stato attivato e abilitato per impostazione predefinita per tutte le nuove zone il modo intra-zone-forwarding, che consente un libero spostamento dei pacchetti tra interfacce di rete o fonti di traffico all'interno di una singola zona (pubblica, bloccata, fidata, interna, ecc.). Per ripristinare il comportamento precedente e vietare il reindirizzamento dei pacchetti all'interno di una zona singola, è possibile utilizzare il comando «firewall-cmd —permanent —zone public —remove-forward».
- Le regole relative alla traduzione degli indirizzi (NAT) sono state spostate nel gruppo di protocolli 'inet' (precedentemente aggiunte nei gruppi 'ip' e 'ip6', il che portava alla necessità di duplicare le regole per IPv4 e IPv6). Questa modifica ha permesso di eliminare i duplicati nell'uso di ipset: invece di tre copie delle voci ipset, ora ne viene utilizzata una sola.
- L'azione 'default' indicata nel parametro '—set-target' è ora equivalente a 'reject', cioè tutti i pacchetti che non rientrano sotto determinate regole nell'area saranno bloccati per impostazione predefinita. È stata fatta un'eccezione solo per i pacchetti ICMP, che continuano a essere consentiti. Per ripristinare il comportamento precedente per l'area pubblicamente accessibile 'trusted', è possibile 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», ovvero nel momento precedente all'aggiunta delle regole finali di drop, reject o accept, comprese quelle per le aree in cui vengono utilizzati «—set-target drop|reject|accept».
- Il blocco ICMP ora si applica solo ai pacchetti in ingresso indirizzati all'host corrente (input) e non influisce sui pacchetti reindirizzati tra le aree (forward).
- Il servizio tftp-client, destinato a monitorare le connessioni per il protocollo TFTP, è stato rimosso poiché era ineseguibile.
- L'interfaccia «direct» è stata deprecata, consentendo l'inserimento diretto di regole di filtraggio dei pacchetti. Questo interface non è più necessario dopo l'aggiunta della funzionalità di filtraggio dei pacchetti reindirizzati e in uscita.
- È stato aggiunto il parametro CleanupModulesOnExit, il cui valore predefinito è impostato su «no». Questo parametro consente di gestire il rilascio dei moduli del kernel dopo la terminazione di firewalld.
- È consentito l'uso di ipset nella definizione del sistema di destinazione (destination).
- Aggiunti i servizi WireGuard, Kubernetes e netbios-ns.
- Sono state implementate le regole di completamento automatico per zsh.
- Il supporto per Python 2 è stato interrotto.
- L'elenco delle dipendenze è stato semplificato. Per l'uso di firewalld, oltre al kernel Linux, sono ora necessari solo le librerie Python dbus, gobject e nftables, mentre i pacchetti ebtables, ipset e iptables sono stati resi opzionali. Le librerie Python decorator e slip sono state rimosse dalle dipendenze.
Fonte: opennet.ru
