Zakaj pot OpenVPN izgubi proti politiki XFRM strongSwan
Določena pot OpenVPN ne preglasi politike XFRM: preberite pot in selektorje politike, nato zožite, naredite izjemo ali preidite na vmesnik XFRM.
Paketi lahko sledijo poti OpenVPN in jih vseeno ujame politika IPsec, ta kombinacija pa je z vseh kotov videti kot napaka pri usmerjanju razen s pravega. Linux razreši pot in nato svetuje ločeno zbirko varnostnih politik, zato bolj določena ciljna pot ne izrine ujemajoče se politike XFRM. Vidni simptom je promet, ki zapusti gostitelja in nikoli ne prispe, medtem ko se oba tunela razglašata za zdrava. Tri možnosti to rešijo, katera bo izbrana, pa je odvisno od tega, katera od dveh poti naj bi nosila to predpono.
Odločitvi dve, ne ena
Izbira poti odgovarja na ozko vprašanje: kateri naslednji skok in naslov vira naj nosita ta paket. Zbirka varnostnih politik odgovarja na drugo: ali ta paket potrebuje zaščito IPsec in pod katerimi selektorji. Oboje deluje za isti paket in izpolnjevanje prvega ne pove ničesar o drugem. Zato lahko sprememba metrike ali dodana statična pot pusti simptom nedotaknjen.
Širok selektor IPsec je običajen vzrok. Politika, ki ščiti 172.16.0.0/12, pokriva tudi 172.20.8.0/24, kamor se želi skrbnik morda prebiti skozi tunel OpenVPN. Namen obstaja samo v usmerjevalni tabeli in zbirka politik zanj ni nikoli izvedela.
Obravnavajte to kot konflikt med dvema nastavljenima potema zaščite in ne kot tekmovanje dveh metrik. Popravek sodi v komponento, ki je bila nastavljena z napačnim obsegom.
Preberite pot, ki jo jedro dejansko izbere
Začnite s poizvedbo, ki jo izvede jedro, vključno z naslovom vira in vsakim pravilom politike, ki bi jo lahko preusmerilo v drugo tabelo. Pot v glavni tabeli morda ne bo nikoli obravnavana, če prejšnje pravilo izbere drugo tabelo, ujemanje najdaljše predpone pa velja le znotraj tabele, ki jo izbere pravilo.
ip rule show
ip route show table all
ip route get 172.20.8.20 from 10.44.7.15
Zadnji ukaz je tisti, ki šteje, ker izpiše izbrano pot skupaj z naslovom vira, ki bi ga jedro uporabilo. Primerjajte ta izpis s selektorjem, s katerim se ujema politika IPsec. Ko pot kaže na vmesnik OpenVPN in se politika še vedno ujema z istim parom, ste konflikt ponovili brez ugibanja.
Ohranjajte izpise brez nepovezanih naslovov, preden prispejo v zahtevek. Usmerjevalna tabela s produkcijskega gostitelja nosi notranjo topologijo in le vrstice, ki odgovarjajo na vprašanje, so vredne lepljenja.
Preberite tudi politiko, ki velja
Seznam politik prikazuje smer, selektorje in predlogo, ki odloči, kaj se zgodi z ujemajočim paketom. Najprej berite izhodno smer, nato vhodno stran za povratni promet, ker enosmerna izjema ustvari povezavo, ki se začne in nikoli ne konča.
ip -s xfrm policy
swanctl --list-sas
Primerjajte selektorje na seznamu s predponami, o katerih se je povezava dogovorila. Izklop namestitve poti v strongSwan teh politik ne odstrani in sprememba metrike ne spremeni, kateri par vira in cilja politika ščiti. Ti dve navidezni popravki velja izključiti zgodaj, ker ju ljudje poskusijo najprej.
Če seznam ne vsebuje politike za pričakovano predpono, je težava drugje in usmerjevalna tabela verjetno govori resnico. Če vsebuje širšo politiko, ki pokriva predpono, ste našli prestrezanje.
Tri možnosti, ko sta obe poti zakoniti
Zoženje selektorja IPsec je najčistejša možnost, ko je bila široka predpona udobje in ne zahteva. Zmanjšanje selektorja oddaljenega prometa na podomrežja, ki res pripadajo za IPsec, odpravi konflikt za vse gostitelje hkrati, in to stane ponovno dogovarjanje ključev, ne nove komponente.
Izjema prepuščanja je kirurška možnost, ko mora širok selektor ostati. strongSwan podpira ločeno povezavo, katere child uporablja način pass, kar jedru pove, da ujemajočega prometa IPsec ne sme obdelati. Oddaljeni naslov loopback prepreči, da bi bila ta povezava izbrana za dohodne partnerje, selektorji pa morajo opisati dejanski dovoljeni par in ne vsega.
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
}
}
}
}
Primeri konfiguracije strongSwan dokumentirajo to vrsto politike in dogovor o partnerju loopback. Tretja možnost je načrt, ki temelji na usmerjanju, z vmesniki XFRM, ki politiko veže na promet, usmerjen skozi imenovani vmesnik, namesto na globalni selektor. To je migracija in ne prilagoditev, promet pa mora še vedno izpolnjevati dogovorjene selektorje.
| 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 |
Dokažite izjemo, ne da bi oslabili preostanek
Po nalaganju spremembe preizkusite izjemo in običajen cilj, ki mora ostati zaščiten. Preverite obe smeri, nato spustite tunel OpenVPN in potrdite, kaj se zgodi z izvzetim prometom. Izjema, ki ta predpona tiho pošilja odprto, ko je tunel spuščen, je odločitev o politiki, ki jo morate sprejeti namerno, ne odkriti med incidentom.
Zapišite, katera predpona uporablja katero pot in zakaj. Sicer bo naslednji inženir, ki bo videl širok selektor, znova odprl isto preiskavo, odgovor pa bo stal v sporočilu commit, ki ga nihče ne bere.