Išeinantis ESP be atsakymo nereiškia, kad VPN yra miręs
ESP apsaugo vieną kryptį kiekvienai asociacijai ir nieko nepatvirtina. Sulygiuokite vidinį pokalbį ir įeinančiąją SA, prieš vadindami serverį neatsakuojančiu.
Užfiksavote srautą IPsec hoste, stebėjote išeinančius ESP paketus, pamatėte, kad niekas negrįžta, ir padarėte išvadą, kad tolimoji pusė sugedusi. Užfiksavimas šios išvados nepagrindžia. ESP apsaugo vieną pokalbio kryptį ir IP sluoksnyje nieko nepatvirtina, todėl trūkstamas grįžtamasis ESP gali reikšti, kad programa neturėjo ką pasakyti, lygiai taip pat kaip ir tai, kad tunelis miręs. Perskaitykite vidinius mainus ir priėmimo pusės būseną, prieš kaltindami bet kurią pusę.
Mitas: kiekvienas apsaugotas paketas sulaukia atsakymo
ESP nėra užklausos ir atsakymo protokolas. Jis šifruoja ir autentifikuoja tai, ką parenka politika, o gavėjas patikrina, iššifruoja ir pristato tą vidinį paketą, pats nesugeneruodamas jokio paketo. UDP užklausa, kurią paskirties vieta ignoruoja, arba ICMP atsakas, kurį atmeta įeinančioji politika, abiem kryptimis sukuria tylą kaip teisingą rezultatą. Tokios tylos laikymas transporto gedimu nuveda jūsų ieškoti tinklo gedimo, kurio niekada nebuvo.
Vienakryptis užfiksavimas iš tikrųjų įrodo, kad siuntėjo dėklas tame stebėjimo taške kažką užšifravo. Nieko apie atvykimą ir nieko apie ketinimą atsakyti. Naudingas klausimas yra ne „kodėl nėra atsakymo“, o „ką turėjo pagaminti vidinis pokalbis“.
Dvi SA, du SPI, vienas pokalbis
IPsec saugos asociacijos yra vienakryptės, todėl įprastas apsaugotas mainas naudoja įeinančiąją asociaciją ir išeinančiąją asociaciją su atskirais identifikatoriais ir nepriklausoma būsena. Grįžtamojo srauto paieška pagal išeinančio paketo SPI yra kategorijos klaida, nes bet koks atsakymas keliauja pagal partnerio savąją išeinančiąją SA su savo SPI. Vietoj to poruokite jas pagal srauto selektorius ir partnerio adresus.
Rakto atnaujinimas apsunkina vaizdą kelioms sekundėms, nes sena ir nauja būsena gali persidengti. Jei simptomas prasidėjo apie rakto atnaujinimą, rinkite asociacijų identifikatorius ir laiko žymes kartu, o ne tik ryšio pavadinimą.
Ką gavėjas turi padaryti, kol kas nors atsakytų
| Stage | What to look at | Wrong conclusion if skipped |
|---|---|---|
| Sender encrypts | outbound SA packet counter | "the tunnel is up" |
| Peer receives | inbound SA counter and replay window | "the peer is down" |
| Inner delivery | target host or service logs | "routing is broken" |
| Application replies | the app's own trace | "the reply was dropped" |
| Protected return | the peer's outbound SA | "ESP only works one way" |
Kiekviena eilutė žlunga savarankiškai ir kiekviena klaida turi skirtingą savininką, todėl vienas užfiksavimas negali jų atskirti. Įeinantis skaitiklis yra vienintelis tiesioginis atvykimo įrodymas, nes paketas, kuris nepraeina autentifikavimo ar pakartojimo patikros, išmetamas be jokio atsakymo. Todėl partneris, kurio įeinantis skaitiklis nepajudėjo, visiškai neperduoda jokios informacijos apie savo politiką.
Pristatymas yra atskiras žingsnis nuo iššifravimo. Būsena gali būti galiojanti, o paketas vis tiek vėliau išmetamas pagal įeinančiąją politiką arba maršrutą, kuris neapima vidinės paskirties vietos, todėl patikrinkite, ar tikslinis hostas matė atvirą tekstą, o ne manykite, kad švarus skaitiklis reiškia, jog paketas nukeliavo ten, kur norėjote.
Gimtasis ESP nėra UDP
Gimtasis ESP yra IP protokolas 50, kuris nėra nei TCP, nei UDP ir apskritai neturi prievadų. Todėl ugniasienės taisyklė, leidžianti IKE per UDP 500, nieko nesako apie duomenų kelią, o pagal prievadus parašytas filtras gali leisti tuneliui susiderinti ir po to išmesti viską, kas juo nešama. Tikrinkite duomenų kelią atskirai, tokiu režimu, kokį iš tikrųjų stebėjote.
Už NAT vaizdas keičiasi: apsaugotas turinys keliauja UDP viduje, dažniausiai per 4500 prievadą, kaip apibrėžia RFC 3948. Užfiksuokite aktyvų režimą prieš rašydami bet kokią taisyklę, nes kelyje esantis įrenginys gali visiškai skirtingai traktuoti gimtąjį ESP ir UDP inkapsuliuotą ESP, o kai kurie tarpiniai įrenginiai leidžia vieną ir išmeta kitą.
Skaitykite skaitiklius, kurie priklauso šiam incidentui
strongSwan hoste swanctl --list-sas rodo kiekvienos asociacijos paketų ir baitų skaitiklius abiem kryptimis, ko pakanka atskirti „niekada neatvyko“ nuo „atvyko ir nebuvo atsakyta“. Linux sistemoje /proc/net/xfrm_stat skaičiuoja suvestines klaidas, tokias kaip trūkstama būsena, trūkstama politika ir protokolo klaidos. Tie suvestiniai skaičiai kaupiasi nuo įkrovimo ir priklauso vienai tinklo vardų erdvei, todėl didelis skaičius nėra priskyrimas.
Paimkite du rodmenis aplink incidento langą teisingoje vardų erdvėje ir palyginkite skirtumus, kitaip praėjusios savaitės klaidas priskirsite šios popietės bilietui. Į bilietą įrašykite vardų erdvę ir abu laiko žymenis, kad kitas skaitytojas galėtų atkartoti palyginimą, o ne pasitikėti suvestiniu skaičiumi.
Įvardykite etapą, o ne įtariamąjį
Naudinga išvada pasako, kur paketas sustojo: niekada negautas, gautas ir išmestas, pristatytas, bet be atsakymo, arba atsakytas ir pakeliui atgal pamestas. Kiekvienas iš šių atvejų nurodo kitą savininką ir kitą tolesnę komandą. „Jokio atsakymo iš VPN serverio“ sujungia keturias skirtingas klaidas į vieną sakinį, kurio užfiksavimas niekada nepagrindė.
Laikykite užfiksavimus siaurus ir neįtraukite neapdorotos branduolio būsenos į bilietus, nes joje gali būti raktų medžiagos, kuri neturi palikti hosto. Skaitiklių skirtumai ir laiko žymės yra tos dalys, kurias verta perduoti kitam žmogui.