Bitta mijoz boshqa mijozning SSH xizmatiga yetib borishi kerak, hovuzning qolgan qismi esa bugungidek ajratilgan qolishi lozim. Vasvasaga soladigan kalit client-to-client bo'lib, u tengdoshlar orasidagi kirishni hamma uchun birdaniga yoqadi va qarorni yadro o'rniga OpenVPN ga topshiradi. Torroq javob bu kalitni o'chirilgan holda qoldiradi va serverning o'z marshrutlashuvi hamda xavfsizlik devori aynan bitta oqimni ko'tarishiga imkon beradi.

Mexanizm qoida matnidan muhimroq, chunki ikki yondashuv paketni turli joylarga qo'yadi. Qaysi birini tanlaganingizni bilish ham hech narsa qilmayotgandek ko'ringan qoidani, ham usiz ulanadigan tengdoshni tushuntiradi.

client-to-client paketni qayerga ko'chiradi

client-to-client yoniq bo'lganda server tengdosh paketini tunnel qurilmasidan yana tashqariga yuborish o'rniga ichkarida uzatadi, shuning uchun paket hech qachon yadroning uzatish yo'liga yetib bormaydi. Bu qulay va shu bilan birga xavfsizlik devoringiz nazorat qilishi kerak bo'lgan oqimni hech qachon ko'rmasligini bildiradi. Variantni o'chiq qoldiring va server paketni yana o'sha interfeysdan tashqariga yo'naltiradi, bu esa uni netfilter oldiga qo'yadi. O'sha interfeys kiradi, o'sha interfeys chiqadi va FORWARD zanjiri so'zga ega.

Almashinuv aniq: bitta siyosat nuqtasini olasiz va qisqa yo'l siz uchun bajargan marshrutlash hamda uzatish ishini o'z zimmangizga olasiz. Bu ish bitta oqim uchun kichik va qo'shgan har bir istisno bilan o'sadi. Istisnolarni hozir sanang, chunki tengdoshlar orasidagi siyosat aslida qoidalar to'plamida yashaydi.

Tengdosh paketi aslida bosib o'tadigan yo'l

Faraz qilaylik, Linux Community OpenVPN 2.6 xizmati, DCO o'rniga foydalanuvchi fazosida TUN ishlovi, subnet topologiyasi, tun0 va mijoz A 10.44.0.21 da, mijoz B 10.44.0.37 da bo'lgan 10.44.0.0/24 hovuzi bor. Subnet topologiyasida A olgan manzil va tarmoq maskasi hovuzni allaqachon qamrab oladi, shuning uchun A paketni qo'shimcha itarilgan marshrutsiz tunnel qurilmasiga yuboradi. A dagi amaldagi marshrutni taxmin qilish o'rniga tekshiring.

Serverda paket B manziliga keladi, bu esa mahalliy manzil emas, shuning uchun uzatiladi. Bu umuman sodir bo'lishi uchun IPv4 uzatish yoniq bo'lishi kerak va marshrut qidiruvi paketni yana tun0 orqali tashqariga yuborishi lozim. Shuning uchun xavfsizlik devori ikkala tomonda bir xil interfeysli uzatilgan oqimni ko'radi va ko'p qoidalar to'plami aynan shu tafsilotni o'tkazib yuboradi. Bu yerda manba tarjimasi kerak emas va A manzilini buzilmagan holda saqlash B ga o'zining manbaga asoslangan qoidasini qo'llash imkonini beradigan narsadir.

Serverda ikkita qoida, shu tartibda

Uchta qoida butun ruxsatni ko'taradi: uzatish, juftlik istisnosi va tunnel juftligi uchun standart tashlash. Qabul qoidasi juftlik va xizmatni nomlaydi, shuning uchun ruxsat o'sib borayotgan hovuzda ham saqlanib qoladi. Uni tunneldan-tunnelga trafik uchun har qanday umumiy taqiqdan oldin qo'ying, chunki birinchi moslik yutadi:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

Bu buyruqlar namuna bo'lib, xostingiz qoidalarni saqlash uchun ishlatadigan mexanizmga tegishli; ish vaqtida kiritilgan qo'shimcha keyingi yuklashda yo'qoladi. Holatli qoida B ning javoblari va TCP qo'l siqishining ikkinchi, ko'zgu qabulisiz qaytishiga imkon beradigan qoidadir.

Keyin qoidalar ro'yxatini emas, hisoblagichlarni tekshiring, chunki hech qachon mos kelmaydigan qoida ishlaydiganidan farq qilmaydi. Agar hisoblagichlar nolda qolsa, paket siz o'ylagan yo'ldan ketmayapti.

B hali nimaga ruxsat berishi kerak

SSH xizmatini B yuritadi, shuning uchun tunnel manzilida biror narsa tinglayaptimi va o'z xost xavfsizlik devori manbani qabul qiladimi, buni B hal qiladi. Serverdagi tarmoq ruxsati B dagi hech bir hisob uchun ruxsat emas va xost kalitini tekshirish hamda foydalanuvchi autentifikatsiyasi boshqa har qanday joydan bo'lgani kabi amal qiladi.

Avval ijobiy holatni sinang: A dan B ning tunnel manziliga yangi SSH ulanish, kutilgan xost kaliti bilan qabul qilinsin. So'ngra boshqa tengdosh yoki boshqa portni sinang va rad etilishini tasdiqlang, chunki jimjitlik bilan hamma narsaga ruxsat beradigan ruxsat muhim bo'lib qolguncha ishlaydiganidan farqlanmaydi. Bu sinovning ikkala yarmi ham zarur va ikkinchisi odamlar tashlab ketadigan yarmidir.

Ajratilgan manzillarni, ikkala mijozdagi amaldagi marshrutlarni va serverda hamda B da aniq qoidalarni yozib qo'ying. Shlyuzga muvaffaqiyatli ping yoki serverda ochiq port bularning hech birini isbotlamaydi, chunki tengdoshlar orasidagi uzatish hali bloklangan bo'lsa ham ikkalasi to'g'ri bo'lishi mumkin. Bu raqamlarni tunnel ko'tarilgan paytda yozib qo'ying, chunki mijoz qayta ulangandan keyin oladigan manzil boshqa bo'lishi mumkin.

O'xshash maqolalar