ESP yra IP protokolas 50, o ne TCP prievadas 50: ką leisti
Protokolo numeriai ir prievado numeriai yra skirtingos vardų erdvės. Taisyklė TCP prievadui 50 nieko neleidžia, o NAT traversal perkelia ESP į UDP 4500.
Ugniasienės formos prašo TCP prievado, ir akivaizdi reikšmė yra 50. Ši reikšmė nieko neleidžia, nes ESP yra IP protokolas numeris 50, o protokolo numeriai nėra prievadai. Abi vardų erdvės dalijasi tik mažais sveikaisiais skaičiais ir niekuo daugiau, o klaida lieka nematoma tol, kol IKE baigsis ir apsaugotas srautas taip ir neatvyks.
Dvi vardų erdvės, kurios dalijasi mažais skaičiais
IP antraštė turi protokolo lauką, kuris įvardija, kas eina toliau: 6 TCP, 17 UDP, 1 ICMP, 50 ESP, 51 AH. TCP arba UDP antraštė turi prievadų numerius, kurie parenka procesą paskirties hoste. Protokolas 50 ir TCP prievadas 50 yra nesusijusios reikšmės, bet dialogas gali padaryti jas atrodančias keičiamomis.
Štai kodėl prievadų peradresavimo taisyklė negali išreikšti vietinio ESP. Nėra ESP paskirties prievado, kurį būtų galima peradresuoti, o įrenginys, suprantantis tik prievadų taisykles, apskritai neturi žodyno tam paketui. Teisinga taisyklė vietoj to įvardija IP protokolą. Bet koks prievadų dialogas yra netinkamas įrankis tam paketui.
Sumišimas turi ir antrą pusę. Kai paketas užšifruotas, viskas jo viduje yra nepermatoma, įskaitant pradinio ryšio TCP antraštę. Ugniasienė, kuri tikrina to paketo prievadus, žiūri į išorinę antraštę, kuri vietiniu atveju neturi prievadų, kuriuos būtų galima tikrinti.
Vietinis ESP, tada inkapsuliuota alternatyva
Vietinis ESP perduodamas tiesiogiai kaip IP protokolas, o tai vienodai efektyvu ir nepatogu. Efektyvu, nes nėra papildomos antraštės, ir nepatogu, nes joks įrenginys, atliekantis adresų ir prievadų vertimą, negali jo sekti. NAT traversal egzistuoja būtent tam: jis įvynioja ESP paketą į UDP, kad vertėjas turėtų prievadus perrašymui.
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The UDP port pair, which translation devices can track |
Abi formos yra alternatyvūs to paties duomenų kanalo diegimai, o ne vieno sluoksniai. Leidus vietinį ESP, neleidžiama inkapsuliuota forma, o leidus UDP 4500, neleidžiamas vietinis srautas, todėl taisyklių rinkinys turi atitikti diegimą, o ne atsitiktinai apimti abu.
Aptikimas čia taip pat svarbus. Galiniai taškai nusprendžia tarp formų derybų metu, o perjungimas paprastai įvyksta, kai tarp jų aptinkamas NAT. Todėl maršrutas, kuris pasikeičia po tunelio sukūrimo, gali perkelti srautą į vardų erdvę, kurios jūsų taisyklės niekada neapėmė.
Perskaitykite, kurią formą ryšys iš tikrųjų naudoja
Klauskite galinio taško, o ne spėkite iš ugniasienės. Linux sistemoje būsenos įrašas praneša, ar asociacija naudoja UDP inkapsuliavimą ir kurie prievadai dalyvauja. Paketų fiksavimas atsako į tą patį klausimą iš laido, ir abu yra greitesni nei skaityti taisyklių rinkinį ir tikėtis.
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
Pirmoji komanda rodo inkapsuliavimo tipą, kai naudojamas NAT traversal, ir nieko, kai nenaudojamas. Antroji rodo, kuri iš dviejų formų iš tikrųjų kerta sąsają, ir tai užbaigia ginčus apie konfigūraciją, kuri popieriuje atrodo teisinga.
Priešingi įrodymai priklauso tam pačiam žingsniui. Taisyklė, pranešanti apie nulį atitikimų, sako, kad paketas jos niekada nepasiekė, ir tai yra maršrutizavimo arba selektoriaus klausimas, o ne ugniasienės.
Tada atskirai patvirtinkite valdymo kanalą. IKE turi savo prievadus ir savo žurnalus, o baigta deryba be duomenų yra būtent tas atskyrimas, apie kurį šis straipsnis.
Rašykite taisyklę teisingoje vardų erdvėje
Protokolo taisyklė ir prievado taisyklė yra skirtingos instrukcijos, todėl įrankis turi išreikšti tą, kurią turite omenyje. nftables protokolo atitikimas yra aiškus, o inkapsuliuota alternatyva gauna savo UDP taisyklę. Laikykite abi taisykles greta, kad pora būtų matoma peržiūros metu.
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
Nesiplebkite išplėsti nė vienos taisyklės, kad kompensuotumėte neteisingą diagnozę. Leidimas viskam ESP protokolui kiekvienoje sąsajoje arba UDP leidimas iš bet kur į bet kur ištaiso simptomą ir pašalina kontrolę, kurią bandėte nustatyti. Siauras palaikomas srautas beveik visada pakanka, kai forma žinoma.
Galiausiai, laikykite sluoksnius tiesiai, kai tunelis veikia, o programa ne. Į tinklą patenkantys paketai vis dar reikia peradresavimo, grįžimo maršruto ir politikos, kuri juos priima, ir nė vieno iš jų neišreiškia ESP taisyklė. Trūkstamas prievadas paaiškina konkretų gedimą, o ne kiekvieną IPsec gedimą. Laikykite taisyklės pataisymą ir maršrutizavimo patikrinimą kaip dvi atskiras išvadas.
Užrašykite formą, kurią pastebėjote, protokolo taisyklę, kurią pridėjote, ir skaitiklį, kurį matėte po to. Trys eilutės, ir kitas žmogus gali atskirti vardų erdvės klaidą nuo maršrutizavimo klaidos per minutę, o ne per pusdienį.