Qoida VPN server manzilini e’lon qilingan xizmatga ruxsat bering deydi, lekin ulanish baribir uziladi. Bu natija odatiy va Docker xatosi emas. Ikki alohida moslik noto’g’ri: siz yozgan manba xost qabul qiladigan manba bo’lmasligi mumkin, siz yozgan port esa filtr ko’radigan port bo’lmasligi mumkin. Ikkalasini tuzatish xizmat chizmasiga emas, paket yo’liga qarashni talab qiladi.

Afsona: VPN serveriga ruxsat ber va tamom

Marshrutlangan VPN mijoz tunnel manzilini Docker xostigacha saqlab turishi mumkin. Manba tarjimasini bajaradigan shlyuz bu manzilni o’ziniki bilan almashtirishi mumkin. Ikkala loyiha ham qonuniy va bir xil foydalanuvchi amali uchun turli manbalar beradi.

Demak, VPN server IP iborasi taxminni tasvirlaydi, kuzatuvni emas. Oldingizda qaysi loyiha turganini bilguningizcha qoida taxmin bo’lib qoladi.

Manba: mijoz hovuzi yoki tarjima qilingan shlyuz

To’rt narsani tartib bilan tekshiring. Birinchisi, mijoz manzillari hovuzi, masalan 10.90.0.0/24. Ikkinchisi, shlyuz bu hovuzni xostga yetib bormasdan oldin tarjima qiladimi. Uchinchisi, xost bitta yangi ulanish uchun haqiqatda qaysi manbani kuzatadi. To’rtinchisi, ilova autentifikatsiyasi alohida foydalanuvchilarni ajratadimi, chunki umumiy tarjima qilingan manzil buni qila olmaydi.

Hovuz saqlansa, faqat shlyuzning ommaviy manziliga mos keladigan qoida har bir mijozni o’tkazib yuboradi. Shlyuz ataylab tarjima qilsa, tarjima qilingan manzilga ruxsat uning orqasidagi har bir foydalanuvchini kiritadi, bu o’z kirishiga ega xizmat uchun maqbul, boshqa hamma narsa uchun nomaqbul bo’lishi mumkin.

Port: DNAT siz moslashtiradigan sonni o’zgartiradi

Docker iptables bilan odatdagi Linux ko’prigi orqali e’lon qilishda xostning 8443 dan konteyner porti 443 ga moslanishi yo’naltirish filtri ishga tushmasdan oldin tarjima qilinadi. Paket filtrga manzil porti 443 bilan yetib boradi. O’sha paytda 8443 ga mos keladigan qoida hech qachon ishga tushmaydi, mijoz 8443 ni yozgan bo’lsa ham.

E’lon qilingan port ulanishlarni kuzatishda hali ham mavjud, shuning uchun haqiqatan kerak bo’lganda asl manzil u yerda moslashtirilishi mumkin.

Qaysi son niyatni ifodalashini hal qiling. Qoida konteyner ichidagi xizmatni himoya qilsa, DNAT dan keyingi konteyner portiga moslashing. Qoida mijoz nima so’raganini tasvirlashi kerak bo’lsa, conntrack tanlovi bilan asl manzilga moslashing va u bilan keladigan qo’shimcha moslashtirish xarajati hamda qoidalar tartibiga ehtiyotkorlikni qabul qiling.

Zanjir: INPUT emas, DOCKER-USER

Docker ning iptables qo’llanmasi foydalanuvchi yo’naltirish siyosatini DOCKER-USER zanjiriga qo’yadi, u Docker ning o’z yo’naltirish qoidalaridan oldin baholanadi. Xost xizmatidan INPUT zanjiriga ko’chirilgan qoida xostga yo’naltirilgan trafikni filtrlaydi, konteynerga yo’naltirilgan trafikni emas. Bu xato to’g’ri ko’rinadigan va konteyner yo’liga hech qanday ta’sir qilmaydigan qoida hosil qiladi.

Manba oralig’i, amaldagi manzil porti, protokol va kirish interfeysini bitta qoidada birga saqlang. Har bir yo’naltirilgan manzil uchun faqat manbaga asoslangan ruxsat bitta e’lon qilingan xizmatga ruxsat berishdan kengroq.

Yangi ulanishlar bilan tekshiring

Ikkala yo’nalishni yangi ulanishlar bilan sinab ko’ring: bitta ruxsat berilgan VPN mijozi va rad etilgan holda qolishi kerak bo’lgan bitta manba. Mavjud ulanish holati siyosat o’zgargandan keyin ham sessiyani tirik ushlab turishi mumkin, shuning uchun eski ulanish yangi qoida haqida hech narsani isbotlamaydi. Keyin javob yo’lini tekshiring, chunki konteyner hali ham o’zi ko’radigan manbaga qayta yo’naltirishi kerak.

Bu tekshiruvlar ortidagi zanjirlar tartibi va port tarjimasi xatti-harakati Docker ning iptables qo’llanmasi da hujjatlashtirilgan. Retsept ko’chirishdan oldin uni o’qing va o’rnatilgan Docker qaysi backenddan foydalanishini tasdiqlang, chunki nftables backend siyosatni boshqacha birlashtiradi.

O'xshash maqolalar