Configuration IPtables sur Debian

Configuration IPtables sur Debian

Un firewall (ou pare-feu) est un élément crucial de la sécurité informatique, utilisé pour protéger les ordinateurs et les réseaux en surveillant et en contrôlant le trafic entrant et sortant. Imaginez-le comme une barrière protectrice entre votre réseau interne sécurisé et les menaces potentielles venant de l’extérieur, comme Internet. Les firewalls appliquent des règles spécifiques pour décider si le trafic réseau doit être autorisé à passer ou bloqué, offrant ainsi une défense efficace contre les cyberattaques et les intrusions.
Il existe plusieurs types de firewalls, chacun ayant ses propres avantages et cas d’utilisation. Sur les systèmes Linux, les trois suivants sont particulièrement populaires :

  • UFW (Uncomplicated Firewall) : C’est un pare-feu simplifié qui utilise IPtables en arrière-plan. UFW est idéal pour les débutants car il simplifie la gestion des règles de sécurité, rendant la configuration de base rapide et facile.
  • Firewalld : Un gestionnaire de pare-feu plus avancé qui permet de modifier les règles de sécurité à la volée, sans nécessiter de redémarrage. Firewalld est particulièrement utile dans des environnements dynamiques où la flexibilité est essentielle.
  • IPtables : C’est l’outil de pare-feu le plus puissant et flexible pour les administrateurs réseau expérimentés. IPtables est directement intégré au noyau Linux et permet un contrôle extrêmement précis du trafic réseau. Avec IPtables, vous pouvez définir des règles très détaillées pour filtrer les paquets de données, bloquer les menaces potentielles et autoriser les connexions sécurisées. Sa flexibilité en fait un choix incontournable pour ceux qui cherchent à personnaliser leur sécurité réseau en fonction de leurs besoins spécifiques.

Aujourd’hui, nous allons apprendre à installer, activer et configurer IPtables sur Debian 12 Bookworm. Cela vous aidera à mieux comprendre comment sécuriser un serveur en utilisant un pare-feu puissant et adaptable.

Tables et Chaînes dans IPtables

Avant de passer aux détails techniques, il est important de bien comprendre deux concepts essentiels dans IPtables : les tables et les chaînes.

Tables :

Une table dans IPtables est une collection de règles qui définissent comment les paquets réseau doivent être traités. Chaque table a un rôle spécifique dans la gestion du trafic, que ce soit pour le filtrage, la traduction d’adresses ou la modification des paquets. Voici les principales tables utilisées dans IPtables :

Filter : Il s’agit de la table principale qui s’occupe du filtrage des paquets. Elle décide si les données peuvent passer ou si elles doivent être bloquées. C’est cette table qui est la plus couramment utilisée pour définir les règles de sécurité sur un système.

NAT : La table NAT (Network Address Translation) facilite la connexion des ordinateurs d’un réseau privé à Internet en utilisant une adresse IP publique comme j’ai configuré ici. Cela est particulièrement utile dans les configurations où plusieurs appareils partagent une seule adresse IP externe, comme dans un réseau domestique ou d’entreprise.

Mangle : Cette table permet de modifier certains aspects des paquets, comme leurs options TOS (Type of Service), pour des tâches spécifiques. Elle est souvent utilisée pour optimiser le trafic réseau, par exemple en ajustant les priorités des paquets pour améliorer la qualité de la connexion.

Chaînes :

Une chaîne est une série de règles à travers lesquelles les paquets passent. Les chaînes sont associées aux tables et déterminent ce qu’il advient des paquets en fonction des règles définies. Chaque table contient plusieurs chaînes, correspondant à différentes étapes du traitement des paquets :

INPUT : Cette chaîne gère les données entrantes qui sont destinées à l’ordinateur lui-même. Elle vérifie si ces paquets doivent être acceptés, rejetés ou ignorés. Par exemple, lorsqu’une connexion SSH est établie vers votre serveur, elle passe par la chaîne INPUT.

FORWARD : La chaîne FORWARD s’occupe des paquets qui transitent à travers l’ordinateur mais ne lui sont pas destinés directement. Cette chaîne est essentielle lorsque l’ordinateur agit comme un routeur, redirigeant le trafic d’un réseau à un autre. Par exemple, lorsque votre serveur fait office de passerelle entre deux réseaux.

OUTPUT : Cette chaîne surveille les données qui sortent de l’ordinateur, c’est-à-dire les paquets générés localement et envoyés vers l’extérieur. Par exemple, quand votre serveur télécharge des mises à jour depuis Internet.

En résumé, les tables regroupent les règles en fonction du type de traitement des paquets, tandis que les chaînes sont les chemins que suivent les paquets à travers ces règles pour déterminer leur sort. Ensemble, ces éléments offrent un contrôle précis et granulaire sur le trafic réseau, assurant à la fois la sécurité et l’efficacité des communications sur un système Linux.

