Linux iptables marshrutlash tavsifi. Boshqa muhim aloqalarni qabul qilish. Pochta va tezkor xabarlar

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 biz 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 sizning ixtiyoringizga qoldiraman). Hammasi tarmoq sozlamalari serverda siz buni shunday qilishingiz mumkin:
$ nano / etc / network / interfeyslari u sizning tarmoq interfeyslaringiz uchun sozlamalarni belgilaydi.
shlyuz yoki DNAT orqali tarmoq ichaklariga 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 shunchaki sehrli so'zni kerakli joyda ro'yxatdan o'tkazishingiz kerak va u unga tushgan so'rovlarni to'g'ri ko'rib chiqa 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 tarkibni filtrlash, kim qaerda bo'lganligi va Internetda nima qilayotgani haqida ma'lumot olasiz, foydalanuvchi hech narsadan shubhalanmasdan 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 to'g'ridan-to'g'ri shlyuz bilan hech qanday aloqani taqiqlashdi, bundan tashqari o'rnatilgan aloqalar, 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 kabi ulkan narsalarni o'zlashtira olasiz. Bu erda siz netfilterning ko'plab jihatlari va imkoniyatlarini muhokama qilib, juda uzoq vaqt suhbatlashishingiz mumkin.

Jami

Ko'rib turganimizdek, hamma narsa haqiqatan ham oddiy! Asosiysi, tarmoqning ishlash tamoyilini 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

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. IN operatsion tizim Linuxda yadroga o'rnatilgan juda moslashuvchan va ishonchli iptables xavfsizlik devori mavjud.

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 filtrlashni bilish kifoya iptables paketlari filtr jadvalida amalga oshiriladi. 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:

IPptables-dagi asosiy tushunchalar:

    Qoida - mezon, harakat va hisoblagichdan iborat. Agar paket mezonlarga javob bersa, unga nisbatan amal qo'llaniladi va hisoblanadi. Mezon mavjud bo'lishi mumkin yoki bo'lmasligi mumkin - keyin "barcha paketlar" mezoniga to'g'ridan-to'g'ri qabul qilinadi. Shuningdek, harakatni ko'rsatish shart emas - agar harakat bo'lmasa, qoida faqat hisoblagich sifatida ishlaydi. Har bir zanjir uchun qoidalar paydo bo'lgan tartibda ishga tushiriladi, shuning uchun tartib muhim ahamiyatga ega.

    • Criterion bu paket va / yoki ulanish xususiyatlarini tahlil qiladigan va ushbu paketning amaldagi qoidaga mos kelishini aniqlaydigan mantiqiy ifoda. Mezon mantiqiy "VA" bilan bog'langan.

      Amal - paket va / yoki ulanish bilan bajariladigan harakatlarning tavsifi, agar ular ushbu qoida doirasiga kirsa. Amallar quyida batafsilroq tavsiflanadi.

      Hisoblagich - bu qoidaning mezoniga kiradigan paketlar sonini hisobga olishni ta'minlaydigan qoidalarning tarkibiy qismi. Hisoblagich shuningdek, bunday paketlarning baytdagi umumiy hajmini hisobga oladi.

    Zanjir - tartiblangan tartib qoidalar ketma-ketligi. Zanjirlarni odatiy va asosiyga bo'lish mumkin.

    • Asosiy zanjir jadvalni ishga tushirishda yaratilgan sukut bo'yicha zanjirdir. Har bir paket, u xostning o'zi uchun mo'ljallanganmi, o'zi tomonidan yaratilganmi yoki o'tkinchi ekanligiga qarab, unga biriktirilgan har xil jadvallarning tayanch zanjirlari to'plamidan o'tishi kerak. Bundan tashqari, tayanch zanjiri foydalanuvchi zanjiridan "standart siyosat" mavjudligi bilan farq qiladi. Ushbu harakat ushbu zanjirning boshqa qoidalari va undan chaqirilgan zanjirlar tomonidan qayta ishlanmagan paketlarga tegishli. Asosiy zanjir nomlari har doim katta (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

      Maxsus zanjir - foydalanuvchi tomonidan yaratilgan zanjir. U faqat o'z jadvalida ishlatilishi mumkin. Asosiy satrlar va qator ichidagi harakatlar bilan chalkashmaslik uchun bunday satrlar uchun katta harflardan foydalanmaslikni tavsiya qilamiz.

    Jadval - oddiy va odatiy zanjirlar to'plami, umumiy bilan birlashtirilgan funktsional maqsad... Jadval nomlari (shuningdek, mezon modullari) kichik harflar bilan yoziladi, chunki printsipial jihatdan ular foydalanuvchi tomonidan belgilangan zanjirlar nomlariga zid kela olmaydi. Iptables buyrug'ini chaqirishda jadval -t table_name formatida ko'rsatiladi. Agar aniq ko'rsatilmagan bo'lsa, filtr jadvali ishlatiladi.

