NOPE LinkedIn

Catégories:
firewall
linux

Contrôler le traffic réseaux avec iptables

Important
Article en cours de rédaction
Note
Version française de la documentation Iptables Tutorial 1.2.2 traduite par Guillaume Audirac et Marc Blanc. La version originale de la documentation est à l’adresse https://www.frozentux.net/iptables-tutorial/fr/book1.html

Traversée des tables et des chaînes

Ce paragraphe décrit la façon dont les paquets traversent les différentes chaînes, et dans quel ordre. De même, il explique l’ordre dans lequel les tables sont traversées. Vous percevrez l’importance de ce fonctionnement plus loin, lors de l’écriture de vos propres règles. D’autres points seront examinés, liés à des éléments dépendants du noyau, car ils entrent également en considération dans ce chapitre. Entre autres, les différentes décisions de routage. C’est particulièrement utile si vous voulez écrire des règles pour iptables qui peuvent modifier les consignes/règles de routage des paquets, c-à-d. pourquoi et comment les paquets sont routés; le DNAT et le SNAT sont des exemples caractéristiques. Bien sûr, il ne faut pas oublier les bits de TOS.

Généralités

Quand un paquet arrive pour la première fois dans un pare-feu, il rencontre le niveau matériel, puis il est recueilli par le pilote de périphérique approprié au sein du noyau. Ensuite, le paquet enchaîne une succession d’étapes dans le noyau, avant d’être envoyé à l’application adéquate (localement), ou expédié à un autre hôte - ou quoi que ce soit d’autre.

D’abord, analysons un paquet destiné à la machine locale. Il enchaîne les étapes suivantes avant d’être réellement délivré à l’application qui le reçoit :

Hôte local destinataire (votre propre machine)

Étape Table Chaîne Commentaire
1 Sur le câble (ex. Internet)
2 Arrive sur l’interface (ex. eth0)
3 raw PREROUTING Cette chaîne sert normalement à modifier les paquets, i.e. changer les bits de TOS, etc.
4
5 mangle PREROUTING Chaîne principalement utilisée pour modifier les paquets, i-e, changement de TOS, etc.
6 nat PREROUTING Cette chaîne sert principalement au DNAT. Évitez de filtrer dans cette chaîne puisqu’elle est court-circuitée dans certains cas.
7 Décision de routage, i.e. le paquet est-il destiné à notre hôte local, doit-il être réexpédié et où ?
8 mangle INPUT Ici, il atteint la chaîne INPUT de la table mangle. Cette chaîne permet de modifier les paquets, après leur routage, mais avant qu’ils soient réellement envoyés au processus de la machine.
9 filter INPUT C’est l’endroit où est effectué le filtrage du trafic entrant à destination de la machine locale. Notez bien que tous les paquets entrants et destinés à votre hôte passent par cette chaîne, et ceci quelle que soit leur interface ou leur provenance d’origine.
10 Processus/application local (i.e. programme client/serveur)

Remarquez que cette fois, le paquet est transmis à travers la chaîne INPUT au lieu de la chaîne FORWARD. C’est parfaitement logique. Et c’est certainement la seule chose logique à vos yeux dans le parcours des tables et des chaînes pour le moment, mais si vous continuez d’y réfléchir, vous trouverez ceci de plus en plus clair au fur et à mesure. À présent, analysons les paquets sortant de notre hôte local et les étapes qu’ils enchaînent.

Hôte local source (votre propre machine)

Étape Table Chaîne Commentaire
1 Processus/application local (i.e. programme client/serveur)
2 Décision de routage. Quelle adresse source doit être utilisée, quelle interface de sortie, et d’autres informations nécessaires qui doivent être réunies.
3 raw OUTPUT C’est l’endroit où le traçage de connexion prend place pour les paquets générés localement. Vous pouvez marquer les connexions pour qu’elles ne soient pas tracées par exemple.
4 C’est ici que le traçage de connexion se situe pour les paquets générés localement, par exemple les changements d’état, etc. Voir le chapitre La machine d’état pour plus d’information.
5 mangle OUTPUT C’est là où les paquets sont modifiés. Il est conseillé de ne pas filtrer dans cette chaîne, à cause de certains effets de bord.
6 nat OUTPUT Cette chaîne permet de faire du NAT sur des paquets sortant du pare-feu.
7 Décision de routage, comment les modifications des mangle et nat précédents peuvent avoir changé la façon dont les paquets seront routés.
8 filter OUTPUT C’est de là que les paquets sortent de l’hôte local.
9 mangle POSTROUTING La chaîne POSTROUTING de la table mangle est principalement utilisée lorsqu’on souhaite modifier des paquets avant qu’ils quittent la machine mais après les décisions de routage. Cette chaîne est rencontrée d’une part par les paquets qui ne font que transiter par le pare-feu, d’autre part par les paquets créés par le pare-feu lui-même.
10 nat POSTROUTING C’est ici qu’est effectué le SNAT. Il est conseillé de ne pas filtrer à cet endroit à cause des effets de bord, certains paquets peuvent se faufiler même si un comportement par défaut a été défini pour la cible DROP.
11 Sort par une certaine interface (ex. eth0)
12 Sur le câble (ex. Internet)

Dans cet exemple, on suppose que le paquet est destiné à un autre hôte sur un autre réseau. Le paquet parcourt les différentes étapes de la façon suivante :

