Ինչու tcpdump-ը ցույց է տալիս IPsec բաց տեքստը միայն մեկ ուղղությամբ
Այս ասիմետրիան որսման կետի արտեֆակտ է, ոչ թե կոտրված պատասխանի ուղի։ Ահա թե որտեղ փնտրել ներքին և արտաքին երթևեկությունը Linux IPsec դարպասում։
Դուք tcpdump եք գործարկում Linux IPsec դարպասի արտաքին ինտերֆեյսի վրա և միաժամանակ տեսնում երկու բան՝ ներս եկող ESP կադրեր և դրանցից անմիջապես հետո ապակոդավորված ներքին փաթեթներ։ Դուրս գնալիս երևում է միայն ESP։ Բնական եզրակացությունն այն է, որ պատասխանները չեն ուղարկվում, կամ որ IPsec-ը գաղտնագրում է մեկ ուղղություն և մոռանում մյուսը։ Ոչ մեկը ճիշտ չէ։
Այն, ինչ դուք տեսնում եք, որսման կետ է։ Միջուկը ձևափոխում է դուրս գնացող փաթեթները մինչև սարքի հաղորդման ուղին դրանք հանձնի փաթեթների սոքետին, ուստի սոքետը երբեք չի տեսնում դուրս գնացող ներքին ձևը։ Ներս գալիս փաթեթը սկզբում որսվում է որպես ESP, և ապակապսուլացված պատճենը տեսանելի է դառնում, երբ այն նորից մտնում է կույտ։ Նույն երթևեկությունը, դիտարկման երկու տարբեր պատուհան։
Որսման կետն է որոշում՝ ինչ եք տեսնում
Սովորական ինտերֆեյսում AF_PACKET սոքետը նստում է սարքի շերտին մոտ։ Հոսթը լքող փաթեթները սկզբում անցնում են IPsec ելքային մշակումով, որը ներքին TCP սեգմենտը վերածում է ESP կամ UDP-4500 դատագրամի, և միայն դրանից հետո հասնում այդ շերտին։ Եկող փաթեթները պատճենվում են սոքետի մեջ լարից գալիս, դեռ գաղտնագրված, և ապակոդավորված արդյունքը տեսանելի է դառնում ավելի ուշ, երբ կույտը այն տեղական հանձնում է կամ փոխանցում։
Այդ հերթականությունը լիովին բացատրում է ասիմետրիան։ Դա ապացույց չէ ուղղության, քաղաքականության կամ հավելվածի վարվելակերպի մասին, և այդպես վարվելը մարդկանց ուղարկում է հետապնդելու պատասխան, որը ողջ ընթացքում ճիշտ էր ուղարկվել։ Սա ցանցային այն սակավաթիվ հանելուկներից է, որտեղ անոմալիան ստեղծում է գործիքը, ոչ թե ցանցը։
Զտիչը համապատասխանեցրեք նկատի ունեցած շերտին
tcp port 443-ի նման արտահայտությունը ընտրում է ներքին TCP կապ։ Դուրս գնալիս այդ կապն արդեն ESP է դարձել, երբ հարցնում են սոքետին, ուստի զտիչը ոչնչի չի համապատասխանում։ Եթե ուզում եք հաշվել պաշտպանված երթևեկությունը, զտեք արտաքին ձևով՝ պրոտոկոլ 50 հում ESP-ի համար, կամ UDP 4500 պորտ, երբ NAT անցումն օգտագործվում է։ Երկու զտիչներն էլ տալիս են փաթեթների թիվ, որը կարելի է համեմատել երկու կողմերի միջև, ինչը սովորաբար հենց հաշվելու պատճառն է։ Դրանցից ոչ մեկը չի ասում՝ արդյոք ներքին հարցումը պատասխան է ստացել։
UDP 4500-ի թիվը մի համարեք ESP փաթեթների թիվ։ IKE-ն նույնպես օգտագործում է այդ պորտը NAT-T կենդանի պահելու հաղորդագրությունների և կապսուլացված փոխանակման համար, ուստի թիվը ներառում է երթևեկություն, որն այն տվյալները չեն, որ ուզում էիք չափել։ UDP 500-ի սկզբնական IKE փոխանակմանը պետք է սեփական զտիչ, եթե հենց դա է հարցը։ Կառավարման երթևեկությունը տվյալների հետ խառնող թիվը նույնպես ցանկացած թողունակության գնահատում դարձնում է սխալ անհայտ սահմանով։ Առանձին հաշվարկները պատասխանում են առանձին հարցերի։
Զտիչը գրեք այն հարցի կողքին, որին այն պատասխանում է։ «Որքա՞ն ESP դուրս եկավ տուփից» և «արդյո՞ք վեբ հարցումը դուրս եկավ տուփից» տարբեր չափումներ են տարբեր զտիչներով, և մեկ որսումը չի կարող վճռել երկուսին էլ։ Առանց այդ նշումի երկու մարդ կհամեմատեն թվեր, որոնք երբեք նույն բանը չեն հաշվել։
Դիտեք ձևափոխությունից առաջ, ոչ հետո
Եթե պետք է տեսնեք դուրս գնացող բաց տեքստը, դիտարկման կետը տեղափոխեք ավելի վաղ՝ IPsec ելքային մշակումից առաջ։ NFLOG-ը ձեզ տալիս է Netfilter կեռիկ, որտեղ կանոնը կարող է ընտրված փաթեթները պատճենել օգտվողական տարածության սոքետի մեջ, որը tcpdump-ը կարող է կարդալ։ strongSwan-ի երթևեկության արտանետման ուղեցույցը նկարագրում է այս մոտեցումը հենց այդ պատճառով։
Քաղաքականության համընկնումը սահմանափակում է կանոնը միայն այն երթևեկությամբ, որը պատրաստվում է մտնել թունել։ -m policy --pol ipsec --dir out-ն է, որ կանոնը դարձնում է կոնկրետ՝ տուփի ուղարկած յուրաքանչյուր փաթեթ գրանցելու փոխարեն։ Ապա կարդացեք գրանցամատյանի խումբը սահմանափակ որսմամբ՝ փոքր թվով պատկերներ և չափի սահմանաչափը թույլ չեն տալիս ախտորոշումը դառնալ երթևեկության արխիվ։ Սահմանափակ որսումը նաև ավելի հեշտ է հանձնել գրախոսողին՝ առանց անհամապատասխան բեռ քաշելու։ Թիվը որոշեք սկսելուց առաջ, ոչ թե տեսնելուց հետո, թե որքան է եկել։
iptables -I OUTPUT 1 -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5
tcpdump -ni nflog:5 -s 128 -c 20 'host 10.83.0.44 and tcp port 8443'Ընտրեք հոսքին համապատասխան կեռիկը։ OUTPUT-ը ծածկում է դարպասի իսկ արտադրած երթևեկությունը, LAN հաճախորդից անցումը անցնում է FORWARD շղթայով, և OUTPUT-ի կանոնը երբեք չի տեսնի այն։ Վերևի հասցեն և պորտը հաստատված փորձնական նպատակակետի տեղապահներ են։
Ինչ է ապացուցում դիտարկումը
NFLOG-ը գրանցման թիրախ է, ոչ թե ընդունման որոշում։ Այնտեղ հայտնված փաթեթը ցույց է տալիս, որ հասել է կեռիկին և համապատասխանել կանոնին։ Այն չի ցույց տալիս, որ ավելի ուշ զտիչը թույլ է տվել այն, որ սարքը փոխանցել է այն, կամ որ գործընկերը որևէ բան ստացել է։
Դատարկ գրանցամատյանը նույնքան երկիմաստ է։ Ստուգեք կանոնի փաթեթների հաշվիչը, հաստատեք ուղղությունը, հաստատեք, որ հոսքն իսկապես համապատասխանել է IPsec քաղաքականությանը, և հաստատեք նպատակակետը։ Միայն երկու կողմերում համընկնող հաշվիչն է դիտարկումը դարձնում եզրակացություն։ Ապա համեմատեք անվտանգության միավորման հաշվիչները երկու կողմերում նույն վերահսկվող փորձի համար, որովհետև SA հաշվիչները հեղինակավոր գրառումն են այն բանի, թե ինչ էր պաշտպանված և ուղարկված։
Եվս մեկ ծուղակ կա՝ այս համատեքստում «բաց տեքստը» նշանակում է IPsec գաղտնագրման շերտից դուրս։ Ներքին HTTPS սեսիան դեռ ունի իր TLS-ը։ Ապակապսուլացված փաթեթը որսալը չի ապակոդավորում հավելվածի TLS-ը, և այնտեղ ընթեռնելի HTTP տեսնելը նշանակում է, որ հավելվածն ի սկզբանե HTTPS չէր օգտագործում։
Մաքրեք և համեմատեք երկու ծայրերը
Հեռացրեք հենց այն կանոնը, որ մտցրել էիք, դրա տիրոջ կողմից, հենց որ դիտարկումն ավարտվի։ Մնացած գրանցման կանոնը յուրաքանչյուր համապատասխան փաթեթի վրա CPU է ծախսում և լուռ տվյալների պահպանման խնդիր է ստեղծում։ Ջնջեք կանոնը կրկնելով -D-ով, այլ ոչ թե դատարկելով ձեզ չպատկանող շղթա։
iptables -D OUTPUT -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5Եթե տեղակայումը օգտագործում է օգտվողական տարածության IPsec, XFRM ինտերֆեյս կամ ապարատային բեռնաթափում, դիտարկման կետերը տեղափոխվում են, և այս բաղադրատոմսը կարող է ընդհանրապես չկիրառվել։ libipsec-ի դեպքում ներքին երթևեկությունը դիտելու փաստաթղթավորված տեղը TUN սարքն է։ Սկզբում որոշեք ուղին, ապա ընտրեք հարցին պատասխանող կետը, և սպասեք, որ երկու ուղղությունները տարբեր տեսք ունենան միայն այն ժամանակ, երբ նայում եք ձևափոխության սխալ կողմին։