Ajratish:

# Damp jadval qoidalari filtri $ sudo iptables-save -c -t filter # Filtr jadvali * filtri # INPUT, FORWARD, OUTPUT zanjirlari, ularning qoidalari va hisoblagichlari : KIRISh QABUL QILING [19302: 9473669]: QABUL QILISH [0: 0]: QABUL QILISH [5462736: 4247599532] # Qoida: "" - qoida hisoblagichi, "-A INPUT" - zanjir, "-i em1 -p tcp -m tcp --dport 22" - mezon, "-j ACCEPT" - harakat [17: 1020] -A KIRISH -i em1 -p tcp -m tcp --dport 22 -j QABUL QILISH

Arxitektura

Netfilter tizimida paketlar zanjir orqali uzatiladi. Zanjir - bu qoidalarning tartiblangan ro'yxati va har bir qoida mezonlarni va harakatni yoki o'tishni o'z ichiga olishi mumkin. Paket zanjirdan o'tib ketganda, netfilter tizimi navbat bilan paketning keyingi qoidaning barcha mezonlariga javob berishini tekshiradi va agar shunday bo'lsa, u holda amalni bajaradi (agar qoidada mezon bo'lmasa, u holda harakat qoidadan o'tgan barcha paketlar uchun bajariladi). Mumkin bo'lgan mezonlarning ko'plab variantlari mavjud. Masalan, agar paket sarlavhasida jo'natuvchi 192.168.1.1 deb ko'rsatilgan bo'lsa, paket kassa -source 192.168.1.1 kriteriyasiga mos keladi. Sakrashning eng oddiy turi - sakrash, shunchaki paketni boshqa zanjirning boshiga sakraydi. -Jump yordamida harakatni belgilashingiz mumkin. Barcha zanjirlarda mavjud bo'lgan standart harakatlar ACCEPT (o'tish), DROP (o'chirish), QUEUE (tahlil qilish uchun tashqi dasturga o'tish) va RETURN (tahlil qilish uchun avvalgi zanjirga qaytish). Masalan, buyruqlar

Iptables -A INPUT --source 192.168.1.1 - sakrash iptables -A INPUT --jump other_chain

"INPUT zanjirining oxiriga quyidagi qoidalarni qo'shing: 192.168.1.1-dagi paketlar o'tib ketishiga yo'l qo'ying, qolganlari esa other_chain zanjiriga tahlil qilish uchun yuborishdir."

Zanjirlar

Tizimda o'rnatilgan 5 turdagi standart zanjirlar mavjud:

    PREROUTING - kiruvchi paketlarni dastlabki qayta ishlash uchun.

    INPUT - to'g'ridan-to'g'ri mahalliy jarayonga (mijoz yoki server) yo'naltirilgan kiruvchi paketlar uchun.

    Oldinga - kiruvchi paketlar yo'naltirilganligi uchun (yo'naltirilgan paketlar avval PREROUTING zanjiridan o'tib, oldinga va POSTROUTINGga e'tibor bering).

    OUTPUT - mahalliy jarayonlar tomonidan yaratilgan paketlar uchun.

    POSTROUTING - chiquvchi paketlarni tugatish uchun.

