نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اشتباهات
  • مفاهیم اولیه iptables در لینوکس. راه اندازی نت فیلتر با iptables

مفاهیم اولیه iptables در لینوکس. راه اندازی نت فیلتر با iptables

وظیفه اصلی دیواره آتش(دیوار آتش) فیلتر کردن و پردازش بسته های عبوری از شبکه. هنگام تجزیه و تحلیل یک بسته ورودی، فایروال در مورد سرنوشت این بسته تصمیم می گیرد: بسته را دور بیندازید ( رها کردن، بسته را بپذیرید ( تایید کنید) یا کار دیگری با آن انجام دهید.

که در لینوکسفایروال یک ماژول هسته به نام netfilter است و مجموعه ای از قلاب ها برای کار با پشته شبکه است. رابط برای اصلاح قوانینی که توسط آن فایروال بسته ها را پردازش می کند، ابزار مفید است iptablesبرای IPv4 و ابزار جدول های ip6برای IPv6

تمام کارهای فیلترینگ ترافیک توسط هسته سیستم انجام می شود. iptablesدیمون نیست و فرآیندهای جدیدی در سیستم ایجاد نمی کند. روشن یا خاموش کنید iptablesاین فقط یک سیگنال به هسته ارسال می کند. سرعت فیلتر بالا تنها با تجزیه و تحلیل هدرهای بسته به دست می آید.

بازگشت به ویژگی های اصلی iptablesمربوط بودن:

  • فیلتر کردن ترافیک بر اساس آدرس فرستنده و گیرنده بسته ها، شماره پورت.
  • تغییر مسیر بسته ها با توجه به پارامترهای خاص؛
  • سازماندهی دسترسی به شبکه (SNAT)؛
  • ارسال پورت از WAN به LAN (DNAT)؛
  • محدود کردن تعداد اتصالات؛
  • تعیین سهمیه ترافیک؛
  • اجرای قوانین طبق برنامه؛

فرآیند اصلی کار را در نظر بگیرید iptables(منبع تصویر rigacci.org).

یک بسته ورودی ابتدا به دستگاه شبکه برخورد می کند، پس از آن توسط راننده رهگیری می شود و به هسته ارسال می شود. پس از آن، بسته از طریق یک سری جداول عبور داده می شود و تنها پس از آن به برنامه محلی منتقل می شود یا اگر بسته انتقالی باشد به سیستم دیگری هدایت می شود.

که در iptablesسه نوع جدول وجود دارد:

  1. خرد کردن- برای ایجاد تغییرات در هدر بسته استفاده می شود.
  2. nat- برای ترجمه آدرس شبکه استفاده می شود.
  3. فیلتر- برای فیلتر کردن ترافیک؛

میز پره

هدف اصلی جدول خرد کردن- ایجاد تغییرات در هدر بسته این جدول می تواند کارهای زیر را انجام دهد:

  • تنظیم بیت نوع خدمات؛
  • تنظیم فیلد Time To Live.
  • تنظیم برچسب روی یک بسته که در قوانین دیگر قابل بررسی است.

زنجیر در میز خرد کردن:

  • پیش پروتینگ- برای ایجاد تغییرات در بسته ها در ورودی iptables، قبل از تصمیم گیری در مورد مسیریابی استفاده می شود.
  • پس از استراوتینگ- برای ایجاد تغییرات در بسته ها در هنگام خروج از iptables، پس از تصمیم گیری مسیریابی استفاده می شود.
  • ورودی- برای ایجاد تغییرات در بسته ها قبل از انتقال آنها به برنامه محلی استفاده می شود.
  • خروجی- برای ایجاد تغییرات در بسته های ارسالی از یک برنامه کاربردی در داخل iptables استفاده می شود.
  • رو به جلو- برای ایجاد تغییرات در بسته های حمل و نقل استفاده می شود.

جدول nat

جدول برای ترجمه آدرس شبکه و هنگامی که بسته ای مواجه می شود که یک اتصال جدید ایجاد می کند استفاده می شود. این جدول می تواند کارهای زیر را انجام دهد:

  • DNAT (ترجمه آدرس شبکه مقصد)- ترجمه آدرس مقصد در هدر بسته؛
  • SNAT (ترجمه آدرس شبکه منبع)- تغییر آدرس منبع بسته؛
  • بالماسکه- برای اهداف مشابه استفاده می شود SNAT، اما به شما امکان می دهد با آدرس های IP پویا کار کنید.

زنجیر در این جدول:

  • پیش پروتینگ- برای ایجاد تغییرات در بسته ها در ورودی iptables استفاده می شود.
  • خروجی- برای ترجمه آدرس ها در بسته ها قبل از مسیریابی بیشتر استفاده می شود.
  • پس از استراوتینگ- برای تبدیل بسته ها قبل از ارسال آنها به شبکه استفاده می شود.

جدول فیلتر

جدول برای فیلتر کردن بسته ها استفاده می شود. این میز دارای سه زنجیره است:

  1. ورودی- زنجیره ای برای بسته های ورودی؛
  2. رو به جلو- زنجیره ای برای بسته های ارسال شده (ترانزیت)؛
  3. خروجی- زنجیره ای برای بسته های خروجی؛

بسته ای که از این زنجیره ها عبور می کند ممکن است مشمول موارد زیر باشد: تایید کنید, رها کردن, رد کنید, ورود به سیستم.

به طور خلاصه، یک بسته دریافتی از طریق زنجیره ای از قوانین عبور می کند. هر قانون شامل شرایط. شرطو هدف(عمل). اگر بسته شرایط را برآورده کند، به هدف منتقل می شود، در غیر این صورت قانون بعدی در زنجیره بر روی بسته اعمال می شود. اگر بسته هیچ یک از شرایط موجود در زنجیره را برآورده نکند، عمل پیش فرض روی آن اعمال می شود.

زنجیر جدول
فیلتر nat خرد کردن
ورودی + +
رو به جلو + +
خروجی + + +
پیش پروتینگ + +
پس از استراوتینگ + +

ابزار iptables

نصب iptables

# تحت Arch Linux yaourt -S iptables # تحت Ubuntu sudo apt-get install iptables

راه اندازی iptables

# تحت آرچ لینوکس sudo systemctl فعال کردن iptables sudo systemctl شروع iptables # زیر سرویس sudo اوبونتو شروع iptables

قوانین ذخیره سازی

# تحت آرچ لینوکس sudo sh -c "iptables-save > /etc/iptables/iptables.rules" # در اوبونتو sudo sh -c "iptables-save > /etc/iptables.rules"

بازیابی قوانین از یک فایل

iptables-restore< firewall-config

هر قانون در iptablesیک خط جداگانه است که بر اساس قوانین خاصی تشکیل شده و حاوی معیارها و اقدامات است. به طور کلی، قانون دارای قالب زیر است:

دستور Iptables [-t table]

  • t جدول - نام جدولی را که قانون برای آن ایجاد می شود مشخص می کند.
  • فرمان - فرمانی که عمل را مشخص می کند iptables- اضافه کردن یک قانون، حذف یک قانون و غیره؛
  • مطابقت - معیارهای آزمایشی را تعیین می کند که توسط آن مشخص می شود که آیا بسته تحت قانون قرار می گیرد یا خیر.
  • هدف / پرش - در صورت برآورده شدن معیار چه اقدامی باید انجام شود.

دستورات iptables:

  • -الف - با اضافه کردن یک قانون به زنجیره، قانون به انتهای زنجیره اضافه می شود.
  • -D - قانون را از زنجیره حذف کنید.
  • -R - یک قانون را با قانون دیگری جایگزین کنید.
  • -I - یک قانون جدید را در زنجیره وارد کنید.
  • -L - لیستی از قوانین را در زنجیره داده شده نمایش می دهد.
  • -F - تنظیم مجدد تمام قوانین در زنجیره داده شده.
  • -Z - صفر کردن تمام شمارنده ها در زنجیره داده شده.
  • -N - یک زنجیره جدید با نام داده شده ایجاد کنید.
  • -X - حذف یک زنجیره.
  • -P - خط مشی پیش فرض را برای زنجیره تنظیم می کند.
  • -E - تغییر نام زنجیره کاربر.

نمونه های دستور iptables

بسته ها را می توان با پارامترهای زیر فیلتر کرد:

منبع بسته

گزینه -s برای فیلتر بر اساس منبع استفاده می شود. به عنوان مثال، بیایید تمام بسته های ورودی از میزبان 192.168.1.95 را رد کنیم:

Iptables -A INPUT -s 192.168.1.95 -j DROP

می توانید از نام دامنه برای تعیین آدرس میزبان استفاده کنید:

Iptables -A INPUT -s test.host.net -j DROP

شما همچنین می توانید یک زیر شبکه کامل را مشخص کنید:

Iptables -A INPUT -s 192.168.1.0/24 -j DROP

شما همچنین می توانید از نفی (علامت!) استفاده کنید. به عنوان مثال، تمام بسته های میزبانی به غیر از 192.168.1.96 حذف می شوند:

Iptables - یک ورودی! -s 192.168.1.96 -j DROP

اجازه دادن به ترافیک برای رفتن به لوکال هاست:

Iptables -A INPUT 1 -i lo -j ACCEPT

ثبت تلاش‌های جعل با پیشوند "IP_SPOOF A:" و قطع اتصال

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

آدرس مقصد

برای این کار از گزینه -d استفاده کنید. به عنوان مثال، بیایید همه بسته های خروجی را به میزبان 192.168.1.95 رد کنیم:

Iptables -A OUTPUT -d 192.168.156.156 -j DROP

دسترسی به یک منبع را رد کنید

Iptables -A OUTPUT -d vk.com -j REJECT

همانطور که در مورد منبع بسته، می توان از آدرس های زیر شبکه و نام های دامنه استفاده کرد. انکار هم کار می کند.

پروتکل

گزینه -p پروتکل را مشخص می کند. میتواند مورد استفاده قرار گیرد همه، icmp، tcp، udpیا شماره پروتکل (از /etc/پروتکل ها).

اجازه دادن به درخواست های اکو ورودی

Iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

پورت منبع

ما به تمام بسته های خروجی از پورت 80 اجازه می دهیم:

Iptables -A INPUT -p tcp --sport 80 -j ACCEPT

مسدود کردن تمام درخواست های دریافتی در پورت 80:

Iptables -A INPUT -p tcp --dport 80 -j DROP

برای تعیین پورت باید پروتکل (tcp یا udp) را مشخص کنید. می توانید از نفی استفاده کنید.

محدوده باز کردن پورت ها

Iptables -A INPUT -m حالت --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

بندر مقصد

اتصالات HTTP مجاز است

iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

ما اجازه دریافت داده ها از سرور DHCP را می دهیم

Iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

  • از راه دور بهره برداری از خطاها در نرم افزاربه منظور از کار انداختن آن؛
  • سیل- ارسال تعداد زیادی بسته بی معنی به آدرس قربانی. هدف سیل می تواند یک کانال ارتباطی یا منابع ماشینی باشد. در حالت اول، جریان بسته کل پهنای باند را اشغال می کند و به ماشین مورد حمله اجازه پردازش درخواست های قانونی را نمی دهد. در حالت دوم، منابع دستگاه با استفاده از تماس‌های مکرر و بسیار مکرر به برخی از سرویس‌ها که عملیات پیچیده و پرمصرف منابع را انجام می‌دهند، ضبط می‌شوند. برای مثال، این می تواند یک تماس طولانی با یکی از مؤلفه های فعال (اسکریپت) وب سرور باشد. سرور تمام منابع ماشین را صرف پردازش درخواست های مهاجم می کند و کاربران باید منتظر بمانند. سیل می تواند متفاوت باشد: سیل ICMP، سیل SYN، سیل UDP و سیل HTTP

جمع آوری اطلاعات در مورد اتصالات شبکه

مشاهده اتصالات باز

Netstat -ntu | awk "(چاپ 5 دلاری)" | cut -d: -f1 | مرتب سازی | uniq -c | مرتب کردن-n

تعداد اتصالات به پورت 80

Netstat -na | grep ":80" | wc -l

TCP dump از اتصالات (که درخواست های دامنه اغلب به آن ارسال می شود)

دامنه پورت Tcpdump -npi eth0

سیل SYN را می توان با شمارش تعداد اتصالات TCP نیمه باز بررسی کرد

Netstat -na | grep ":80" | grep SYN_RCVD

محافظت در برابر انواع مختلف سیل.

سیل ICMPیک روش بسیار ابتدایی برای کاهش پهنای باند و ایجاد بار در پشته شبکه از طریق ارسال یکنواخت درخواست های ICMP ECHO (پینگ). به راحتی با تجزیه و تحلیل جریان ترافیک در هر دو جهت شناسایی می شود: در طول یک حمله سیل ICMP، آنها تقریباً یکسان هستند. یک روش تقریباً بدون درد برای محافظت مطلق مبتنی بر غیرفعال کردن پاسخ‌ها به درخواست‌های ICMP ECHO است:

sysctl net.ipv4.icmp_echo_ignore_all=1

یا با استفاده از iptables:

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

سیل SYN.یکی از راه های رایج نه تنها برای مسدود کردن کانال ارتباطی، بلکه قرار دادن پشته شبکه سیستم عامل در حالتی است که دیگر نمی تواند درخواست های اتصال جدید را بپذیرد. بر اساس تلاشی برای مقداردهی اولیه اتصالات TCP همزمان با ارسال یک بسته SYN با آدرس برگشتی ناموجود. پس از چندین بار تلاش برای ارسال یک بسته پاسخ ACK به آدرسی غیرقابل دسترسی، اکثر سیستم عامل ها اتصال ناموفق را در صف قرار می دهند. و تنها پس از تلاش n، اتصال بسته می شود. از آنجایی که جریان بسته های ACK بسیار زیاد است، به زودی صف پر می شود و هسته از تلاش برای باز کردن اتصال جدید خودداری می کند. هوشمندترین ربات‌های DoS همچنین سیستم را قبل از حمله به منظور ارسال درخواست‌ها برای باز کردن پورت‌های حیاتی تجزیه و تحلیل می‌کنند. شناسایی چنین حمله ای ساده است: فقط سعی کنید به یکی از سرویس ها متصل شوید.

مفاهیم کلیدی iptables عبارتند از:

    قاعده - شامل یک معیار، یک عمل و یک شمارنده است. اگر بسته با معیارها مطابقت داشته باشد، عمل روی آن اعمال می شود و در شمارنده شمارش می شود. ممکن است معیاری وجود داشته باشد یا نباشد - پس معیار "همه بسته ها" به طور ضمنی فرض می شود. همچنین لازم نیست یک اقدام را مشخص کنید - در صورت عدم وجود یک عمل، قانون فقط به عنوان یک شمارنده کار می کند. قوانین مربوط به هر زنجیره به ترتیبی که ظاهر می شوند فعال می شوند، بنابراین ترتیب مهم است.

    • معیارها - یک عبارت منطقی که خصوصیات یک بسته و/یا اتصال را تجزیه و تحلیل می کند و تعیین می کند که آیا این بسته خاص مشمول قانون فعلی است یا خیر. معیارها با یک "AND" منطقی به هم متصل می شوند.

      اقدام - شرح اقدامی که باید روی بسته و/یا اتصال انجام شود، در صورتی که مشمول این قانون باشند. اقدامات در زیر با جزئیات بیشتر مورد بحث قرار خواهند گرفت.

      شمارنده - جزء قانون است که حسابداری برای تعداد بسته هایی که با معیارهای این قانون مطابقت دارند را فراهم می کند. شمارنده همچنین اندازه کل چنین بسته هایی را در بایت در نظر می گیرد.

    یک زنجیره یک توالی منظم از قوانین است. زنجیر را می توان به سفارشی و اساسی تقسیم کرد.

    • زنجیره پایه - زنجیره ای که به طور پیش فرض در هنگام مقداردهی اولیه جدول ایجاد می شود. هر بسته بسته به اینکه برای خود میزبان در نظر گرفته شده باشد، تولید شده توسط آن یا ترانزیت باشد، باید از مجموعه زنجیره های پایه جداول مختلف اختصاص داده شده به آن عبور کند. علاوه بر این، زنجیره پایه با وجود یک "عمل پیش فرض" (سیاست پیش فرض) با زنجیره کاربر متفاوت است. این عمل برای بسته هایی اعمال می شود که توسط قوانین دیگر این زنجیره پردازش نشده اند و زنجیره هایی که از آن فراخوانی می شوند. نام زنجیره های پایه همیشه با حروف بزرگ نوشته می شود (PREROUTING، INPUT، FORWARD، OUTPUT، POSTROUTING).

      زنجیره کاربر - زنجیره ای که توسط کاربر ایجاد می شود. فقط در جدول خودش قابل استفاده است. توصیه می کنیم برای جلوگیری از اشتباه گرفتن با زنجیره های پایه و عملکردهای داخلی، از نام های بزرگ برای چنین زنجیره هایی استفاده نکنید.

    جدول - مجموعه ای از زنجیره های اصلی و کاربری که با یک هدف عملکردی مشترک متحد شده اند. نام جدول (و همچنین ماژول های معیار) با حروف کوچک نوشته می شود، زیرا در اصل نمی توانند با نام زنجیره های سفارشی تضاد داشته باشند. هنگام فراخوانی دستور iptables، جدول با فرمت -t table_name مشخص می شود. اگر به صراحت مشخص نشده باشد، از جدول فیلتر استفاده می شود.

تجزیه:

# قوانین جدول فیلتر روگرفتفیلتر $ sudo iptables-save -c -t # فیلتر جدول * فیلتر زنجیره های # INPUT، FORWARD، OUTPUT، سیاست ها و شمارنده های آنها:INPUT ACCEPT [ 19302 :9473669 ] : FORWARD ACCEPT [ 0 :0 ] :OUTPUT ACCEPT [ 5462736 :4247599532 ] # قانون: "" - شمارنده قانون، "-A INPUT" - زنجیره، "-i em1 -p tcp -m tcp --dport 22" - معیارها، "-j ACCEPT" - عمل[ 17:1020 ] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT COMMIT

معماری

در یک سیستم فیلتر شبکه، بسته ها از طریق زنجیره ای منتقل می شوند. یک زنجیره فهرستی منظم از قوانین است و هر قانون می تواند شامل معیارها و یک عمل یا انتقال باشد. هنگامی که یک بسته از زنجیره عبور می کند، سیستم netfilter به نوبه خود بررسی می کند که آیا بسته با تمام معیارهای قانون بعدی مطابقت دارد یا خیر، و اگر چنین است، اقدامی را انجام می دهد (اگر هیچ معیاری در قانون وجود نداشته باشد، این عمل برای انجام می شود. تمام بسته هایی که از قانون عبور می کنند). معیارهای ممکن زیادی وجود دارد. به عنوان مثال، اگر هدر بسته مشخص کند که فرستنده 192.168.1.1 است، یک بسته با معیار -source 192.168.1.1 مطابقت دارد. ساده ترین نوع پرش، --jump، به سادگی بسته را به ابتدای یک زنجیره دیگر ارسال می کند. شما همچنین می توانید یک عمل را با --jump مشخص کنید. اقدامات استاندارد موجود در همه زنجیره‌ها عبارتند از ACCEPT (پرش)، DROP (حذف)، QUEUE (ارسال برای تجزیه و تحلیل به یک برنامه خارجی) و RETURN (بازگشت به زنجیره قبلی برای تجزیه و تحلیل). مثلا دستورات

iptables -A INPUT --منبع 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump other_chain

به این معنی است که "قوانین زیر را به انتهای زنجیره INPUT اضافه کنید: بسته های 192.168.1.1 را رد کنید و تمام آنچه را که باقی مانده برای ارسال به other_chain برای تجزیه و تحلیل ارسال کنید."

زنجیر

5 نوع زنجیره استاندارد در سیستم تعبیه شده است:

    PREROUTING - برای پردازش اولیه بسته های ورودی.

    INPUT - برای بسته های ورودی که مستقیماً به فرآیند محلی (مشتری یا سرور) خطاب می شوند.

    FORWARD - برای بسته های ورودی که به سمت خروج هدایت می شوند (توجه داشته باشید که بسته های ارسال شده ابتدا از زنجیره PREROUTING و سپس FORWARD و POSTROUTING عبور می کنند).

    OUTPUT - برای بسته های تولید شده توسط فرآیندهای محلی.

    POSTROUTING - برای پردازش نهایی بسته های خروجی.

شما همچنین می توانید زنجیره های خود را با استفاده از ابزار iptables ایجاد و نابود کنید.

جداول

زنجیره ها در 4 جدول سازماندهی شده اند:

    خام - قبل از ارسال بسته به سیستم تشخیص وضعیت مشاهده می شود. به ندرت استفاده می شود، به عنوان مثال برای علامت گذاری بسته هایی که نباید توسط سیستم حالت پردازش شوند. برای انجام این کار، عمل NOTRACK در قانون مشخص شده است. شامل زنجیره های PREROUTING و OUTPUT است.

    Mangle - حاوی قوانینی برای اصلاح بسته های IP (معمولا هدر) است. از جمله، از TTL (زمان زندگی)، TOS (نوع سرویس)، و اقدامات MARK (برای تغییر فیلدهای TTL و TOS و برای تغییر نشانگرهای بسته) پشتیبانی می کند. به ندرت مورد نیاز است و می تواند خطرناک باشد. شامل هر پنج زنجیر استاندارد است.

    Nat - فقط به دنبال بسته هایی است که یک اتصال جدید ایجاد می کنند (طبق سیستم حالت). از اقدامات DNAT، SNAT، MASQUERADE، REDIRECT پشتیبانی می کند. شامل زنجیره های PREROUTING، OUTPUT و POSTROUTING است.

    فیلتر - جدول اصلی، به طور پیش فرض در صورتی که نام جدول مشخص نشده باشد استفاده می شود. شامل زنجیره های INPUT، FORWARD و OUTPUT است.

زنجیر با نام یکسان اما در جداول مختلف اشیایی کاملا مستقل هستند. به عنوان مثال، raw PREROUTING و Mangle PREROUTING معمولاً شامل مجموعه ای متفاوت از قوانین هستند. بسته ها ابتدا از طریق زنجیره خام PREROUTING و سپس از طریق Mangle PREROUTING عبور می کنند.

ایالت ها

در سیستم فیلتر شبکه، هر بسته ای که از مکانیسم حالت عبور می کند، می تواند یکی از چهار حالت ممکن را داشته باشد:

    NEW - بسته یک جلسه جدید باز می کند. یک مثال کلاسیک یک بسته TCP با پرچم SYN است.

    ایجاد شده - بسته بخشی از یک جلسه از قبل موجود است.

    مرتبط - بسته یک جلسه جدید مرتبط با یک جلسه از قبل باز شده را باز می کند. به عنوان مثال، در طول یک جلسه FTP غیرفعال، مشتری به پورت 21 سرور متصل می شود، سرور تعداد پورت دوم را که به طور تصادفی انتخاب شده است را به مشتری می گوید، پس از آن مشتری برای انتقال فایل ها به پورت دوم متصل می شود. در این حالت، جلسه دوم (انتقال فایل در پورت دوم) با یک جلسه از قبل موجود (اتصال اصلی به پورت 21) مرتبط است.

    نامعتبر - همه بسته های دیگر.

نمودار عبور میز و زنجیر

نمودار ساده شده عبور جداول و زنجیر:

نمودار جزئیات:

پیکربندی اولیه

در زیر نمونه ای از پیکربندی پایه استاتیک iptables آورده شده است. هنگام ذخیره و بارگذاری چنین پیکربندی، لازم است که امکان ایجاد تغییرات در آن توسط سرویس های دیگر مانند Fail2ban را در نظر بگیرید. همچنین هنگام استفاده از آدرس دهی IPv6، پیکربندی IPv6 باید مستقل از IPv4 انجام شود.

IPv4

sudo iptables-save

یک اسکریپت با dump از قوانین iptables ایجاد کنید:

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

کد زیر را کپی کنید:

#!/sbin/iptables-restore -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT -reject-with icmp-host-prohibited -A FORWARD -m conntrack -- ctstate مرتبط، تاسیس -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited #-A OUTPUT -p icmp -j ACCEPT #-A OUTPUT -o lo - j قبول کنید #-A OUTPUT -j REJECT --reject-with icmp-host-prohibitedمرتکب شدن

ما قوانین لازم را با در نظر گرفتن iptables-save تکمیل می کنیم.

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

IPv6

مشاهده پیکربندی فعلی:

sudo ip6tables-save

یک اسکریپت با dump از قوانین ip6tables ایجاد کنید:

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

کد زیر را کپی کنید:

#!/sbin/ip6tables-restore # میز فیلتر و زنجیر آن* فیلتر: پذیرش ورودی [ 0 : 0 ] : پذیرش جلو [ 0 : 0 ] : پذیرش خروجی [ 0 : 0 ] # اتصالات مرتبط و ایجاد شده را مجاز کنید-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # ترافیک icmp سرویس را مجاز کنید-A INPUT -p ipv6-icmp -j ACCEPT # اجازه ترافیک قابل اعتماد در رابط حلقه بک-A INPUT -i lo -j ACCEPT # در اینجا می توانید قوانین اضافی را برای زنجیره INPUT وارد کنید # سایر موارد را برای INPUT غیرفعال کنید-A INPUT -j REJECT --reject-with icmp6-adm-prohibited # ترتیب و معنای قوانین برای زنجیره های FORWARD و OUTPUT مشابه INPUT است.-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited # فیلتر کردن زنجیره OUTPUT به شدت ممنوع است #-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #-A OUTPUT -p ipv6-icmp -j ACCEPT#-A OUTPUT -o lo -j ACCEPT #-A OUTPUT -j REJECT --reject-with icmp6-adm-prohibitedمرتکب شدن

ما قوانین لازم را با در نظر گرفتن ip6tables-save تکمیل می کنیم.

ذخیره و بستن: Ctrl + O، Enter، Ctrl + X

اسکریپت را اجرایی کنید و قوانین iptables را بارگذاری کنید:

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

قوانین اضافی

در زیر برخی از قوانین نسبتاً رایج استفاده شده است. زنجیره های INPUT/OUTPUT برای فیلتر کردن ترافیک محلی استفاده می شود. برای ترافیک حمل و نقل، باید از زنجیره FORWARD استفاده کنید.

دسترسی از راه دور

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

خدمات وب و فایل

# web.http، web.https -A INPUT -p tcp -m conntrack --ctstate NEW -m چند پورت -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 21 -j ACCEPT

نامه و پیام های فوری

# mail.pop3، mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 110 ,995 -j ACCEPT # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack --ctstate NEW -m چند پورت --dports 143 ,993 -j ACCEPT # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 25 ,465 -j ACCEPT # im.xmpp -A INPUT -p tcp -m conntrack --ctstate NEW -m چند پورت --dports 5222 ,5223 -j ACCEPT # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 5190 -j ACCEPT

خدمات شبکه

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 1194 -j ACCEPT # 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 ACCEPT # درخواست network.dhserver.dhcp.discover-A INPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhclient.dhcp.discover-request #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhserver.dhcp.offer-ack #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT

تست و اشکال زدایی

مشاهده پیکربندی فعلی برای IPv4 و IPv6:

sudo iptables-save sudo ip6tables-save

ورود به سیستم

ردیابی

ماژول های هسته

مشاهده ماژول های بارگذاری شده:

lsmod | grep -E "^ip|^nf" | مرتب سازی

برای بارگیری ماژول های اضافی، استفاده از تکمیل خودکار راحت است: 2x Tab

sudo modprobe nf sudo modprobe modules-load.d

هر کامپیوتر متصل به شبکه در خطر بالقوه است. تهدیدات زیادی در شبکه وجود دارد، از برنامه هایی که سعی می کنند به هر طریقی به سیستم نفوذ کنند و به هکرهایی ختم می شود که می خواهند به رایانه مورد نیاز خود دسترسی پیدا کنند. و نرم افزار نصب شده روی رایانه ممکن است دارای آسیب پذیری های ناشناخته و اصلاح نشده باشد که می تواند به یک حفره امنیتی تبدیل شود.

اگر برای رایانه‌های خانگی این موضوع چندان مرتبط نیست، زیرا آنها از طریق روترها و NAT به شبکه متصل هستند، که آنها را از شبکه خارجی پنهان می‌کند، برای سرورها این موضوع بیش از هر زمان دیگری مرتبط است. در سیستم عامل لینوکس، یک فایروال iptables بسیار منعطف و قابل اعتماد در هسته تعبیه شده است.

با کمک این برنامه است که سیستم از نفوذ خارجی، ارسال پورت و همچنین بسیاری از اقدامات با ترافیک محافظت می شود. اما عیب آن این است که راه اندازی آن کمی سخت است. این مقاله پیکربندی iptables برای dummies را پوشش می دهد. امیدوارم پس از آن بتوانید با اطمینان از ویژگی های اساسی iptables استفاده کنید.

زیرسیستم iptables و Netfilter برای مدت طولانی در هسته لینوکس ساخته شده است. تمام بسته های شبکه ای که از طریق رایانه عبور می کنند، توسط رایانه ارسال می شوند یا برای رایانه ارسال می شوند، هسته از فیلتر iptables عبور می کند. در آنجا این بسته ها تحت بررسی قرار می گیرند و سپس برای هر چک در صورت پاس شدن، اقدامی که در آن مشخص شده انجام می شود. به عنوان مثال، بسته به هسته ارسال می شود تا به برنامه هدف ارسال شود، یا دور انداخته شود.

انواع بسته بندی

همه بسته ها به سه نوع ورودی، خروجی و عبوری تقسیم می شوند. ورودی - آنهایی که به این رایانه ارسال شده اند، خروجی - از این رایانه به شبکه ارسال می شوند. و بسته های عبوری بسته هایی هستند که برای مثال اگر رایانه شما به عنوان روتر عمل می کند فقط باید فوروارد شوند.

بر این اساس، در فیلتر iptables، تمام بسته ها به سه زنجیره مشابه تقسیم می شوند:

  • ورودی- بسته های ورودی و اتصالات را کنترل می کند. به عنوان مثال، اگر یک کاربر خارجی سعی می کند از طریق ssh یا هر وب سایتی به رایانه شما متصل شود، در صورت درخواست مرورگر، محتوای خود را برای شما ارسال می کند. تمام این بسته ها به این زنجیره ختم می شوند.
  • رو به جلو- از این زنجیر برای عبور اتصالات استفاده می شود. این شامل بسته هایی است که به رایانه شما ارسال می شوند، اما برای آن در نظر گرفته نشده اند، آنها به سادگی از طریق شبکه به هدف خود ارسال می شوند. همانطور که گفتم، این در روترها مشاهده می شود یا مثلاً اگر رایانه شما wifi توزیع می کند.
  • خروجی- این زنجیره برای بسته های خروجی و اتصالات استفاده می شود. این شامل بسته هایی می شود که هنگام تلاش برای پینگ کردن یک سایت یا زمانی که مرورگر خود را راه اندازی می کنید و سعی می کنید هر سایتی را باز کنید، ایجاد شده اند.

اما اگر فکر می کنید که می توانید زنجیره ورودی را به طور کامل ببندید تا امنیت را افزایش دهید، سخت در اشتباهید. هنگامی که شبکه در حال اجرا است، از هر دو زنجیره ورودی و خروجی استفاده می شود. به عنوان مثال، شما سعی می کنید پینگ کنید، داده ها از طریق خروجی ارسال می شوند، اما پاسخ از طریق ورودی می آید. هنگام مرور سایت ها و سایر فعالیت ها همین اتفاق می افتد. اما اگر کامپیوتر شما روتر نباشد، ممکن است از زنجیره فوروارد اصلا استفاده نشود. بنابراین پیکربندی iptable ها باید با دقت زیادی انجام شود.

قوانین و اقدامات

قبل از شروع به ایجاد لیستی از قوانین iptables، باید نحوه کار و چیستی آنها را در نظر بگیرید. برای هر نوع بسته می توانید مجموعه ای از قوانین را تعیین کنید که به نوبه خود از نظر انطباق با بسته بررسی می شوند و در صورت مطابقت بسته، عمل مشخص شده در قانون را روی آن اعمال کنید. قوانین یک زنجیره را تشکیل می دهند، بنابراین ورودی، خروجی و جلو را زنجیره ها، زنجیره قوانین می نامند. چندین عمل می تواند وجود داشته باشد:

  • تایید کنید- اجازه دهید بسته در طول زنجیره قوانین بیشتر منتقل شود.
  • رها کردن- بسته را بردارید.
  • رد کنید- رد بسته، پیامی به فرستنده ارسال می شود که بسته رد شده است.
  • ورود به سیستم- یک رکورد از بسته در فایل log ایجاد کنید.
  • صف- ارسال یک بسته به یک برنامه کاربر.

قوانین می توانند هر گونه تطابق را بررسی کنند، به عنوان مثال، از طریق IP، توسط پورت گیرنده یا فرستنده، سرصفحه های بسته، و موارد دیگر. اگر بسته با هیچ یک از قوانین مطابقت نداشته باشد، عمل پیش فرض، معمولا ACCEPT، روی آن اعمال می شود.

وقتی قوانین را فهمیدیم، می‌توانیم به زنجیره‌ها برگردیم. علاوه بر موارد ذکر شده در بالا، دو زنجیره دیگر از قوانین وجود دارد:

  • پیش از مسیریابی- بسته قبل از پردازش iptables وارد این زنجیره می شود، سیستم هنوز نمی داند به کجا ارسال می شود، برای ورودی، خروجی یا ارسال.
  • postrouting- تمام بسته های عبوری که قبلاً زنجیره جلویی را پشت سر گذاشته اند به اینجا می رسند.

اما این همه ماجرا نیست. ما همچنین جداول iptables را داریم که رسیدگی به آنها نیز مطلوب است.

ipatables

بالای زنجیره قوانین در iptable ها، لایه دیگری از انتزاع وجود دارد و آن جداول است. چندین جدول در سیستم وجود دارد و همه آنها دارای یک مجموعه استاندارد از زنجیره های ورودی، جلو و خروجی هستند. از جداول برای انجام اقدامات مختلف بر روی بسته ها مانند اصلاح یا فیلتر کردن استفاده می شود. اکنون این برای شما چندان مهم نیست و کافی است بدانید که فیلترینگ بسته iptables در جدول فیلتر انجام می شود. اما ما نگاهی به همه آنها خواهیم داشت:

  • خام- طراحی شده برای کار با بسته های خام، در حالی که آنها هنوز پردازش نشده اند.
  • خرد کردن- طراحی شده برای اصلاح بسته ها؛
  • nat- اگر می خواهید از رایانه به عنوان روتر استفاده کنید، عملیات nat را ارائه می دهد.
  • فیلتر- جدول اصلی برای فیلتر کردن بسته ها که به طور پیش فرض استفاده می شود.

با تئوری تقریباً همه چیز، اکنون بیایید به ابزار خط فرمان iptables نگاه کنیم، که با آن سیستم iptables مدیریت می شود.

ابزار Iptables

زیرسیستم iptables و netfilter در هسته تعبیه شده‌اند، اما مجموعه‌ای از ابزارهای کمکی برای مدیریت همه اینها همیشه همراه با سیستم ارائه نمی‌شوند. برای نصب ابزار در اوبونتو، تایپ کنید:

sudo apt نصب iptables

در توزیع های مبتنی بر فدورا، نصب iptables کمی متفاوت است:

sudo yum نصب iptables

هنگامی که نصب iptables به پایان رسید، می توانید به پیکربندی ادامه دهید، اما اجازه دهید ابتدا به نحو برنامه کاربردی نگاه کنیم. دستور معمولاً به این صورت است:

-t جدول عمل زنجیره ای گزینه های اضافی

حالا بیایید به گزینه های iptables نگاه کنیم، جدول جدولی را مشخص می کند که با آن کار کنید، این گزینه قابل حذف است، عمل، عمل مورد نظر است، به عنوان مثال، یک قانون ایجاد یا حذف کنید، و گزینه های اضافی عمل و قانون را توصیف می کنند. انجام شود.

باقی مانده است که اقدامات اصلی را که iptables به شما امکان می دهد انجام دهید در نظر بگیرید:

  • - یک قانون به زنجیره اضافه کنید.
  • -از جانب- تمام قوانین را بررسی کنید.
  • -دی- حذف یک قانون؛
  • -من- درج یک قانون با شماره دلخواه؛
  • - نمایش تمام قوانین در زنجیره فعلی.
  • - نمایش تمام قوانین؛
  • -اف- پاک کردن تمام قوانین؛
  • - ایجاد یک زنجیره
  • -ایکس- حذف زنجیره؛
  • - عمل پیش فرض را تنظیم کنید.

گزینه های اضافی برای قوانین:

  • - پروتکل را مشخص کنید، یکی از tcp، udp، udplite، icmp، icmpv6، esp، ah، sctp،
    mh
  • -s- آدرس IP دستگاهی که بسته را ارسال می کند را مشخص کنید.
  • - آدرس IP گیرنده را مشخص کنید.
  • -من- رابط شبکه ورودی؛
  • -o- رابط شبکه خروجی؛
  • -j- در صورت مطابقت قانون، اقدامی را انتخاب کنید.

اکنون می توانیم به نمونه هایی از نحوه پیکربندی iptables برویم.

نمونه های پیکربندی Iptables

ما به چند مثال اساسی نگاه می کنیم تا بتوانید همه چیزهایی را که در بالا خواندید ادغام کنید.

فهرست قوانین

ابتدا، بیایید نحوه جستجوی قوانین iptables را بررسی کنیم، گزینه -L برای این کار کافی است:

همچنین می توانید زنجیره مورد نظر را برای نمایش قوانین فقط برای آن مشخص کنید:

iptables -L INPUT

پاک کردن قوانین

شما نمی توانید iptables را فقط با توقف سرویس به روز رسانی قوانین iptables از طریق systemd یا حتی با حذف مجموعه ابزارهای پیکربندی غیرفعال کنید. زیرسیستم در سطح هسته کار می کند و به چیزی که شما در آنجا نصب کرده اید بستگی ندارد. بنابراین، اگر کار اشتباهی انجام دهید، باید قوانین را پاک کنید. برای انجام این کار، اجرا کنید:

یا فقط برای یک زنجیره خاص:

sudo iptables -F ورودی

یادآوری می کنم که همه این اقدامات برای جدول پیش فرض - فیلتر انجام می شود.

قوانین پیش فرض

همانطور که گفتم، اگر هیچ قانونی با یک بسته مطابقت نداشته باشد، عمل پیش فرض روی آن اعمال می شود. می توان آن را با گزینه -p تنظیم کرد:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p OUTPUT ACCEPT
$ sudo iptables -p FORWARD DROP

در این مثال، زنجیره های INPUT و OUTPUT را فعال می کنیم، اما FORWARD را غیرفعال می کنیم.

مسدود کردن بسته ها

برای مسدود کردن بسته‌ها، می‌توانیم از عمل DROP استفاده کنیم، می‌توانیم بسته‌هایی را که باید مسدود کنیم، با معیارهای زیادی مانند پروتکل، آدرس IP، ماسک شبکه، پورت و موارد دیگر فیلتر کنیم.

این دستور به این صورت خواهد بود که به شما امکان می دهد یک قانون iptables اضافه کنید تا همه بسته های ورودی از 10.10.10.10 را مسدود کنید:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

و اکنون بسته های خروجی به همان آدرس:

مسدود کردن محدوده IP به روشی مشابه انجام می شود. برای این کار باید از netmask 10.10.10.0/24 استفاده کنید. اینها همه آدرس‌ها از 10.10.10.0 تا 10.10.10.255 خواهند بود:

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

یا یک نسخه توسعه یافته از ماسک:

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

همچنین می توانید تمام اتصالات ssh ورودی را مسدود کنید:

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

همانطور که می بینید، اضافه کردن یک قانون iptables بسیار آسان است.

حذف قوانین

حذف قوانین iptables مانند ایجاد قوانین جدید انجام می شود، اما به جای گزینه A، باید از گزینه D استفاده کنید. ابتدا به لیست قوانین نگاه کنید:

به عنوان مثال، به این صورت می توانید قانون iptables را که در مرحله دوم ایجاد شده است حذف کنید:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

همچنین می توانید iptable ها را با اجرای دستور با گزینه -F به طور کامل پاک کنید:

IPTables یک ابزار مدیریت فایروال لینوکس است. این یک ابزار قدرتمند و مفید برای و اتصالات ناخواسته است. کل فرآیند در قوانین iptables پیچیده شده است که می توان آنها را ویرایش و مشاهده کرد. جزئیات بیشتر در مقاله ارائه شده است.

تاریخچه خلقت

قبل از IPTable ها در یک سیستم لینوکس از فایروال IPFW استفاده می کردند که از BSD قرض گرفته شده بود. سپس، از هسته 2.4 لینوکس، فایروال Netfilter و ابزار IPTables برای مدیریت آن ارائه شد. در روش شناسی کار او، تمام جنبه ها حفظ شد و کمی از نظر عملکردی گسترش یافت.

ساختار و ساختار IPTables

هنگامی که یک بسته وارد فایروال می شود، چندین بررسی را انجام می دهد. این می تواند یک چک جمع یا هر تحلیل دیگری در سطح هسته باشد. سپس نوبت به عبور از زنجیره PREROUTING می رسد. در مرحله بعد، مطابق با اینکه تغییر مسیر به زنجیره بعدی انجام می شود، بررسی می شود. اگر بسته آدرسی نداشته باشد، به عنوان مثال، در TCP، آنگاه به زنجیره FORWARD هدایت می شود. در مواردی که آدرس خاصی وجود دارد، زنجیره INPUT و سپس دیمون ها یا خدماتی که برای آن در نظر گرفته شده است، دنبال می شود. پاسخ آنها نیز باید از چندین زنجیره عبور کند، به عنوان مثال OUTPUT. آخرین حلقه در این فرآیند، زنجیره POSTROUTING است.

حالا کمی در مورد زنجیر. هر کدام از آنها شامل چندین جدول است. ممکن است نام آنها تکرار شود، اما این به هیچ وجه روی کار تأثیر نمی گذارد، زیرا آنها به هم مرتبط نیستند.

جداول به نوبه خود حاوی چندین قانون هستند. در واقع یک قانون شرط خاصی است که بسته مورد بررسی باید با آن مطابقت داشته باشد. بسته به نتیجه، عمل خاصی روی بسته انجام می شود.

بنابراین، بسته با عبور از تمام مراحل شبکه، به طور متوالی از تمام زنجیره‌ها بازدید می‌کند و در هر کدام از نظر مطابقت با شرط یک قانون خاص بررسی می‌شود. اگر جدول توسط کاربر ایجاد نشود، عمل پیش فرض انجام می شود، اساساً ACCEPT است که به شما امکان می دهد به حرکت ادامه دهید یا DROP که بسته را متوقف می کند.

زنجیره های از پیش تعیین شده در دسته بندی های زیر قرار می گیرند:

  • پیش پروتینگ. پردازش اولیه همه بسته های دریافتی
  • ورودی. این شامل آن دسته از بسته هایی است که مستقیماً به رایانه محلی هدایت می شوند.
  • رو به جلو. برای "بسته های حمل و نقل" که از جدول مسیریابی پیروی می کنند استفاده می شود.
  • خروجی. برای بسته های خروجی استفاده می شود.
  • پس از استراوتینگ. آخرین مرحله در عبور بسته خروجی از تمام زنجیره ها.

علاوه بر زنجیره های داخلی، کاربران می توانند زنجیره های خود را ایجاد یا حذف کنند.

مشاهده و مدیریت قوانین IPTables

همانطور که قبلا ذکر شد، تمام زنجیره ها دارای شرایط خاصی برای بسته بندی هستند. ابزار IPTables برای مشاهده و مدیریت قوانین IPTables استفاده می شود. هر قانون منفرد یک خط با مجموعه ای از شرایط برای بسته ها و همچنین اقدامات روی آنها بسته به نتیجه است.

فرمت دستور به این شکل است: iptables [-t نام جدولی که باید پردازش شود] دستور فراخوانی [معیارها] [اقدامی که باید انجام شود].

هر چیزی که در آن گنجانده شده است را می توان حذف کرد. اگر پارامتر جدول باشد، از فیلتر استفاده می شود. برای استفاده از یک نام خاص، باید سوئیچ -t را اضافه کنید. فرمان فراخوانی به شما امکان می دهد تا اقدام لازم را فراخوانی کنید، به عنوان مثال، یک قانون IPTables اضافه کنید یا آن را حذف کنید. "معیار" پارامترهایی را مشخص می کند که انتخاب توسط آنها انجام می شود. و در «عمل» عملی اعمال می شود که در صورت احراز شرط انجام شود.

دستورات برای ایجاد و مشاهده قوانین IPTables

  • ضمیمه (-A).هنگام استفاده از دستور، زنجیره و جدولی را که می خواهید قانون مورد نیاز را به آن اضافه کنید، مشخص می کنید. ارزش تیم این است که این کار را در انتهای کل لیست انجام می دهد.
  • حذف شده).همانطور که از نام آن پیداست، قانون را حذف می کند. به عنوان پارامتر، می توانید نام کامل و اعداد اختصاص داده شده به آنها را مشخص کنید.
  • تغییر نام زنجیره (-E).نام زنجیره را تغییر می دهد. دستور نام قدیمی و سپس نام جدید را مشخص می کند.
  • فلاش (-F).پاک کردن کاملاً تمام قوانین یک جدول خاص.
  • درج (-I).این دستور قانون مورد نیاز را در محلی که با عدد مشخص شده درج می کند.
  • لیست (-L).مشاهده قوانین Iptables اگر جدولی مشخص نشده باشد، از فیلتر پیش فرض استفاده می شود.
  • خط مشی (-P).خط مشی پیش فرض برای زنجیره مشخص شده استفاده می شود.
  • (-R) را جایگزین کنید.قانون زیر عدد مشخص شده را به مقدار مورد نیاز تغییر می دهد.
  • حذف زنجیره (-X).این دستور تمام زنجیره های ایجاد شده را حذف می کند. فقط موارد از پیش تعیین شده باقی خواهند ماند.
  • صفر (-Z).شمارنده های داده های ارسال شده در زنجیره مشخص شده را بازنشانی می کند.