Paquets redirigés

Étape Table Chaîne Commentaire
1 Sur le câble (ex. Internet)
2 Arrive sur l’interface (ex. eth0)
3 raw PREROUTING Ici vous pouvez placer une connexion qui ne sera pas interprétée par le système de traçage de connexion.
4 C’est ici que le traçage de connexion généré non-localement prend place, nous verrons celà dans le chapitre La machine d’état.
5 mangle PREROUTING Cette chaîne est typiquement utilisée pour modifier les paquets, i.e. changer les bits de TOS, etc.
6 nat PREROUTING Cette chaîne sert principalement à réaliser du DNAT. Le SNAT est effectué plus loin. Evitez de filtrer dans cette chaîne car elle peut être court-circuitée dans certains cas.
7 Décision de routage, c-à-d. le paquet est-il destiné à votre hôte local, doit-il être redirigé et où ?
8 mangle FORWARD Le paquet est alors envoyé à la chaîne FORWARD de la table mangle. C’est utile pour des besoins très spécifiques, lorsque l’on souhaite modifier des paquets après la décision de routage initiale, mais avant la décision de routage finale effectuée juste avant l’envoi du paquet.
9 filter FORWARD Le paquet est routé vers la chaîne FORWARD. Seuls les paquets réexpédiés arrivent ici, et c’est ici également que tout le filtrage est effectué. Notez bien que tout trafic redirigé passe par ici (et pas seulement dans un sens), donc vous devez y réfléchir en rédigeant vos règles.
10 mangle POSTROUTING Cette chaîne est employé pour des formes particulières de modification de paquets, que l’on veut appliquer postérieurement à toutes les décisions de routage, mais toujours sur cette machine.
11 nat POSTROUTING Cette chaîne est employée principalement pour le SNAT. Évitez de faire du filtrage ici, car certains paquets peuvent passer cette chaîne sans être vérifiés. C’est aussi l’endroit où l’on fait du masquerading (masquage d’adresse).
12 Sort par l’interface de sortie (ex. eth1).
13 Sort de nouveau par le câble (ex. LAN).

Comme vous pouvez le constater, il y a de nombreuses étapes à franchir. Un paquet peut être arrêté dans n’importe quelle chaîne d’iptables, et même ailleurs s’il est malformé. Pourtant, il est intéressant de se pencher sur le sort du paquet vu par iptables. Remarquez qu’aucune chaîne ou table spécifique n’est définie pour des interfaces différentes, ou quoi que ce soit de semblable. La chaîne FORWARD est systématiquement parcourue par les paquets qui sont redirigés par l’intermédiaire de ce pare-feu/routeur.

Avertissement
N’utilisez pas la chaîne INPUT pour filtrer! INPUT n’a de sens que pour des paquets destinés à votre hôte local, autrement dit qui ne seront routés vers aucune autre destination.
IPTABLES: Les cheminents possibles d’un paquet

Example architecture DNS

Pour être plus clair, ce schéma mérite quelques explications. Si un paquet atteignant la première décision de routage n’est pas destiné à la machine locale, il sera orienté vers la chaîne FORWARD. En revanche, s’il est destiné à une adresse IP que la machine écoute, ce paquet sera envoyé vers la chaîne INPUT, et donc à la machine locale.

Il est important de remarquer que même si des paquets sont destinés à la machine locale, leur adresse de destination peut être modifiée à l’intérieur de la chaîne PREROUTING par une opération de NAT. En effet, puisque ceci a lieu avant la première décision de routage, le paquet ne sera examiné qu’après un éventuel changement. A cause de cette particularité, le routage peut être altéré avant que la décision de routage ne soit prise. Notez bien que tous les paquets transiteront par l’un ou l’autre des chemins de ce schéma. Si vous réalisez du DNAT sur un paquet pour le renvoyer sur le réseau duquel il provient, il continuera malgré tout sa route à travers les chaînes restantes jusqu’à ce qu’il retourne sur le réseau externe.

Tip
Si vous pensez avoir besoin d’informations supplémentaires, vous pouvez utiliser le script rc.test-iptables.txt ci-dessous. Ce script de test devrait vous procurer des règles suffisantes pour expérimenter et comprendre de quelle façon les tables et les chaînes sont traversées.
Fichier test-iptables
#!/bin/bash
#
# rc.test-iptables - test script for iptables chains and tables.
#
# Copyright (C) 2001  Oskar Andreasson <bluefluxATkoffeinDOTnet>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307   USA
#

#
# Filter table, all chains
#
iptables -t filter -A INPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter FORWARD:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter FORWARD:"

#
# NAT table, all chains except OUTPUT which don't work.
#
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat OUTPUT:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat OUTPUT:"

#
# Mangle table, all chains
#
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle POSTROUTING:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle POSTROUTING:"

La table Mangle

Comme il a déjà été précisé, le rôle principal de cette table devrait être de modifier des paquets. En d’autres termes, vous pouvez utiliser en toute liberté les correspondances de la table mangle, qui permettent de changer les champs de TOS (type de service), et d’autres.