Shuningdek, iptables yordam dasturi yordamida o'zingizning zanjiringizni yaratishingiz va yo'q qilishingiz mumkin.

Jadvallar

Zanjirlar 4 jadvalda joylashgan:

    Xom - paketni davlat ta'rifi tizimiga yuborishdan oldin ko'rib chiqildi. U kamdan-kam qo'llaniladi, masalan, davlat tizimi tomonidan qayta ishlanmasligi kerak bo'lgan paketlarni belgilash uchun. Buning uchun NOTRACK harakati qoidada ko'rsatilgan. PREROUTING va OUTPUT zanjirlarini o'z ichiga oladi.

    Mangle - IP paketlarini o'zgartirish qoidalarini (odatda sarlavha) o'z ichiga oladi. TTL (yashash vaqti), TOS (xizmat turi) va MARK (TTL va TOS maydonlarini o'zgartirish va paket markerlarini o'zgartirish uchun) va boshqalarni qo'llab-quvvatlaydi. Kamdan kam hollarda zarur va xavfli bo'lishi mumkin. Barcha beshta standart zanjirni o'z ichiga oladi.

    Nat - faqat yangi ulanish yaratadigan paketlarni qidiradi (davlat tizimiga muvofiq). DNAT, SNAT, MASQUERADE, REDIRECT harakatlarini qo'llab-quvvatlaydi. PREROUTING, OUTPUT va POSTROUTING zanjirlarini o'z ichiga oladi.

    Filtr - jadval nomi ko'rsatilmagan bo'lsa, sukut bo'yicha ishlatiladigan asosiy jadval. INPUT, FORWARD va OUTPUT zanjirlarini o'z ichiga oladi.

Zanjirlar xuddi shu ism, lekin turli xil jadvallarda - butunlay mustaqil ob'ektlar. Masalan, xom PREROUTING va mangle PREROUTING odatda boshqa qoidalar to'plamini o'z ichiga oladi; paketlar avval xom PREROUTING zanjiridan, so'ngra PREROUTING manglayidan o'tadi.

Shtatlar

Netfilter tizimida holatni aniqlash mexanizmidan o'tgan har bir paket to'rtta holatdan biriga ega bo'lishi mumkin:

    YANGI - to'plam yangi seansni ochadi. Klassik misol - SYN bayrog'iga ega bo'lgan TCP to'plami.

    O'RNATILGAN - to'plam mavjud sessiyaning bir qismidir.

    RELATED - paket allaqachon ochilgan seans bilan bog'liq bo'lgan yangi sessiyani ochadi. Masalan, passiv FTP seansi davomida mijoz serverning 21-portiga ulanadi, server mijozga ikkinchi, tasodifiy tanlangan portning sonini aytadi, so'ngra mijoz fayllarni uzatish uchun ikkinchi portga ulanadi. Bunday holda, ikkinchi seans (ikkinchi portdagi fayllarni uzatish) allaqachon mavjud bo'lgan sessiya bilan bog'lanadi (21-portga ulanishning asl nusxasi).

    Yaroqsiz - boshqa barcha paketlar.

Jadvallar va zanjirlarning o'tish diagrammasi

Jadvallar va zanjirlar o'tishining soddalashtirilgan diagrammasi:

Batafsil diagramma:

Asosiy konfiguratsiya

Quyida asosiy statik iptables konfiguratsiyasiga misol keltirilgan. Bunday konfiguratsiyani saqlash va yuklashda siz unga boshqa xizmatlardan, masalan, Fail2ban-dan o'zgartirish kiritish imkoniyatini hisobga olishingiz kerak. Bundan tashqari, IPv6 manzilidan foydalanilganda IPv6 uchun konfiguratsiya IPv4 dan mustaqil ravishda amalga oshirilishi kerak.

