Iptables. Iptables-ning asosiy buyruqlari. Paketlar bo'yicha harakatlar

Bir necha bor haqiqatan ham ahmoq bo'lmagan odamlar ham mutlaqo kechirilmaydigan xatolarga yo'l qo'yganliklari bilan duch kelganman. Masalan, ular ma'lumotlar bazasi ishlayotgan portni butun Internetga ochishadi. Bu ko'pincha butun hayotini kodlash bilan shug'ullanadigan DevOps yangi boshlovchilariga tegishli bo'lib, endi ularning vazifalari serverlarni sozlashni o'z ichiga oladi. Tarmoqda yaxshi qo'llanmalar mavjud asosiy parametr xavfsizlik devori Linux va boshqa * nix-larda, lekin ko'pincha bu ko'plab ekranlar uchun varaqlardir. Shunday qilib, umid qilamanki, kimdir ushbu ixcham qo'llanmani foydali deb topadi.

Muhim! Avtoulovni yanglishib o'qqa tutish juda oson, endi unga kirmaysiz. Bu, ayniqsa, bulutli xosting uchun to'g'ri keladi. Masalan, agar AWS-da siz 1024 dan 65536 gacha bo'lgan barcha portlarni yopsangiz, qayta yoqilgandan so'ng mashina biron sababga ko'ra yopiq bo'lib chiqadi umuman hamma portlar. Agar siz bulutlarda hosting qilsangiz, sozlang xavfsizlik devori yaxshiroq xosting tomonidan taqdim etilgan veb-interfeys orqali.

Terminologiya bo'yicha tezkor eslatma. Linux yadrosiga o'rnatilgan xavfsizlik devori Netfilter deb nomlanadi va iptables bu xavfsizlik devorini boshqarish uchun yordamchi dastur hisoblanadi. Ko'p odamlar, xavfsizlik devori iptables deb nomlangan deb noto'g'ri o'ylashadi. Bu unday emas. "Iptables bilan paketlarni filtrlayman" kabi gaplarni aytib, siz boshqalarga savodsiz ekanligingizni ko'rsatasiz.

Umuman olganda, Netfilter yordamida qanday vazifalarni hal qilish mumkin:

  • Belgilangan manzillardan (IP, MAC) yoki pastki tarmoqlardan ma'lum protokollardan (IPv4 / IPv6, TCP / UDP) foydalanib, ma'lum portlarga kiruvchi trafikka ruxsat berish / rad etish;
  • Chiquvchi trafik uchun hamma narsa bir xil;
  • Siz, masalan, barcha ICMP paketlarini butunlay e'tiborsiz qoldirishingiz mumkin;
  • NAT-ni sozlash, Raspberry Pi routeridagi maqolaga qarang;
  • Haqiqiy gurular DDoS va qo'pol kuch ishlatishdan himoya qilishni, ma'lum dasturlarga, foydalanuvchilarga yoki guruhlarga tarmoqqa kirishni cheklashni va boshqa aqldan ozgan narsalarni qilishni bilishini eshitdim;

Iptables dasturi birinchi navbatda FreeBSD-dagi ipfw bilan taqqoslaganda menga juda noqulay tuyulganini ta'kidlayman. Yaxshiyamki, u bilan bir muncha vaqt ishlagandan so'ng, -A, -D, -j va boshqalar kabi ko'plab bayroqlar tanish bo'lib qoladi, shuning uchun sabr qiling. Keling, asosiy buyruqlarni ko'rib chiqaylik.

Barcha qoidalarni ko'rsatish:

iptables -L -n

Netfilterda qandaydir "zanjirlar" mavjudligini sezishingiz mumkin - hech bo'lmaganda INPUT, OUTPUT va FORWARD. Shaxsan mening mashinamda Docker zanjiri ham bor. Birinchi marta siz birinchi ikkitasini mos ravishda barcha kiruvchi va chiquvchi trafik deb o'ylashingiz, qolganlarini vaqtincha unutishingiz mumkin. Ehtimol siz ularga hech qachon muhtoj bo'lmaysiz.

Barcha qoidalarni olib tashlang:

iptables -F

O'zgarish siyosati (standart xatti-harakatlar) zanjiri:

iptables -P INPUT DROP
iptables -P KIRISH QABUL QILADI

Xost / pastki tarmoqdan kirishni rad etish:

iptables -A KIRISH -lar 123.45.67.89 -j DROP
iptables -A INPUT -lar 123.45.0.0/ 16 -j DROP

Siz shuningdek domen nomlaridan foydalanishingiz mumkin:

iptables -A INPUT -s example.com -j DROP

Chiquvchi ulanishlarni taqiqlash:

iptables -A OUTPUT -d 123.45.67.89 -j DROP

Salbiy qoidalardan foydalanish mumkin:

iptables - KIRISH! -s 123.45.67.89 -j DROP

Qoidani zanjirdagi raqami bo'yicha o'chirish:

iptables -D INPUT 1

Qoidani nima qilishiga qarab olib tashlash:

iptables -D INPUT -lar 123.45.67.89 -j DROP

-P opsiyasi protokolni bildiradi. Barcha, icmp, tcp, udp yoki protokol raqamini / etc / protocols dan foydalanishingiz mumkin. Bayroq - -sport paket yuborilgan portni belgilaydi va - -dport maqsadli portni belgilaydi:

iptables -A INPUT -p tcp - sport 80 -j QABUL QILING
iptables -A INPUT -p tcp --dport 80 -j QABUL QILING

Zanjirning boshiga qoida kiriting:

iptables Men KIRISH ...

Yoki ma'lum bir pozitsiyani belgilashingiz mumkin:

iptables Men KIRISh 3 ...

iptables-save\u003e / etc / iptables.rules

Qoidalarni tiklash:

iptables-tiklash< / etc/ iptables.rules

Endi amaliy misollarni ko'rib chiqamiz. Bu, masalan, Akka klasteridan foydalanadigan dasturning xatti-harakatini tekshiradigan testda to'rni bo'linishni taqlid qilish:

ishga tushirish (tugun1, s.) "iptables -A INPUT -s $ node2 -j DROP")
ishga tushirish (tugun1, s.) "iptables -A INPUT -s $ node3 -j DROP")
ishga tushirish (tugun1, s.) "iptables -A OUTPUT -d $ node2 -j DROP")
ishga tushirish (tugun1, s.) "iptables -A OUTPUT -d $ node3 -j DROP")

Qayta tiklash aynan bir xil, faqat -A bayrog'i -D bayrog'i bilan almashtiriladi.

Yana bir misol. Mashinada qaysi portlar tinglayotganini aniqlash va qo'shimcha portlarni yopish kerak. Biz mashinaga borib:

netstat -tuwpln

Chiqish misoli:

Faol Internet-ulanishlar (faqat serverlar)
Proto Recv-Q Send-Q Mahalliy Manzil Tashqi Manzil Davlat PID / Prog nomi
tcp 0 0 0.0.0.0:80 0.0.0.0:* TINGLASH 3210 / nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* TINGLASH 1789 / epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* TINGLASH 797 / sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* TINGLAYING 990 / postgres

Nginx va SSHd internetni ko'rib chiqmoqdalar, bu yaxshi. PostgreSQL faqat mahalliy interfeysni tinglaydi, shuning uchun u bilan ham muammo bo'lmaydi. Ammo epmd chiqadi (uni boshqa mashinadan telnet orqali tekshirishingiz mumkin) va bu yaxshi emas. Siz faqat 4369 portni yopishingiz mumkin. Buni qanday qilish kerakligi yuqorida ko'rsatilgan. Yoki siz yanada oldinga borishingiz va tashqi tomondan 81 va undan yuqori portga ulanishni rad qilishingiz mumkin.

Tarmoqqa ulangan har bir kompyuter potentsial xavf ostida. Tarmoqda juda ko'p tahdidlar mavjud, ular tizimga har qanday tarzda kirib borishga harakat qiladigan dasturlardan tortib, kerakli kompyuterga kirishni xohlaydigan xakerlarga qadar. VA dasturiy ta'minotkompyuterda o'rnatilgan, hali aniqlanmagan va himoyalanmagan teshikka aylanishi mumkin bo'lgan zaif tomonlarni o'z ichiga olishi mumkin.

Agar uy kompyuterlari uchun bu juda dolzarb bo'lmasa, chunki ular tarmoqqa tashqi tarmoqdan yashiradigan yo'riqnoma va NAT orqali ulangan bo'lsa, unda serverlar uchun bu har qachongidan ham dolzarbdir. Operatsiya xonasida linux tizimi juda moslashuvchan va ishonchli iptables xavfsizlik devori yadro ichiga o'rnatilgan.

Aynan ushbu dastur yordamida tizim tashqi tajovuzlardan, portni yo'naltirishdan va shuningdek, trafik bilan bog'liq ko'plab harakatlardan himoyalangan. Ammo uning kamchiligi shundaki, uni o'rnatish biroz qiyin. Ushbu maqola qo'g'irchoqlar uchun iptables-ni sozlashni o'z ichiga oladi. Umid qilamanki, bundan keyin siz iptables-ning asosiy imkoniyatlaridan ishonchli foydalanishingiz mumkin.

IPptables va Netfilter quyi tizimi Linux yadrosida ancha vaqtdan beri o'rnatilgan. Kompyuter orqali o'tadigan, kompyuter tomonidan yuborilgan yoki kompyuter uchun mo'ljallangan barcha tarmoq paketlari, yadro iptables filtri orqali yo'naltiriladi. U erda ushbu paketlar chexlarga mos keladi, so'ngra har bir chek uchun, agar u o'tkazilsa, belgilangan harakat bajariladi. Masalan, maqsadli dasturga yuborish uchun paket yadroga uzatiladi yoki tashlanadi.

Paket turlari

Barcha paketlar uch turga bo'linadi: kiruvchi, chiquvchi va uzatuvchi. Kirish qutilari - bu kompyuterga yuborilganlar, ushbu kompyuterdan tarmoqqa yuborilganlar. O'tkazib yuborilgan paketlar - bu faqat oldinga yo'naltirilishi kerak bo'lgan paketlar, masalan, agar sizning kompyuteringiz yo'riqnoma vazifasini bajarsa.

Shunga ko'ra, iptables filtrida barcha paketlar uchta o'xshash zanjirlarga bo'linadi:

  • Kiritish - kiruvchi paketlar va ulanishlarni qayta ishlaydi. Masalan, ba'zi bir tashqi foydalanuvchi kompyuteringizga ssh orqali ulanishga harakat qilsa yoki biron bir veb-sayt brauzer so'raganda uning tarkibini sizga yuboradi. Ushbu paketlarning barchasi ushbu zanjirga tushadi;
  • oldinga - bu zanjir ulanishlarni uzatish uchun ishlatiladi. Bu sizning kompyuteringizga yuborilgan, lekin u uchun mo'ljallanmagan paketlarni o'z ichiga oladi, ular shunchaki tarmoq orqali manziliga yo'naltiriladi. Aytganimdek, bu routerlarda kuzatiladi yoki, masalan, sizning kompyuteringiz wifi tarqatsa;
  • chiqish - bu zanjir chiquvchi paketlar va ulanishlar uchun ishlatiladi. Bunga saytni ping qilishga urinishda yoki brauzeringizni ishga tushirishda va istalgan saytni ochishga urinishda hosil bo'lgan paketlar kiradi.

Agar siz xavfsizlikni oshirish uchun Kirish zanjirini butunlay yopishingiz mumkin deb o'ylasangiz, unda siz juda adashgansiz. Tarmoq kirish va chiqish zanjirlaridan foydalanadi. Masalan, siz ping qilishga harakat qilasiz, ma'lumotlar chiqish orqali yuboriladi, ammo javob kiritish orqali keladi. Xuddi shu narsa saytlarni ko'rib chiqishda va boshqa tadbirlarda sodir bo'ladi. Agar sizning kompyuteringiz yo'riqnoma bo'lmasa, oldinga siljish umuman ishlatilmasligi mumkin. Shuning uchun iptables konfiguratsiyasi juda ehtiyotkorlik bilan bajarilishi kerak.