Règles dans les chaînes

Les règles spécifient des actions telles que :
Autoriser ou bloquer des données venant de certaines adresses.
Contrôler l’accès à des services spécifiques comme des sites web ou des jeux.
Prévenir les surcharges en limitant le nombre de connexions simultanées.

Cet ensemble de fonctionnalités fait d’IPtables un élément crucial pour la sécurité réseau, permettant une gestion détaillée et efficace des données traversant votre système.

Prérequis

  • Un système Debian est installé.
  • Droits d’administrateur (accès root ou sudoers).

Je vais utiliser Debian 12 Bookworm, installé sur Proxmox.

Vérification d’autres pare-feu installés :

Avant d’installer IPtables, il est également important de s’assurer qu’aucun autre pare-feu ne soit actif, car cela pourrait interférer avec la configuration d’IPtables. Vous pouvez vérifier la présence d’autres pare-feu comme ufw (Uncomplicated Firewall) ou firewalld :

Pour vérifier si ufw est actif :

sudo systemctl status ufw

Pour vérifier si firewalld est actif :

sudo systemctl status firewalld

Dans mon système aucune pare-feu ne pas installer mais si dans votre cas il est installer il faut désactiver et supprimer pour éviter les conflits. Voici le petite instruction:

Désactiver et supprimer les pare-feu incompatibles :

Si vous trouvez que d’autres pare-feu sont installés et actifs, vous devriez les désactiver et les désinstaller pour éviter tout conflit avec IPtables :

Pour désactiver et désinstaller ufw :

sudo systemctl stop ufw 
sudo systemctl disable ufw 
sudo apt-get remove ufw

Pour désactiver et désinstaller firewalld :

sudo systemctl stop firewalld 
sudo systemctl disable firewalld 
sudo apt-get remove firewalld

En vous assurant que seul IPtables est actif, vous éviterez les problèmes de conflits entre pare-feu et vous pourrez configurer votre système de sécurité de manière plus fiable.

Installation d’IPtables

Ouvrez un terminal et exécutez la commande suivante pour installer IPtables si ce n’est pas déjà fait :

sudo apt-get update 
sudo apt-get install iptables

Pour avoir la possibilité de sauvegarder les règles, il faut installer iptables-persistent :

sudo apt-get install iptables-persistent

Vérification de l’installation d’IPtables

Pour vérifier si IPtables est installé et pour afficher les règles actuelles, utilisez la commande suivante :

sudo iptables -L

 

Structure de la Commande IPtables

Avant de commencer, examinons la structure d’une commande IPtables, car elle est fondamentale pour comprendre comment configurer un pare-feu sur votre système. Voici la structure générale d’une commande IPtables :

iptables -t [table] [action] [chaîne] [options supplémentaires]

Explication de la structure :

-t [table] : Spécifie la table à utiliser. Il existe plusieurs tables dans IPtables, mais les plus courantes sont :

  • filter : Table par défaut utilisée pour le filtrage des paquets (gère les règles de sécurité).
  • nat : Utilisée pour la traduction d’adresses réseau (gère le NAT).
  • mangle : Permet de modifier les paquets (ajustement des priorités, options spéciales).

Exemple :

Ici, la table nat est utilisée pour rediriger le trafic entrant sur le port 80 vers une autre adresse IP.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

[action] : Indique l’action à effectuer sur les règles. Les actions courantes incluent :

  • (Append) : Ajoute une règle à la chaîne spécifiée.
  • -D (Delete) : Supprime une règle de la chaîne spécifiée.
  • -I (Insert) : Insère une règle à un endroit précis dans la chaîne.
  • -L (List) : Affiche les règles actuelles.

Exemple :

Supprime une règle de la chaîne INPUT qui autorisait les connexions SSH sur le port 22.

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

[chaîne] : Spécifie la chaîne où la règle doit être appliquée. Les chaînes les plus utilisées sont :

  • INPUT : Traite les paquets entrant sur le serveur.
  • OUTPUT : Traite les paquets sortant du serveur.
  • FORWARD : Traite les paquets transitant à travers le serveur, lorsqu’il agit comme un routeur.

Exemple :

Ajoute une règle dans la chaîne OUTPUT pour autoriser le trafic sortant sur le port 443 (HTTPS).

iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

[options supplémentaires] : Définit des critères spécifiques pour la règle, comme le protocole, le port, ou l’adresse IP.

  • -p (protocol) : Spécifie le protocole (tcp, udp, icmp).
  • –dport (destination port) : Spécifie le port de destination (par exemple 80 pour HTTP).
  • -j (jump) : Indique l’action à effectuer si la règle correspond (ACCEPT, DROP, REJECT).

