Comment migrer de FirewallD à Iptables sur CentOS 7
Introduction
Comme la plupart des autres distributions Linux, CentOS 7 utilise le cadre netfilter à l'intérieur du noyau Linux afin d'accéder aux paquets qui transitent par la pile réseau. Cela fournit l'interface nécessaire pour inspecter et manipuler les paquets afin de mettre en œuvre un système de pare-feu.
La plupart des distributions utilisent le pare-feu iptables, qui utilise les hooks netfilter pour appliquer les règles de pare-feu. CentOS 7 est livré avec un service alternatif appelé firewalld qui remplit le même objectif.
Bien que firewalld soit une solution de pare-feu très performante avec d'excellentes fonctionnalités, il peut être plus simple pour certains utilisateurs de rester avec iptables s'ils sont à l'aise avec sa syntaxe et satisfaits de son comportement et de ses performances. La commande iptables est en réalité utilisée par firewalld lui-même, mais le service iptables n'est pas installé par défaut sur CentOS 7. Dans ce guide, nous allons démontrer comment installer le service iptables sur CentOS 7 et migrer votre pare-feu de firewalld vers iptables (consultez ce guide si vous souhaitez apprendre à utiliser FirewallD à la place).
Sauvegardez vos règles de pare-feu actuelles (facultatif)
Avant de passer à iptables comme solution de pare-feu pour votre serveur, il est judicieux de sauvegarder les règles actuelles que firewalld applique. Nous avons mentionné ci-dessus que le démon firewalld utilise en réalité la commande iptables pour interagir avec les hooks du noyau netfilter. Pour cette raison, nous pouvons afficher les règles actuelles en utilisant la commande iptables.
Déchargez l'ensemble actuel des règles vers la sortie standard et vers un fichier dans votre répertoire personnel appelé firewalld_iptables_rules en tapant :
- sudo iptables -S | tee ~/firewalld_iptables_rules
Faites la même chose avec ip6tables:
- sudo ip6tables -S | tee ~/firewalld_ip6tables_rules
En fonction des zones firewalld qui étaient actives, des services qui étaient activés et des règles qui ont été passées de firewall-cmd directement à iptables, l'ensemble des règles extraites pourrait être assez extensif.
Le service firewalld implémente ses politiques de pare-feu en utilisant des règles iptables normales. Il y parvient en construisant un cadre de gestion à l'aide de chaînes iptables. La plupart des règles que vous êtes susceptible de voir seront utilisées pour créer ces chaînes de gestion et diriger le flux de trafic à l'intérieur et à l'extérieur de ces structures.
Les règles de pare-feu que vous finirez par transférer vers votre service iptables n'auront pas besoin de recréer le cadre de gestion sur lequel firewalld s'appuie. En raison de cela, l'ensemble de règles que vous finirez par mettre en œuvre sera probablement beaucoup plus simple. Nous sauvegardons l'ensemble ici afin de conserver autant de données brutes intactes que possible.
Vous pouvez voir certaines des lignes les plus essentielles pour avoir une idée de la politique que vous devrez recréer en tapant quelque chose comme ceci :
- grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules
Ceci affichera principalement les règles qui aboutissent à une décision finale. Les règles qui ne font que sauter vers des chaînes créées par les utilisateurs ne seront pas affichées.
Téléchargez et installez le service Iptables
Pour commencer la transition de votre serveur, vous devez télécharger et installer le paquet iptables-service depuis les dépôts CentOS.
Téléchargez et installez les fichiers de service en tapant :
- sudo yum install iptables-services
Ceci téléchargera et installera les scripts systemd utilisés pour gérer le service iptables. Il écrira également certains fichiers de configuration par défaut iptables et ip6tables dans le répertoire /etc/sysconfig.
Construisez vos règles de pare-feu Iptables
Ensuite, vous devez construire vos règles de pare-feu iptables en modifiant les fichiers /etc/sysconfig/iptables et /etc/sysconfig/ip6tables. Ces fichiers contiennent les règles qui seront lues et appliquées lorsque nous démarrons le service iptables.
Comment vous construisez vos règles de pare-feu dépend de si le processus system-config-firewall est installé et utilisé pour gérer ces fichiers. Vérifiez le haut du fichier /etc/sysconfig/iptables pour voir s'il recommande de ne pas modifier manuellement ou non :
- sudo head -2 /etc/sysconfig/iptables
Si la sortie ressemble à cela, n'hésitez pas à modifier manuellement les fichiers /etc/sysconfig/iptables et /etc/sysconfig/ip6tables pour mettre en œuvre les politiques pour votre pare-feu iptables:
outputsample configuration for iptables service
you can edit this manually or use system-config-firewall
Ouvrez et éditez les fichiers avec des privilèges sudo pour ajouter vos règles :
- sudo nano /etc/sysconfig/iptables
- sudo nano /etc/sysconfig/ip6tables
Après avoir établi vos règles, vous pouvez tester vos règles IPv4 et IPv6 en utilisant ces commandes :
- sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'
- sudo sh -c 'ip6tables-restore -t < /etc/sysconfig/ip6tables'
Si, en revanche, la sortie de l'examen du fichier /etc/sysconfig/iptables ressemble à ceci, vous ne devez pas modifier le fichier manuellement:
outputFirewall configuration written by system-config-firewall
Manual customization of this file is not recommended.
Cela signifie que l'outil de gestion system-config-firewall est installé et utilisé pour gérer ce fichier. Toute modification manuelle sera écrasée par l'outil. Si vous voyez cela, vous devriez apporter des modifications à votre pare-feu en utilisant l'un des outils associés. Pour l'interface textuelle, tapez:
- sudo system-config-firewall-tui
Si vous avez l'interface graphique installée, vous pouvez la lancer en tapant :
- sudo system-config-firewall
Si vous avez besoin d'aide pour apprendre les règles et la syntaxe de iptables, les guides suivants peuvent être utiles même s'ils sont principalement destinés aux systèmes Ubuntu :
- Comment configurer un pare-feu en utilisant Iptables sur Ubuntu 14.04
- Les essentiels d'Iptables : Règles et commandes courantes du pare-feu
- Comment mettre en œuvre un modèle de pare-feu de base avec Iptables sur Ubuntu 14.04
Arrêtez le service FirewallD et démarrez le service Iptables
Ensuite, nous devons arrêter le pare-feu actuel firewalld et démarrer nos services iptables. Nous utiliserons la construction && pour lancer les nouveaux services de pare-feu dès que le service firewalld s'arrête avec succès :
- sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables
Vous pouvez vérifier que firewalld n'est pas en cours d'exécution en tapant :
- sudo firewall-cmd --state
Vous pouvez également voir que les règles que vous avez définies dans le répertoire /etc/sysconfig ont été chargées et appliquées en tapant :
- sudo iptables -S
- sudo ip6tables -S
À ce stade, les services iptables et ip6tables sont actifs pour la session en cours. Cependant, actuellement, le service firewalld est toujours celui qui démarrera automatiquement lors du redémarrage du serveur.
C'est le meilleur moment pour tester vos politiques de pare-feu afin de vous assurer que vous avez le niveau d'accès dont vous avez besoin, car vous pouvez redémarrer le serveur pour revenir à votre ancien pare-feu en cas de problème.
Désactivez le service FirewallD et activez les services Iptables.
Après avoir testé vos règles de pare-feu pour vous assurer que votre politique est correctement appliquée, vous pouvez désactiver le service firewalld en tapant :
- sudo systemctl disable firewalld
Cela empêchera le service de démarrer automatiquement au démarrage. Étant donné que le service firewalld ne doit pas être démarré manuellement pendant que les services iptables sont en cours d'exécution, vous pouvez prendre une étape supplémentaire en masquant le service. Cela empêchera également le service firewalld d'être démarré manuellement.
- sudo systemctl mask firewalld
Maintenant, vous pouvez activer vos services iptables et ip6tables afin qu'ils se lancent automatiquement au démarrage :
- sudo systemctl enable iptables
- sudo systemctl enable ip6tables
Cela devrait achever votre transition de pare-feu.
Conclusion
La mise en place d'un pare-feu est une étape essentielle pour garantir la sécurité de vos serveurs. Bien que firewalld soit une excellente solution de pare-feu, il est parfois plus judicieux d'utiliser l'outil le plus familier ou d'utiliser les mêmes systèmes dans une infrastructure plus diversifiée.
