Quelle est la table mangle dans iptables?

28

J'utilise des règles iptables pour filtrer et manipuler les paquets sur mon serveur Ubuntu. mais je ne peux pas comprendre la table mangle.

Citant ce tutoriel iptables :

Ce tableau devrait, comme nous l'avons déjà noté, être principalement utilisé pour la manipulation de paquets. En d'autres termes, vous pouvez librement utiliser les correspondances mangle, etc. qui pourraient être utilisées pour modifier les champs TOS (Type Of Service), etc.

Il est fortement conseillé de ne pas utiliser ce tableau pour tout filtrage; aucun DNAT, SNAT ou Masquerading ne fonctionnera dans ce tableau.

Quelqu'un peut-il me décrire la table mangle et fournir des exemples pour comprendre quand je dois l'utiliser?

pylover
la source
6
La iptables(8)page de manuel contient toutes les informations que vous souhaitez, y compris plusieurs bons exemples d'utilisation de la table mangle.
Michael Hampton

Réponses:

23

Suite aux autres bonnes réponses, j'ai récemment dû utiliser la table mangle pour ajuster les écarts MTU (unité de transmission maximale) causés par le trafic acheminé via PPPoE, PPP et ATM, chacun ajoutant des frais généraux qui réduisent la charge utile disponible pour IP à partir des 1500 octets habituels d'une trame Ethernet.

Les systèmes à chaque extrémité du tuyau, comme c'est normal, auraient leur MTU à la valeur par défaut régulière de 1500 et ils essaieraient donc d'envoyer des trames IP aussi grandes. Étant donné que la taille réelle de la charge utile disponible était plus petite, cela aurait causé la fragmentation des paquets, sauf que souvent l'expéditeur demanderait que les paquets ne soient pas fragmentés et, en tant que tels, ils finissent par être entièrement supprimés.

Dans un monde idéal, la découverte de MTU de chemin aurait permis aux points d'extrémité d'ajuster leur MTU au besoin, mais cette découverte dépend d'ICMP, et les réseaux hors de mon contrôle étaient souvent configurés pour supprimer ICMP pour des raisons de sécurité.

Le seul choix était d'utiliser le désamorçage de paquets dans mon routeur afin de modifier les paquets TCP SYN pour réduire la taille maximale des segments au niveau de la couche transport:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452

Ce genre de chose est désordonné et devrait idéalement être évité, mais je n'avais pas d'autres options et cela a résolu le problème.

J'espère que ces exemples vous aideront, ainsi que la page de manuel.

Kevin
la source
23

J'ai récemment trouvé une bonne explication ici . Il est essentiellement utilisé pour définir des en-têtes spécifiques pour les paquets IP afin d'affecter la décision de routage prise plus loin. Le cas échéant, l'option TTL est probablement la plus intéressante:

La cible TTL est utilisée pour modifier le champ TTL (Time To Live) du paquet. Nous pourrions dire aux paquets de n'avoir qu'un TTL spécifique et ainsi de suite. Une bonne raison à cela pourrait être que nous ne voulons pas nous donner à des fournisseurs de services Internet curieux. Certains fournisseurs de services Internet n'aiment pas que les utilisateurs exécutent plusieurs ordinateurs sur une seule connexion, et certains fournisseurs de services Internet sont connus pour rechercher un hôte unique générant des valeurs TTL différentes, et considèrent cela comme l'un des nombreux signes de plusieurs ordinateurs connectés à un seul connexion.

Les autres cibles sont TOS, MARK, SECMARK, CONNSECMARK.

BubuIIC
la source
4
Mangle est également utilisé dans QOS pour gérer le marquage des paquets ou dans la distribution de charge de données pour distribuer les paquets sur différentes routes.
TomTom
8

En tant que noob iptables, je dirais: La table mangle permet de modifier certaines entrées spéciales dans l'en-tête des paquets. (comme: Type de service, Time To Live) (il permet également de définir des marques spéciales et des marques de contexte de sécurité)

iptablesnoob
la source
2

Il y a une bonne plongée en profondeur mais pas trop difficile à comprendre le tutoriel sur iptables ici .

La table mangle est utilisée pour modifier les en-têtes IP du paquet de différentes manières. Par exemple, vous pouvez ajuster la valeur TTL (Time to Live) d'un paquet, en allongeant ou en raccourcissant le nombre de sauts de réseau valides que le paquet peut supporter. D'autres en-têtes IP peuvent être modifiés de la même manière.

Cette table peut également placer une "marque" de noyau interne sur le paquet pour un traitement ultérieur dans d'autres tables et par d'autres outils de mise en réseau. Cette marque ne touche pas le paquet réel, mais ajoute la marque à la représentation du paquet par le noyau.

Cela m'a beaucoup aidé, car cela explique également clairement comment toutes les pièces s'assemblent et interagissent les unes avec les autres.

rbennell
la source