Xizmatni operator darajasidagi NAT orqasidagi noutbukka joylashtiring, o'sha noutbukni VPN orqali VPS ga yo'naltiring, va tashqaridan hech kim unga yeta olmaydi. VPS da manzil NAT qoidasini qo'shasiz va sukunatdan ham yomonroq narsa olasiz: ulanishlar ochiladi, keyin tiqilib qoladi. Javob yo'qolgan emas, u mijozning o'z standart marshruti orqali chiqib ketmoqda, ya'ni server uni hech qachon ko'rmaydi. Ushbu besh tekshiruvni tartib bilan bajaring va birinchi bardosh bermagan joyda to'xtang.

Server umuman yo'naltirishini tasdiqlang

Bitta tarjima yozishdan oldin bu katakchani belgilang. Yadro yo'naltirishdan bosh tortgan paket uchun DNAT qoidasini qoida tahlilchisi qabul qiladi, so'ng yo'naltirish yo'li uni tashlab yuboradi, bu esa xavfsizlik devori muammosiga o'xshaydigan kutish vaqtini keltirib chiqaradi.

sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1

Uni ishlab turgan yadroda sozlash qayta yuklash bo'ylab sozlash bilan bir xil emas. net.ipv4.ip_forward=1 ni /etc/sysctl.d/ ostidagi faylga yozing, sysctl --system ni ishga tushiring, so'ng fayl olingan deb ishonish o'rniga qiymatni qayta o'qing. O'z tarmoq nomlar fazosini boshqaradigan konteyner ham o'sha fazo ichida xuddi shu qiymatga muhtoj, faqat xostda emas.

Agar qayta o'qish hali ham nol bo'lsa, shu yerda to'xtang. Pastda hech narsa ishlamaydi.

Har qanday qoida unga murojaat qilishidan oldin tunnel manzilini mahkamlang

Hovuz manzillarni ulanish tartibida tarqatadi, shuning uchun bugungi ijara uchun yozilgan qoida keyingi hafta jimgina boshqa mijozga ishora qilishi mumkin. Manzilni kelish tartibiga emas, sertifikat shaxsiga bog'lang.

client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13

Bu juftlik nuqtadan nuqtaga tunnelning mijoz uchi va hamkor uchi bo'lib, server sertifikatning umumiy nomiga kalitlangan. Quyi tarmoq topologiyasida ikkinchi qiymat buning o'rniga tarmoq maskasi sifatida o'qiladi, shuning uchun ishlatilayotgan topologiyaga mos shaklni yozing. Keyin mijozni qayta ulang va manzilni mijozning o'zida o'qing, chunki serverning hovuzga qarashi mijoz nima sozlaganining isboti emas.

Agar manzil qayta ulangandan keyin o'zgarsa, to'xtang. Harakatlanuvchi nishonga ergashadigan NAT qoidasi vaqti-vaqti bilan muvaffaqiyatsiz bo'ladi va sizga hech narsa o'rgatmaydi.

Ikki tomonga tarjima qiling

Manzil tarjimasi kiruvchi paketni mijozga yuboradi. Manba tarjimasi mijozni asl yuboruvchiga emas, serverga javob berishga majbur qiladi, va bu odamlar tashlab ketadigan qoida.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13

Ikkinchi qoida bo'lmasa, mijoz o'zining ISP yuqori kanali orqali javob beradi, shuning uchun uzoq hamkor hech qachon gaplashmagan manba manzilini ko'radi, server esa javob uchun hech qanday kuzatuv yozuviga ega emas. Tashqi kuzatuvchi yarim tugaydigan qo'l berib ko'rishishni ko'radi va bu aynan odamlarni mavjud bo'lmagan xavfsizlik devori xatosini qidirishga yuboradigan alomat.

Ikkala qoidani iptables -t nat -S bilan qayta o'qing va interfeys nomi ommaviy manzilni olib yuruvchi nom ekanini tasdiqlang. Allaqachon nftables bilan filtrlaydigan xostda tarjimani asboblarni aralashtirish o'rniga mos manzil oilasining nftables NAT zanjiriga yozing.

Filtr jadvalini o'tkazing

NAT jadvallari sarlavhalarni qayta yozadi; ular ruxsat bermaydi. Standart DROP siyosati bilan yo'naltirilgan oqim o'z ruxsatiga muhtoj, qo'shimcha ravishda qaytish yo'nalishini ko'pchilik siyosatlar allaqachon established,related qoidasi bilan qoplaydi.

iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Biror narsa qo'shishdan oldin FORWARD zanjirining siyosatini tekshiring, chunki erta DROP tartibi sizning qoidangiz umuman ko'rib chiqilishini hal qiladi. Filtrlash nftables da yashaydigan xostda ekvivalent qoidani inet jadvalining forward ilgagiga qo'shing va asosiy zanjir nafaqat mahalliy kirishni, balki haqiqatan yo'naltirilgan trafikni ham ko'rishini tasdiqlang. Agar yangi qoidadagi paket hisoblagichi nolda qolsa, NAT hisoblagichlari esa oshsa, paket sizning qoidangizdan oldin tashlanadi. Bu zanjirlar tartibini o'qish signali, xuddi shu qoidaning ikkinchi nusxasini qo'shish emas.

Buni tashqi tarmoqdan isbotlang

Aloqasiz tarmoqdan sinab ko'ring. Xuddi shu LAN dagi boshqa mashinadan tekshiruv hairpin NAT yordamidan o'tishi mumkin va uzoq mijoz ishlatadigan yo'lni hech qachon mashq qilmaydi, shuning uchun u yerdagi yashil natija noto'g'ri narsani isbotlaydi.

tcpdump -ni any port 29443
conntrack -L | grep 29443

Tutishni serverda va mijozda bir vaqtda ishga tushiring. Serverdagi tutish tarjima qilingan paket tunnel tomon chiqishini ko'rsatadi; mijozdagi tutish so'rov kelishini va javob qayerga manzillanganini ko'rsatadi. conntrack -L dagi tarjima yozuvi qoida mos kelganini isbotlaydi, uning yo'qligi esa paket hech qachon NAT zanjiriga yetmaganini isbotlaydi.

Port skanerlari zaif dalil. Dastur bog'lanib tinglashni boshlamaguncha ular portni yopiq deb xabar beradi, shuning uchun haqiqiy xizmatga haqiqiy ulanishdan foydalaning. Nihoyat ishlaganda, ta'sirni o'sha bitta portda saqlang: birinchi qoida noqulay tuyulgani uchun SSH yoki boshqaruv panelini yo'naltirish xizmatni e'lon qilishdan ancha katta qaror.

O'xshash maqolalar