Qoidalar va harakatlar

IPptables qoidalari ro'yxatini yaratishga o'tishdan oldin, ular qanday ishlashini va nima ekanligini ko'rib chiqishingiz kerak. Paketlarning har bir turi uchun siz o'z navbatida paketga muvofiqligi tekshiriladigan qoidalar to'plamini o'rnatishingiz mumkin va agar paket mos bo'lsa, unda qoidada ko'rsatilgan amalni unga qo'llang. Qoidalar zanjirni tashkil qiladi, shuning uchun kirish, chiqish va oldinga siljish yoki qoida zanjiri deyiladi. Bir nechta harakatlar bo'lishi mumkin:

  • QABUL QILING - paketning qoidalar zanjiri bo'ylab o'tishiga imkon berish;
  • YO'Q - paketni olib tashlang;
  • Rad etish - paketni rad etish, jo'natuvchiga paket rad etilganligi to'g'risida xabar yuboriladi;
  • Kirish - jurnal fayliga paket haqida yozuv yozish;
  • Navbat - buyurtmani maxsus dasturga yuboring.

Qoidalar har qanday moslikni tekshirishi mumkin, masalan, ip orqali, qabul qiluvchi yoki jo'natuvchi porti, paketlar sarlavhalari va boshqalar. Agar paket biron bir qoidaga mos kelmasa, unda unga standart amal qo'llaniladi, odatda ACCEPT.

Qoidalarni aniqlab bo'lgach, zanjirlarga qaytishimiz mumkin. Yuqorida sanab o'tilganlardan tashqari, ikkita qo'shimcha qoidalar zanjiri mavjud:

  • yo'nalishni belgilash - paket bu zanjirga iptables tomonidan ishlov berishdan oldin kiradi, tizim hali qaerga yuborilishini, kiritish, chiqarish yoki oldinga yo'naltirishni bilmaydi;
  • postrouting - oldingi zanjirdan o'tgan barcha o'tgan paketlar bu erga.

Ammo bu hammasi emas. Bizda hali ham iptables jadvallari mavjud, ular bilan ham tushunish kerak.

Ipatables jadvallari

Iptables-dagi qoidalar zanjiri ustida yana bir mavhumlik darajasi mavjud va bu jadvallar. Tizimda bir nechta jadvallar mavjud va ularning barchasi kirish, oldinga va chiqish zanjirlarining standart to'plamiga ega. Jadvallar paketlarda har xil amallarni bajarish uchun, masalan, o'zgartirish yoki filtrlash uchun ishlatiladi. Endi bu siz uchun unchalik muhim emas va iptables paketlarini filtrlash filtr jadvalida amalga oshirilishini bilish kifoya. Ammo biz ularning barchasini qamrab olamiz:

  • xom - hali ishlov berilmagan holda, xom qoplar bilan ishlashga mo'ljallangan;
  • manglay - paketlarni o'zgartirish uchun mo'ljallangan;
  • nat - agar kompyuteringizni yo'riqnoma sifatida ishlatmoqchi bo'lsangiz, nat ishlaydi;
  • filtr - sukut bo'yicha ishlatiladigan paketlarni filtrlash uchun asosiy jadval.

Deyarli hamma narsa nazariy jihatdan, endi yordam dasturini ko'rib chiqamiz buyruq satri iptables, bu iptables tizimini boshqarish uchun ishlatiladi.

Iptables dasturi

IPptables va netfilter quyi tizimi yadroga o'rnatilgan, ammo bularning barchasini boshqarish uchun yordamchi dasturlar to'plami doimo tizim bilan ta'minlanmaydi. Yordamchi dasturni Ubuntu-ga o'rnatish uchun quyidagilarni kiriting:

sudo apt o'rnatish iptables

Va Fedora-ga asoslangan tarqatishlarda iptables-ning o'rnatilishi biroz boshqacha:

sudo yum o'rnatish uchun iptables

IPptables-ni o'rnatish tugagandan so'ng siz konfiguratsiyaga o'tishingiz mumkin, lekin avval yordam dasturining sintaksisini ko'rib chiqamiz. Odatda buyruq quyidagicha ko'rinadi:

-t stol harakatlar zanjiri qo'shimcha imkoniyatlar

Endi iptables parametrlarini ko'rib chiqamiz, jadvalda ishlash uchun jadval ko'rsatilgan, bu parametr o'tkazib yuborilishi mumkin, harakat kerakli harakat, masalan, qoida yaratish yoki o'chirish va qo'shimcha imkoniyatlar amalga oshiriladigan harakat va qoidani tavsiflang.

IPptables sizga imkon beradigan asosiy harakatlarni ko'rib chiqish kerak:

  • -A - zanjirga qoida qo'shish;
  • -FROM - barcha qoidalarni tekshirish;
  • -D - qoidani olib tashlash;
  • Men - kerakli raqam bilan qoida kiritish;
  • -L - joriy zanjirdagi barcha qoidalarni ko'rsatish;
  • -S - barcha qoidalarni namoyish qilish;
  • -F - barcha qoidalarni tozalash;
  • -N - zanjir yaratish;
  • -X - zanjirni o'chirish;
  • -P - standart harakatni o'rnating.

Qoidalar uchun qo'shimcha imkoniyatlar:

  • -p - protokolni, tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, birini tanlang
    mh;
  • -s - paketni yuboradigan qurilmaning ip manzilini ko'rsating;
  • -d - qabul qiluvchining IP-manzilini ko'rsating;
  • -i - tarmoq interfeysi kiritish;
  • -o - chiquvchi tarmoq interfeysi;
  • -j - agar qoida mos bo'lsa, amalni tanlang.