کمی در مورد گزینه های انتخاب بسته

آنها را می توان به طور کلی به سه نوع تقسیم کرد:

  • معیارهای عمومی. آنها را می توان برای هر قاعده ای مشخص کرد. آنها نیازی به اتصال افزونه ها و ماژول های خاصی ندارند و همچنین به پروتکل مورد استفاده بستگی ندارند.
  • معیارهای کلی نیستآنها با استفاده از معیارهای عمومی در دسترس قرار می گیرند.
  • صریح.برای استفاده از این نوع، باید پلاگین های مخصوص فیلتر نت را متصل کنید. علاوه بر این، سوئیچ -m باید در دستور استفاده شود.

شایان ذکر است که کمی در مورد پارامترهای مورد استفاده در تجزیه و تحلیل بسته ها صحبت کنیم:

  • پروتکل (-p).پروتکل را نشان می دهد.
  • منبع(-ها).این پارامتر آدرس IP منبعی را که بسته از آن آمده است را مشخص می کند. از چند طریق می توان آن را مشخص کرد. یک میزبان خاص، آدرس یا یک زیرشبکه کامل.
  • مقصد (-d).آدرس مقصد بسته همچنین، مانند مورد قبلی، می توان آن را به چند روش توصیف کرد.
  • رابط داخلی (-i).رابط ورودی بسته را مشخص می کند. عمدتاً برای NAT یا در سیستم هایی با چندین رابط استفاده می شود.
  • رابط خارجی (-o).رابط خروجی