Avertissement
Il ne faut pas utiliser cette table pour effectuer du filtrage; de même, les opérations de DNAT, SNAT ou de masquerading ne fonctionnent pas dans cette table.
Les cibles suivantes sont valides uniquement dans la table mangle. Elles ne doivent pas être utilisées en dehors de cette table.

  • TOS
  • TTL
  • MARK
  • SECMARK
  • CONNSECMARK

La cible TOS permet de définir et/ou modifier le champ de Type de Service d’un paquet. C’est utile pour définir des stratégies réseau concernant le choix de routage des paquets. Sachez que, d’une part ceci n’a pas été perfectionné, d’autre part ce n’est pas vraiment implémenté sur Internet car la majorité des routeurs ne se préoccupent pas de ce champ, et quelquefois même, ils adoptent un comportement erroné. Bref, ne configurez pas ce champ sur les paquets qui naviguent sur Internet, sauf si vous souhaitez leur appliquer des décisions de routage, avec iproute2.

La cible TTL permet de modifier le champ durée de vie ou TTL (Time To Live) d’un paquet. Il est possible par exemple de spécifier aux paquets d’avoir un champ TTL spécifique. Ceci peut se justifier lorsque vous ne souhaitez pas être rejeté par certains Fournisseurs d’Accès à Internet (FAI) trop indiscrets. En effet, il existe des FAI qui désapprouvent les utilisateurs branchant plusieurs ordinateurs sur une même connexion, et de fait, quelques-uns de ces FAI sont connus pour vérifier si un même hôte génère différentes valeurs TTL, supposant ainsi que plusieurs machines sont branchées sur la même connexion.

La cible MARK permet d’associer des valeurs de marquage particulières aux paquets. Elles peuvent ensuite être identifiées par les programmes iproute2 pour appliquer un routage différent en fonction de l’existence ou de l’absence de telle ou telle marque. On peut ainsi réaliser de la restriction de bande passante et de la gestion de priorité (Class Based Queuing).

La cible SECMARK peut être utilisée pour placer des marques dans un contexte de sécurité sur des paquets dans SELinux ou tout autre système de sécurité capable de gérer ces marques.

CONNSECMARK sert à copier un contexte de sécurité vers ou depuis un simple paquet ou vers une connexion complète. Elle est utilisée par SELinux ou autre système de sécurité pour affiner cette sécurité au niveau connexion.

La table Nat

Cette table devrait être utilisée seulement pour effectuer de la traduction d’adresse réseau (NAT) sur différents paquets. Autrement dit, elle ne devrait servir qu’à traduire le champ de l’adresse source d’un paquet ou celui de l’adresse destination. Précisons à nouveau que seul le premier paquet d’un flux rencontrera cette chaîne. Ensuite, les autres paquets subiront automatiquement le même sort que le premier. Voici les cibles actuelles capables d’accomplir ce genre de choses :

  • DNAT
  • SNAT
  • MASQUERADE
  • REDIRECT

La cible DNAT est généralement utile dans le cas où vous détenez une adresse IP publique et que vous désirez rediriger les accès vers un pare-feu localisé sur un autre hôte (par exemple, dans une zone démilitarisée ou DMZ). Concrètement, on change l’adresse de destination du paquet avant de le router à nouveau vers l’hôte désigné.

La cible SNAT est quant à elle employée pour changer l’adresse de source des paquets. La plupart du temps, vous dissimulerez votre réseau local ou votre DMZ, etc. Un très bon exemple serait donné par un pare-feu pour lequel l’adresse externe est connue, mais qui nécessite de substituer les adresses IP du réseau local avec celle du pare-feu. Avec cette cible, le pare-feu effectuera automatiquement sur les paquets du SNAT dans un sens et du SNAT inverse dans l’autre, rendant possible les connexions d’un réseau local sur Internet. A titre d’exemple, si votre réseau utilise la famille d’adresses 192.168.0.0/masque_réseau, les paquets envoyés sur Internet ne reviendront jamais, parce que l’IANA (institut de régulation des adresses) a considéré ce réseau (avec d’autres) comme privé, et a restreint son usage à des LANs isolés d’Internet.

La cible MASQUERADE s’utilise exactement de la même façon que la cible SNAT, mais la cible MASQUERADE demande un peu plus de ressources pour s’exécuter. L’explication vient du fait que chaque fois qu’un paquet atteint la cible MASQUERADE, il vérifie automatiquement l’adresse IP à utiliser, au lieu de se comporter comme la cible SNAT qui se réfère simplement à l’unique adresse IP configurée. Par conséquent, la cible MASQUERADE permet de faire fonctionner un système d’adressage IP dynamique sous DHCP, que votre FAI devrait vous procurer pour des connexions à Internet de type PPP, PPPoE ou SLIP.

La table Raw

La table Raw est principalement utilisée pour placer des marques sur les paquets qui ne doivent pas être vérifiés par le système de traçage de connexion. Ceci est effectué en utilisant la cible NOTRACK sur le paquet. Si une connexion rencontre une cible NOTRACK, conntrack ne tracera pas cette connexion. Ceci était impossible à résoudre sans l’ajout d’une nouvelle table, car aucune des autres tables n’est appelée jusqu’à ce que conntrack ait été lancé sur les paquets, et ait été ajouté aux tables conntrack, ou vérifié sur une connexion existante. Cette table ne supporte que les chaînes PREROUTING et OUTPUT. Aucune autre chaîne n’est nécessaire, car c’est le seul endroit où vous pouvez opérer sur les paquets avant qu’ils soient vérifiés par le traçage de connexion.

