iptables va nftables
Firewall va UFW maqolasida UFW firewall qoidalari uchun o'qilishi oson front end sifatida ko'rib chiqildi. UFW’ning o'zi paketlarni filtrlashni amalga oshirmaydi — u quyi darajadagi kernel quyi tizimi uchun qoidalar hosil qiladi. Ilgari bu quyi tizim faqat iptables edi. Zamonaviy Linux tizimida esa bu nftables, iptables ning o'zi esa odatda eski uslubdagi buyruqlarni ostida nftables qoidalariga tarjima qiladigan moslik (compatibility) qatlami sifatida amalga oshirilgan. Bu maqola ikkalasini ham ko'rib chiqadi: eski tizimda yoki hali ham uni bevosita ishlatayotgan tizimda qoidalarni o'qish uchun yetarli iptables ni va har qanday yangi ish uchun o'rganishga haqiqatan arziydigan vosita sifatida nftables ni.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
iptables,nftablesva UFW o'rtasidagi bog'liqlikni tushuntirish;- filter jadvalining o'rnatilgan chain’lari bo'yicha asosiy
iptablesqoidalarini o'qish va yozish; nftablessintaksisida, uning ifodaliroq moslashtirish (matching) imkoniyatlari bilan birga, ekvivalent qoidalarni yozish;- har ikki vositaning qoidalarini qayta yuklanishdan keyin ham saqlanadigan qilish;
- qachon UFW o'rniga xom
nftables/iptablesga murojaat qilish kerakligini hal qilish.
Nega ikkita vosita va ular qanday bog'liq
iptables 2.4 kernel seriyasidan beri mavjud va qoidalarni jadvallarga (tables) — xatti-harakat toifalariga: ruxsat berish/rad etish qarorlari uchun filter, manzil tarjimasi uchun nat — ajratadi. Har bir jadvalda chain'lar bor — paketning kernel orqali o'tish yo'lidagi nuqtalar: INPUT, OUTPUT, FORWARD. Keyinroq paydo bo'lgan nftables xuddi o'sha netfilter hook’larini yagona, ifodaliroq sintaksis va o'zining qoidalar dvigateli bilan almashtiradi. U iptables ustidagi o'ram (wrapper) emas, ikkalasining yangisi bo'lib, kernel bilan bevosita muloqot qiladi. iptables-nft (hozirgi Debian, Ubuntu va RHEL’da standart holatda keladigan versiya) esa aksincha, moslik uchun eski iptables sintaksisini nftables qoidalariga tarjima qiladi.
Versiya satridagi (nf_tables) bu tizimdagi iptables buyrug'i eski dvigatel emas, moslik qatlami ekanini tasdiqlaydi. Ya’ni iptables bilan ham, nft bilan ham yozilgan qoidalar bir xil asosiy ruleset’ga tushadi va ikkalasi ham nft list ruleset orqali ko'rinadi.
iptables: jadvallar va chain’lar
Asosiy firewall vazifalari uchun filter jadvali muhim. Unda qaror paket yo'lining qaysi nuqtasida qabul qilinishiga mos keladigan uchta o'rnatilgan chain bor:
| Chain | Nimaga qo'llaniladi |
|---|---|
INPUT |
Shu hostga yo'naltirilgan paketlar |
OUTPUT |
Shu hostdan chiqayotgan paketlar |
FORWARD |
Shu host orqali boshqa joyga o'tayotgan paketlar (routing) |
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
-L qoidalarni ro'yxatga chiqaradi, -v paket/bayt hisoblagichlarini ko'rsatadi, -n esa manzillar uchun DNS so'rovlaridan qochadi (tezlik uchun ham, chiqish reverse DNS mavjudligiga qarab o'zgarmasligi uchun ham).
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -P INPUT DROP
-A INPUTqoidaniINPUTchain’ining oxiriga qo'shadi;-p tcp --dport 2222-portga keladigan TCP trafikka mos keladi;-j ACCEPT— target, ya’ni mos kelgan paket bilan nima qilish kerakligi;-P INPUT DROPchain’ning standart siyosatini (default policy) o'rnatadi — hech bir qoidaga mos kelmagan paket bilan nima bo'lishini.
Allow qoidalari mavjud bo'lmasdan standart siyosatni DROP ga o'rnatish joriy sessiyani qulflab qo'yadi
UFW’dagi kabi bu yerda ham tartib hal qiluvchi ahamiyatga ega: -P INPUT DROP darhol kuchga kiradi va agar joriy sessiya uchun SSH allow qoidasi hali qo'shilmagan bo'lsa, o'sha ulanish orqali keyingi buyruq hostga yetib bora olmaydi. Har qanday standart siyosatni DROP ga o'rnatishdan oldin har doim barcha kerakli ACCEPT qoidalarini — birinchi navbatda SSH’ni — qo'shing va birinchisini yopishdan oldin ikkinchi, mustaqil ulanishdan tekshiring.
iptables qoidalari faqat kernel xotirasida yashaydi va aniq saqlanmasa, qayta yuklanishda yo'qoladi:
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
nftables: bitta sintaksis, ifodaliroq moslashtirish
nftables qoidalarni konseptual jihatdan xuddi shunday tashkil qiladi — jadvallar ichida chain’lar, chain’lar ichida qoidalar. Lekin jadvallar va chain’larning o'zi qat’iy o'rnatilgan bo'lmay, aniq yaratiladi. Bitta qoida esa bir nechta alohida iptables qoidasini talab qiladigan shartlarni ifodalay oladi.
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
}
table inet filter — inet bu jadval IPv4 va IPv6 ga bir vaqtda qo'llanilishini bildiradi. Bu iptables va takrorlangan qoidalar bilan unga parallel ishlaydigan alohida ip6tables zaruratini yo'q qiladi. tcp dport { 80, 443 } accept — portlar to'plamini bitta qatorda moslashtirish maxsus kengaytma emas, tabiiy sintaksis.
Xuddi shu ruleset’ni noldan qurish:
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
sudo nft add rule inet filter input tcp dport 22 accept
sudo nft add rule inet filter input tcp dport { 80, 443 } accept
Buni qayta o'qish iptables -L ning tekisroq ro'yxatidan farqli o'laroq, chain siyosatini va har bir qabul qilingan portni bitta o'qilishi oson blokda tasdiqlaydi.
nftables qoidalari ham standart holatda vaqtinchalik. Ularni saqlashning standart usuli — aniq yoki systemd unit orqali yuklanadigan oddiy konfiguratsiya fayli:
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
}
ct state established,related accept alohida e’tiborga loyiq. Usiz ulanishning faqat birinchi paketi aniq qoidaga mos keladi, allaqachon ruxsat berilgan ulanishning javob trafigi esa standart siyosat tomonidan tashlab yuboriladi. Chunki bu qatorsiz holat saqlamaydigan (stateless) ruleset qaysi ulanishlarga oldin ruxsat berilganini eslab qolmaydi. iif lo accept loopback trafikka ruxsat beradi. Bu o'zi bilan yoki 127.0.0.1 orqali mahalliy ma’lumotlar bazasi bilan muloqot qiladigan ko'plab ilovalar uchun kerak.
Aslida qaysi birini ishlatish kerak
| Vaziyat | Tavsiya |
|---|---|
| Oddiy server, bir nechta portni ochish kerak | UFW — qarang: Firewall va UFW |
Mavjud, eski iptables ga asoslangan konfiguratsiyani o'qish yoki qo'llab-quvvatlash kerak |
Yuqorida ko'rib chiqilganidek, uni o'qish uchun yetarli iptables sintaksisini o'rganing |
| Yangi firewall qoidalarini noldan, bevosita (UFW orqali emas) yozish | nftables — bu zamonaviy, faol rivojlanayotgan vosita, UFW’ning o'zi ham ostida tobora ko'proq unga yo'naltirilmoqda |
| Oddiy allow/deny’dan tashqari murakkab NAT, port forwarding yoki traffic shaping | nftables yoki maxsus router/firewall distributivi — bu asosiy host firewall doirasidan tashqarida |
Ko'pchilik bitta serverli sozlamalarda UFW hosil qilgan qoidalar to'liq yetarli. Xom nftables ga murojaat qilish faqat talab haqiqatan UFW sintaksisi ifodalay oladigan doiradan oshganda ma’noga ega — masalan, UFW’da qisqa shakli bo'lmagan manba, manzil va ulanish holatining aniq kombinatsiyasiga mos keladigan qoida kerak bo'lganda.
Amaliy vaziyat: meros qolgan firewall konfiguratsiyasini o'qish
Muammo. Serverni allaqachon ketgan kishi sozlagan va unga biror o'zgartirish kiritishdan oldin uning firewall xatti-harakatini tushunish kerak.
Qoidalarga aslida qaysi vosita egalik qilishini tekshirish:
Dastlab qaysi buyruq yaratganidan qat’i nazar, to'liq ruleset’ni nft orqali ro'yxatga chiqarish:
table ip filter {
chain INPUT {
type filter hook input priority 0; policy drop;
ct state established,related counter packets 48213 bytes 6291842 accept
iif "lo" accept
tcp dport 22 accept
tcp dport 443 accept
}
}
Xulosa. Bu ruleset dastlab deyarli aniq iptables buyruqlari bilan qurilgan bo'lsa ham (katta harfdagi INPUT/FORWARD/OUTPUT chain nomlari — iptables kelishuvi, tabiiy nftables konfiguratsiyalarida esa kichik harfli maxsus nomlar ishlatiladi), nft list ruleset qaysi vosita yozganidan qat’i nazar haqiqiy, joriy holatni ko'rsatadi. Zamonaviy tizimda firewall’ning haqiqiy xatti-harakatini audit qilishning eng ishonchli usuli — qaysi buyruq qatori vositasi o'rnatilganiga qarab taxmin qilish emas, uni nft orqali o'qish.
Keng tarqalgan xatolar
- SSH allow qoidasini qo'shishdan oldin
DROPsiyosatini o'rnatish. Yuqorida ko'rib chiqilganidek, bu o'zgarish kiritish uchun ishlatilayotgan sessiyaning o'zini uzib qo'yishi mumkin va konsol orqali kirishdan boshqa qaytish yo'li qolmaydi. - Qo'lda yozilgan
nftableskonfiguratsiyasidact state established,relatedqoidasini unutish. Usiz har qanday ulanishning faqat birinchi paketi qoidalar bo'yicha baholanadi, allaqachon ruxsat berilgan ulanishning javob trafigi esa standart siyosat tomonidan jimgina tashlab yuboriladi. - Zamonaviy tizimda
iptables -Lto'liq manzarani ko'rsatadi deb o'ylash. Yuqorida ko'rsatilganidek, xuddi shu rulesetnft list rulesetorqali (ko'pincha to'liqroq) ko'rinadi. Bevosita qo'shilgan tabiiynftablesqoidalari bo'lishi mumkin bo'lgan tizimni audit qilishda eski vositalarga tayanish konfiguratsiyaning bir qismini o'tkazib yuborishi mumkin. - Doimiy qoidalar faylini uni qayta yuklamasdan tahrirlash.
/etc/nftables.confdagi o'zgarish servis qayta yuklanmaguncha (systemctl reload nftables) yoki fayl bevosita qo'llanilmaguncha (nft -f /etc/nftables.conf) hech qanday ta’sir qilmaydi — faylning o'zini tahrirlash ishlab turgan ruleset’da hech narsani o'zgartirmaydi.
Mashqlar
- Lab VM’da loopback trafikni, established/related ulanishlarni va SSH’ni qabul qiladigan, standart siyosati
dropbo'lgannftablesruleset’ini noldan yozing. Keyin birinchisini yopishdan oldin ikkinchi SSH sessiyasi hali ham ulanishini tekshiring. - Kirish huquqingiz bor tizimda
iptables --versionni ishga tushiring va chiqishda(nf_tables)bor yoki yo'qligi bu buyruq aslida qanday amalga oshirilgani haqida nima aytishini tushuntiring. - Bu maqoladagi namuna ruleset’dan foydalanib,
nftablesdagitcp dport { 80, 443 } acceptnegaiptablesekvivalentiga qaraganda ixchamroq ekanini vaiptablesekvivalenti qanday ko'rinishini tushuntiring. - Hozir UFW bilan boshqarilayotgan server uchun UFW sintaksisi bevosita ifodalay olmaydigan va shuning uchun xom
nftablesqoidasini talab qiladigan yetarlicha aniq vaziyatni tasvirlab bering.
Xulosa
iptables ham, nftables ham kernel’ning netfilter paket filtrini sozlaydi va qoidalarni jadvallar va chain’larga ajratadi. Zamonaviy tizimda iptables ning o'zi odatda ostidagi o'sha nftables dvigateliga ma’lumot uzatadigan moslik qatlami. Shuning uchun nft list ruleset qaysi buyruq qurganidan qat’i nazar, firewall’ning haqiqiy holatini audit qilishning eng ishonchli usuli. Oldingi maqolada ko'rib chiqilgan UFW ko'pchilik bitta serverli firewall vazifalari uchun to'g'ri standart tanlov bo'lib qoladi. Xom nftables esa UFW beradigandan ifodaliroq moslashtirish haqiqatan kerak bo'lgan holatlar uchun o'rganishga arziydi. Keyingi maqola, fail2ban, shunchaki statik qoidalarga emas, log shablonlariga javob beradigan qatlam qo'shadi — kuzatilgan hujum xatti-harakatiga asoslanib firewall ban’larini avtomatik yozadi va olib tashlaydi.