1 votes

iptables pour modifier la valeur de tcpmss

J'ai un routeur VPN, et j'ai besoin de diminuer la valeur TCP MSS pour le trafic qui passe par là. Je ne sais pas quelle table iptables est nécessaire pour faire ce travail.

Je penche pour la combinaison mangle/forward -

  iptables -t mangle -A FORWARD -o GRE_+ -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1361

Mais j'ai vu d'autres personnes l'implémenter dans la table de filtre par défaut - et il semble que cela fonctionne aussi (au moins avec l'option OUTPUT).

Pouvez-vous m'expliquer pourquoi le changement de TCP MSS fonctionne dans les deux tables et quelle est la méthode la plus correcte ? Merci

3voto

A.B Points 7722

Tout d'abord, jetons un coup d'œil à la Flux de paquets dans Netfilter et le réseau général :

Packet flow in Netfilter and General Networking

Vous pouvez voir qu'il y a les mangle/OUTPUT et le filtre/sortie et le long du chemin, une contrôle de reroutage . Le site mangle/OUTPUT (ainsi que le NAT de conntrack) a une propriété spéciale, qui n'a pas la propriété filtre/sortie chaîne : elle le fera déclencher un contrôle de reroutage chaque fois que des parties intéressantes d'un paquet ont été modifiées. (pour être honnête, je suis surpris de ne pas voir filtre/sortie après contrôle de réacheminement dans le schéma, parce que le contrôle de réacheminement pourrait simplement être la netfilter 's ip_route_me_harder() fonction).

En Objectif du TCPMSS ne fait que modifier l'option TCP MSS, qui ne fait pas partie des "parties intéressantes" cochées dans la section mangle/OUTPUT (adresses IP, TOS, marque de pare-feu) et ne déclenchera donc jamais une vérification de reroutage. Ainsi, cette cible, si elle n'est pas utilisée en synergie avec d'autres règles et/ou priorités exigeant qu'elle soit placée à un endroit ou à un autre pour des raisons non liées, a exactement le même comportement lorsqu'elle est utilisée en tant que filtre/sortie o mangle/OUTPUT .

Ceci étant dit, dans le cas du routage/transfert, la distinction entre le mangle/FORWARD et la filtre/avant est complètement arbitraire : il n'y a aucune différence fonctionnelle entre eux, sauf que mangle/FORWARD est traversé avant filtre/avant (il a une priorité/prédence inférieure) et que certaines cibles pourraient arbitrairement être autorisées uniquement dans l'un ou l'autre plutôt que dans les deux. À l'exception de cette priorité, contrairement au cas de OUTPUT, il n'y a pas de raison technique impérative pour que les deux existent. Si l'itinéraire devait être modifié par la manipulation, cela aurait déjà dû être fait dans le fichier mangle/PREROUTING cette fois, avant même que la décision concernant l'itinéraire ne soit prise.

Sur iptables le filtre est traditionnellement utilisée pour les décisions de type ACCEPT/DROP, alors que la table mangle est traditionnellement utilisé pour modifier les paquets. Ainsi, l'utilisation de TCPMSS dans le mangle semblerait plus logique, mais vous n'êtes pas obligé de suivre cette règle, surtout si c'est la seule règle qui se retrouverait dans mangle/FORWARD .

En revanche, dans nftables (où vous créez votre propre tableaux ées : elles ne sont pas fixes), la sp modification de l'itinéraire comportement d'iptables'. mangle/OUTPUT La chaîne a été séparée et placée dans son spécifique type de route qui n'existe que pour la sortie : a type route hook output chaîne. Ainsi, quelle que soit l'action de mutilation que vous effectuez, vous pouvez choisir si elle est autorisée à déclencher un contrôle de réacheminement en la plaçant dans ce type de chaîne au lieu de la chaîne type filter hook output chaîne. Dans tous les autres cas (y compris le routage/transfert), on utilise la chaîne filtre car il n'y a pas de mangle plus. Sur nftables pour le cas OUTPUT, il semblerait plus logique de mettre cette modification dans un type filter hook output plutôt qu'une type route hook output (je ne nomme pas la table, vous pourriez ajouter les deux types de chaînes dans la même table, ce n'est pas équivalent à iptables ).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X