Prečo trasa OpenVPN prehráva s politikou XFRM strongSwan
Konkrétna trasa OpenVPN neprebíja politiku XFRM: prečítajte si trasu a selektory politiky, potom zúžte, urobte výnimku alebo prejdite na rozhranie XFRM.
Pakety môžu sledovať trasu OpenVPN a napriek tomu ich zachytí politika IPsec, a táto kombinácia vyzerá zo všetkých uhlov ako chyba smerovania okrem toho správneho. Linux vyrieši trasu a potom sa obráti na samostatnú databázu bezpečnostných politík, takže konkrétnejšia trasa k cieľu nevytlačí zodpovedajúcu politiku XFRM. Viditeľným príznakom je prevádzka, ktorá opustí hostiteľa a nikdy nedorazí, hoci oba tunely sa hlásia ako zdravé. Riešia to tri možnosti a ktorú zvolíte, závisí od toho, ktorá z dvoch ciest má tento prefix niesť.
Dve rozhodnutia, nie jedno
Výber trasy odpovedá na úzku otázku: ktorý ďalší skok a zdrojová adresa majú niesť tento paket. Databáza bezpečnostných politík odpovedá na inú: vyžaduje tento paket ochranu IPsec a pod ktorými selektormi. Obe prebiehajú pre ten istý paket, a splnenie prvého nehovorí o druhom nič. Preto zmena metriky alebo pridanie statickej trasy môže príznak nechať nedotknutý.
Široký selektor IPsec je obvyklou príčinou. Politika chrániace 172.16.0.0/12 pokrýva aj 172.20.8.0/24, kam sa správca možno chce dostať tunelom OpenVPN. Zámer existuje len v smerovacej tabuľke a databáza politík sa o ňom nikdy nedozvedela.
Berte to ako konflikt medzi dvoma nakonfigurovanými cestami ochrany, a nie ako súboj dvoch metrík. Oprava patrí komponentu, ktorý bol nakonfigurovaný s nesprávnym rozsahom.
Prečítajte si trasu, ktorú jadro skutočne volí
Začnite vyhľadaním, ktoré jadro vykonáva, vrátane zdrojovej adresy a každého pravidla politiky, ktoré by ju mohlo odkloniť do inej tabuľky. Trasa v hlavnej tabuľke nemusí byť nikdy zvážená, ak skoršie pravidlo vyberie inú tabuľku, a zhoda najdlhšieho prefixu platí len v tabuľke, ktorú pravidlo vyberie.
ip rule show
ip route show table all
ip route get 172.20.8.20 from 10.44.7.15
Posledný príkaz je ten, na ktorom záleží, pretože vypisuje zvolenú trasu spolu so zdrojovou adresou, ktorú by jadro použilo. Porovnajte tento výstup so selektorom, ktorému zodpovedá politika IPsec. Keď trasa ukazuje na rozhranie OpenVPN a politika stále zodpovedá tomu istému páru, reprodukovali ste konflikt bez hádania.
Udržujte výpisy bez nesúvisiacich adries, kým sa dostanú do tiketu. Smerovacia tabuľka z produkčného hostiteľa nesie internú topológiu a vložiť sa oplatí len riadky, ktoré odpovedajú na otázku.
Prečítajte si aj politiku, ktorá platí
Výpis politík ukazuje smer, selektory a šablónu, ktorá rozhoduje, čo sa stane so zodpovedajúcim paketom. Najprv čítajte odchádzajúci smer, potom vstupnú stranu pre návratovú prevádzku, pretože jednosmerná výnimka vytvára spojenie, ktoré sa začne a nikdy sa nedokončí.
ip -s xfrm policy
swanctl --list-sas
Porovnajte selektory vo výpise s prefixmi, ktoré spojenie vyjednalo. Vypnutie inštalácie trás v strongSwan tie politiky neodstráni a zmena metriky nemení, ktorý pár zdroja a cieľa politika chráni. Tieto dve nepravé opravy sa oplatí vylúčiť skoro, pretože ich ľudia skúšajú ako prvé.
Ak výpis neobsahuje politiku pre očakávaný prefix, problém je inde a smerovacia tabuľka pravdepodobne hovorí pravdu. Ak obsahuje širšiu politiku, ktorá prefix pokrýva, našli ste zachytenie.
Tri možnosti, keď sú obe cesty oprávnené
Zúženie selektora IPsec je najčistejšia možnosť, keď bol široký prefix pohodlím a nie požiadavkou. Zmenšenie selektora vzdialenej prevádzky na podsiete, ktoré skutočne patria za IPsec, odstráni konflikt pre každého hostiteľa naraz a stojí obnovu kľúčov, nie nový komponent.
Výnimka prechodu je chirurgická možnosť, keď široký selektor musí zostať. strongSwan podporuje samostatné spojenie, ktorého potomok používa režim pass, čo jadru hovorí, že zodpovedajúca prevádzka nesmie byť spracovaná cez IPsec. Vzdialená adresa loopback bráni tomu, aby bolo toto spojenie vybrané pre prichádzajúcich partnerov, a selektory musia opisovať skutočný povolený pár, nie všetko.
connections {
openvpn-exception {
remote_addrs = 127.0.0.1
children {
openvpn-exception {
local_ts = 10.44.7.0/24
remote_ts = 172.20.8.0/24
mode = pass
start_action = trap
}
}
}
}
Príklady konfigurácie strongSwan dokumentujú tento typ politiky a konvenciu partnera loopback. Treťou možnosťou je návrh založený na smerovaní s rozhraniami XFRM, ktorý viaže politiku na prevádzku smerovanú cez pomenované rozhranie namiesto globálneho selektora. Je to migrácia, nie úprava, a prevádzka musí stále spĺňať vyjednané selektory.
| Option | Use it when | Cost |
|---|---|---|
| Narrow the selector | The broad prefix was convenience | A rekey and a policy review |
| Passthrough child | The broad selector must stay | One exception per intended pair |
| XFRM interface | Policy should follow routing | A design migration |
Dokážte výnimku bez oslabenia zvyšku
Po načítaní zmeny otestujte výnimku a bežný cieľ, ktorý musí zostať chránený. Skontrolujte oba smery, potom zhoďte tunel OpenVPN a potvrďte, čo sa stane s vyňatou prevádzkou. Výnimka, ktorá pri vypnutom tuneli ticho posiela tento prefix otvorene, je rozhodnutie o politike, ktoré by ste mali urobiť zámerne, nie objaviť počas incidentu.
Zaznamenajte, ktorý prefix používa ktorú cestu a prečo. Inak ďalší inženýr, ktorý uvidí široký selektor, znova otvorí to isté vyšetrovanie a odpoveď bude v commit správe, ktorú nikto nečíta.