Kill switch тест: завсарыг хэмж, зөвхөн дахин холболтыг биш
Хурдан дахин холболт нь клиент хурдан гэдгийг батална. Завсрын үеэр машинаас юу гарсныг ашигласан триггерын хамт бич, эс бөгөөс тест зөвхөн хагасыг хэмжсэн.
Нэг секундэд дуусах дахин холболт нь клиент хурдан гэдгийг хэлнэ. Туннель унтарсан байхад ямар нэгэн зүйл зугтсан эсэхийг хэлэхгүй. Нэг минут үргэлжлэх дахин холболт нь клиент удаан гэдгийг хэлнэ, мөн завсарт шууд трафик зөвшөөрөгдсөн эсэхийг хэлэхгүй. Эдгээр нь хоёр хэмжилт бөгөөд зөвхөн эхнийг мэдээлдэг kill switch тест нь унтраалгыг туршаагүй.
Хоёр ажиглалт, хоёр тусдаа дүгнэлт
Хүртээмжийн асуулт энгийн: туннель хэзээ дахин ашиглах боломжтой болсон, ажиллагаа хамгаалагдсан програмот тэнд хүрэхийн тулд шинэ холболт хэрэгтэй байсан уу. Хэрэгжүүлэлтийн асуулт өөр: хамгаалалт унахаас буцаж ирэх хүртэл ямар пакетууд машинаас гарсан.
Тэдэнд тусдаа бүртгэлээр хариул. Нэг мөр завсар тодорхой тооны секунд үргэлжилсэн гэж хэлнэ. Өөр мөр тэр завсарт хамгаалалтгүй хүсэлт амжилттай болсон эсэхийг хэлнэ. Тэдгээрийг нэг тэнцсэн эсвэл унасан болгож нэгтгэх нь хамгийн чухал тохиолдлыг нуудаг: гоожлогоотой хурдан дахин холболт.
Цагаар хэмжиж болох зонд бүтээ
Дараах хүсэлтийг ашигла: хор хөнөөлгүй, хямд бөгөөд туннелийн өөрийн хяналтын сувгаас хамааралгүй. Доорх давталт секундэд нэг удаа цагийн тэмдэг, HTTP төлөв, өнгөрсөн хугацааг хэвлэх бөгөөд дүүжилдэх биш чанга дуугаар бүтэлгүйтнэ:
while true; do
printf '%s ' "$(date +%H:%M:%S)"
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 2 https://example.com || echo "curl-exit-$?"
sleep 1
done
Зөвхөн төлөв биш, curl-ийн гарах кодыг унш. 28 нь хүсэлтийн хугацаа дууссан гэсэн үг, хаагдсан зам ингэж харагдана. 6 нь нэрийн шийдэл бүтэлгүйтсэн гэсэн үг, энэ нь өөр илрүүлэлт бөгөөд ихэнхдээ илүү сонирхолтой. Завсарт бага хугацаа өнгөрсөн 200 нь трафикийг гадагш нэвтрүүлсэн гэсэн үг.
Гаралтыг файлд бичээд хадгал. Терминалын түүх бол баталгаа биш, сонирхолтой хэсэг нь ихэвчлэн дундах гурван мөр.
Цэвэрхэн биш, жинхэнэ гэмтэл үүсгэ
Клиентийн өөрийн цэснээс салгах нь хамтын замыг туршдаг, клиент өөрийн хориглох дүрмийг суулгах цагтай байдаг. Харин процессыг ал, эсвэл доорх холбоосыг тасла, тэгвэл жинхэнэ гэмтлийн явдаг замыг туршина.
Триггер бүр өөр кодын зам дасгалжуулна. Серверийн талын доголдол, локал холбоосын алдагдал, клиентийн сүйрэл тус бүр өөр төлөв үлдээж болох бөгөөд тэдгээрийн нэг нь эцэст нь тааралдах тохиолдол байх магадлалтай. Зондыг дор хаяж хоёр триггер дээр ажиллуулж, үр дүнг триггерээр тэмдэглэ.
Зөвшөөрөгдсөн трафик ямар байдгийг логоос унш
Завсарт 200 эсвэл хурдан холболтын бүтэлгүйтэл нь аль ч зүг рүү чиглэсэн гоожлого юм. Завсар даяар хугацаа дуусах нь хориглох бодлогын хүлээгдэж буй хэлбэр. Холболтууд бүтэлгүйтэж байхад нэрийн шийдэл амжилттай байх нь шийдэгч хүртээмжтэй хэвээр байгааг илтгэнэ, энэ нь өөр төрлийн гоожлого.
Одоо байгаа сокетууд анхаарал шаардана. Программ салгахаас өмнө нээсэн холболтоо үргэлжлүүлэн ашиглаж болох тул амьд мэт харагдах трафик шинэ зам зөвшөөрөгдсөнийг батлахгүй байж болно. Сокетын жагсаалт холболт үйл явдлаас өмнө байсан эсэхийг харуулна:
ss -tunp | grep -E 'ESTAB|SYN-SENT' ip route get 198.51.100.7 resolvectl status | sed -n '1,20p'
Сокетын эхлэх цагийг салгалтын цагийн тэмдэгтэй харьцуул. Доголдлоос хуучны холболт нь гоожлого бус сокетын дахин ашиглалтын баталгаа бөгөөд үүнийг гэмтэл гэж мэдээлэх нь дараагийн хүнийг байхгүй алдаа хайхад илгээнэ.
Үр дүнг шинэчлэлтийг давах хэлбэрээр тэмдэглэ
Триггер, секундээр завсар, хориглолгүй хүсэлт амжилттай болсон эсэх, нэрийн шийдэл амжилттай болсон эсэх, клиент болон үйлдлийн системийн хувилбарыг бич. Таван баримтын энэ багц нь хувилбаруудын хооронд харьцуулагдах бөгөөд нэг догол мөр үүнийг хийж чадахгүй.
Клиентийн шинэчлэл эсвэл профайлын өөрчлөлтийн дараа ижил тестийг дахин ажиллуул, учир нь хориглох зан төлөв нь хэрэгжүүлэлтийн нарийн ширийн бөгөөд тэр хөдөлдөг. Бүртгэлийн зорилго нь хөдөлгөөнийг асуудал болохоос өмнө анзаарах, клиентийг нэг удаа баталгаажуулах биш.