Nastavenie MSS pre TCP na linuxovej bráne IPsec: čo to rieši
Malé požiadavky fungujú a veľké odpovede sa zaseknú. Overte, či je pravidlo MSS na vnútornej ceste TCP správna oprava a kde musí byť.
Ping funguje, SSH funguje, malá stránka sa načíta, a potom každá veľká odpoveď visí, kým nevyprší časový limit. Klasický vzorec ukazuje na veľkosť paketu, nie na dostupnosť: cesta unesie handshake a prvých niekoľko kilobajtov, potom plnohodnotný segment zmizne. Na linuxovej bráne IPsec je pravidlo TCP MSS často riešením, ale len ak rozumiete tomu, čo mení a kde sa paket, ktorého sa dotýka, skutočne nachádza. Poradie nižšie sleduje paket od symptómu k umiestneniu pravidla, takže môžete prestať, hneď ako vysvetlenie prestane sedieť.
Symptóm, ktorý ukazuje na MSS
TCP si pri handshaku dohaduje maximálnu veľkosť segmentu. Ak je táto hodnota väčšia, než čo cesta po zapuzdrení unesie, odosielateľ ďalej vytvára segmenty, ktoré nikdy nedorazia, a spojenie sa po prvom kole zasekne. Malé odpovede prejdú; veľké nie.
Spätná väzba ICMP môže spojenie zachrániť pomocou objavovania MTU cesty, a firewall, ktorý tieto správy zahadzuje, premení zaseknutie na tichú čiernu dieru. Preto ten istý tunel funguje pre jednu aplikáciu a zlyháva pre inú bez zjavného rozdielu v konfigurácii.
Čo pravidlo TCPMSS robí a čo nie
Pravidlo prepisuje voľbu MSS v handshake paketoch TCP, keď prechádzajú. Nenastavuje MTU tunelového rozhrania, nemení politiku IPsec a na súčasných jadrách iba znižuje oznámenú hodnotu, namiesto toho, aby zvyšovalo už menšiu. Dotýka sa tiež iba TCP; užitočné zaťaženia UDP, správanie DNS a dohodnuté selektory prevádzky sú mimo jeho dosahu.
Keďže sa zmena deje počas handshaku, existujúce spojenie nadviazané pred pravidlom si ponechá starú hodnotu. Testujte novým spojením a očakávajte, že prvý pokus po zmene bude ten, ktorý vám niečo povie. Nič v pravidle nedosiahne na spojenie, ktoré je už otvorené. Preto môže oprava použitá uprostred incidentu vyzerať, akoby neurobila vôbec nič.
Umiestnite pravidlo na vnútornú cestu TCP
Na linuxovej bráne založenej na politikách vyzerá preposielaný paket pre firewall stále ako obyčajné TCP. Politika IPsec rozhoduje, že paket bude chránený; firewall nevidí pre vnútorný tok hlavičku ESP, takže porovnávanie s ESP tu opisuje úplne iný paket. Práve tento nesúlad je dôvod, prečo niektoré pravidlá vyzerajú správne a nikdy sa nezhodujú.
V termínoch iptables patrí pravidlo do tabuľky mangle na ceste preposielania, obmedzené na handshake pakety: iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270. Číslo je príklad, nie univerzálna konštanta; odvodte ho z réžie zapuzdrenia a skutočného MTU cesty. Ekvivalent pre nftables nastavuje maximálnu veľkosť segmentu v reťazi forward alebo postrouting.
Držte vonkajšie pravidlá pre počúvanie IKE a ESP oddelene od vnútorných pravidiel preposielania. Jediné pravidlo, ktoré sa snaží autorizovať tok aplikácie aj vonkajší protokol zároveň, napokon spoľahlivo nezodpovedá ani jednému.
Rešpektujte vlastníka firewallu a poradie NAT
Ak firewall hostiteľa spravuje UFW, pridajte zmeny mangle a preposielania cez jeho podporovanú trvalú konfiguráciu, namiesto písania príkazu, ktorý pri ďalšom načítaní zmizne. Pravidlo vložené do nesprávnej tabuľky alebo za koncové pravidlo nemá žiadny účinok a živá tabuľka to pred vami skrýva.
Preklad zdroja je samostatné rozhodnutie, ktoré s týmto často súvisí. Výnimka umiestnená pred všeobecným pravidlom masquerade bráni tomu, aby chránená prevádzka stratila zdroj, ktorý vyžaduje jej politika; neopravuje problém s veľkosťou a pravidlo veľkosti neopravuje problém s prekladom.
Overujte úzko, potom prestaňte
Otvorte nové spojenie k zlyhávajúcej službe a sledujte aplikáciu aj počítadlá pravidla. Ak zaseknutie zmizne, máte dôkaz o tejto ceste TCP s týmto zapuzdrením. Nemáte dôkaz, že sedí každý protokol VPN, že je opravená každá aplikácia UDP alebo že pôvodnou príčinou bola konkrétna služba vyššie.
Nechajte spätnú väzbu o veľkosti cez ICMP fungovať tam, kde to politika dovolí, a k automatickému obmedzovaniu podľa MTU trasy pristupujte opatrne, keď vonkajšiu cestu IPsec nereprezentuje vnútorná trasa. Čím užší je záver, tým ľahšie je diagnostikovať nasledujúci incident.