IPv4

sudo iptables-saqlash

IPptables qoidalari bilan skript yarating:

sudo nano / etc / network / if-up.d / iptables-qoidalari

Quyidagi kodni nusxalash:

#! / sbin / iptables-tiklash -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-тыйым -A FORWARD -m conntrack - ctstate RELATEED, ESTABLISHED -j QABUL QILISH -A FORWARD -p icmp -j QABUL QILISH -A FORWARD -j REJECT --reject-with icmp-host-тыйым # -A OUTPUT -p icmp -j QABUL # -A ChIQISH -o man - j QABUL QILING # -A ChIQISH -j REJEKT - rad etish-bilan icmp-xost-taqiqlangan QO'ShIMChA

Iptables-save-ni hisobga olgan holda kerakli qoidalarni qo'shamiz.

sudo chmod + x / etc / network / if-up.d / iptables-Rules sudo / etc / network / if-up.d / iptables-Rules

IPv6

Joriy konfiguratsiyani ko'rish:

sudo ip6tables-saqlash

IP6tables qoidalari bilan skript yarating:

sudo nano / etc / network / if-up.d / ip6tables-qoidalari

Quyidagi kodni nusxalash:

#! / sbin / ip6tables-tiklash # Filtrlar jadvali va uning zanjirlari * filtri: QABUL QILISH [0: 0]: QABUL QILISH [0: 0]: QABUL QILISH [0: 0] # Aloqador va o'rnatilgan aloqalarga ruxsat berish -A INPUT -m ulanish --ctstate RELATED, ESTABLISHED -j QABUL # Icmp trafik xizmatiga ruxsat berish -A KIRISH -p ipv6-icmp -j QABUL QILING # Loopback interfeysiga ishonchli trafikka ruxsat bering -KIRISH -i lo -j QABUL QILADI # Bu erda siz INPUT zanjiri uchun qo'shimcha qoidalarni kiritishingiz mumkin # INPUT uchun hamma narsaga ruxsat berilmasin -KIRISh -j Rad etish - rad qilish-icmp6-adm-bilan taqiqlangan # FORWARD va OUTPUT zanjirlari qoidalarining tartibi va ma'nosi INPUT bilan bir xil -A FORWARD -m conntrack --ctstate O'ZBEKISTONDA, O'RNATILADI -j QABUL QILISh -A FORWARD -p ipv6-icmp -j QABUL QILISH -A FORWARD -j REJECT --reject-with icmp6-adm-тыйым # OUTPUT zanjirini filtrlash qat'iyan tavsiya etilmaydi # -A OUTPUT -m aloqasi --ctstate RELATED, ESTABLISHED -j QABUL # -A ChIQISH -p ipv6-icmp -j QABUL QILING # -A ChIQARISh -lo lo -j QABUL QILING # -Chiqish -j rad etish - rad qilish-icmp6-adm bilan taqiqlangan QO'ShIMChA

Ip6tables-save-ni hisobga olgan holda kerakli qoidalarni qo'shamiz.

Saqlash va yopish: Ctrl + O, Enter, Ctrl + X

Biz skriptni bajariladigan holga keltiramiz va iptables qoidalarini yuklaymiz:

sudo chmod + x / etc / network / if-up.d / ip6tables-Rules sudo / etc / network / if-up.d / ip6tables-Rules

Qo'shimcha qoidalar

Quyida tez-tez ishlatiladigan ba'zi bir qoidalar keltirilgan. INPUT / OUTPUT zanjirlari mahalliy trafikni filtrlash uchun ishlatiladi. Tranzit trafik uchun FORWARD zanjiridan foydalaning.

Masofaviy kirish

# remote.ssh -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j QABUL QILING # remote.rdp -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 3389 -j QABUL # remote.vnc -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 5900 -j QABUL

Veb va fayl xizmatlari

# web.http, web.https -A INPUT -p tcp -m konstrukti --ctstate NEW -m multiport -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 21 -j QABUL

