Série RHCSA : Principes de base du pare-feu et contrôle du trafic réseau à l’aide de FirewallD et iptables - Partie 11
En termes simples, un pare-feu est un système de sécurité qui contrôle le trafic entrant et sortant d’un réseau sur la base d’un ensemble de règles prédéfinies (telles que la destination/la source du paquet ou le type de trafic, par exemple).
Dans cet article, nous allons passer en revue les bases de firewalld, le démon de pare-feu dynamique par défaut dans Red Hat Enterprise Linux 7, et le service iptables, le service de pare-feu hérité pour Linux, que la plupart des administrateurs système et réseau connaissent bien, et qui est également disponible dans RHEL 7.
Une comparaison entre FirewallD et iptables
Sous le capot, firewalld et le service iptables communiquent avec le framework netfilter dans le noyau via la même interface, sans surprise, la commande iptables. Cependant, contrairement au service iptables, firewalld peut modifier les paramètres pendant le fonctionnement normal du système sans que les connexions existantes ne soient perdues.
Firewalld doit être installé par défaut dans votre système RHEL, même s’il n’est peut-être pas en cours d’exécution. Vous pouvez vérifier à l’aide des commandes suivantes (firewall-config est l’outil de configuration de l’interface utilisateur) :
yum info firewalld firewall-config
et
systemctl status -l firewalld.service
D’autre part, le service iptables n’est pas inclus par défaut, mais peut être installé via l’un ou l’autre de ces services.
yum update && yum install iptables-services
Les deux démons peuvent être démarrés et activés pour démarrer au démarrage avec les commandes habituelles systemd :
systemctl start firewalld.service | iptables-service.service
systemctl enable firewalld.service | iptables-service.service
Lire aussi : Commandes utiles pour gérer les services systemd
En ce qui concerne les fichiers de configuration, le service iptables utilise /etc/sysconfig/iptables (qui n’existera pas si le package n’est pas installé dans votre système). Sur une machine RHEL 7 utilisée comme nœud de cluster, ce fichier se présente comme suit :
Alors que firewalld stocke sa configuration dans deux répertoires, /usr/lib/firewalld et /etc/firewalld :
ls /usr/lib/firewalld /etc/firewalld
Nous examinerons ces fichiers de configuration plus en détail plus loin dans cet article, après avoir ajouté quelques règles ici et là. À présent, il suffira de vous rappeler que vous pouvez toujours trouver plus d’informations sur les deux outils avec.
man firewalld.conf
man firewall-cmd
man iptables
En dehors de cela, n’oubliez pas de jeter un coup d’œil à Reviewing Essential Commands & System Documentation – Part 1 de la série actuelle, où j’ai décrit plusieurs sources où vous pouvez obtenir des informations sur les packages installés sur votre système RHEL 7.
Utilisation d’iptables pour contrôler le trafic réseau
Vous pouvez vous référer à Configurer le pare-feu iptables - Partie 8 de la série Linux Foundation Certified Engineer (LFCE) pour vous rafraîchir la mémoire sur les composants internes d’iptables avant de continuer. Ainsi, nous pourrons entrer directement dans les exemples.
Exemple 1 : Autoriser à la fois le trafic web entrant et sortant
Les ports TCP 80 et 443 sont les ports par défaut utilisés par le serveur Web Apache pour gérer le trafic Web normal (HTTP) et sécurisé (HTTPS). Vous pouvez autoriser le trafic Web entrant et sortant via les deux ports de l’interface enp0s3 comme suit :
iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Exemple 2 : Bloquer toutes les connexions entrantes (ou certaines d’entre elles) à partir d’un réseau spécifique
Il peut arriver que vous ayez besoin de bloquer tout type de trafic provenant d’un réseau spécifique, par exemple 192.168.1.0/24, par exemple :
iptables -I INPUT -s 192.168.1.0/24 -j DROP
supprimera tous les paquets provenant du réseau 192.168.1.0/24, tandis que
iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
n’autorisera que le trafic entrant via le port 22.
Exemple 3 : Rediriger le trafic entrant vers une autre destination
Si vous utilisez votre boîtier RHEL 7 non seulement comme pare-feu logiciel, mais aussi comme pare-feu matériel, de sorte qu’il se trouve entre deux réseaux distincts, la redirection IP doit déjà avoir été activée dans votre système. Si ce n’est pas le cas, vous devez modifier /etc/sysctl.conf et définir la valeur de net.ipv4.ip_forward à 1, comme suit :
net.ipv4.ip_forward = 1
Enregistrez ensuite la modification, fermez votre éditeur de texte et enfin exécutez la commande suivante pour appliquer la modification :
sysctl -p /etc/sysctl.conf
Par exemple, vous pouvez avoir une imprimante installée sur un boîtier interne avec l’IP 192.168.0.10, avec le service CUPS à l’écoute sur le port 631 (à la fois sur le serveur d’impression et sur votre pare-feu). Afin de rediriger les demandes d’impression des clients de l’autre côté du pare-feu, vous devez ajouter la règle iptables suivante :
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
Gardez à l’esprit qu’iptables lit ses règles de manière séquentielle, alors assurez-vous que les politiques par défaut ou les règles ultérieures ne remplacent pas celles décrites dans les exemples ci-dessus.
Premiers pas avec FirewallD
L’un des changements introduits avec firewalld sont les zones. Ce concept permet de séparer les réseaux en différentes zones de niveau de confiance que l’utilisateur a décidé d’accorder aux appareils et au trafic au sein de ce réseau.
Pour lister les zones actives :
firewall-cmd --get-active-zones
Dans l’exemple ci-dessous, la zone publique est active et l’interface enp0s3 lui a été attribuée automatiquement. Pour afficher toutes les informations relatives à une zone particulière :
firewall-cmd --zone=public --list-all
Comme vous pouvez en savoir plus sur les zones dans le guide de sécurité RHEL 7, nous n’énumérerons ici que quelques exemples spécifiques.
Exemple 4 : Autoriser les services à travers le pare-feu
Pour obtenir la liste des services pris en charge, utilisez .
firewall-cmd --get-services
Pour autoriser le trafic Web http et https à travers le pare-feu, avec effet immédiat et lors des démarrages suivants :
firewall-cmd --zone=MyZone --add-service=http
firewall-cmd --zone=MyZone --permanent --add-service=http
firewall-cmd --zone=MyZone --add-service=https
firewall-cmd --zone=MyZone --permanent --add-service=https
firewall-cmd --reload
Si–zone est omis, la zone par défaut (vous pouvez vérifier avec firewall-cmd –get-default-zone) est utilisée.
Pour supprimer la règle, remplacez le mot add par remove dans les commandes ci-dessus.
Exemple 5 : Redirection IP/Port
Tout d’abord, vous devez savoir si le masquage est activé pour la zone souhaitée :
firewall-cmd --zone=MyZone --query-masquerade
Dans l’image ci-dessous, nous pouvons voir que le masquage est activé pour la zone externe, mais pas pour le public :
Vous pouvez soit activer le masquage pour public :
firewall-cmd --zone=public --add-masquerade
ou utilisez le masquage en externe. Voici ce que nous ferions pour répliquer l’exemple 3 avec firewalld :
firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
Et n’oubliez pas de recharger le pare-feu.
Vous pouvez trouver d’autres exemples dans la partie 9 de la série RHCSA, où nous avons expliqué comment autoriser ou désactiver les ports qui sont habituellement utilisés par un serveur Web et un serveur ftp, et comment modifier la règle correspondante lorsque le port par défaut de ces services est modifié. De plus, vous pouvez vous référer au wiki firewalld pour d’autres exemples.
Lire aussi : Exemples utiles de FirewallD pour configurer le pare-feu dans RHEL 7
Conclusion
Dans cet article, nous avons expliqué ce qu’est un pare-feu, quels sont les services disponibles pour en implémenter un dans RHEL 7, et fourni quelques exemples qui peuvent vous aider à démarrer cette tâche. Si vous avez des commentaires, des suggestions ou des questions, n’hésitez pas à nous le faire savoir en utilisant le formulaire ci-dessous. Merci d’avance !