چند نمونه

برای مشاهده قوانین nat IPTables؟ شما باید از دستور - "iptables -L -t nat" استفاده کنید. وضعیت کلی فایروال - "iptables -L -n -v" را بیابید. علاوه بر این، این دستور به شما امکان می دهد قوانین IPTables را که در سراسر سیستم در دسترس هستند مشاهده کنید. قانون را در یک مکان خاص در جدول، به عنوان مثال، بین خط اول و دوم - "iptables -I INPUT 2 -s 202.54.1.2 -j DROP" وارد کنید. سپس ببینید آیا اضافه شده است - "iptables -L INPUT -n --line-numbers".

برای مسدود کردن یک آدرس خاص، به عنوان مثال، 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

راهنما برای iptables - "man iptables". اگر به اطلاعاتی در مورد یک دستور خاص نیاز دارید - "iptables -j DROP -h".

سرانجام

از دستورات IPTables با احتیاط استفاده کنید، زیرا پیکربندی نادرست (ناآگاهانه) می تواند منجر به خرابی شبکه یا شکست کامل آن شود. بنابراین، قبل از پیکربندی، ارزش آن را دارد که کتابچه ها و دستورالعمل ها را با جزئیات مطالعه کنید. در دستان ماهر، IPTables را می توان به محافظ قابل اعتماد اتصالات شبکه تبدیل کرد. مدیران سیستم به طور فعال از این ابزار برای ایجاد اتصالات جدا شده از دسترسی غیرمجاز استفاده می کنند.