Note
Pour que cette table fonctionne, le module iptable_raw doit être chargé. Il sera chargé automatiquement si iptables est lancé avec l’option -t raw, et si le module est disponible.
Note
La table raw est relativement récente dans iptables et le noyau. Elle peut ne pas être disponible dans les premiers noyaux 2.6 et les 2.4 en dehors d’un patch.

La table Filter

La table filter sert principalement à filtrer les paquets. On peut établir une correspondance avec des paquets et les filtrer comme on le désire. C’est l’endroit prévu pour intervenir sur les paquets et analyser leur contenu, c’est-à-dire les détruire (avec la cible DROP) ou les accepter (avec ACCEPT) suivant leur contenu. Bien entendu, il est possible de réaliser préalablement du filtrage ; malgré tout, cette table a été spécialement conçue pour ça. Presque toutes les cibles sont utilisables dans celle-ci. D’autres informations seront données sur la table filter, cependant vous savez maintenant que c’est l’emplacement idéal pour effectuer votre filtrage principal.

Chaînes utilisateurs spécifiques

Si un paquet pénètre dans une chaîne comme la chaîne INPUT de la table Filter, vous pouvez spécifier une règle (saut) vers une chaîne différente dans la même table. La nouvelle chaîne doit être spécifique utilisateur, elle ne peut pas être générique comme les chaînes INPUT et FORWARD par exemple. Si nous considérons un pointeur vers une règle d’une chaîne à exécuter, ce pointeur passera de règle en règle, du sommet à la base, jusqu’à ce que la traversée de la chaîne soit close par une cible ou la même chaîne (i-e. FORWARD, INPUT, etc.). Une fois ceci fait, la stratégie par défaut de la chaîne générique sera appliquée.

iptables chaine subtraverse

Si une des ces chaînes pointe vers une autre chaîne spécifique utilisateur, le pointeur sautera cette chaîne et démarrera la traversée des chaînes depuis le sommet jusqu’à la base. Par exemple, voir comment la règle saute de l’étape 3 vers la chaîne 2 dans l’image ci-dessus. Le paquet sélectionne les correspondances contenues dans la règle 3, et cible/saute vers la chaîne 2.
Note
Les chaînes spécifiques utilisateur ne peuvent pas avoir de stratégie par défaut. Seules les chaînes génériques le peuvent. Ceci peut être contourné en ajoutant une simple règle à la fin de la chaîne, ainsi elle aura une stratégie par défaut. Si aucune règle n’est sélectionnée dans une chaîne spécifique utilisateur, le comportement par défaut sera celui de la chaîne d’origine. Comme vu dans l’image ci-dessus, la règle saute de la chaîne 2 et retourne vers la chaîne 1 règle 4.

Chaque règle dans une chaîne spécifique utilisateur est traversée jusqu’à ce que, soit une des règles corresponde – alors la cible spécifie si la traversée se termine ou continue – soit la fin de la chaîne est atteinte. Si la fin de la chaîne spécifique utilisateur est atteinte, le paquet est envoyé en retour vers la chaîne qui l’invoque. Cette chaîne peut être, soit une chaîne spécifique utilisateur soit une chaîne générique.


Le filtrage de paquets à l’aide de règles réseau telles que NAT (traduction d’adresses réseau) peut être réalisé à l’aide de iptables. Iptables utilise des ports et des protocoles et peut également être utilisé comme pare-feu.

Utiliser iptables avec IPv4

Par défaut, l’outil iptables n’est pas inclus dans votre distribution Linux. Pour utiliser iptables, vous devez disposer des privilèges root pour apporter des modifications. L’emplacement des fichiers iptables se trouve dans le répertoire /sbin. Cependant, vous apporterez des modifications à ces fichiers en appelant des commandes, et non avec un éditeur de texte.

La commande iptables

Il existe un certain nombre d’options qui peuvent être utilisées avec iptables. Avant de commencer, vous devez comprendre le fonctionnement d’iptables. Comme indiqué ci-dessus, iptables est utilisé pour définir les règles régissant le trafic réseau. Vous pouvez définir différentes tables pour gérer ces règles. Le tableau contient une variété de chaînes intégrées, mais vous pouvez ajouter vos propres chaînes. Une chaîne est une liste de règles qui correspondent à un ensemble de paquets.

Paramètres iptables de base

Pour commencer à utiliser iptables, vous devrez comprendre quelques notions de base sur la syntaxe de commande. Par exemple:

    iptables -I INPUT -s 12.34.56.78 -j DROP

Dans l’exemple ci-dessus, vous appelez iptables directement. L’option -I est pour l’insertion. L’utilisation d’une règle avec l’option d’insertion l’ajoutera au début d’une chaîne, ce sera également la règle qui sera appliquée en premier. Vous pouvez également utiliser un nombre avec l’option -I pour indiquer son emplacement dans la chaîne. Le paramètre -s avec l’adresse IP (12.34.56.78) indique la source. Enfin, le paramètre -j est pour le saut. Il spécifie la cible de la règle, c’est-à-dire l’action à effectuer si le paquet correspond.

