Bitta banaction, ikki transport: fail2ban VPN jailini tuzatish
Taqiq faqat o'z action'idagi protokol qadar keng bo'ladi. Avval chain hisoblagichlarini tinglovchilar bilan solishtiring, so'ngra jailning o'zida ikkala transportni ham qamrab oling.
fail2ban o'zi hech qanday paketni tashlab yubormaydi: u actionni chaqiradi, aynan shu action protokol va portni nomlaydi. Jail ban haqida xabar berib, daemon esa kirishlarni qabul qilishda davom etayotgan bo'lsa, ban odatda haqiqiy, lekin log ko'rsatganidan torroq bo'ladi. Boshqa transport orqali qayta ulanadigan mijoz o'rnatilgan qoidaga hech qachon duch kelmaydi. Biror narsani o'zgartirishdan oldin action o'rnatgan narsani daemon tinglayotgan narsa bilan solishtiring, chunki dalil action yozgan firewall chainida, jail ro'yxatida emas.
Chainni o'qing, jail xulosasini emas
fail2ban o'z chainini xizmat chainidan oldinga qo'yadi, shuning uchun hisoblagich ro'yxati aynan mavjud narsani ko'rsatadi. Jail nomi bilan atalgan, protokol ustuni udp deb yozilgan bitta qoidani saqlovchi chain kelishda davom etayotgan TCP kirishlari uchun to'liq izohdir. Faqat taqiqlangan manbadan kelgan UDP paketlar rad etilmoqda. Xizmatda TCP tinglovchisi bor va bu chaindagi hech narsa unga tegmaydi.
Qo'shni jail ta'siriga ham e'tibor bering. Bitta host mukammal sozlangan ko'rinishi mumkin, chunki yetishmayotgan yarmini boshqa jail ta'minlaydi, xuddi shu build esa o'sha jail o'rnatilmagan joyda hech narsa qilmaydi.
Action bitta protokolni nomlaydi va aynan shu yerda buziladi
Har bir banaction firewall buyruq shablonidir va protokol uning placeholderlaridan birida turadi. Bu torlik ataylab shunday, chunki web jail va DNS jail bir xil portlarni bloklashi shart emas. Xizmat birdan ortiq transportda tinglaganda bu tuzoqqa aylanadi, VPN daemonlari buni muntazam qiladi. Filtr ikkala transportdan kelgan muvaffaqiyatsiz kirishlarni kuzatishi mumkin, action esa faqat bittasini qamrab oladi.
SoftEther va OpenVPN o'rnatmalari odatda bir vaqtda UDP va TCPda tinglaydi, log qatori ikkalasida ham bir xil ko'ringani uchun filtr ikkalasini ham kuzatadi. Bu nosimmetriklik jailning o'z hisobotida hech qachon ko'rinmaydi. fail2ban muvaffaqiyatsizliklarni to'g'ri sanadi va keyin o'sha muvaffaqiyatsizliklar kelgan trafikning yarmigagina tegishli qoidani o'rnatdi.
Banni ikkala transportni qamrab oladigan qiling
Buni jail ta'rifida tuzating; qo'lda yozilgan qoidalar keyingi qayta yuklashda aralashtirib yuboriladi. Har bir protokol uchun bittadan ikkita action yozing:
action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
%(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]
Buni protocol = all bilan qisqartirishga urinmang. Standart banaction multiport actiondir va u -p <protocol> -m multiport --dports <port> ga kengayadi; L4 protokoli bo'lmasa port mosligi tekshiradigan narsa topilmaydi, shuning uchun iptables qoidani rad etadi, jail esa baribir muvaffaqiyatli ban haqida xabar beradi. iptables-allports yoki nftables-allports kabi barcha portlar uchun action bitta yozuvni qabul qiladi, lekin u o'sha manbadagi barcha portlarni taqiqlaydi, bu boshqa qaror va o'z asoslanishini talab qiladi. Protokolni tcp yoki udp da qoldiring va ikkita yozuvni qabul qiling.
Qoida haqiqatan mavjudligini isbotlang, sozlamaga ishonish o'rniga, chunki sozlama chain uni ushlab turmaguncha faqat niyatni tasvirlaydi:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
Har bir chain bitta qoidani ro'yxatga olishi kerak: birinchisida -p tcp, ikkinchisida -p udp, ikkalasi ham taqiqlangan manzilni nomlaydi. So'ngra o'sha manzil ikkala transportda ham rad etilishini tasdiqlang. Chainda ko'rmagan banningiz umid, xuddi shu alomat haqidagi keyingi hisobot yana o'sha bir soatga tushadi.
Ban hali nimani o'tkazib yuboradi va keyingi holat
Action bitta manbani rad etadi, xolos, va faqat unda sanab o'tilgan portlarda. U manzillarni almashtirib turadigan hujumchiga qarshi hech narsa qilmaydi va dushman mashinani yuzlab foydalanuvchi bo'lishadigan operator darajasidagi NAT chiqishidan ajrata olmaydi, u yerda bitta ban hech narsa qilmagan odamlarni ham tashqarida qoldiradi. Filtr mijoz haqiqatan ega bo'lgan manzilni o'qishiga ishonch hosil qiling, yo'naltirilgan sarlavha yoki proksi manzilini emas. Xato o'z-o'zidan tugaydigan darajada oynani qisqa tuting.
Bularning hech biri protokol tuzatishini chetlab o'tishga asos bo'lmaydi; bu bir vaqtda ikkita fikrni ushlab turishga asos bo'ladi. Ban jail xulosasi ko'rsatganidan torroq, hatto to'liq ban ham tahdiddan torroq. Firewall chainini daemonning tinglovchilar ro'yxati yoniga qo'ying va protokol bo'yicha solishtiring, chunki aynan shu ikki ro'yxat ban xizmatga yetib bora oladimi yoki yo'qmi hal qiladi.
Qayta yuklash buyrug'i va chain ro'yxatini jail yonidagi runbookda saqlang. Keyingi odamga ikkalasi ham kerak bo'ladi, jail xulosasi esa unga hech birini aytmaydi.