در این مقاله نحوه راه اندازی iptables در لینوکس را به شما آموزش خواهیم داد. شما یاد خواهید گرفت که چیست و چرا باید این ویژگی را پیکربندی کنید. راه اندازی iptables در لینوکسبسیار ساده است

راه اندازی iptables در لینوکس: iptables چیست؟

Iptables یک ابزار فایروال خط فرمان است که از خط مشی زنجیره ای برای اجازه یا مسدود کردن ترافیک استفاده می کند. هنگامی که یک اتصال سعی می کند خود را در سیستم شما برقرار کند، iptables به دنبال قانون در لیست خود می گردد تا با آن مطابقت داشته باشد. اگر آن را پیدا نکرد، به عمل پیش فرض متوسل می شود.

Iptables تقریباً همیشه روی هر توزیع لینوکس از پیش نصب شده است. برای به روز رسانی/نصب آن، فقط بسته iptables را دانلود کنید:

sudo apt-get نصب iptables

جایگزین‌های رابط کاربری گرافیکی برای iptable‌ها مانند Firestarter وجود دارد، اما اگر فقط چند دستور را اجرا کنید، iptables چندان دشوار نیست. هنگام تنظیم قوانین iptables بسیار مراقب باشید، به خصوص اگر از SSH'd در سرور استفاده می کنید، زیرا یک دستور اشتباه می تواند شما را برای مدت طولانی قفل کند تا زمانی که به صورت دستی به ماشین فیزیکی متعهد شود.

