Retour au blog

Redirection de ports avec Iptables sous Linux : un guide pratique

Redirection de ports avec Iptables sous Linux : un guide pratique

Redirection de port, également appelée mappage de ports, est une méthode permettant à des appareils distants de se connecter à un service spécifique au sein de votre réseau local privé (LAN). Comme son nom l'indique, le processus consiste à rediriger les requêtes d'un port spécifique vers un autre port ou réseau. Il modifie la destination du paquet en cours de route et est considéré comme un type d'opération de traduction d'adresse réseau (NAT) .

L'activation de la redirection de port permet aux appareils ou hôtes non connectés au réseau interne d'accéder les uns aux autres, ce qui est autrement restreint lorsqu'elle est désactivée. Vous pouvez tirer parti des avantages de la redirection de port pour bloquer des sites web cibles, améliorer la sécurité et contourner le pare-feu NAT à votre convenance.

Dans ce tutoriel, nous allons vous guider à travers les étapes de redirection de ports avec iptables sous Linux.

Prérequis

Pour suivre ce tutoriel, vous aurez besoin de :

Détails de l'hôte

Tout d'abord, nous devons connaître les détails des interfaces et des adresses des serveurs de travail. Vérifions les interfaces réseau de notre système :

Vous verrez la sortie suivante :

Ici, la sortie en surbrillance montre deux interfaces, la première eth0 attribuée à l'adresse 192.51.100.45, et la seconde eth1 attribuée à l'adresse 192.168.1.5. Parmi ces deux interfaces, l'une est publique et l'autre est privée. Nous allons exécuter une commande pour les distinguer et identifier l'interface publique, celle connectée à votre passerelle par défaut. Pour les distinguer, tapez :

Vous verrez la sortie suivante :

Données fictives pour le tutoriel

Nous utiliserons des adresses et des attributions d'interfaces fictives tout au long de ce tutoriel. Vous êtes libre d'utiliser ces données ou de les remplacer, à votre convenance.

Détails réseau du serveur web :

  • Adresse IP publique : 203.0.113.2

  • Adresse IP privée : 192.0.2.2

  • Interface publique : eth0

  • Interface privée : eth1

Détails réseau du pare-feu :

  • Adresse IP publique : 203.0.113.15

  • Adresse IP privée : 192.0.2.15

  • Interface publique : eth0

  • Interface privée : eth1

Configuration du serveur web

Commençons par notre hôte de serveur web. Tout d'abord, connectez-vous avec votre sudo utilisateur.

Installer Nginx

Tout d'abord, nous allons installer Nginx sur notre hôte de serveur web et le verrouiller afin qu'il n'écoute que son interface privée. Cela permettra à notre serveur web d'être disponible uniquement si nous avons configuré la redirection de port de manière correcte.

Ensuite, mettez à jour le cache des paquets locaux et utilisez apt pour télécharger et installer Nginx :

Ajouter des restrictions

Une fois Nginx installé sur notre hôte de serveur web, nous allons le verrouiller pour nous assurer qu'il accepte les entrées provenant des interfaces privées et de nulle part ailleurs. De plus, cela garantira que nos serveurs web ne seront actifs que si la configuration de la redirection de port est correcte.

Pour ajouter des restrictions, ouvrez le fichier de configuration du bloc serveur par défaut /etc/nginx/sites-enabled/default sur n'importe quel éditeur de texte de votre choix (ici, nous utilisons l'éditeur de texte nano), et tapez :

Dans la sortie, vous verrez la directive listen apparaître deux fois :

Port Forwarding Nginx Default File

Dans ce tutoriel, nous utilisons la première directive pour illustrer la redirection IPv4. La seconde, configurée pour IPv6, peut être supprimée. Ajoutez l'adresse IP privée de votre serveur web suivie de deux-points juste avant le 80 pour indiquer à Nginx de n'accepter que les entrées provenant de l'interface privée. Ensuite, modifiez la directive :