Par exemple, la règle ci-dessus est ajoutée au début de la chaîne et elle supprimera tous les paquets de l’adresse 12.34.56.78 reçus de n’importe où.

Parameter Description
-p, -- protocol La règle, tel que TCP, UDP, etc.
-s, -- source Peut être une adresse, un nom de réseau, un nom d’hôte, etc.
-d, -- destination Une adresse, un nom d’hôte, un nom de réseau, etc.
-j, -- jump Spécifie la cible de la règle ; c’est-à-dire que faire si le paquet correspond.
-g, --goto chain Spécifie que le traitement se poursuivra dans une chaîne spécifiée par l’utilisateur.
-i, --in-interface Nomme l’interface à partir de laquelle les paquets sont reçus.
-o, --out-interface Nom de l’interface par laquelle un paquet est envoyé.
-f, --fragment La règle ne sera appliquée qu’au deuxième fragment et aux fragments suivants de paquets fragmentés.
-c, --set-counters Permet à l’administrateur d’initialiser les compteurs de paquets et d’octets d’une règle.

Tableaux par défaut

Un utilisateur root ou sudo peut créer des tables. Les tableaux sont composés de chaînes intégrées et peuvent également contenir des chaînes définies par l’utilisateur. Les tables intégrées présentes dépendront de la configuration du noyau et des modules installés. Vous trouverez ci-dessous une liste des tableaux disponibles.

Les tables par défaut sont les suivantes :

  • Filter - c’est le tableau par défaut. Ses chaînes intégrées sont:
    • Input - est pour les paquets allant aux sockets locaux
    • Forward - est pour les paquets acheminés via le serveur
    • Output - est pour les paquets générés localement
  • NAT - lorsqu’un paquet crée une nouvelle connexion, c’est la table qui est utilisée. Ses chaînes intégrées sont le préroutage, la sortie et le postroutage
    • Prerouting est pour les paquets quand ils arrivent
    • Output est pour les paquets générés localement avant que le routage n’ait lieu
    • Postrouting sert à modifier les paquets à la sortie
  • MANGLE - est utilisé pour la modification spéciale des paquets. Ses chaînes sont Pre/Post routing, Forward, Input et Output
    • Prerouting est pour les paquets entrants
    • Postrouting est pour les paquets sortants
    • Output est pour les paquets générés localement qui sont modifiés.
    • Input est pour les paquets entrant directement dans le serveur
    • Forward est pour les paquets acheminés via le serveur
  • RAW - est principalement utilisé pour configurer les exemptions du suivi des connexions. Les chaînes intégrées sont Prerouting et Output.
    • Prerouting est pour les paquets qui arrivent par l’interface réseau
    • Output est pour les processus qui sont générés localement
  • SECURITY - est utilisé pour les règles de contrôle d’accès obligatoire (Mandatory Access Control)(MAC). Après la table de filtrage, on accède ensuite à la table de sécurité. Les chaînes intégrées sont Input, Output, and Forward.
    • Input se rapporte aux paquets entrant dans le serveur
    • Output est pour les paquets générés localement
    • Forward est pour le paquet passant par le serveur

Options de base d’iptables

Il y a un certain nombre d’options qui peuvent être utilisées avec la commande iptables. Ils sont listés ci-dessous :

Option Description
-A --append Ajoutera une ou plusieurs règles à la fin de la chaîne sélectionnée.
-C --check Recherche une règle correspondant aux spécifications de la chaîne sélectionnée.
-D --delete Supprime une ou plusieurs règles de la chaîne sélectionnée.
-F --flush L’option équivaut à supprimer toutes les règles une par une.
-I --insert Insère une ou plusieurs règles dans la chaîne sélectionnée en tant que numéro de règle donné.
-L --list Les affichages sont les règles de la chaîne sélectionnée
-n --numeric Affiche l’adresse IP et le numéro de poste au format numérique. Par défaut, il essaie d’afficher le nom d’hôte, etc.
-N --new-chain <name> Crée une nouvelle chaîne définie par l’utilisateur.
-v --verbose Fournit plus d’informations lorsqu’il est utilisé avec l’option de liste.
-X --delete-chain <name> Supprime la chaîne définie par l’utilisateur spécifiée.

Configuration d’iptables

Iptables peut être configuré et utilisé de différentes manières. Les sections suivantes expliquent comment configurer les règles par port et IP, ainsi que les adresses de liste noire/blanche.

Blocage du trafic par port

Vous pouvez utiliser un port pour bloquer tout le trafic entrant sur une interface spécifique. Par exemple:

    iptables -A INPUT -j DROP -p tcp --destination-port 110 -i eth0

Cette règle se décompose comme suit :

  • -A l’option ajoutera ou ajoutera la règle à la fin de la chaîne.
  • INPUT ajoutera la règle au tableau.
  • DROP signifie que les paquets sont rejetés.
  • -p tcp signifie que la règle n’abandonnera que les paquets TCP.
  • --destination-port 110 l’option filtre les paquets ciblés sur le port 110.
  • -i eth0 signifie que cette règle n’affectera que les paquets arrivant sur l’interface ‘’eth0’’.

Il est important de comprendre qu’iptables ne reconnaît pas les alias sur l’interface réseau. Par conséquent, si vous avez plusieurs interfaces IP virtuelles, vous devrez spécifier l’adresse de destination pour filtrer le trafic. Un exemple de commande est fourni ci-dessous :

    iptables -A INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 12.34.56.78