راه اندازی iptables در لینوکس برای dummies

به هر حال، قبلاً در مورد آن صحبت کردیم. شاید این مورد نیز برای شما جالب باشد. لینک را می توان در بالا یافت.

راه اندازی iptables در لینوکس، همانطور که در بالا گفتیم، بسیار ساده است. اما قبل از شروع راه اندازی، باید با مفاهیم کلی گزینه آشنا شوید.

انواع مدار

Iptables از سه زنجیره مختلف استفاده می کند: ورودی، ارسال و خروجی.

ورودی- از این زنجیره برای کنترل رفتار اتصالات ورودی استفاده می شود. به عنوان مثال، اگر کاربری سعی کند SSH را به دستگاه/سرور شما وارد کند، iptables سعی می کند آدرس IP و پورت را با قانون موجود در زنجیره ورودی مطابقت دهد.

رو به جلو- این زنجیره برای اتصالات ورودی که در واقع به صورت محلی تحویل داده نمی شوند استفاده می شود. به روتر فکر کنید - داده ها همیشه به آن ارسال می شوند، اما به ندرت به مقصد خود روتر ارسال می شوند. داده ها به سادگی به صفحه فرود هدایت می شوند. تا زمانی که در حال انجام نوعی مسیریابی، NAT یا هر چیز دیگری در سیستم خود باشید که نیاز به فوروارد دارد، حتی از این زنجیره استفاده نخواهید کرد.