Pochta va tezkor xabarlar

# mail.pop3, mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dasport 110, 995 -j QABUL # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --deports 143, 993 -j QABUL QILISH # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 25, 465 -j QABUL # im.xmpp -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --ports 5222, 5223 -j QABUL QILISh # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --port 5190 -j QABUL QILING

Tarmoq xizmatlari

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 1194 -j QABUL QILING # network.squid.proxy -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 3128 -j ACCEPT # network.dns -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT # network.ntp -A INPUT -p udp -m conntrack --ctstate NEW -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 69 -j QABUL QILING # network.dhserver.dhcp.discover-so'rov -A KIRISH -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j QABUL QILING # network.dhclient.dhcp.discover-so'rov # -A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j QABUL # network.dhserver.dhcp.offer-ack # -A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j QABUL

Sinov va disk raskadrovka

IPv4 va IPv6 uchun joriy konfiguratsiyani ko'rish:

sudo iptables-saqlash sudo ip6tables-saqlash

Jurnal

Kuzatish

Yadro modullari

Yuklangan modullarni ko'rish:

lsmod | grep -E "^ ip | ^ nf" | tartiblash

Qo'shimcha modullarni yuklash uchun avtomatik to'ldirishni ishlatish qulay: 2x Tab

sudo modprobe nf sudo modprobe modules-load.d

Ushbu maqolada biz sizga Linuxda iptables-ni qanday o'rnatishni ko'rsatamiz. Siz nima ekanligini va nima uchun ushbu xususiyatni sozlashingiz kerakligini bilib olasiz. Linuxda iptables-ni sozlash juda sodda.

Linuxda iptables-ni sozlash: iptables nima?

Iptables - bu trafikka ruxsat berish yoki blokirovka qilish uchun zanjir siyosatidan foydalanadigan buyruq qatori xavfsizlik devori yordam dasturi. Aloqa tizimingizda o'zini o'rnatishga harakat qilganda, iptables o'z ro'yxatida unga mos keladigan qoidani qidiradi. Agar topilmasa, u standart harakatga murojaat qiladi.

Iptables deyarli har doim oldindan o'rnatilgan har qanday narsada keladi linux tarqatish... Uni yangilash / o'rnatish uchun faqat iptables paketini yuklab oling:

sudo apt-get install iptables

Firestarter kabi iptables-ga GUI alternativalari mavjud, ammo agar siz bir nechta buyruqlarni bajarsangiz, iptables bu qiyin emas. IPptables qoidalarini o'rnatishda juda ehtiyot bo'ling, ayniqsa serverda SSH'd dan foydalanayotgan bo'lsangiz, chunki bitta noto'g'ri buyruq jismoniy qurilmada qo'lda o'rnatilguncha sizni uzoq vaqt to'sib qo'yishi mumkin.

Dummies uchun Linux-da iptables-ni sozlash

Aytgancha, biz allaqachon bu haqda gaplashdik. Ehtimol, bu sizni ham qiziqtiradi. Havolani yuqorida topishingiz mumkin.

IPptables-ni Linuxda sozlash, yuqorida aytganimizdek, juda oddiy. Ammo sozlashni boshlashdan oldin siz o'zingiz bilan tanishishingiz kerak umumiy tushunchalar imkoniyatlari.

Zanjir turlari

Iptables uch xil zanjirdan foydalanadi: kirish, yo'naltirish va chiqish.

Kiritish - Ushbu zanjir kiruvchi ulanishlarning xatti-harakatlarini boshqarish uchun ishlatiladi. Masalan, foydalanuvchi SSH-ni kompyuteringizga / serveringizga o'rnatmoqchi bo'lsa, iptables IP-manzil va portni kirish zanjiridagi qoida bilan moslashtirishga harakat qiladi.