Endi siz iptables qanday tuzilganligi haqidagi misollarni ko'rib chiqishingiz mumkin.

Iptables konfiguratsiyasiga misollar

Yuqorida o'qiganlaringizni mustahkamlash uchun bir nechta asosiy misollarni ko'rib chiqamiz.

Qoidalar ro'yxati

Birinchidan, iptables qoidalarini qidirish qanday bajarilishini ko'rib chiqamiz, buning uchun -L parametri etarli:

Siz faqat kerakli qoidalarni ko'rsatish uchun kerakli zanjirni belgilashingiz mumkin:

iptables -L INPUT

Tozalash qoidalari

Iptables qoidalarini yangilash xizmatini systemd orqali to'xtatish yoki hatto konfiguratsiya dasturlari to'plamini olib tashlash bilan siz faqat iptables-ni o'chirib qo'yolmaysiz. Kichik tizim yadro darajasida ishlaydi va u erda o'rnatganingizga bog'liq emas. Shuning uchun, agar siz noto'g'ri ish qilsangiz, qoidalarni tozalashingiz kerak bo'ladi. Buning uchun quyidagilarni bajaring:

Yoki faqat ma'lum bir zanjir uchun:

sudo iptables -F kiritish

Sizga shuni eslatib qo'yamanki, bu barcha harakatlar standart jadval - filtr uchun amalga oshiriladi.

Standart qoidalar

Yuqorida aytib o'tganimdek, agar paket uchun biron bir qoida mos kelmasa, unda unga standart amal qo'llaniladi. Uni -p opsiyasi yordamida sozlash mumkin:

sudo iptables -p KIRISH QABUL QILADI
$ sudo iptables -p OUTPUT QABUL QILING
$ sudo iptables -p OLDIGA YO'Q

Ushbu misolda biz INPUT va OUTPUT zanjirlarini yoqamiz, ammo FORWARD-ga ruxsat bermaymiz.

To‘plamlarni bloklash

Paketlarni blokirovka qilish uchun biz DROP amalidan foydalanishimiz mumkin, biz ko'plab mezonlarga ko'ra bloklanishi kerak bo'lgan paketlarni filtrlashimiz mumkin, masalan, protokol, ip-manzil, tarmoq maskasi, port va boshqalar.

10.10.10.10 dan boshlab barcha kiruvchi paketlarni blokirovka qilish uchun iptables qoidasini qo'shishga imkon beradigan buyruq shunday bo'ladi:

sudo iptables -A KIRISH -lar 10.10.10.10 -j DROP

Endi xuddi shu manzilga chiquvchi paketlar:

IP-diapazonni blokirovka qilish shunga o'xshash tarzda amalga oshiriladi. Buning uchun siz 10.10.10.0/24 tarmoq niqobidan foydalanishingiz kerak. 10.10.10.0 dan 10.10.10.255 gacha bo'lgan barcha manzillar:

sudo iptables -A INPUT -lar 10.10.10.0/24 -j DROP

Yoki niqobning kengaytirilgan versiyasi:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Shuningdek, barcha kiruvchi ssh ulanishlarini bloklashingiz mumkin:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Ko'rib turganingizdek, iptables qoidasini qo'shish juda oson.

Qoidalarni olib tashlash

IPptables qoidalarini o'chirish yangilarini yaratish bilan bir xil tarzda amalga oshiriladi, faqat A variant o'rniga D variantini ishlatishingiz kerak. Avval qoidalar ro'yxatiga qarang:

Masalan, ikkinchidan yaratilgan iptables qoidasini shu tarzda o'chirishingiz mumkin:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Buyruqni -F opsiyasi bilan bajarish orqali iptables-ni to'liq o'chirib tashlashingiz mumkin:

Ushbu maqolada biz har bir iptables jadvalidagi jadvallar va zanjirlarni o'tish tartibini ko'rib chiqamiz. Axborot qoidalar tuzishda foydali bo'ladi va paket barcha iptables jadvallari va zanjirlari orqali o'tish tartibini, ayniqsa DNAT, SNAT va TOS kabi harakatlar qoidalar to'plamiga kiritilganda tushuncha beradi.

Xavfsizlik devoriga etib kelgan paket birinchi bo'lib ketadi tarmoq qurilmasi, haydovchi tomonidan ushlanib, tizim yadrosiga uzatiladi. Keyin paket bir qator jadvallardan o'tadi va ushbu jadvaldagi qoidalarga qarab keyingi taqdir hal qilinadi.

Jadval 1. FORWARD paketlarini o'tkazish tartibi

