Firewalld
Gestion basique
Connaître la version de firewalld :
# firewall-cmd -V
0.6.3
Connaître l’état de firewalld :
# firewall-cmd --state
Recharger la configuration de firewalld :
# firewall-cmd --reload
success
Gestion des zones
Lister les différentes zones disponibles :
# firewall-cmd --get-zones
Déterminer la zone par défaut :
# firewall-cmd --get-default-zone
Déterminer la zone par défaut et les interfaces associées :
# firewall-cmd --get-active-zones
Afficher les règles associées à la zone définie par défaut :
# firewall-cmd --list-all
Afficher l’ensemble de la configuration d’une zone en exécutant la commande ci-dessous:
# firewall-cmd --zone=work --list-all
Définir une zone par défaut :
# firewall-cmd --set-default-zone=dmz
Lier une interface à une zone :
# firewall-cmd --zone=work --change-interface=ens160 --permanent
Attacher une interface à une zone :
firewall-cmd --add-interface=ens160 --zone=work --permanent
Supprimer l’interface dédiée d’une zone :
# firewall-cmd --remove-interface=ens160 --zone=work --permanent
Créer une zones d’administration :
# firewall-cmd --new-zone=privateweb # firewall-cmd --reload
Quand on ne dispose que d'une seule interface, il peut être utile de définir par exemple la zone public par défaut, mais la zone work pour un sous-réseau et/ou la zone trusted pour une machine spécifique.
Si on ne précise pas le --zone= la commande s'effectuera sur la zone par défaut.
Pour ajouter le sous-réseau 192.168.21.0/24 à la zone work :
# firewall-cmd --zone=work --add-source=192.168.21.0/24 --permanent
Pour ajouter une IP seule 192.168.21.200 à la zone trusted :
# firewall-cmd --zone=trusted --add-source=192.168.21.200 --permanent
Pour retirer le sous-réseau 192.168.21.0/24 de la zone work :
# firewall-cmd --zone=work --remove-source=192.168.21.0/24 --permanent
Pour ajouter le sous-réseau 192.168.21.0/24 à la zone work en l'enlevant de sa précédente zone :
# firewall-cmd --zone=work --change-source=192.168.21.0/24 --permanent
Gestion des services
Lister les services :
# firewall-cmd --get-services
Note:
On peut disposer de plus de détails à propos de chacun de ces services en éditant leur fichier .xml au sein du répertoire /usr/lib/firewalld/services
Ajout du service web (tcp/80 ou HTTP) pour la zone public:
# firewall-cmd --zone=public --add-service=http --permanent
Suppression du service web (tcp/80 ou HTTP) pour la zone public:
# firewall-cmd --zone=public --remove-service=http --permanent
Parmi les nombreuses options de l’outil, on distingue un mode appelé panic pouvant être utilisé uniquement dans des situations où on rencontre de sérieux problèmes avec l’environnement réseau. Lorsque ce mode est actif, toutes les connexions existantes sont ignorées et tous les paquets entrant et sortant sont supprimés.
L’activation d’un tel mode de fonctionnement s’obtient en exécutant l’instruction suivante :
# firewall-cmd --panic-on
A l’inverse, pour sortir de ce mode de fonctionnement, il suffit simplement d’exécuter :
# firewall-cmd --panic-off
Pour savoir dans quel mode opératoire on se trouve, il est possible d’interroger le pare-feu via la commande suivante :
# firewall-cmd --query-panic
Attention:
Ces modes de fonctionnement ne sont valables que dans le cas où l’on ne mentionne pas l’option --permanent : c’est-à-dire en mode runtime.
Gestion des ports
Ouverture d’un port spécifique :
# firewall-cmd --zone=public --add-port=1521/tcp --permanent
Afficher les ports ouverts dans la zone par défaut:
# firewall-cmd --list-ports
Ajouter une plage de ports en séparant le premier et le dernier de la plage avec un tiret :
# firewall-cmd --zone=public --add-port=3990-4100/udp --permanent
Transfert de flux d’un port vers un autre. On parle alors de port forwarding. Dans notre cas, l’on transférer un flux du port TCP/22 (SSH) vers un port d’un autre service TCP/3800 :
# firewall-cmd --zone=work --add-forward-port=22:proto=tcp:toport=3800 --permanent
Lorsque l’on souhaite faire en sorte que tous les équipements du réseau interne utilisent la même adresse IP à l’extérieur (on parle alors de port masquerading), on peut également mettre cela en place, depuis le firewall, via l’instruction suivante :
# firewall-cmd --zone=external --add-masquerade
Configurer des règles spécifiques, écrite à l’identique (ou presque) de celles du pare-feu iptables, en utilisant l’option éponyme --direct.
Exemple: ajout d’un port TCP/3600:
# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 3600 -j ACCEPT
Important:
Ce genre de règle ne doit être utilisée qu’en dernier ressort, lorsque l’on ne peut absolument pas ajouter de service via l’option –add-service.
Gestion IP/Network
Autoriser une adresse IP :
# firewall-cmd --permanent --add-source=192.168.2.50
Autoriser un réseau :
# firewall-cmd --permanent --add-source=192.168.2.0/24
Supprimer une adresse IP autorisée :
# firewall-cmd --permanent --remove-source=192.168.2.50
Supprimer un réseau déjà autorisé
# firewall-cmd --permanent --remove-source=192.168.2.50/24
Bloquer une adresse IP
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.2.50' reject"
Bloquer un réseau :
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.2.0/24' reject"
Gestion IPSet
Comme pour le pare-feu iptables, il est également possible d’appliquer une règle, non plus à une adresse IP, mais à un ensemble d’adresses via les règles ipset. Ces règles sont de deux natures :
- hash:ip
- hash:net
Créer une règle ipset permanente :
# firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip # firewall-cmd --reload
Ajouter des IP à une règle IPSet :
# firewall-cmd --ipset=blacklist --add-entry=192.168.1.30
Lister les informations d'une règle :
# firewall-cmd --info-ipset=blacklist
Suppression d'une IP dans une règle :
# firewall-cmd --ipset=blacklist --remove-entry=192.168.1.31
Lister les IP d'une liste IPSet :
# firewall-cmd --ipset=blacklist --get-entries
Supprimer une règle IPSet :
# firewall-cmd --permanent --delete-ipset=blacklist
Gestion des modules et du mode offline
Il peut arriver que l’on ait besoin de télécharger certains modules spécifiques. Plutôt que d’utiliser un fichier rc.local il est préférable d’avertir le pare-feu firewalld au travers du répertoire /etc/modules-load.d .
Ajout d’options pour FTP:
# echo ip_nat_ftp > /etc/modules-load.d/firewalld-ftp.conf # echo ip_conntrack_ftp >> /etc/modules-load.d/firewalld-ftp.conf
En parlant des modules, il arrive parfois que l’on ait besoin d’ajouter de nouvelles règles de sécurité lorsque le pare-feu n’est pas encore actif. C’est notamment le cas, lors des installations via Anaconda ou kickstart.
On peut alors utiliser la commande firewall-offline-cmd, prévue à cet effet. Imaginons que nous souhaitions ouvrir le port TCP/22 (SSH), avec l’utilitaire iptables, on ajouterait la ligne ci-dessous, au fichier de configuration /etc/sysconfig/iptables :
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Mais, grâce à la commande firewall-offline-cmd, il suffit simplement d’exécuter:
# firewall-offline-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
A l’identique du fonctionnement d’iptables, il est également possible de sauvegarder la configuration complète du pare-feu grâce aux commandes suivantes (ip6tables –S pour IPv6):
# iptables –S > firewalld_rules