Oldinga - bu zanjir aslida mahalliy ravishda etkazib berilmaydigan kiruvchi ulanishlar uchun ishlatiladi. Router haqida o'ylab ko'ring - ma'lumotlar doimo unga yuboriladi, lekin kamdan-kam hollarda aslida yo'riqchining o'zi uchun mo'ljallangan; Ma'lumotlar oddiygina ochilish sahifasiga yo'naltiriladi. Agar siz biron bir marshrutizatsiyani, NATni yoki tizimingizda yo'naltirishni talab qiladigan boshqa biron bir ishni qilmasangiz, siz ushbu zanjirdan foydalanmaysiz.

Bittasi bor ishonchli yo'l tizimingiz besleme zanjiridan foydalanadimi yoki kerakmi yoki yo'qligini tekshirib ko'ring.

Ushbu skrinshot bir necha hafta davomida ishlaydigan va kiruvchi yoki chiquvchi ulanish cheklovlari bo'lmagan serverga mo'ljallangan. Ko'rib turganingizdek, kirish zanjiri 11 Gb paketni va chiqish zanjiri 17 Gbni qayta ishladi. Boshqa tomondan, to'g'ridan-to'g'ri zanjirga bitta paketni qayta ishlash kerak emas. Buning sababi shundaki, server biron bir yo'naltirishni amalga oshirmaydi yoki uchidan uchigacha qurilma sifatida foydalanilmaydi.

Chiqish - bu zanjir chiquvchi ulanishlar uchun ishlatiladi. Masalan, agar siz linuxinsider saytida ping qilishga urinib ko'rsangiz, iptables ulanish urinishiga ruxsat berish yoki rad etish to'g'risida qaror qabul qilishdan oldin uning chiqish zanjirini ping va linuxinsider uchun qanday qoidalar qo'llanilishini tekshiradi.

Ogohlantirish

Tashqi xostni tasdiqlash faqat chiqish zanjiri orqali o'tishi kerak bo'lgan narsaga o'xshab ketganda, kirish zanjiri ma'lumotlarni qaytarish uchun ham ishlatilishini unutmang. Tizimingizni blokirovka qilish uchun iptables-dan foydalanganda, ko'plab protokollar ikki tomonlama aloqani talab qilishini unutmang, shuning uchun ham yuqori, ham quyi zanjirlar to'g'ri tuzilgan bo'lishi kerak. SSH - bu har ikkala zanjirda ham ruxsat berishni unutadigan umumiy protokol.

Birlamchi siyosat harakati

Muayyan qoidalarni sozlashni boshlashdan oldin, ushbu uchta to'rning odatiy xatti-harakatlarini nima qilishni xohlashingiz kerak. Boshqacha qilib aytadigan bo'lsak, ulanish mavjud qoidalarga mos kelmasa, iptables nima qilishni xohlaysiz?

Mos kelmaydigan trafikni boshqarish uchun qaysi siyosat zanjirlari tuzilganligini ko'rish uchun iptables -L buyrug'ini bajaring.

Ko'rib turganingizdek, biz toza natijaga erishish uchun grep-dan ham foydalandik. Ushbu skrinshotda bizning zanjirlar hozirda trafikni qabul qilish uchun mo'ljallangan.

Vaqtdan ko'proq vaqt, siz tizimingiz sukut bo'yicha ulanishlarni qabul qilishni xohlaysiz. Agar ilgari siyosat zanjiri qoidalarini o'zgartirmagan bo'lsangiz, ushbu parametr allaqachon tuzilgan bo'lishi kerak. Yaxshiyamki, standart ulanishlarni qabul qilish buyrug'i:

iptables - siyosat KIRISH QABUL QILADI
iptables - siyosat OUTPUT QABUL
iptables - siyosat oldinga QABUL

Odatiy bo'lib, qabul qilish qoidasida siz boshqa barcha ulanishlarni qabul qilishni davom ettirish paytida iptables-dan maxsus IP-manzillarni yoki port raqamlarini rad qilish uchun foydalanishingiz mumkin. Bir daqiqadan so'ng o'sha jamoalarga etib boramiz.