Qadam Jadval Zanjir Eslatma
1 Kabel (ya'ni Internet)
2
3 Mangle PREROUTING Odatda, bu mag'lubiyat paketlar sarlavhasiga o'zgartirishlar kiritish uchun ishlatiladi, masalan, TOS bitlarini o'zgartirish va hk.
4 Nat PREROUTING Ushbu zanjir manzilni tarmoq manzili tarjimasi uchun ishlatiladi. Manba tarmoq manzili tarjimasi keyinchalik boshqa zanjirda amalga oshiriladi. Ushbu zanjirda har qanday filtrlash faqat alohida holatlarda amalga oshirilishi mumkin.
5 Keyingi marshrut bo'yicha qaror qabul qilish, ya'ni. bu vaqtda paket qaerga - mahalliy dasturga yoki tarmoqdagi boshqa tugunga borishiga qaror qilinadi.
6 Filtr Oldinga Faqatgina boshqa xostga boradigan paketlar FORWARD zanjiriga kiradi va barcha tranzit trafikni filtrlash bu erda bajarilishi kerak. Trafik ushbu zanjir orqali ikki yo'nalishda ham o'tishini unutmang, filtrlash qoidalarini yozishda ushbu holatni inobatga oling.
7 Mangle Oldinga Keyin paket manglay jadvalining FORWARD\u003e zanjiriga kiradi, bu faqat alohida marshrutni qabul qilishning ikkita nuqtasi o'rtasida paket sarlavhasida ba'zi bir o'zgartirishlar kiritish zarur bo'lgan hollarda foydalanish kerak.
8 Keyingi marshrut bo'yicha qaror qabul qilish, ya'ni. masalan, bu vaqtda paket qaysi interfeysga o'tishi hal qilinadi.
9 Nat YO'Q Ushbu zanjir, avvalambor, manba tarmoq manzili tarjimasi uchun mo'ljallangan. Uni keraksiz filtrlash uchun ishlatmang. Maskaralash bu erda ham amalga oshiriladi.
10 Mangle YO'Q Ushbu zanjir so'nggi marshrutlash to'g'risida qaror qabul qilingandan so'ng paketlar sarlavhasida o'zgarishlar kiritishga mo'ljallangan.
11 Egress tarmoq interfeysi (masalan, eth1).
12 Kabel (LAN bo'lsin).

Ko'rib turganingizdek, paket uzatilishidan oldin bir necha bosqichlarni bosib o'tadi. Ularning har birida, iptables zanjiri yoki boshqa narsalar bo'ladimi, paketni to'xtatish mumkin, lekin biz asosan iptables bilan qiziqamiz. E'tibor bering, interfeysga xos zanjir yoki shunga o'xshash narsalar mavjud emas. Xavfsizlik devori / yo'riqnoma orqali o'tadigan HAMMA paketlar FORWARD zanjiri orqali o'tadi. Tranzit paketlarni filtrlash uchun INPUT zanjiridan foydalanmang, ular shunchaki u erga bormaydilar! Ushbu zanjir orqali faqat ushbu xost uchun mo'ljallangan paketlar harakatlanadi.

Jadval 2. INPUT paketlarining harakatlanish tartibi

Qadam Jadval Zanjir Eslatma
1 Kabel (ya'ni Internet)
2 Kirish tarmog'ining interfeysi (masalan, eth0)
3 Mangle PREROUTING Odatda paketlar sarlavhasiga o'zgartirishlar kiritish uchun ishlatiladi, masalan TOS bitlarini o'rnatish va hk.
4 Nat PREROUTING Belgilangan tarmoq manzili tarjimasi Paketlarni filtrlashga bu erda faqat alohida holatlarda ruxsat beriladi.
5 Marshrutni tanlash to'g'risida qaror qabul qilish.
6 Mangle KIRITISH Paket manglay stolining INPUT zanjiriga kiradi. Paket sarlavhasini o'zgartirish mahalliy dasturga o'tishdan oldin amalga oshiriladi.
7 Filtr KIRITISH Bu erda kiruvchi trafik filtrlanadi. Shuni esda tutingki, bizga yuborilgan barcha kiruvchi paketlar qaysi interfeysdan qat'i nazar, ushbu zanjir orqali o'tadi.
8 Mahalliy jarayon / dastur

OUTPUT paketlari jadvallarni aylantirishning teskari tartibiga ega. O'tish tartibi 3-jadvalda keltirilgan.

Jadval 3. OUTPUT paketlarini o'tkazish tartibi

Qadam Jadval Zanjir Eslatma
1 Mahalliy jarayon
2 Mangle Chiqish Bu erda siz paketning sarlavhasiga o'zgartirish kiritasiz. Ushbu zanjirda o'tkazilgan filtrlash salbiy oqibatlarga olib kelishi mumkin.
3 Nat Chiqish Ushbu zanjir xavfsizlik devoridagi mahalliy jarayonlardan kelib chiqadigan paketlarda tarmoq manzilini tarjima qilish (NAT) uchun ishlatiladi.
4 Filtr Chiqish Chiqish trafigi bu erda filtrlanadi.
5 Marshrutni tanlash to'g'risida qaror qabul qilish. Bu erda paket qaerga ketishi hal qilinadi.
6 Nat YO'Q Manba tarmoq manzili tarjimasi (SNAT) bu erda amalga oshiriladi. Kiruvchi nojo'ya ta'sirlardan saqlanish uchun ushbu zanjirda paketlarni filtrlashdan saqlaning. Biroq, bu erda ham standart siyosatni qo'llagan holda paketlarni to'xtatishingiz mumkin YO'Q.
7 Mangle YO'Q Mangl stolining POSTROUTING zanjiri asosan paketlar sarlavhasi xavfsizlik devoridan chiqmasdan oldin, lekin marshrutizatorlar qarori qabul qilingandan keyin o'zgartirish kiritishi kerak bo'lgan qoidalar uchun ishlatiladi. Ushbu zanjir tranzit va xavfsizlik devorining mahalliy jarayonlari tomonidan yaratilgan barcha paketlarni o'z ichiga oladi.
8 Tarmoq interfeysi (masalan, eth0)
9 Kabel (ya'ni Internet)

VA vizual taqdimot paketlar:

Ushbu raqam sizga paketlarning har xil zanjirlar bo'ylab harakatlanish tartibi to'g'risida juda aniq tasavvur beradi. Birinchi marshrutni qabul qilish nuqtasida, ma'lum bir xost uchun mo'ljallangan barcha paketlar INPUT zanjiriga, qolganlari FORWARD zanjiriga yo'naltiriladi.

Xavfsizlik devoridagi manzil manzili bo'lgan paketlar efirga uzatilishi mumkinligiga ham e'tibor bering tarmoq manzili Nat jadvalining PREROUTING zanjirida (DNAT) va shunga mos ravishda birinchi nuqtada marshrutlash kiritilgan o'zgarishlarga qarab amalga oshiriladi.

po'lat, norka, mol go'shti, qog'oz 2010 yil 28 sentyabr, soat 19:47 da

Debianni go'dak paytida ishlatadigan iptables asoslari

Nima muhokama qilinadi

Hammasi juda sodda, forumda yangi boshlanuvchilarga yana bir bor tushuntirib bering linux dunyosi, ha, qanday qilib Internetda faqatgina iptables sozlamalarini emas, balki ba'zi bir tarmoq asoslarini tushuntirib beradigan birlashtirilgan maqola topish mumkin emasligini qanday tushunganman.
Shunday qilib, sizning e'tiboringizga Linuxda xavfsizlik devorini o'rnatish bo'yicha kichik ekskursiyani taqdim etaman. Biz faqat netfilter / iptables-ni o'rnatish bilan shug'ullanamiz, shubhasiz qolgan qo'llanilgan savollarga ham to'xtalamiz, chunki biz o'z savollarimizga murakkab javoblarni yo'qotayapmiz ... Va men bu erda hamma narsani iloji boricha aniq tushuntirishga harakat qilaman.

Qanday ko'rinadi

Biz ofislar va kvartiralar uchun odatiy sxemani ko'rib chiqamiz, ha, kvartiralar! Uyda o'zlarining kichik serverlari stol ostida ozgina odamga ega, ammo uydagi Internetning aksariyati yo'riqnoma orqali tarqatiladi va aksariyat hollarda ular Linux bilan ishlaydi.
Bu odatiy kichkina ofis maketidir. 1 ta kompyuter (server) Internetga, qolganlari esa ushbu server orqali Internetga ulanganda.

Ketamiz, asta-sekin ...

Va bizda nima bor:
  • 2 ta tarmoq kartasi va unga Debian Lenny o'rnatilgan server
  • sukut bo'yicha Debian Lenny xavfsizlik devori - netfilter / iptables
  • kompyuterlarning mahalliy tarmog'i, barchasi server, shu jumladan kalit orqali ulanadi
nAT nima?
Birinchidan, biz eng oddiy NAT (Tarmoq manzili tarjimasi) ni sozlashimiz kerakligini tushunishimiz kerak. Chanqaganlar uchun, oxir-oqibat, kalmarni misol qilib proksi-serverni eslatib o'taman. Aytganimdek, biz deyarli hamma narsani chaynaymiz.
NAT nima? Aslida hamma narsa oddiy, barcha kompyuterlarda jismoniy (MAC) va tarmoq (IP) manzillari mavjud. Hozir bizni IP-manzillar qiziqtiradi. Xuddi shu tarmoq ichidagi IP-manzil noyob bo'lishi kerak! Va amaldagi IPv4 standarti bilan faqat 4 294 967 296 (2 32) noyob bo'lishi mumkin, bu juda ko'p emas va ular deyarli tugadi. Xavotir olmang, IPv6 keng foydalanishga kirishmoqchi va juda ko'p manzillar mavjud!
Ammo bu erda siz IPv4-ga ruxsat beradigan raqamlardan sezilarli darajada ko'proq kompyuterlar borligini yoki do'stingizning uyi siznikiga o'xshash manzilga ega ekanligini aytasiz! Va bu erda NAT keladi - bu sizga ulanishga imkon beradi kompyuter tarmoqlari o'zaro bitta IP-manzildan foydalanib, xavfsizlik devorining harakatlari SNAT (Source NAT yoki manba manzilini almashtirish) deb nomlanadi. O'sha. 99% hollarda sizning butun ofisingiz 1 ta IP-manzil ostida Internetga ulanadi, ofis ichida har kimning o'zi bor. IP-manzillar sinflari haqida Internetda o'qishingiz mumkin.

NAT nima ekanligini va uning nima ekanligini bilganimizdan so'ng, biz to'g'ridan-to'g'ri serverni o'rnatishga kirishamiz.

tranzit trafik
Barcha buyruqlar root (superuser) sifatida bajariladi. Debian-da tranzit trafigi deb nomlangan sukut bo'yicha o'chirilgan, ya'ni. sukut bo'yicha faqat bitta mashina sifatida ishlash kerak. Siz taxmin qilganingizdek, tranzit trafiksiz NAT mavjud emas. Uni yoqish uchun 1 ta raqamni o'zgartirish kifoya - $ echo 1\u003e / proc / sys / net / ipv4 / ip_forwardlekin ushbu parametr qayta ishga tushirilgandan so'ng ishdan chiqadi, shuning uchun konfiguratsiyani tuzatish yaxshiroqdir - $ nano /etc/sysctl.conf keyin biz chiziqni qidirmoqdamiz # net.ipv4.ip_forward \u003d 1 va satr boshidagi xashni (izoh belgisi) olib tashlang va qiymati 1 ekanligini tekshiring! Endi siz iptables-ni to'g'ridan-to'g'ri sozlashni boshlashingiz mumkin.
iptables-ni sozlash
Internetda iptables-da qanday qoidalar yozish va ular bilan nima qilish mumkinligi haqida ko'plab maqolalar mavjud, menga o'qish eng to'liq va yoqimli tuyuldi.
Va shuning uchun boshlaymiz. Birinchidan, jadvallarni keraksiz qoidalardan tozalaymiz, to'satdan ortiqcha narsa paydo bo'ldi ...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

Ortiqcha qismi tozalangan. Iptables-dagi qoidalar ierarxik jihatdan qo'llanilishini tushunish va eslash juda muhimdir, ya'ni. yuqoridagi qoida oldinroq bajariladi. Barcha zanjirlar sukut bo'yicha QABUL QILISH siyosatiga ega - hamma narsaga ruxsat bering. bu zanjir qoidalariga kirmagan.
Keling, mahalliy tarmoqqa qaraydigan interfeys eth0, Internetga esa eth1, mahalliy tarmoq 192.168.0.0/24 manzillari bor va provayder bizga bergan statik manzil 10.188.106.33 ("oq" bo'lmasa ham - Internetdagi ip-manzillar turlarini ham ko'rib chiqishingiz mumkin). Va shunday yozamiz:
$ iptables -A oldinga -i eth0 -o eth1 -s 192.168.0.0/24 -j QABUL
$ iptables -A oldinga -i eth1 -o eth0 -d 192.168.0.0/24 -j QABUL
$ iptables -P oldinga tushish

Shunday qilib biz tranzit paketlarga bizning IP-manzillarimiz uchun xavfsizlik devoridan o'tishga ruxsat berdik va qolgan hamma narsani taqiqlaymiz.
Endi NAT o'zi:
$ iptables -A POSTROUTING -lar 192.168.0.0/24 -o eth1 -j SNAT - manbaga 10.188.106.33
NAT siz uchun ishlashi uchun bu etarli.
arzimas narsalarda ...
Mijozlarda biz ipni tanlangan diapazondan belgilaymiz va shprits sifatida serverimizning ip manzilini ko'rsatamiz (odatda subnetdan birinchisi beriladi - men sizga qoldiraman). Hammasi tarmoq sozlamalari serverda siz buni shunday qilishingiz mumkin:
$ nano / etc / network / interfeyslari u sizning tarmoq interfeyslaringiz uchun sozlamalarni belgilaydi.
tarmoq ichaklariga shlyuz yoki DNAT orqali kirish
Va keyin siz o'zingizning tarmog'ingizda ekanligini angladingiz Windows Server Sizga RDP orqali har doim ham osonlikcha kirish imkoni bo'lgan, keyin Debian-da ushbu zerikarli shlyuz chiqdi! Bu juda oddiy - bizning iptables-ga DNAT qoidasini qo'shishingiz kerak.
DNAT qanday hayvon? DNAT (NAT yo'nalishi yoki qabul qiluvchining manzilini aldash) - tarmoq kartalari shunday rejimda ishlaysizki, ular faqat o'zlariga yuborilgan paketlarni qabul qiladilar, ammo agar siz bizning serverimizga kirsangiz, agar u Internetga ulanadigan ip bo'lsa, sizning ofisingizda yana o'nlab mashinalar o'tiradimi? So'rov unga qanday etib boradi? Darhaqiqat, ushbu turdagi barcha so'rovlar bizning darvozamizda joylashgan. Va bizga kerak bo'lgan narsa, bunday paketlar bilan ishlash qoidalarini belgilashdir.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
Ushbu oddiy qoida shlyuzga keladigan barcha paketlarni Internetdan-ga yo'naltiradi tCP porti Sizning ichki Windows Server-ga 3389 (bu RDP protokoli foydalanadi). Va voila, hamma narsa siz uchun ishlaydi.
shuning uchun sizning sevimli kalmaringiz bilan nima bor?
Va hozir hamma narsa ishlayotgan bo'lsa-da, hamma Internetga ega va hamma narsa ishlaydi, ba'zilariga proksi-server kerak. Men kalamarni o'rnatish haqida gapirmayman, uni "shaffof" qilishga imkon beradigan qoidani ko'rsataman. Kalamarda siz sehrli so'zni kerakli joyda shaffof ravishda ro'yxatdan o'tkazishingiz kerak va u unga tushgan so'rovlarni to'g'ri ko'rib chiqishni boshlaydi.
Biz yozamiz $ iptables -AJONLASH -d! 192.168.0.0/24 -i eth0 -p tcp -m multiport --portlar 80.443 -j REDIRECT --toportlarga 3128.
Va bu bizga nima beradi? Endi barcha so'rovlar veb-sahifalar http ((80) va https (443) protokollari orqali ish stantsiyalaringizdan kalmar tinglaydigan portga yo'naltiriladi. Siz tarkib filtrini, kim qaerda bo'lganligi va Internetda nima qilayotgani haqida ma'lumot olasiz, foydalanuvchi hech qanday shubha qilmasdan avvalgidek ishlaydi ...
ozgina xavfsizlik
Siz hech bo'lmaganda shlyuzingizni minimal darajada himoya qilishingiz kerak, shuning uchun yana ikkita qoidalarni qo'shib qo'ying
$ iptables -A INPUT -i lo -j QABUL QILING
$ iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j QABUL QILING
$ iptables -A INPUT -i eth1 -m conntrack --ctstate RELATED, ESTABLISHED -j QABUL
$ iptables -P INPUT DROP

Shunday qilib, ular allaqachon o'rnatilgan ulanishlar bundan mustasno, shlyuz bilan to'g'ridan-to'g'ri har qanday aloqani taqiqlashdi, ya'ni. siz tashabbus qilganlar va siz ularga javob olasiz. Qo'rqmang, bizning DNAT ushbu qoidalarga erisha olmaydi ...
nega juda oz?
Maqola kauchuk emas va siz hali ham hamma narsani aytib berolmaysiz ... Men olib keldim eng kam harakatlar va tushunchalar to'plami, shunda siz Linuxda shlyuz sifatida bunday ulkan narsalarni o'zlashtira olasiz. Bu erda siz juda uzoq vaqt suhbatlashishingiz, netfilterning ko'plab jihatlari va imkoniyatlarini muhokama qilishingiz mumkin.

Jami

Ko'rib turganimizdek, hamma narsa haqiqatan ham oddiy! Eng asosiysi, tarmoqning ishlash printsipini tushunish va katta qo'llanmalarni o'rnatish va o'qishdan qo'rqmaslikdir.
Umid qilamanki, do'stligingizni boshlash uchun etarlicha ma'lumot to'pladim dasturiy ta'minot routerlari Linux asosida.

Teglar: iptables, netfilter, NAT

Iptables birinchi navbatda paketlarni filtrlash uchun javobgardir. IPptables-ni qo'lda sozlash juda qiyin vazifadir. Ushbu oniy tasvirni aniqlayman deb o'ylamang. Yaxshiyamki, agar siz hali ham iptables-ni aniqlamagan bo'lsangiz, sizga yordam beradigan ko'plab vositalar mavjud va tizimni zudlik bilan ta'minlash kerak: fwbuilder, firestarter, guarddog, arno xavfsizlik devori - aslida bu iptables uchun GUI. Shubhasiz javob, bundan yaxshiroq narsa yo'q. Siz tanlashingiz kerak. Biroq, bugungi maqola iptables-ga bag'ishlangan va ikki qismga bo'lingan: nazariya va amaliyot. Eng sabrsiz kishi amaliy qismni darhol bajarishi mumkin, ammo bunday yondashish tavsiya etilmaydi.

Diqqat! Iptables bilan barcha harakatlar imtiyozli foydalanuvchi nomidan amalga oshiriladi!

Nazariya

Ro'yxatdan o'tish formati

Amallar

  • QABUL QILING - Paketni qabul qiling
  • DROP - Paketni tashlang
  • DNAT - Belgilangan manzilni aylantirish
  • SNAT - Paket sarlavhasida chiquvchi IP-manzilni o'zgartiring
  • LOG - jurnallar to'plamlari va voqealari
  • MARK - paketga belgi qo'ying
  • MASQUERADE - Paket sarlavhasidagi chiquvchi IP-manzilni o'zgartiring (SNAT-dan farqli o'laroq - dinamik IP bilan ishlash)
  • KEYUE - ishlov berish uchun to'plamni navbatga qo'ying
  • REDIRECT - paketni / oqimni boshqa portga yo'naltirish
  • REJECT - Paketni tashlang + haqida masofaviy tizimga xabar bering. uning to'plami rad etilganligi
  • RETURN - Paketni joriy zanjir bo'ylab harakatlanishini to'xtating va chaqiruvchi zanjirga qayting

Buyruqlar

  • -A - zanjirga qoida qo'shing
  • -D - qoidani zanjirdan olib tashlang
  • -R - bitta qoidani boshqasiga almashtiring
  • -I - Yangi qoidani kiriting
  • -L - mavjud qoidalarni sanab o'ting
  • -F - qoidalarni tiklash
  • -Z - Belgilangan zanjirda hisoblagichlarni nollash
  • -N - berilgan nom bilan yangi zanjir hosil qiladi
  • -X - zanjirni o'chirish
  • -P - tanlangan zanjir uchun standart siyosatni o'rnating
  • -E - maxsus zanjirning nomini o'zgartirish

Mezon (umumiy)

  • -p - Protokol turini ko'rsating
  • -s paketning manba IP-si
  • -d - paket oluvchining IP-manzili
  • -j - qoida bo'yicha harakatni ko'rsating
  • -i - paket olingan interfeys
  • -o - Chiqish interfeysi nomini ko'rsating
  • -f - qoidani paketning barcha qismlariga kengaytiring

TCP mezonlari:

  • –Tcp-flags - Paket niqobi va bayroqlarni ko'rsating

UDP mezonlari:

  • –Sport - paket yuborilgan port
  • –Dport - paket yo'naltirilgan port

Iptables-da ko'proq odam

Amaliyot

Joriy konfiguratsiyani ko'rish

$ sudo iptables -L Chain INPUT (ACCEPT siyosati) maqsadli prot opt \u200b\u200bmanbasini belgilash zanjiri FORWARD (policy ACCEPT) maqsadli prot opt \u200b\u200bmanbasini belgilash zanjiri OUTPUT (policy ACCEPT) maqsad protini tanlash

Agar shunga o'xshash narsani ko'rsangiz, xavfsizlik devori hali sozlanmagan va hamma narsaga imkon beradi. Keling, vaziyatni tuzataylik.

Standart siyosatni o'rnatish

  • iptables -P INPUT DROP - kiruvchi paketlarni blokirovka qilish
  • iptables -P OUTPUT ACCEPT - chiquvchi paketlarga ruxsat berish
  • iptables -P FORWARD DROP - boshqa mashinadan serverga tushgan va keyingi yo'nalishni kutayotgan paketlarni qayta ishlash. Misolda u bloklangan. Bunday holda siz ishonchli mashinalar uchun qoidalarni qo'shishingiz kerak bo'ladi.

Kiruvchi INPUT paketlari bloklanganligi sababli, qoidani yozamiz:

$ sudo iptables -A INPUT -m holati - davlat bilan bog'liq, O'RNATILGAN -j QABUL

Bu avvalgi paketlarni qabul qilishga imkon beradi o'rnatilgan aloqa va ushbu ulanish orqali yaratilgan yangi paketlarni qabul qiling.

Yoki protokol turini ko'rsatish:

$ sudo iptables -A INPUT -p TCP -m holati - davlat ESTABLISHED, RELATED -j QABUL QILING

Endi mahalliy interfeys:

$ sudo iptables -A INPUT -i lo -j QABUL QILING

  • YANGI - yangi ulanishni boshlaydigan ma'lumotlar.
  • O'RNATILGAN - allaqachon o'rnatilgan ulanishdan kelib chiqqan paket.
  • RELATED - yangi ma'lumotlar to'plami, ammo eski o'rnatilgan ulanish orqali hosil qilingan
  • Yaroqsiz - juda aniq

$ sudo iptables-save\u003e /etc/iptables.up.rules

Ushbu qoidalarni yoqing:

$ sudo iptables-tiklash< /etc/iptables.up.rules

Va farqni ko'ring:

$ sudo iptables-L

Iptables-ni tizimni ishga tushirishda ishga tushirish:

/Etc/init.d katalogida iptables nomli fayl yarating

$ sudo touch /etc/init.d/iptables

Unga quyidagilarni yozamiz:

#! / bin / sh / sbin / iptables-tiklash< /etc/iptables.up.rules

Iptables faylini bajariladigan qilaylik:

$ sudo chmod + x /etc/init.d/iptables

Uni autorun-ga qo'shing

$ sudo update-rc.d -n iptables standart parametrlari

Tarmoqqa ulanganda iptables-ni ishga tushirish:

$ sudo echo "#! / sbin / iptables-restore"\u003e /etc/network/if-up.d/iptables.up.rules $ sudo iptables-save \u003e\u003e /etc/network/if-up.d/iptables. up.rules $ sudo chmod + x /etc/network/if-up.d/iptables.up.rules

Eslatma: iptables-save from root-dan foydalanib, istalgan vaqtda sizning qoidalaringiz yuklanganligini tekshirishingiz mumkin

Archlinux uchun iptables qoidalarini saqlash quyidagi buyruq bilan amalga oshiriladi:

$ sudo rc.d iptables-ni saqlash

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: