Le framework netfilter
est utilisé pour les opérations de trafic réseau (filtrage paquets, traduction d’adresses, traduction de ports).
La structure netfilter comprend des hooks (scripts automatiques) pour interagir avec les paquets réseau entrants. Ces hooks sont des routines noyau qui interceptent les
événements et lancent d’autres routines connexes (règles de pare-feu).
Achitecture du pare-feu firewalld
nftables
La structure nftables
s’appuie sur netfilter
pour appliquer les règles de pare-feu au trafic réseau.
Maintenant nftables
remplace iptables
(obsolète). Il est malgré tout possible de convertir les anciens fichiers de configuration iptable
en équivalentsnftables
via les utilitaires iptables-translate
et ip6tables-translate
.
firewalld
Le service firewalld
est un gestionnaire dynamique de pare-feu. Il classifie le trafic réseau en zones.
Une zone attribuée à un paquet dépend de critères (adresse IP source, interface réseau entrante, etc.) et chaque zone peut avoir sa propre liste de ports et services ouverts
fermés.
Le service firewalld
vérifie l’adresse source de chaque paquet entrant dans le système :
- Si l’adresse source est liée à une zone spécifique : les règles de cette zone s’appliquent
- Si l’adresse source n’est pas attribuée à une zone :
firewalld
associe le paquet à la zone de l’interface réseau entrante et les règles de cette zone s’appliquent. - Si l’interface réseau n’est associée à aucune zone :
firewalld
envoie le paquet à la zone par défaut
La zone par défaut est une désignation affectée à une zone existante : la zone public, correspond à l’interfaceloopback lo
associée à la zone trusted, qui
autorise tout le trafic par défaut.
Zones prédéfinies
Le service firewalld utilise des zones prédéfinies. Par défaut, toutes les zones autorisent tout trafic entrant et sortant s’il a été initié par le système.
Zone | Configuration par défaut |
---|---|
block | Rejette la totalité du trafic entrant sauf les connexions déjà initiées dans le système |
dmz | Seules les connections entrantes sélectionnées sont acceptés |
drop | Tous les paquets sont supprimés sans réponse Seul les connexions sortantes sont possibles |
external | Pour les réseaux externes avec le masquerading activé Pas de confiance aux autres machines Seules les connexions entrantes sélectionnées sont acceptées |
home | Pour les réseaux personnels Fait confiance aux autres machines du réseau Seules les connections entrantes sélectionnées sont acceptées |
internal | Pour les réseaux interne Fait confiance aux autres machines dans le réseaux non liés à la machine Seules les connections entrantes séléctionnées sont acceptées |
public | Pour les zones publiques Ne pas faire confiance aux autres machines Seules les connections entrantes séléctionnées sont acceptés |
trusted | Toutes les connections réseaux sont acceptées |
work | Pour les zones de travail Fait confiance aux autres machines dans les réseaux de la machine Seules les connexions entrantes sélectionnées sont acceptées |
Services prédéfinis
Le service firewalld inclut des configurations prédéfinies pour les services courants :
- ssh : Serveur SSH local (22/tcp)
- dhcpv6-client : Client DHCPv6 local (546/udp sur le réseau IPv6 fe80::/64)
- ipp-client : Impression IPP locale (631/udp)
- samba-client : Client de partage local de fichiers et d’imprimantes Windows (137/udp et 138/udp)
- mdns : Protocole de résolution de noms sur liaison locale appelée multidiffusion DNS (mDNS, Multicast DNS) (353/udp pour les adresses de multidiffusion 224.0.0.251 (IPv4) ou
ff02::fb (IPv6)) - cockpit : Interface Web Red Hat Enterprise Linux pour la gestion et la surveillance de votre système local et distant (port 9090)
Paquetage
Le paquetage firewalld
inclut de nombreuses configurations de service prédéfinies, la commande firewall-cmd --get-services
permet de les lister :
# firewall-cmd --get-services |
Configuration du daemon firewalld
La commande firewall-cmd
s’interface avec le daemon firewalld
.
La plupart des commandes fonctionnent avec la configuration runtime
.
Si l’option --permanent
est spécifiée il faut l’activer avec firewall-cmd --reload
.
De nombreuses commandes listées utilisent l’option –zone=ZONE pour identifier la zone sur laquelle elles portent. Lorsqu’un masque de réseau est requis, utilisez la notation
CIDR, telle que 192.168.1/24.
Commandes
Commandes de bases :
Commandes |
Explication |
---|---|
--get-default-zone |
Indique l’actuelle zone par défaut |
--set-default-zone=ZONE |
Définit la zone par défaut |
--get-zones |
Répertorie toutes les zones disponibles |
--get-active-zones |
Liste toutes les zones en cours d’utilisation ainsi que leurs informations |
--add-source=CIDR [--zone=ZONE] |
Achemine l’ensemble du trafic provenant de l’adresse IP ou du réseau/masque de réseau vers la zone spécifiée |
--remove-source=CIDR [--zone=ZONE] |
Supprime la règle qui achemine, à partir de la zone, l’ensemble du trafic provenant de l’adresse IP ou du réseau |
--add-interface=INTERFACE [--zone=ZONE] |
Achemine l’ensemble du trafic de INTERFACE vers ZONE |
--change-interface=INTERFACE [--zone=ZONE] |
Associe l’interface à la ZONE |
--list-all [--zone=ZONE] |
Liste l’ensemble des interfaces, sources, services et ports configurés pour la ZONE |
--list-all-zones |
Récupère toutes les informations de toutes les zones |
--add-service=SERVICE [--zone=ZONE] |
Autorise le trafic vers le SERVICE |
--add-port=PORT/PROTOCOL [--zone=ZONE] |
Autorise le trafic vers les ports PORT/ PROTOCOL |
--remove-service=SERVICE [--zone=ZONE] |
Supprime le SERVICE de la liste autorisée pour la zone |
--remove-port=PORT/PROTOCOL [--zone=ZONE] |
Supprime les ports PORT/PROTOCOL pour la zone |
--reload |
Applique la configuration permanente |
Si aucune option --zone=
n’est spécifiée = utilise la zone par défaut.
Exemples
Définir :
- la zone par défaut sur la
dmz
- ajouter l’ensemble du trafic provenant du réseau
192.168.11.0/24
à la zoneinternal
- ouvre les ports réseau pour le service
mysql
dans la zoneinternal
# firewall-cmd --set-default-zone=dmz |
Ajouter tout le trafic entrant de l’adresse IPv4 192.168.10.0 à la zone public
:
# firewall-cmd --permanent --zone=public --add-source=192.168.10.0/24 |
/!\ Résumé des commandes
Commandes :
# firewall-cmd |
Documentation
MAN firewall-cmd(1)
MAN firewalld(1)
MAN firewalld.zone(5)
MAN firewalld.zones(5)
MAN nft(8)
https://uubu.fr/?page=00001282