Agar siz barcha ulanishlardan bosh tortishni xohlasangiz va qaysi biriga ulanishga ruxsat berishni xohlayotganingizni aniqlasangiz, siz rad etish uchun o'zingizning o'chirib qo'yish qoidalarini o'zgartirishingiz kerak. Ehtimol, bu faqat o'z ichiga olgan serverlar uchun foydali bo'ladi maxfiy ma'lumotlarva faqat bir xil IP-manzillar ularga ulanadi.

iptables --politsiyali KIRISH DOP
iptables - siyosiy OUTPUT DROP
iptables - siyosat oldinga tushish

Aloqa javoblari

Odatiy zanjir siyosati o'rnatilganda, ma'lum bir IP-manzilga yoki portga ulanishga duch kelganda nima qilish kerakligini bilish uchun siz iptables-ga qoidalar qo'shishni boshlashingiz mumkin. Ushbu qo'llanmada biz eng keng tarqalgan va tez-tez ishlatiladigan uchta javobni ko'rib chiqamiz.

Qabul qiling - ulanishga ruxsat berish.

Tushirish - Ulanishni tashlang, hech qachon bo'lmaganday harakat qiling. Agar manba tizimingiz mavjudligini bilishini istamasangiz, bu eng yaxshisi.

Rad etish - ulanishni rad eting, ammo xato haqida xabar yuboring. Bu sizning tizimingizga ulanish uchun ma'lum bir manbani xohlamasangiz, lekin xavfsizlik devori ularni to'sib qo'yganligini bilishingizni xohlasangiz yaxshi bo'ladi.

Ushbu uchta qoidalar orasidagi farqni ko'rsatishning eng yaxshi usuli - bu kompyuterlarning har biri uchun tuzilgan iptables yordamida Linux mashinasini ping qilishga urinish paytida uning ko'rinishini ko'rsatishdir.

Ulanish uchun ruxsat:

Ulanishni o'chirish:

Ulanishni rad etish:

Bir qator IP-manzillarni ko'rsatish uchun tarmoq maskasi yoki xarakteristikasi.

Linuxda iptables-ni sozlash: Ulanish usullari

Agar biz "Linuxda iptables-ni sozlash" haqida gapiradigan bo'lsak, unda siz ulanish usullari haqida gapirishingiz kerak.

Muayyan ulanishlarga ruxsat bering yoki bloklang
Konfiguratsiya qilingan qoidalar yordamida siz iptables-ni maxsus manzillar, manzillar diapazonlari va portlariga ruxsat berish yoki bloklash uchun sozlashingiz mumkin. Ushbu misollarda biz DROP ulanishlarini o'rnatamiz, ammo siz o'zingizning ehtiyojlaringizga va siyosat zanjirlarini qanday o'rnatganingizga qarab ularni QABUL QILISH yoki REJECT ga o'zgartirishingiz mumkin.

Eslatma. Ushbu misollarda biz mavjud zanjirga qoidalar qo'shish uchun iptables -A dan foydalanamiz. Iptables ro'yxatning yuqori qismidan boshlanadi va har biriga mos keladiganini topguncha har bir qoidadan o'tadi. Agar siz boshqasiga yuqoridan qoida kiritishingiz kerak bo'lsa, ro'yxatdagi raqamni ko'rsatish uchun iptables -I dan foydalanishingiz mumkin.

Xuddi shu IP-manzildan ulanishlar

Ushbu misol 10.10.10.10 IP-manzilidan barcha ulanishlarni qanday qilib bloklashni ko'rsatib beradi.

iptables -A KIRISH -lar 10.10.10.10 -j DROP

Bir qator IP-manzillardan ulanishlar

Ushbu misol 10.10.10.0/24 tarmoq oralig'idagi barcha IP-manzillarni qanday qilib bloklashni ko'rsatib beradi. Bir qator IP-manzillarni ko'rsatish uchun siz netmask yoki standart chiziqdan foydalanishingiz mumkin.