یک راه قابل اعتماد برای بررسی اینکه آیا سیستم شما از زنجیره مستقیم استفاده می کند یا نیاز دارد وجود دارد.

این اسکرین شات مربوط به سروری است که چند هفته است کار می کند و هیچ محدودیتی برای اتصالات ورودی یا خروجی ندارد. همانطور که می بینید، زنجیره ورودی 11 گیگابایت بسته و زنجیره خروجی 17 گیگابایت پردازش می کند. از طرف دیگر، زنجیره فوروارد نیازی به پردازش یک بسته واحد ندارد. این به این دلیل است که سرور هیچ ارسالی را انجام نمی دهد یا به عنوان یک دستگاه عبور استفاده نمی شود.

خروجی - این زنجیره برای اتصالات خروجی استفاده می شود. به عنوان مثال، اگر می‌خواهید یک سایت linuxinsider را پینگ کنید، iptables زنجیره خروجی آن را بررسی می‌کند تا ببیند چه قوانینی برای پینگ و linuxinsider اعمال می‌شود قبل از تصمیم‌گیری برای اجازه یا رد تلاش برای اتصال.

هشدار

حتی اگر بررسی میزبان خارجی به نظر چیزی است که فقط باید در امتداد زنجیره خروجی پیمایش شود، به خاطر داشته باشید که زنجیره ورودی نیز برای برگرداندن داده ها استفاده خواهد شد. هنگام استفاده از iptables برای قفل کردن سیستم خود، به یاد داشته باشید که بسیاری از پروتکل ها به ارتباط دو طرفه نیاز دارند، بنابراین هر دو زنجیره ورودی و خروجی باید به درستی پیکربندی شوند. SSH یک پروتکل رایج است که افراد فراموش می کنند در هر دو زنجیره اجازه دهند.

