Kill switch ажиллахад: нээлттэй TCP сессүүдэд юу тохиолдох вэ?
Блоклогдсон пакет хаагдсан холболт биш. Сесс тасалдалыг давах ёстой эсэхийг шийдэж, блоклолт болон сэргэлтийг тусдаа шинж чанар гэж шалгаарай.
Туннель тасарч, kill switch ажиллаж, дөрөвний гурав дууссан татан авалт нэг бол царцчихна, эсвэл шууд бүтэлгүйтнэ. Эдгээр хоёр үр дүн хамгаалалтын өөр өөр түвшнээс биш, хэрэгжүүлэлтийн өөр өөр сонголтоос гардаг. Хаясан пакет холболтыг хүлээлгэж орхидог бол татгалзсан пакет түүнийг хааж, аппликейшнд мэдэгддэг. Аль зан төлөвийг хүсэх нь дизайны асуулт бөгөөд түүнийг шалгах нь тусдаа дасгал юм.
Хаях, татгалзах, дахин тохируулах нь өөр өөр
Хөдөлгөөнийг хаядаг галт ханын дүрэм пакетыг шидэж, юу ч буцаадаггүй тул илгээгч өөрийн таймеруудаар дахин илгээсээр байна. TCP reset-ээр татгалздаг дүрэм холболтыг даруй хааж, аппликейшн алдаа харна. Ихэнх kill switch хаядаг, учир нь татгалзал бодлогыг ил болгож, хаях нь үхсэн сүлжээний зан төлөвтэй төстэй.
Блоклох нь socket хаахтай ижил биш. Аппликейшн тогтоосон төлөвт дескриптороо барьсан хэвээр, зөвхөн пакетууд дутуу байна. Тиймээс үйлдлийн систем холболт байгаа гэж шаардаж байтал хуудас хэдэн минутын турш спиннер дээр сууж болно. Аппликейшны мессежээс таамаглахын оронд баримтжуулсан хэрэгжүүлэлтийг уншина уу, учир нь хоёр зан төлөв хоёулаа сүлжээ унасан мэт харагддаг.
Тасалдал үргэлжилж байхад аппликейшн юу хийдэг
TCP нэмэгдэж буй сааталтайгаар дахин илгээдэг бөгөөд Linux-ийн анхдагч дахин оролдлогын төсөв секундээр биш, ойролцоогоор арван таван минутад дуусдаг. Тэр хүртэл socket нь ашигтайгаар нээлттэй ч биш, хаалттай ч биш. Өөрийн keepalive эсвэл хүсэлтийн хугацаатай аппликейшнууд ихэвчлэн эрт бууж өгдөг, иймээс нэг машины хоёр программ нэг тасалдлын үеэр өөр өөр ажилладаг.
Туннель буцаж ирэхэд локал socket өөрчлөгдөөгүй, гэхдээ зам өөр байж болно. Шинэ нийтийн эх хаяг сервер дээр өөр дөрвөлжин үүсгэдэг тул цаана байгаа төлөвт галт хана сесстэй дахин тохирохгүй. Клиент хэзээ ч алдаа хараагүй ч холболт үхсэн.
Сэргэлт шаардлагатай эсэхийг шийд
Хоёр гэрээний нэгийг сонго. Нэг бол сесс богино тасалдалыг давах ёстой, энэ нь тогтвортой хаяглалт, төлөвөө хадгалдаг сервер шаарддаг, эсвэл аппликейшн цэвэрхэн дахин холбогдох ёстой, энэ нь давтахад аюулгүй дахин оролдлогын логик шаарддаг. Дунд нь байгаа бүхэн хамгийн муу үр дүнг өгдөг: сервер аль хэдийн бүртгэсэн зүйлийг дахин илгээдэг клиент, эсвэл хэн ч харж чадахгүй сессийн амжилтыг мэдээлдэг клиент.
Тогтвортой хаяглалт бол хүмүүсийн мартаждаг хэсэг, учир нь өөр нийтийн хаяг дээр буудаг дахин холболт клиентийн socket эрүүл харагдаж байсан ч серверийн талын төлөвийг хүчингүй болгодог. Хоёр гэрээний аль нь аппликейшн бүрт хамаарахыг бичиж тэмдэглээрэй, учир нь бүгд тохиолдох нь ховор.
Блоклолт ба сэргэлтийг тусдаа шалга
Алдагдалаас хамгаалалт ба сессийн амьд үлдэлтийг хоёр шинж чанар гэж үзээрэй, учир нь нэгийг давах нь нөгөөгийн талаар юу ч хэлэхгүй. Амьд үлдсэн сесс шууд хөдөлгөөн блоклогдсоны баталгаа биш, үхсэн сесс бүх шууд зам блоклогдсоны баталгаа биш.
ss -tnp state established '( dport = :443 )'
sudo conntrack -L -p tcp --dport 443
sudo tcpdump -ni any 'tcp port 443 and tcp[tcpflags] & tcp-syn != 0'
Сэргэлтийг ажиглахдаа хор хөнөөлгүй туршилтын үйлдэл ашиглаарай, ингэснээр давхар илгээлт тохиолдол болохгүй. Таны үнэхээр харсан эвдрэлийн хэлбэрийг тэмдэглэ: аппликейшн юу харуулсан, socket амьд үлдсэн эсэх, хэзээ өөрөө сэргэсэн.
Хүлээгдэж буй зан төлөвийг хэрэгжүүлэлтийн дүрмийн хажууд бичээд огноо тавь. Тэр дүрмийг дараа нь өөрчлөх хүн байршуулалт хоёр гэрээний алийг нь амласныг мэдэх ёстой.