Port Forwarding Nginx Edited Default File

Une fois cela fait, enregistrez et fermez le fichier. Avant de continuer, assurez-vous qu'il n'y a pas d'erreurs de syntaxe. Testons le fichier :

Nginx T

Si aucune erreur ne s'affiche, vous pouvez redémarrer Nginx et activer la nouvelle configuration :

Vérification de la restriction réseau

Vérifions le niveau d'accès que nous avons à notre serveur web. Essayez d'accéder au serveur web en utilisant l'interface privée à l'aide de la curl commande :

Vous verrez la sortie suivante :

Port Forwarding Nginx Output1

Si nous essayons d'utiliser l'interface publique, nous ne pourrons pas nous connecter :

C'est exactement ce à quoi nous nous attendions.

Configurer le pare-feu pour rediriger le port 80

Continuons notre travail en implémentant la redirection de port sur notre machine pare-feu.

Activer la redirection dans le noyau

Par défaut, la plupart des systèmes ont la redirection de port désactivée (OFF). Nous allons apporter des modifications pour l'activer (ON) en effectuant quelques éditions. De plus, il est possible d'activer la redirection de port de manière permanente en utilisant les privilèges sudo comme indiqué dans les étapes suivantes.

Pour activer la redirection du trafic au niveau du noyau, tapez :

Pour activer la redirection de port de manière permanente, modifiez le fichier /etc/sysctl.conf . Ouvrez le fichier avec les privilèges sudo et tapez :

À l'intérieur, trouvez et décommentez la ligne qui ressemble à ceci :

Une fois cela fait, enregistrez et fermez le fichier. Ensuite, utilisez les commandes sysctl pour appliquer les modifications des paramètres afin de les rendre effectives :

Configuration de base du pare-feu

Tout d'abord, consultez le guide sur comment configurer un pare-feu de base sur votre machine. Une fois terminé, vous aurez :

  • Installé iptables-persistent
  • Enregistré le jeu de règles par défaut dans /etc/iptables/rules.v4
  • Une connaissance approfondie de l'ajout et de la modification de règles à l'aide de la iptables commande

Vous pouvez également consulter comment lister et supprimer les règles de pare-feu iptables.

Ajout des règles de redirection

Nous allons configurer notre pare-feu pour nous assurer que le trafic entrant sur notre interface publique ( eth0 ) sur le port 80 soit redirigé vers notre interface privée ( eth1). Par défaut, notre pare-feu de base a une chaîne FORWARD définie sur DROP le trafic. L'ajout de règles de pare-feu permettra de transférer les connexions vers notre serveur web. Pour plus de sécurité, nous allons verrouiller les règles du pare-feu pour n'autoriser que les requêtes de redirection.

Dans la chaîne FORWARD , nous accepterons les nouvelles connexions destinées au port 80 provenant de notre interface publique et se dirigeant vers notre interface privée. Nous identifierons les nouvelles connexions à l'aide de l'extension conntrack et les représenterons par un paquet TCP SYN :

Vous devez autoriser tout trafic ultérieur dans les deux sens résultant de la connexion entrante. Tapez les commandes ci-dessous pour autoriser le trafic ESTABLISHED et RELATED entre nos interfaces publique et privée :

Vérifions si notre politique sur la chaîne FORWARD est définie sur DROP:

Jusqu'à présent, nous avons ajouté quelques règles qui permettent au trafic entre nos interfaces publique et privée de passer à travers notre pare-feu. Cependant, iptables n'est pas encore informé de diriger le trafic car la configuration des règles du pare-feu reste à faire. Dans les étapes suivantes, nous ajouterons les règles NAT et ajusterons le jeu de règles permanent pour diriger le trafic.

Ajout des règles NAT pour diriger les paquets

Nous allons effectuer deux opérations distinctes afin que iptables puisse modifier correctement les paquets et rationaliser la communication avec les clients et le serveur web.