رفتار خط مشی پیش فرض

قبل از شروع به پیکربندی قوانین خاص، باید تصمیم بگیرید که رفتار پیش‌فرض این سه زنجیره چگونه باشد. به عبارت دیگر، اگر اتصال با قوانین موجود مطابقت نداشته باشد، می خواهید iptables چه کاری انجام دهد؟

برای مشاهده اینکه کدام زنجیره سیاست برای مدیریت ترافیک پشت سر هم پیکربندی شده است، دستور iptables -L را اجرا کنید.

همانطور که می بینید، ما از دستور grep نیز برای به دست آوردن نتیجه تمیزتر استفاده کردیم. در این اسکرین شات، زنجیره های ما در حال حاضر برای دریافت ترافیک اندازه شده اند.

بیشتر اوقات، شما می خواهید سیستم شما به طور پیش فرض اتصالات را بپذیرد. اگر قبلاً قوانین زنجیره سیاست را تغییر نداده اید، این تنظیم باید قبلاً پیکربندی شده باشد. در هر صورت، در اینجا دستور پذیرش اتصالات پیش فرض وجود دارد:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

به طور پیش‌فرض در یک قانون پذیرش، می‌توانید از iptables برای رد کردن آدرس‌های IP یا شماره پورت‌های خاص استفاده کنید و در عین حال به پذیرش همه اتصالات دیگر ادامه دهید. یک دقیقه دیگر به آن دستورات می رسیم.