Exemple :

Ajoute une règle à la chaîne INPUT pour accepter les requêtes ICMP de type echo-request (PING).

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

 

Maintenant, vous pouvez facilement créer des règles de pare-feu sur mesure, adaptées à vos besoins de sécurité réseau.

Configuration d’IPtables

Après avoir compris la structure des commandes IPtables, nous allons créer quelques règles.

Ajouter la Règle pour Autoriser les PING (ICMP)

Pour permettre à votre serveur de répondre aux PING, ajoutez la règle suivante :

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Explication :
-A INPUT : Ajoute une règle à la chaîne INPUT, qui contrôle le trafic entrant.
-p icmp : Sélectionne le protocole ICMP, utilisé pour les messages PING.
–icmp-type echo-request : Spécifie que seuls les messages de type PING (echo-request) seront acceptés.
-j ACCEPT : Permet d’accepter ce type de trafic.

Vérification de la Règle Ajoutée

Vérifiez que la règle a été ajoutée avec succès en exécutant :

sudo iptables -L -v -n

Vérifier si l’on peut pinger le serveur,
Dans mon cas, je vais effectuer un ping sur le serveur à l’adresse 192.168.0.250 :

ping 192.168.0.250

Ajouter la Règle pour Bloquer les PING (ICMP)

Tout d’abord, nous allons supprimer la règle qui autorise le PING afin d’éviter les conflits :

sudo iptables -D INPUT -p icmp --icmp-type echo-request -j ACCEPT

Explication :
-D INPUT : Supprime (-D) une règle de la chaîne INPUT.
-p icmp : Spécifie le protocole ICMP, utilisé pour les messages PING.
–icmp-type echo-request : Indique que la règle s’applique aux paquets de type echo-request (requêtes PING).
-j ACCEPT : La règle supprimée acceptait ces paquets. Après suppression, les requêtes PING ne seront plus acceptées par cette règle.

Vérification

Vérifiez que la règle a bien été supprimée :

sudo iptables -L -v -n

Mais on peut toujours pinger le serveur car, par configuration par défaut dans IPtables, cette option n’est pas bloquée. C’est pourquoi nous avons besoin d’ajouter une nouvelle règle qui bloque le ping :

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Explication :
-A INPUT : Ajoute la règle à la chaîne INPUT pour le trafic entrant.
-p icmp : Spécifie le protocole ICMP.
–icmp-type echo-request : Correspond aux paquets de type PING.
-j DROP : Bloque (ignore) ce type de trafic.

Vérification

Vérifiez que la règle a bien été ajoutée :

sudo iptables -L -v -n

Tester la Configuration

Pour tester depuis une autre machine, je vais “pinger” mon serveur qui a l’adresse 192.168.0.250 depuis une autre machine :

ping 192.168.0.250

 

Et je ne peux pas pinger mon serveur car la règle IPtables bloque les PING entrants depuis l’extérieur.

Ajouter le port SSH 222 et bloquer le port 22

Si vous souhaitez changer le port SSH et utiliser le port 222 à la place de 22, il faut d’abord autoriser les connexions SSH sur le port 222.
Règle pour autoriser le port 222 :

sudo iptables -A INPUT -p tcp --dport 222 -j ACCEPT

Ensuite, modifiez le port SSH dans le fichier de configuration /etc/ssh/sshd_config et redémarrez le service SSH.
Puis, bloquez les connexions SSH sur le port 22.

Règle pour bloquer le port 22 :

sudo iptables -A INPUT -p tcp --dport 22 -j DROP

 

Ajouter les ports 80 et 443 pour le serveur web

Pour ouvrir les ports 80 (HTTP) et 443 (HTTPS) pour un serveur web, utilisez les règles suivantes :
Règle pour autoriser le port 80 (HTTP) :

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Règle pour autoriser le port 443 (HTTPS) :

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

C’est tout, vos ports 80 et 443 sont maintenant ouverts pour le trafic web !

Accepter le port 53 (DNS)

Pour accepter les connexions sur le port 53 (DNS), utilisez les règles suivantes :

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

Le port 53 est maintenant ouvert pour les connexions DNS !

 

Sauvegarder les règles IPtables de manière permanente

Sauvegarder les règles actuelles :

sudo iptables-save > /etc/iptables/rules.v4

OU

sudo netfilter-persistent save

Redémarrer le service pour appliquer les règles :

sudo systemctl restart netfilter-persistent

Les règles IPtables seront maintenant chargées à chaque démarrage du système !

Voilà, vous avez configuré les bases d’IPtables sur Debian 12 Bookworm pour sécuriser votre serveur !

Bonne chance!

Comments are closed