Հրդեհային պատի մատյանում կա մի տող, որը դուք չէիք սպասում. ACK փաթեթ, conntrack-ի NEW վիճակ, սկզբնաղբյուրի հասցե, որը ձերը չէ, նպատակակետ նավահանգիստը բաց է։ Գայթակղությունը դա կարդալն է որպես նոր մուտքային կապ, որը ոչ ոք չի թույլատրել։ Այն, ինչ տողն իրականում ասում է, ավելի նեղ է. երբ այդ փաթեթը հասավ այս hook-ին, հետագծողը չուներ համապատասխան վիճակ, և փաթեթը կրում էր ACK։ Սրանք երկու փաստ են երկու տարբեր բաների մասին, և դրանցից ոչ մեկը ձեռքսեղմման ամբողջական սղագրություն չէ։ Սա այն հաջորդականությունն է, որով անցնում եմ նախքան եզրակացություն անելը։

Սկսեք փաթեթից, ոչ թե դատավճռից

Առանձնացեք դիտարկումները մինչև դրանք մեկնաբանելը։ TCP դրոշները նկարագրում են այս փաթեթը, հետագծողի վիճակը նկարագրում է, ինչ նա գիտեր այդ hook-ում, և ձեր գրանցումը նկարագրում է միայն այն պատուհանը, որը դուք ձայնագրել եք։

Այս երեքը խառնելն այն է, ինչի հետևանքով ACK-ը դառնում է «մատակարարը ինչ-որ մեկին ներս թողեց»։

Ինչ է NEW-ն իրականում նշանակում hook-ում

iptables-ի conntrack համապատասխանեցում NEW-ը փաստաթղթավորում է որպես փաթեթ, որը սկսում է կապ, կամ որպես այնպիսի կապի հետ կապված փաթեթ, որը դեռ չի տեսել երթևեկություն երկու ուղղություններով։ ESTABLISHED նշանակում է, որ հետագծողը տեսել է փաթեթներ երկու ուղղություններով։ Երկու սահմանումներից ոչ մեկը չի ասում, որ փաթեթը SYN էր, և ոչ էլ որ այն եկել է առանց պատմության։

Հետագծողը, որը սկսում է դիտել հոսքը մեջտեղից, հաջորդ փաթեթը դասակարգում է ըստ իր իմացածի, և դա կարող է ոչինչ լինել։ Սա խոսում է հետագծողի հիշողության մասին, ոչ թե հեռավոր հոսթի մտադրության։

Թույլ հետևումը բացատրում է ACK-ի անակնկալների մեծ մասը

Միջուկը փաստաթղթավորում է nf_conntrack_tcp_loose, ինչը հետագծողին թույլ է տալիս վերցնել TCP կապեր, որոնց սկիզբը նա չի տեսել։ Կարգավորումը լռելյայն արժեքով թողնելու դեպքում հոսքի մեջտեղից ACK-ը կարող է ընդունվել որպես հաստատված հոսք։ Անջատեք այն, և նույն փաթեթն ավելի հավանական է դասակարգվի որպես INVALID, քան NEW։ Երկու արդյունքներն էլ նկարագրում են հետագծողի կանոնները, ոչ թե հավելվածի պատմությունը։

Ուստի ստուգեք այդ կարգավորումը նախքան պիտակի վրա տեսություն կառուցելը։

Բացառեք ձանձրալի պատճառները այս հերթականությամբ

Իմ հետևած NEW-on-ACK դեպքերի մեծ մասը ավարտվել է սրանցից մեկով, և բոլորն էլ էժան են ստուգելու համար.

  • conntrack աղյուսակը մաքրվել է, կամ հետագծողը վերագործարկվել է։
  • Հոսթը վերագործարկվել է, կամ հոսքը տեղափոխվել է այլ namespace կամ սարք։
  • Ասիմետրիկ երթուղավորումը SYN-ը դուրս է բերել ձեր չգրանցվող ուղի։
  • NAT-ը վերագրել է tuple-ը, ուստի գրառումը այլևս չի համընկնում ձեր կարդացածի հետ։
  • Գրանցումը սկսվել է ուշ և երբեք չի տեսել սկիզբը։

Դրանցից յուրաքանչյուրը հեռացնում է ավելի վաղ փաթեթները հետագծողի տեսադաշտից և թողնում է ուշերը անձեռնմխելի։ Վերագործարկումը կամ աղյուսակի մաքրումը ամենահեշտն է հաստատել uptime-ից և մատյաններից։ Ասիմետրիկ երթուղավորումը երևում է որպես միակողմանի գրանցում։ NAT-ը նենգն է, քանի որ հետագծողի պահած tuple-ը այն tuple-ը չէ, որը տպված է մատյանում։

Գրեք, թե դրանցից որոնք բացառեցիք և ինչպես, նախքան առաջ անցնելը։

Կարդացեք tuple-ը, ինտերֆեյսը և hook-ը

conntrack գրառումը բանալիավորվում է հասցեներով, նավահանգիստներով և արձանագրությամբ, ուստի ցանկացած թարգմանություն փոխում է, թե որ գրառումն է համընկնում։ Գրանցեք նաև ինտերֆեյսը և hook-ը, որովհետև սխալ ինտերֆեյսի վրա կամ այլ շղթայից հետո տեսած փաթեթը ասում է, որ ուղին այն չէ, ինչ գծապատկերում է։ Երբ դեպքը վերաբերում է VPN-ին, որոշեք՝ նայում եք ներքին փաթեթի՞ն, թե արտաքին կրիչին։ Ապա համեմատեք այն բանի հետ, ինչ դարպասը գրանցել է նույն հինգմասանի tuple-ի համար։

Մեկ հոսքի երկու հակասող տեսակետ ավելի տեղեկատվական են, քան դրանցից յուրաքանչյուրը առանձին։

Երբ արժե էսկալացնել

Էսկալացրեք, երբ կարող եք ցույց տալ հասանելի ծառայություն, որը չպետք է հասանելի լիներ, հոսքի, այն թույլատրած քաղաքականության և երկու ծայրերի ապացույցների հետ միասին։ Մի՛ զեկուցեք մատակարարի թերության մասին մեկ վիճակի պիտակի կամ մեկ մասնակի գրանցման հիման վրա, որովհետև այդ զեկույցը կփակվի հենց այն բացատրությամբ, որը դուք նոր կարդացիք։ Եթե ծառայությունն իրոք բաց է, այդ սահմանի տերն է ճիշտ մարդը՝ այն ուղղելու համար, և պատվիրակված նավահանգստի քարտեզագրումը կամ աննպատակ լսողը ավելի հավանական պատճառ է, քան սխալը։

Ապա փակեք տեսանելիության այն բացը, որը թույլ տվեց մեկ փաթեթին ամբողջ սեսիա թվալ։

Առնչվող հոդվածներ