Kirish ishlaydi, PWD ishlaydi, so’ngra LIST mijoz taslim bo’lguncha yoki boshqa ma’lumot rejimiga o’tguncha osilib turadi. Bu bo’linish aynan belgidir: 21-portga boshqaruv ulanishi sog’lom, ma’lumot ulanishi esa qarshi tomon yetib bora olmaydigan manzil yoki portdan qurilmoqda. NAT ham qiladigan VPN shlyuzi ortida odatiy aybdor — yukida 10.8.0.6 kabi tunnel manzilini nomlaydigan FTP buyrug’i. Sarlavhalar tarjimasi bu qiymatga hech qachon tegmaydi.

Keyingi gap — bu qiymat qayerdan kelishi va qaysi quti uni o’zgartirishga haqli ekani.

Buziladigan narsa — yuk, tunnel emas

FTP ma’lumotning oxirgi nuqtasini boshqaruv oqimi ichiga qo’yadi. Faol rejimda mijoz o’z manzili va porti bilan PORT yuboradi, server esa o’sha juftlikka qayta qo’ng’iroq qiladi. Passiv rejimda server juftlik bilan 227 deb javob beradi, mijoz esa buning o’rniga o’shanga qo’ng’iroq qiladi.

Ikkala shakl ham bir xil turdagi bayonni olib yuradi: shu manzilga, shu portdan ulan. Faqat IP va TCP sarlavhalarini qayta yozadigan qurilma bayonni o’z holicha qoldiradi, shuning uchun bir tomon tunnelning narigi tomonidagina mavjud manzilga yetishga urinishda davom etadi. Boshqaruv ulanishi allaqachon sog’lom deb e’lon qilingandan keyin ma’lumot ulanishi to’xtaydi.

Uch rejim, uch yuk

Quyidagi jadval qaysi tomonga qo’ng’iroq qilish buyurilganini va faqat sarlavhalarni qayta yozadigan NAT bu borada nima qila olishini ko’rsatadi.

Oxirgi ustunni birinchi muvaffaqiyatsiz bo’ladigan narsa deb o’qing. Faol rejimda maxfiy manzilga qo’ng’iroqni server qiladi, passiv rejimda mijoz, FTPSda esa yuk shifrlangan matn bo’lgani uchun oraliq qutiga ishlash uchun undan ham kam narsa qoladi.

ModeValue in the control streamWho dials whomHeader-only NAT leaves
Active (PORT)client address and portserver dials the clienta server dialing an unreachable tunnel address
Passive (227)server address and portclient dials the servera client dialing an address it cannot route to
FTPSthe same values, inside TLSas aboveciphertext, so no rewrite happens at all

Yordamchini tarjima bo’ladigan joyga qo’ying

Linuxda yukni qayta yozishni nf_conntrack_ftp yordamchisi bajaradi. U boshqaruv ulanishini kuzatadi, kelishilgan portni o’rganadi, ma’lumot oqimi uchun kutish yaratadi va NAT qutisida yuk ichidagi manzil va portni qayta yozadi. U faqat mijoz manzilini tarjima qiladigan qurilmada yordam beradi. Uni mijozga yoki oqimni faqat uzatadigan routerga yuklash sessiyada hech narsani o’zgartirmaydi.

Bu uch buyruq modul bor-yo’qligini, ulangan yoki ulanmaganini va sessiya ochiq turganda kutish mavjudligini ko’rsatadi:

modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp

Modulni yuklash uni ulash bilan bir xil emas. 4.7dan boshlab yadrolar net.netfilter.nf_conntrack_helper=0 bilan keladi, shuning uchun yordamchi aniq qoidani kutadi, masalan iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Agar uzatishga urinish paytida kutishlar ro’yxati bo’sh qolsa, tekshiriladigan narsa — ulanish, modul emas.

Passiv rejim: serverga nima e’lon qilishni ayting

Passiv rejimni deterministik qilish osonroq, chunki serverga 227 javobiga nima qo’yishni aytish mumkin. vsftpda bu pasv_address, pasv_min_port va pasv_max_port bilan birga; ProFTPD MasqueradeAddress va PassivePorts ishlatadi. Ularni birinchi navbatda sozlang, chunki to’g’ri e’lon qilingan manzil o’sha tomonda biror narsani qayta yozish zaruratini olib tashlaydi.

So’ngra aynan o’sha port oralig’ini shlyuzdan o’tkazing, masalan -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, qoida server e’lon qilgan narsaga mos kelishi uchun.

Ikki sozlama bir-biriga mos bo’lishi kerak. 30000-30100 e’lon qilish buyurilgan serverga shlyuz 40000-40100 ruxsat bersa, u eng kam foydali tarzda muvaffaqiyatsiz bo’ladi: boshqaruv suhbati sog’lom ko’rinadi va har bir ma’lumot ulanishi o’ladi. Boshqa narsani tuzatishdan oldin raqamlarni solishtiring.

Ikki nosozlik belgisi va FTPS nimani olib tashlaydi

LISTda osilib qolish sessiyaning birinchi ma’lumot ulanishiga ishora qiladi, u yerda manzilni qayta yozish ham, kutish ham ishlashi kerak. Ishlaydigan LISTdan keyin RETRda osilib qolish uzatishning o’ziga, ya’ni passiv oraliqqa yoki tunnel MTUsiga ishora qiladi. Bu ikkinchi belgi yuk muammosi emas va yordamchi sozlamalari uni tuzatmaydi.

TLS ustidagi FTP yordamchi o’qiydigan yukni olib tashlaydi. Oraliq quti shifrini ocha olmaydigan PORT yoki PASV qiymatini qayta yoza olmaydi, shuning uchun qolgan variantlar — TLSni tugatadigan proksi, cheklangan oraliqda yetib bo’ladigan manzilni e’lon qiladigan server yoki boshqa uzatish protokoli.

Tekshirishlarning qisqa tartibi

Belgidan tashqariga qarab ishlang. PWD muvaffaqiyatli bo’lganda LIST muvaffaqiyatsiz bo’lishini tasdiqlang, PORT yoki 227 yuki ichidagi manzilni ushlang va qaysi qurilma o’sha manzilni tarjima qilishini so’rang. Yordamchini o’sha yerda ulang, bitta uzatish davomida kutishlar ro’yxatini kuzating, so’ngra serverda passiv rejimni tuzating va oraliqni shlyuz qoidasida aks ettiring.

Ma’lumot yo’lidagi nosozlikni ommaviy uzatish nosozligidan alohida tuting, chunki ular sizni turli sozlamalarga olib boradi.

O'xshash maqolalar