اگر ترجیح می‌دهید همه اتصالات را رد کنید و به صورت دستی مشخص کنید که کدام یک می‌خواهید اجازه اتصال را بدهد، باید خط‌مشی پیش‌فرض مدارهای خود را برای رد تغییر دهید. این احتمالاً فقط برای سرورهایی که اطلاعات حساس را در اختیار دارند مفید خواهد بود و فقط به همان آدرس های IP متصل می شود.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

پاسخ های اتصال

با پیکربندی خط‌مشی‌های زنجیره پیش‌فرض، می‌توانید قوانینی را به iptables اضافه کنید تا بدانید وقتی با یک اتصال با یک آدرس IP یا پورت خاص مواجه می‌شود، چه کاری باید انجام دهید. در این راهنما، ما به سه مورد از رایج ترین و پرکاربردترین «پاسخ»ها خواهیم پرداخت.

تایید کنید- اجازه اتصال را بدهید.

رها کردنارتباط را رها کنید، طوری رفتار کنید که انگار هرگز اتفاق نیفتاده است. اگر نمی خواهید منبع از وجود سیستم شما مطلع شود، این بهترین کار است.

رد کردن- اتصال را رد کنید، اما یک پیام خطا ارسال کنید. اگر نمی خواهید منبع خاصی به سیستم شما متصل شود، اما می خواهید بدانند که فایروال شما آنها را مسدود کرده است، بهتر است.

بهترین راه برای نشان دادن تفاوت بین این سه قانون این است که نشان دهیم زمانی که یک کامپیوتر سعی می کند یک ماشین لینوکس را با iptable های پیکربندی شده برای هر یک از این گزینه ها پینگ کند، چگونه به نظر می رسد.

مجوز اتصال:

حذف اتصال:

رد اتصال:

یک نت ماسک یا مشخصه برای تعیین محدوده ای از آدرس های IP.

راه اندازی iptables در لینوکس: روش های اتصال

اگر در مورد "تنظیم iptables در لینوکس" صحبت می کنیم، باید در مورد روش های اتصال صحبت کنیم.

اتصالات خاص را مجاز یا مسدود کنید
با سیاست‌های پیکربندی‌شده، می‌توانید iptable‌ها را برای اجازه یا مسدود کردن آدرس‌ها، محدوده‌های آدرس و پورت‌های خاص پیکربندی کنید. در این مثال‌ها، ما اتصالات را به DROP راه‌اندازی می‌کنیم، اما می‌توانید بسته به نیازتان و نحوه تنظیم زنجیره‌های خط‌مشی خود، آنها را به ACCEPT یا REJECT تغییر دهید.

توجه داشته باشید. در این مثال‌ها، از iptables -A برای اضافه کردن قوانین به یک زنجیره موجود استفاده می‌کنیم. Iptables از بالای لیست شروع می شود و از هر قانون عبور می کند تا زمانی که یکی را پیدا کند که با آن مطابقت دارد. اگر نیاز به درج یک قانون در بالای قانون دیگر دارید، می توانید از iptables -I برای تعیین عددی که باید در لیست باشد استفاده کنید.

اتصالات از همان آدرس IP

این مثال نحوه مسدود کردن تمام اتصالات از آدرس IP 10.10.10.10 را نشان می دهد.

iptables -A INPUT -s 10.10.10.10 -j DROP

اتصالات از طیف وسیعی از آدرس های IP

این مثال نحوه مسدود کردن تمام آدرس های IP در محدوده شبکه 10.10.10.0/24 را نشان می دهد. شما می توانید از یک netmask یا یک اسلش رو به جلو استاندارد برای تعیین محدوده ای از آدرس های IP استفاده کنید.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

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

اتصالات به یک پورت خاص

این مثال نحوه مسدود کردن اتصالات SSH به 10.10.10.10 را نشان می دهد.

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

شما می توانید "ssh" را با هر پروتکل یا شماره پورتی جایگزین کنید. قسمت -p tcp کد به iptable ها می گوید که پروتکل از کدام اتصال استفاده می کند. اگر پروتکلی را مسدود کرده اید که از UDP به جای TCP استفاده می کند، به جای آن -p udp مورد نیاز است.

این مثال نحوه مسدود کردن اتصالات SSH را از هر آدرس IP نشان می دهد.

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

حالت های اتصال

همانطور که قبلا ذکر کردیم، بسیاری از پروتکل ها نیاز به ارتباط دو طرفه دارند. به عنوان مثال، اگر می خواهید به اتصالات SSH به سیستم خود اجازه دهید، زنجیره های ورودی و خروجی نیاز به یک قانون دارند که به آنها اضافه شود. اما، اگر بخواهید ورود SSH به سیستم شما مجاز باشد، چه؟ آیا اضافه کردن قانون به زنجیره خروجی منجر به تلاش های خروجی SSH نمی شود؟

اینجاست که حالت‌های اتصال وارد می‌شوند، که به شما این امکان را می‌دهند که به ارتباط دو طرفه اجازه دهید، اما فقط اجازه می‌دهد تا اتصالات یک طرفه برقرار شود. به این مثال نگاه کنید، جایی که اتصالات SSH از 10.10.10.10 مجاز هستند، اما اتصالات SSH به 10.10.10.10 مجاز نیستند. با این حال، سیستم مجاز است اطلاعات را از طریق SSH در حالی که جلسه از قبل برقرار است، ارسال کند، که ارتباط SSH را بین دو میزبان ممکن می‌سازد.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESABLISHED -j ACCEPT

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

ذخیره سازی تغییرات

تغییراتی که در قوانین iptables ایجاد می‌کنید دفعه بعد که سرویس iptables مجدداً راه‌اندازی می‌شود، برگردانده می‌شوند، مگر اینکه فرمان ذخیره تغییرات را صادر کنید. این دستور ممکن است بسته به توزیع شما متفاوت باشد:

sudo /sbin/iptables-save

Red Hat/CentOS:

/sbin/service iptables ذخیره می کند

/etc/init.d/iptables ذخیره کنید

دستورات دیگر

لیست قوانین iptables پیکربندی شده فعلی:

افزودن گزینه -v اطلاعاتی در مورد بسته ها و بایت ها به شما می دهد و افزودن -n شامل تمام مقادیر عددی خواهد بود. به عبارت دیگر، نام هاست، پروتکل ها و شبکه ها به عنوان اعداد فهرست می شوند.

برای پاک کردن تمام قوانین پیکربندی شده فعلی، می‌توانید دستور flush را صادر کنید.

ترجمه از یک منبع عالی انگلیسی HowToGeek.

اگر هنوز سؤالی در مورد موضوع "تنظیم iptables در لینوکس برای dummies" دارید، می توانید آنها را در فرم نظر در وب سایت ما بنویسید.

اگر خطایی پیدا کردید، لطفاً قسمتی از متن را برجسته کرده و کلیک کنید Ctrl+Enter.

برترین مقالات مرتبط