3 votes

Changer le MSS dans iptables

J'ai deux configurations dans lesquelles je veux changer le MSS sur les paquets qui circulent dans un système. Dans la première, j'ai enp2s0 et enp3s0 configurés comme un pont. Existe-t-il un moyen pour qu'iptables modifie le MSS sur le paquet entrant avant de le retransmettre ?

[root@localhost network-scripts]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:60:e0:6f:8c:62 brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 00:60:e0:6f:8c:63 brd ff:ff:ff:ff:ff:ff
4: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:60:e0:6f:8c:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.248/24 brd 192.168.5.255 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet6 fe80::1842:306e:fb55:fe3/64 scope link 
       valid_lft forever preferred_lft forever
5: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 00:60:e0:6f:8c:64 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:60:e0:6f:8c:63 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::260:e0ff:fe6f:8c63/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost network-scripts]# 

Dans mon deuxième cas, j'ai configuré tout le trafic pour qu'il aille vers un tun0 fictif qui envoie le trafic vers la file d'attente 0 où un logiciel de type snort analyse les paquets.

root@pink:~/blue# iptables-save 
# Generated by iptables-save v1.6.0 on Sun Jan 14 13:22:07 2018
*raw
:PREROUTING ACCEPT [84:6848]
:OUTPUT ACCEPT [21:2348]
-A PREROUTING -i tun0 -j NFQUEUE --queue-num 0
COMMIT
# Completed on Sun Jan 14 13:22:07 2018
# Generated by iptables-save v1.6.0 on Sun Jan 14 13:22:07 2018
*filter
:INPUT ACCEPT [110838:165446612]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [87556:6202390]
COMMIT
# Completed on Sun Jan 14 13:22:07 2018
root@pink:~/blue#

J'ai essayé ceci https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4721.html mais cela ne semble pas fonctionner.

6voto

scai Points 2179

Vous pouvez utiliser la cible iptables TCPMSS pour modifier la valeur TCP MSS, c'est-à-dire effectuer un bridage MSS.

Pour forcer un MSS spécifique (ici : 800), utilisez :

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 800

Notez que cela devient un peu plus délicat si vous utilisez conntrack. Cette règle doit venir avant la règle du conntrack. Sinon, cela ne fonctionnera que pour les paquets SYN mais pas pour les SYN ACKs qui seront acceptés par conntrack avant d'atteindre la règle TCPMSS.

Notez également que le serrage MSS est un hack et qu'il n'est nécessaire que si vous avez des applications d'utilisateur final cassées.

0 votes

En ce qui concerne "le bridage MSS est un piratage" : bien que cela soit vrai, sur l'internet, vous n'avez aucune influence sur un serveur distant qui fait des choses stupides. Un phénomène assez répandu est que les serveurs rejettent des paquets ICMP, ce qui cause des problèmes. Voici une citation de la page de manuel d'iptables sur la cible TCPMSS : "Cette cible est utilisée pour surmonter les FAI ou les serveurs criminels qui bloquent les paquets "ICMP Fragmentation Needed" ou "ICMPv6 Packet Too Big"". Dans la plupart des cas --clamp-mss-to-pmtu est sans doute mieux adaptée que la définition d'un MSS statique à l'aide de l'option --set-mss .

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