DNAT est la première opération qui commence la chaîne PREROUTING de la table nat . L'opération modifie l'adresse de destination du paquet et lui permet d'être correctement acheminé lorsqu'il passe entre les réseaux. Cependant, les clients sur le réseau public se connecteront à notre serveur pare-feu et n'auront aucune information sur la topologie de notre réseau privé. Pour transmettre des informations avec le réseau privé, modifiez l'adresse de destination de chaque paquet pour lui permettre d'atteindre correctement notre serveur web de destination.

Il est crucial de noter que nous nous concentrons sur la configuration de la redirection de port. Effectuer du NAT sur chaque paquet arrivant sur le pare-feu ne fait pas partie de notre tutoriel. Nous ferons correspondre les paquets sur le port 80 à l'adresse IP privée de notre serveur web :

Le paquet sera correctement acheminé vers notre serveur web contenant l'adresse d'origine du client comme adresse source. Malgré les tentatives du serveur pour envoyer la réponse directement à cette adresse, il sera impossible d'établir une connexion TCP légitime.

Pour configurer un routage correct, nous allons modifier l'adresse source du paquet. Modifions l'adresse source pour qu'elle corresponde à l'adresse IP privée de notre serveur pare-feu. Après modification, la réponse sera renvoyée au pare-feu, qui la transmettra en retour au client.

Pour activer cette fonctionnalité, ajoutez une règle à la chaîne POSTROUTING de la table nat évaluée juste avant que les paquets ne soient envoyés sur le réseau. Ensuite, faites correspondre les paquets destinés à notre serveur web par adresse IP et port :

Une fois cette règle en place, notre serveur web devrait être accessible en pointant notre navigateur web vers l'adresse publique de notre machine pare-feu :

Vous verrez la sortie suivante :

Nginx Output2

Notre configuration de redirection de port est terminée.

Ajuster le jeu de règles permanent

Après avoir terminé la configuration de la redirection de port, nous allons l'enregistrer dans notre jeu de règles permanent. Si vous souhaitez conserver les commentaires dans le jeu de règles actuel, utilisez le service iptables-persistent pour enregistrer vos règles :

Vous pouvez également l'ouvrir et le modifier manuellement pour conserver les commentaires dans votre fichier :

Ensuite, configurez la table filter et la table nat pour ajouter respectivement les règles de la chaîne FORWARD et les règles de ROUTING respectivement. L'ajustement de la table nat nous permettra d'ajouter des règles PREROUTING et POSTROUTING comme le montre l'exemple ci-dessous :

Après avoir ajouté les valeurs ci-dessus, enregistrez et fermez le fichier. Ensuite, saisissez la commande ci-dessous pour tester la syntaxe de vos règles :

Si vous ne voyez aucune erreur, chargez le jeu de règles :

Vérifions que notre serveur web est toujours accessible via l'adresse IP publique de votre pare-feu :

Conclusion

À la fin de ce tutoriel, vous devriez être à l'aise avec la redirection de ports sur un serveur Linux avec iptables. Vous pouvez exploiter les capacités de redirection de ports pour masquer la topologie de votre réseau privé tout en rationalisant le trafic de services pour qu'il circule librement à travers votre machine pare-feu passerelle.

Comme le processus repose explicitement sur la sécurité de votre réseau et les ports utilisés, il est sûr. Il peut y avoir un risque si vous n'avez pas de pare-feu de sécurité ou de sécurité VPN sur votre réseau. Par conséquent, il est conseillé de configurer le pare-feu comme décrit dans ce tutoriel. Nous espérons que ce guide vous aidera à rester en sécurité sur Internet lorsque vous utilisez votre réseau privé.

Pour explorer d'autres solutions de pare-feu que vous pouvez implémenter sur votre système, consultez ces ressources sur notre blog:

Bonne informatique !

author

Pranay Kapgate

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.