Vous pouvez également utiliser -D ou --delete pour supprimer des règles. Par exemple:

    iptables --delete INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 12.34.56.78
    iptables -D INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 12.34.56.78

Drop Traffic from an IP

Comme décrit dans la section précédente, afin de supprimer tout le trafic entrant d’une adresse IP spécifique, utilisez la commande iptables avec les options suivantes :

    iptables -I INPUT -s 12.34.56.87 -j DROP

Pour supprimer ces règles, ajoutez --delete ou -D à la commande comme dans les exemples suivants :

    iptables --delete INPUT -s 12.34.56.87 -j DROP
    iptables -D INPUT -s 12.34.56.87 -j DROP

Bloquer/autoriser le trafic par numéro de port

Une méthode de création d’un pare-feu consiste à bloquer tout le trafic vers le système, puis à autoriser le trafic sur certains ports. Vous trouverez ci-dessous des exemples de commandes pour illustrer le processus :

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT
    iptables -A INPUT -p icmp -m comment --comment "Allow Ping to work as expected" -j ACCEPT
    iptables -A INPUT -p tcp -m multiport --destination-ports 22,25,53,80,443,465,5222,5269,5280,8999:9003 -j ACCEPT
    iptables -A INPUT -p udp -m multiport --destination-ports 53 -j ACCEPT
    iptables -P INPUT DROP
    iptables -P FORWARD DROP

Maintenant, pour décomposer l’exemple ci-dessus, les deux premières commandes ajoutent ou ajoutent des règles à la chaîne “INPUT” afin d’autoriser l’accès à des ports spécifiques. Les options -p tcp et -p udp spécifient les types de paquets UDP ou TCP. La fonction -m multiport fait correspondre les paquets sur la base de leurs ports source ou destination, et peut accepter la spécification d’un maximum de 15 ports. Multiport accepte également des plages telles que 8999:9003 qui comptent comme 2 des 15 ports possibles, mais correspondent aux ports 8999, 9000, 9001, 9002 et 9003. La commande suivante autorise tous les paquets entrants et sortants associés aux connexions existantes afin qu’ils ne soient pas bloqués par inadvertance par le pare-feu. Les deux derniers utilisent l’option -P pour décrire la politique par défaut pour ces chaînes. Par conséquent, tous les paquets traités par INPUT et FORWARD seront supprimés par défaut.

Notez que les règles décrites ci-dessus ne contrôlent que les paquets entrants et ne limitent pas les connexions sortantes.

Liste blanche/liste noire du trafic par adresse

Vous pouvez utiliser iptables pour bloquer tout le trafic, puis autoriser uniquement le trafic provenant de certaines adresses IP. Ces règles de pare-feu sont utiles pour limiter l’accès à des ressources spécifiques au niveau de la couche réseau. Ci-dessous un exemple :

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT
    iptables -A INPUT -p icmp -m comment --comment "Allow Ping to work as expected" -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
    iptables -A INPUT -s 12.34.56.78 -j ACCEPT
    iptables -P INPUT DROP
    iptables -P FORWARD DROP

Dans la première commande, l’instruction -s 192.168.1.0/24 spécifie que toutes les adresses IP source (-s) dans l’espace d’adressage de 192.168.1 sont autorisées. Vous pouvez spécifier une plage d’adresses IP en utilisant la notation CIDR (Classless Inter-Domain Routing) ou des adresses IP individuelles comme dans la deuxième commande. La troisième commande autorise tous les paquets entrants et sortants associés aux connexions existantes. Les deux dernières commandes définissent la politique par défaut pour toutes les chaînes “INPUT” et “FORWARD” afin de supprimer tous les paquets.

Utiliser iptables pour IPv6

Lorsque vous travaillez avec IPv6, il est important de se rappeler que la commande iptables n’est pas compatible. Cependant, il existe une commande ip6tables qui est expressément destinée à travailler avec IPv6. Les options telles que ajouter, vérifier, etc. sont les mêmes qu’avec iptables. Les tables utilisées par ip6tables sont raw, security, mangle et filter. Les paramètres tels que le protocole, la source, etc. sont les mêmes. La syntaxe est essentiellement la même que celle d’IPv4. Exemple de syntaxe ci-dessous :

    ip6tables [-t table] -N chain

Pour afficher les règles configurées pour IPv6, utilisez la commande :

    ip6tables -L

Configuration des règles pour IPv6

Encore une fois, ip6tables fonctionne en utilisant des ports, des adresses spécifiques pour la liste noire, des protocoles, etc. La principale exception est que ip6tables peut utiliser des modules de correspondance de paquets étendus avec les options -m ou match, suivies du nom du module. Voici quelques-uns des modules étendus :

  • addrtype - correspond aux paquets en fonction de leur type d’adresse. Certains types d’adresses sont:
    • Local
    • Unicast
    • Broadcast
    • Multicast
  • ah - correspond aux paramètres de l’en-tête d’authentification des paquets IPsec.
  • cluster - vous pouvez déployer des clusters de passerelle et de partage de charge back-end sans équilibreur de charge.
  • comment - vous permet d’ajouter un commentaire à n’importe quelle règle.
  • connbytes - correspond au nombre d’octets ou de paquets qu’une connexion a transférés, ou au nombre moyen d’octets par paquet.

