web-dev-qa-db-fra.com

Quelle est la table mangle dans iptables?

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 de 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 utiliser librement 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?

32
pylover

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 mangling 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.

25
Kevin

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 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 il existe des fournisseurs de services Internet connus pour rechercher un seul hôte générant différentes valeurs TTL, et prendre cela comme l'un des nombreux signes de plusieurs ordinateurs connectés à une seule connexion.

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

24
BubuIIC

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é)

8
iptablesnoob

Il y a une bonne plongée profonde mais pas trop difficile à comprendre 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 manière similaire façons.

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'emboîtent et interagissent les unes avec les autres.

2
rbennell