Lab: "xizmatga ulanib bo'lmayapti" muammosini diagnostika qilish
Tarmoq diagnostikasi maqolasi ping, traceroute, ss va tcpdump ni alohida-alohida tanishtirdi. Bu lab to'rttasini ham birga, tajribali administrator ularga aslida murojaat qiladigan tartibda ishlatib, mavjud bo'lgan eng keng tarqalgan on-call chaqiruvini diagnostika qiladi: "xizmatga ulana olmayapman". Mashq bitta belgining ortiga ataylab uchta turli sabab qo'yadi: noto'g'ri tinglash manzili (1-holat), bloklangan firewall porti (2-holat) va noto'g'ri hostga resolve bo'ladigan nom (3-holat). Chunki tashqaridan uchalasi ham bir xil ko'rinadi va ularni to'g'ri farqlash — aynan tekshirilayotgan ko'nikma. To'rtinchi ehtimoliy sabab — jarayon umuman ishlamayotgani — har bir holatda ketma-ketlik boshidagi ps/ss tekshiruvi bilan birinchi bo'lib chiqarib tashlanadi. Bu tasdiqlash eng arzon bo'lgan narsa va uni o'tkazib yuborish eng uyatli narsa.
Maqsad va yakuniy natija
Bu lab oxirida siz bir xil xizmat uchun "connection refused" yoki "connection timed out" ning ataylab kiritilgan uchta alohida sababini diagnostika qilgan bo'lasiz. Buning uchun eng dramatik tuyuladigan gumondor bo'lgani uchun avval firewall’ni taxmin qilish o'rniga, jarayondan boshlanib tarmoq tomon tashqariga qarab boradigan izchil, qatlamli diagnostika ketma-ketligidan foydalanasiz.
Topologiya va boshlang'ich holat
Bitta lab VM yetarli. Ikkinchi mashina (yoki xuddi shu hostdagi alohida tarmoq nuqtasi sifatida qaraladigan container) "tashqaridan" sinovlarni realroq qiladi, lekin shart emas.
Talablar
- oddiy test xizmati sifatida
nc(netcat) yokipython3 -m http.server; ss,ping,curlvaufw(yokiiptables) — hammasi standart holatda mavjud yokiaptorqali o'rnatiladi.
Xavfsizlik va snapshot haqida eslatma
Bu lab lab mashinasida firewall portini ochadi va yopadi. Biror narsani o'zgartirishdan oldin joriy firewall holatini tasdiqlang va oxirida uni aynan tiklang. Labda xato tufayli ochiq qolib ketgan port, agar o'sha VM keyinchalik qayta ishlatilsa yoki tashqariga ochilsa, kichik bo'lsa ham, haqiqiy xavfsizlik zaifligi.
0-qadam: oddiy test xizmatini ishga tushirish
Bu ataylab faqat 127.0.0.1 ga bog'lanadi — bu lab diagnostika qiladigan birinchi nosozlik.
1-holat: xizmat noto'g'ri manzilga bog'langan
Boshqa mashinadan (yoki localhost emas, VM’ning haqiqiy IP’sini ishlatgan curl dan) ko'rinadigan belgi:
Diagnostika — 1-qadam: jarayon umuman ishlayaptimi?
Jarayon ishlayapti — bu "xizmat ishdan chiqqan" variantini chiqarib tashlaydi va gipotezani toraytiradi.
Diagnostika — 2-qadam: u aslida nimani tinglayapti?
127.0.0.1:8080 — mahalliy manzil ustuni — javob: bu jarayon firewall holatidan qat’i nazar, faqat mashinaning o'zidan kelgan ulanishlarni qabul qiladi, tarmoqdan kelganlarni hech qachon qabul qilmaydi. Tarmoq diagnostikasi maqolasi aynan shu tekshiruvni eng ko'p o'tkazib yuboriladigan qadam sifatida belgilaydi: administratorlar bog'lanish manzili to'liq izohlaydigan belgi uchun ko'pincha to'g'ridan-to'g'ri firewall qoidalariga o'tib ketadi.
Tuzatish va tekshirish:
2-holat: firewall qoidasi portni bloklaydi
Belgi:
Diagnostika. E’tibor bering, xato matnining o'zi birinchi ishora: "Connection refused" va "Connection timed out" — sabablari turlicha bo'lgan turli nosozliklar. Ikkalasiga ham "tarmoq buzilgan" deb qarash o'rniga ularni darhol ajratishga arziydi:
- Connection refused — mashina o'sha portda hech narsa tinglamayotgani haqida faol javob berdi (hech qanday jarayon bog'lanmagan yoki firewall qoidasi paketni tashlab yuborish o'rniga aniq rad etyapti).
- Connection timed out — kutish davri ichida umuman javob kelmadi. Odatda buning sababi firewall paketni jimgina tashlab yuborgani yoki route haqiqatan mavjud emasligi.
Jarayon to'g'ri manzilda tinglayotgani tasdiqlandi — bu 1-holatdagi sababni chiqarib tashlaydi va tekshiruvni tarmoq yo'lining o'ziga yo'naltiradi.
Tuzatish va tekshirish:
3-holat: DNS noto'g'ri manzilga resolve qiladi
Belgi:
Diagnostika. Oldingi tuzatishlar bu holatdan oldin ishlaydigan holatga qaytarilgani uchun bu yerdagi nosozlik faqat nomni resolve qilish bilan bog'liq. Xizmatning o'zi yana aybdor deb taxmin qilishdan oldin resolve qilishni tekshirib, xuddi shu qatlamli yondashuv bilan tasdiqlang:
Hostname VM’ning haqiqiy interfeys manziliga emas, 127.0.0.1 ga resolve bo'ladi. DNS vositalari maqolasi /etc/hosts yozuvlari standart holatda nega DNS’dan ustun turishini va boshqa hech bir hostda takrorlanmaydigan, aynan shu turdagi chalkash, mashinaga xos nosozliklarning tez-tez uchraydigan, osongina unutiladigan manbai ekanini ko'rib chiqadi.
Tuzatish va tekshirish:
Keng tarqalgan xatolar
- Jarayon umuman ishlayotganini tekshirishdan oldin firewall’ni tekshirish. Bu labdagi uchta holat ko'rsatganidek, firewall bir xil belgining kamida uchta ehtimoliy sababidan faqat bittasi. Uni tartibni buzib birinchi tekshirish u haqiqiy sabab bo'lmagan uchdan ikki holatda vaqtni behuda sarflaydi.
- "Connection refused" va "connection timed out" ni bir xil muammo deb hisoblash. Yuqorida tushuntirilganidek, ular stekning turli qatlamlariga va butunlay boshqa-boshqa tuzatishlarga ishora qiladi.
- Mashinaning haqiqiy manzili o'rniga
curl localhostbilan sinash.127.0.0.1ga bog'langan xizmat bu tarzda sinalganda yolg'ondan ishlayotgandek ko'rinadi va aynan 1-holatdagi xatoni dastlabki sinov paytida ushlanishidan yashiradi.
Orqaga qaytarish va tozalash
kill %1 2>/dev/null
sudo ufw delete allow 8080/tcp
sudo sed -i '/test-service.lab/d' /etc/hosts
sudo ufw status verbose
Yakuniy ufw status verbose chiqishi 0-qadamdan oldin yozib qo'ygan holatingizga mos kelishini tasdiqlang.
Yakuniy baholash mezoni
Uchta holatning har biri uchun siz — bu labni qayta o'qimasdan — asl sababni aniqlagan aniq buyruqni ayta olsangiz va klient nuqtai nazaridan belgi uchala holatda ham nega bir xil ko'ringanini tushuntira olsangiz, bu lab yakunlangan hisoblanadi.
Mashqlar
- 2-holatni qayta yarating, lekin bu safar
ufw denyo'rnigaufw rejectdan foydalaning va klient tomonidagi xato xabari hamda javob vaqtinidenyholati bilan taqqoslang.deny(jimgina tashlab yuborish) vareject(faol rad etish) o'rtasidagi farqni klient nimani kuzatishi nuqtai nazaridan tushuntiring. tcpdumpyordamida 2-holatni qayta yaratayotganda 8080-portdagi trafikni yozib oling va yozuvda SYN paket qachondir tasdiqlanganmi (acknowledged), jimgina tashlab yuborilganmi yoki reset bilan javob berilganmi, aniqlang.- Yuqorida ko'rib chiqilmagan, xuddi shu "xizmatga ulanib bo'lmayapti" belgisi ortidagi to'rtinchi sababni (masalan, klient so'rovidagi noto'g'ri port raqami yoki butunlay yo'q route) o'ylab toping va diagnostika qiling. Xuddi shu qatlamli diagnostika tartibini qo'llang: jarayon, tinglash manzili, firewall, keyin nomni resolve qilish.