Il existe plusieurs modules qui ne sont pas répertoriés ici. Vous pouvez consulter la liste des modules étendus en utilisant la page man :

man ip6tables

Vous trouverez ci-dessous un exemple de règle utilisée dans ip6tables :

# limit the number of parallel HTTP requests to 16 for the link local network 
ip6tables -A INPUT -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT
ip6tables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Cette règle se décompose comme suit :

  • La première ligne est un commentaire.
  • -A est pour ajouter.
  • INPUT consiste à ajouter la règle au tableau.
  • -p est pour le protocole qui est TCP.
  • --syn correspond uniquement aux paquets TCP avec le bit SYN défini et les bits ACK, RST et FIN effacés.
  • --dport est le port de destination, qui est 80.
  • -s est la source, qui est la plage d’adresses locales fe80 ::/64.
  • -m est pour le match.
  • connlimit est le nom du module de paquet étendu, qui est la limite de connexion.
  • --connlimit-above 16 signifie que le nombre de connexions est supérieur à 16, seules les 16 seront utilisées.
  • --connlimit-mask 64 ce sont les hôtes du groupe utilisant une longueur de préfixe de 64.
  • -j est pour le saut, il indique à la cible de la règle ce qu’il faut faire si le paquet est une correspondance.
  • REJECT signifie que le paquet est abandonné.

Règles requises pour les allocations IPv6 non statiques

    # Vous trouverez ci-dessous les règles requises pour que votre adresse IPv6 soit correctement attribuée
    ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 --icmpv6-type redirect -m hl --hl-eq 255 -j ACCEPT

Enregistrement des règles pour iptables et ip6tables

Les modifications apportées avec les commandes iptables et ip6tables sont temporaires, de sorte que tous les ensembles de règles que vous créez disparaîtront au redémarrage. Pour éviter que cela ne se produise, consultez notre guide Securing Your Server pour savoir comment enregistrer les règles iptables et ip6tables pour votre distribution Linux.

Maintenant, vos règles sont enregistrées et devraient être disponibles lors de votre prochain redémarrage.

Introduction à iptables-persistent

Debian et Ubuntu ont un paquet supplémentaire qui facilite encore plus le travail avec iptables. Ce package enregistrera les modifications apportées à vos règles IP afin qu’elles deviennent persistantes. Cependant, vous devrez peut-être installer ce package. Après l’installation, deux fichiers seront créés qui vous permettront d’éditer et d’enregistrer toutes vos règles dans l’un de ces fichiers. Le premier fichier concerne les règles régissant IPv4 et le second les règles relatives à IPv6.

Installer iptables-persistent

Sur une Debian ou Ubuntu, utilisez la commande :

    ls /etc/iptables

Si vous recevez le message “No such file or directory,”, vous devrez installer le package persistant iptables. Utilisez la commande :

    apt-get install iptables-persistent   

Au cours de l’installation, vous serez invité deux fois. La première invite vous demande si vous souhaitez enregistrer vos règles IPv4 actuelles.

Save IPv4 rules prompt.

La deuxième invite consiste à enregistrer les règles configurées pour IPv6.

Save IPv6 rules prompt.

Une fois l’installation terminée, vous devriez voir le sous-répertoire d’iptables. Exécutez à nouveau la commande ls /etc/iptables pour vérifier :

    user@titan:~# ls /etc/iptables
    rules.v4  rules.v6

Utiliser iptables-persistent

Pour afficher les règles déjà configurées sur votre serveur, exécutez la commande suivante :

    iptables -L

Vous devriez voir une sortie similaire :

    root@titan:~# iptables -L
    Chain INPUT (policy ACCEPT)
    target      prot opt source         destination
    DROP        all  --  12.36.56.78    anywhere

    Chain FORWARD (policy ACCEPT)
    target      prot opt source         destination

    CHAIN OUTPUT (policy ACCEPT)
    target      prot opt source         destination

Les règles ci-dessus permettent l’accès à n’importe qui, de n’importe où à tout. Par conséquent, vous souhaiterez définir des règles pour empêcher tout accès non autorisé.

Règles iptables-persistent

Utilisez les fichiers rules.v4 ou rules.v6 pour ajouter, supprimer ou modifier les règles de votre serveur. Ces fichiers peuvent être modifiés à l’aide de votre éditeur de texte préféré pour fonctionner comme proxy, NAT ou pare-feu. La configuration dépend des exigences de votre serveur et des fonctions nécessaires. Vous trouverez ci-dessous un fichier à l’exception des fichiers v4 et v6 :

/etc/iptables/rules.v4
:   ~~~777
    # Generated by iptables-save v1.4.14 on Wed Apr  2 13:24:27 2014
    *security
    :INPUT ACCEPT [18483:1240117]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [17288:2887358]
    COMMIT
    ~~~
/etc/iptables/rules.v6
:   ~~~
    # Generated by ip6tables-save v1.4.14 on Wed Apr  2 13:24:27 2014
    *nat
    :PREROUTING ACCEPT [0:0]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [27:2576]
    :POSTROUTING ACCEPT [27:2576]
    COMMIT
    ~~~