iptables -A KIRISH -lar 10.10.10.0/24 -j DROP

iptables -A INPUT -lar 10.10.10.0/255.255.255.0 -j DROP

Muayyan portga ulanishlar

Ushbu misol 10.10.10.10 dan SSH ulanishlarini qanday qilib bloklashni ko'rsatib beradi.

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

Siz "ssh" ni istalgan protokol yoki port raqami bilan almashtirishingiz mumkin. Kodning -p tcp qismi iptables-ga protokol qaysi ulanishdan foydalanayotganligini aytib beradi. Agar siz TCP emas, balki UDP ishlatadigan protokolni bloklagan bo'lsangiz, uning o'rniga -p udp kerak.

Ushbu misol har qanday IP-manzildan SSH ulanishlarini qanday qilib bloklashni ko'rsatadi.

iptables -A INPUT -p tcp -dport ssh -j DROP

Ulanish holatlari

Avval aytib o'tganimizdek, ko'plab protokollar ikki tomonlama aloqani talab qiladi. Masalan, agar siz tizimingizga SSH ulanishlariga ruxsat berishni istasangiz, kirish va chiqish davrlari ularga qo'shilgan qoidaga muhtoj bo'ladi. Ammo, agar tizimingizga SSH tizimiga kirishga ruxsat berilishini xohlasangiz nima bo'ladi? Qoidani qo'shish chiquvchi zanjir va chiquvchi SSH urinishlariga olib keladimi?

Bu erda ulanish holatlari paydo bo'ladi, bu sizga ikki tomonlama aloqalarga ruxsat berish imkoniyatini beradi, lekin faqat bir tomonlama ulanishlarga imkon beradi. 10.10.10.10 dan SSH ulanishiga ruxsat berilgan, ammo TO 10.10.10.10 gacha SSH ulanishiga ruxsat berilmagan ushbu misolni ko'rib chiqing. Biroq, tizim SSH orqali qayta aloqa yuborish uchun sessiya o'rnatilgunga qadar ruxsat beriladi va bu ikki xost o'rtasida SSH aloqasini o'rnatishga imkon beradi.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, ESTABLISHED -j QABUL

iptables -A OUTPUT -p tcp - sport 22 -d 10.10.10.10 -m state - state ESTABLISHED -j QABUL

O'zgarishlarni saqlash

Iptables qoidalariga kiritilgan o'zgartirishlar, agar siz o'zgarishlarni saqlash buyrug'ini ishlatmasangiz, iptables xizmati keyingi safar qayta yoqilganda qaytariladi. Ushbu buyruq tarqatishingizga qarab farq qilishi mumkin:

sudo / sbin / iptables-saqlash

Red Hat / CentOS:

/ sbin / service iptables saqlaydi

/etc/init.d/iptables saqlash

Boshqa buyruqlar

Hozirda tuzilgan iptables qoidalari ro'yxati:

-V parametrini qo'shish sizga paketlar va baytlar haqida ma'lumot beradi, -n qo'shish esa barcha raqamli qiymatlarni o'z ichiga oladi. Boshqacha qilib aytganda, xost nomlari, protokollari va tarmoqlari raqam sifatida ko'rsatilgan.

Hozirda tuzilgan barcha qoidalarni o'chirish uchun siz buyruqni bajarishingiz mumkin.

Ingliz tilidagi ajoyib manbadan tarjima HowToGeek.

Agar sizda "Linuxda iptables-ni qo'g'irchoqlar uchun sozlash" haqida savollaringiz bo'lsa, ularni bizning veb-saytimizdagi sharhlar formasiga yozishingiz mumkin.

Agar xato topsangiz, iltimos, matn qismini tanlang va bosing Ctrl + Enter.

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 ishlaydigan 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 kichik bir 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 olib tashlash:

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 bildiradi 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 boramiz va aytamiz:

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:* LISTEN 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 ulanishlarni rad qilishingiz mumkin.

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