Des règles existantes sont configurées dans ces fichiers. Cependant, l’un ou l’autre fichier peut être modifié à tout moment. La syntaxe pour modifier les règles de table est la même que dans les sections “Configuration d’iptables” et “Configuration des règles pour IPv6”.

Enregistrement des règles iptables-persistent

Par défaut, les règles iptables-persistent sont enregistrées au redémarrage pour IPv4 uniquement. Par conséquent, si vous exécutez à la fois IPv4 et IPv6 côte à côte, vous devrez modifier manuellement les fichiers rules.v4 et rules.v6. N’utilisez pas les commandes iptables-save > /etc/iptables/rules.v4 ou iptables-save > /etc/iptables/rules.v6 car toute modification IPv6 sera écrasée par les règles IPv4. Pour tester si votre syntaxe est correcte, utilisez la commande :

    service iptables-persistent restart

Si les règles sont correctes, le service redémarrera avec un message OK. Si la syntaxe est incorrecte, vous verrez un message FAILED. Après le redémarrage de votre service avec un message OK, redémarrez votre serveur. Les nouvelles règles doivent toujours apparaître dans les fichiers v4 ou v6. Pour vérifier que les règles sont appliquées et disponibles après le redémarrage, utilisez les commandes :

iptables -L

Or

ip6tables -L

ANNEXES

Scripts wireguard

Script postup.sh

Fichier postup.sh
WIREGUARD_INTERFACE=wg0
WIREGUARD_LAN=10.0.0.0/24
MASQUERADE_INTERFACE=enp4s0

iptables -t nat -I POSTROUTING -o $MASQUERADE_INTERFACE -j MASQUERADE -s $WIREGUARD_LAN

# Add a WIREGUARD_wg0 chain to the FORWARD chain
CHAIN_NAME="WIREGUARD_$WIREGUARD_INTERFACE"
iptables -N $CHAIN_NAME
iptables -A FORWARD -j $CHAIN_NAME

# Accept related or established traffic
iptables -A $CHAIN_NAME -o $WIREGUARD_INTERFACE -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Accept traffic from any Wireguard IP address connected to the Wireguard server
iptables -A $CHAIN_NAME -s $WIREGUARD_LAN -i $WIREGUARD_INTERFACE -j ACCEPT

# Drop everything else coming through the Wireguard interface
iptables -A $CHAIN_NAME -i $WIREGUARD_INTERFACE -j DROP

# Return to FORWARD chain
iptables -A $CHAIN_NAME -j RETURN

Script postdown.sh

Fichier postdown.sh
WIREGUARD_INTERFACE=wg0
WIREGUARD_LAN=10.0.0.0/24
MASQUERADE_INTERFACE=enp4s0
CHAIN_NAME="WIREGUARD_$WIREGUARD_INTERFACE"

iptables -t nat -D POSTROUTING -o $MASQUERADE_INTERFACE -j MASQUERADE -s $WIREGUARD_LAN

# Remove and delete the WIREGUARD_wg0 chain
iptables -D FORWARD -j $CHAIN_NAME
iptables -F $CHAIN_NAME
iptables -X $CHAIN_NAME

Scripts Iptables

Script de test iptables

Fichier test-iptables
#!/bin/bash
#
# rc.test-iptables - test script for iptables chains and tables.
#
# Copyright (C) 2001  Oskar Andreasson &lt;bluefluxATkoffeinDOTnet&gt;
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307   USA
#

#
# Filter table, all chains
#
iptables -t filter -A INPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter INPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter OUTPUT:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-request \
-j LOG --log-prefix="filter FORWARD:"
iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="filter FORWARD:"

#
# NAT table, all chains except OUTPUT which don't work.
#
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat PREROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A POSTROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat POSTROUTING:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="nat OUTPUT:"
iptables -t nat -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="nat OUTPUT:"

#
# Mangle table, all chains
#
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -A PREROUTING -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle PREROUTING:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I FORWARD 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle FORWARD:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -I INPUT 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle INPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -A OUTPUT -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle OUTPUT:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-request \
-j LOG --log-prefix="mangle POSTROUTING:"
iptables -t mangle -I POSTROUTING 1 -p icmp --icmp-type echo-reply \
-j LOG --log-prefix="mangle POSTROUTING:"

Script de purge iptables

Fichier flush-iptables
#!/bin/sh
# 
# rc.flush-iptables - Resets iptables to default values. 
# 
# Copyright (C) 2001  Oskar Andreasson &lt;bluefluxATkoffeinDOTnet&gt;
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307   USA

#
# Configurations
#
IPTABLES="/usr/sbin/iptables"

#
# reset the default policies in the filter table.
#
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

#
# reset the default policies in the nat table.
#
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

#
# reset the default policies in the mangle table.
#
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT

#
# flush all the rules in the filter and nat tables.
#
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
#
# erase all chains that's not default in filter and nat table.
#
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

Script ttl-inc.txt

Fichier ttl-inc.txt
#!/bin/bash
#
# ttl-inc.txt - short script to increase TTL of all packets on port 33434 - 33542
#
# Copyright (C) 2001  Oskar Andreasson &lt;bluefluxATkoffeinDOTnet&gt;
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307   USA
#

/usr/local/sbin/iptables -t mangle -A PREROUTING -p TCP --dport 33434:33542 -j \
TTL --ttl-inc 1