iptables
در این مقاله به بررسی IP Tables و نحوه کار آن خواهیم پرداخت اما قبل از آن به بررسی تعاریفی میپردازیم که به شما در فهم IP Tables کمک میکند.
netfilter چیست؟
netfilter یکی از ماژولهای کرنل لینوکس که وظیفه آن مدیریت ترافیک نتورک می باشد و در واقع پکتها، سورس ها، آیپیها، پورت ها، ترافیک و کانکشنهای ما را مدیریت میکند و ابزاری به اسم iptables قابلیت مدیریت این ماژول را به ما میدهد.
iptables چیست؟
میتوان اینطور گفت که Iptables یک ابزار فایروال بسیار انعطاف پذیر است که برای سیستم عامل های لینوکس ساخته شده است و به عنوان یک ابزار فایروال خط فرمان از سیاست های تعریف شده برای اجازه یا مسدود کردن ترافیک استفاده می کند. iptables برای مدیریت ماژول netfilter استفاده میشود.
توجه کنید که اگر از Firewalld استفاده میکنید، قبل از شروع فرایند نصب، باید آن را غیرفعال کنید. برای غیرفعالکردن Firewalld، از دستورهای زیر استفاده کنید:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask firewalld
برای به نصب iptables در سیستم عامل های Debian Based ، میتوانید از دستور زیر استفاده کنید:
sudo apt-get install iptables iptables-persistent -y
sudo systemctl enable netfilter-persistent.service
sudo systemctl start netfilter-persistent.service
sudo systemctl status netfilter-persistent.service
در سیستم عامل های redhat based مانند Rocky Linux و AlmaLinux و CentOS Stream، از دستور زیر استفاده کنید:
sudo dnf install iptables-services -y
sudo systemctl enable iptables
sudo systemctl start iptables
sudo systemctl status iptables
نکته: برای دسترسی iptables باید قدرت دسترسی root باشد.
iptables ها دارای چهار component اصلی هستند که عبارتند از 1. جداول (Tables) 2. زنجیره ها (Chains) 3. قوانین (rules) و چهارمین آن target می باشد در واقع به این صورت می باشد که iptables ها دارای یک سری Tables هستند که ترافیک ورودی و خروجی سرور با استفاده از آن (tables) مانیتور می شود و داخل همان Tables یک سری Chains وجود دارد و همچنین قوانینی که در Chains و برای target های مختلف نوشته می شود .
که در زیر به بررسی component های iptables خواهیم پرداخت ( برای کمک به فهم بهتر شما ابتدا chains را بررسی میکنیم و سپس به بررسی tables می پردازیم).
زنجیرهها (Chains) :
هر جدول از چندین زنجیره تشکیل شده است که قوانین را برای پکت های ورودی، خروجی، یا فوروارد شده اعمال می کنند. زنجیره ها عبارتند از:
Pre-routing .1:
این Chain به هر پکت ورودی (بعد از ورود به شبکه) قبل از آنکه به سرور برسد که در مورد مسیریابی در خصوص مقصد نهایی بسته پردازش می شود.
Input Chain .2:
Input Chain در نقطه ورود به شبکه قرار میگیرد و وارد سرور رسیده است و قوانین را اجرا میکند.
Forward Chain .3:
Forward Chain به نقطهای میگویند که پکت ازطریق سیستم شما به مقصد ارسال شود.(مانند گذرگاه بسته از یک شبکه به شبکه دیگر است) که قبل از input و بعد از output قرار میگیرد.
Output Chain .4:
Output Chain به نقطهای میگویند که پکت از سیستم شما عبور میکند و خارج میشود تا به مقصد برسد.
Post-routing .5:
Post-routing کاملاً برعکس Pre-routing است و پکتها بعد از تصمیمگیری درباره مقصد، وارد این زنجیره میشوند.
جداول (Tables):
iptables از چندین جدول استفاده میکند که هر کدام قوانین مختلفی را اعمال میکنند که در تصویر زیر چهار نمونه از آنها را می بینید نکته مهم این است که همه table ها همه chain ها را ساپورت نمیکند.
جدول فیلتر(Filter Table) :
این جدول پیش فرض است و برای تعیین سیاست های دسترسی به کار میرود. در واقع هنگام استفاده از IPTables، اگر موقع ایجاد قوانین به جدول خاصی اشاره نکنیم، آن قوانین در جدول فیلتر اِعمال می شوند و در نهایت، این Filter Table است که تصمیم می گیرد درخواست بسته ها را رد کند یا اجازه دهد که به مقصد نهایی شان برسند و همان طور که در تصویر بالا میبینید سه chain مربوط به input, output, forward را ساپورت میکند.
جدولNAT :
یکی دیگر از جداول IPTables است که به کاربران اجازه میدهد آدرسهای شبکه را تعیین کنند و برای تغییر آدرسهای IP مورد استفاده قرار میگیرد. این جدول مشخص میکند که مبدأ و مقصد آدرس پکت به تغییر نیاز دارد یا خیر و chain های مربوط به prerouting , postrouting و output را ساپورت میکند.
جدول Mangle :
برای تغییر برخی از قسمت های پکت ها استفاده می شود و در واقع Manage Table به شما این امکان را میدهد تا IP هِدِر پکت ها را تغییر دهید و همه پنج chain را ساپورت میکند
جدول Raw :
برای مشخص کردن پکت هایی که نباید توسط مکانیزم ردیابی اتصالات پردازش شوند و chain های مربوط به prerouting و output را ساپورت میکند.
جدول Security :
این جدول که در تصویر بالا نیست نیز برای اعمال برچسب های امنیتی SELinux به پکت ها استفاده می شود و همانند فیلتر , chain های input, output, forward را ساپورت میکند.
نکته: جدول RAW و جدول Security جزو جداول اصلی نیستند و چندان بهکار گرفته نمیشوند.
قوانین (rules) :
در هر زنجیره، قوانین مختلفی تعریف می شوند که تعیین می کنند چه اتفاقی برای پکت های مطابق با شرایط مشخص شده باید بیفتد. این قوانین میتوانند پکت ها را برگشت (return ), مجاز (accept), مسدود (drop), رد کردن (reject )و به زنجیره ای دیگر ارجاع دهند (JUMP).
زنجیره ها بسته ها را بر اساس قوانین تعریف شده بررسی میکنند. اگر یک قانون شرط را برآورده نکرد، به قانون بعدی منتقل می شود و اگر شرط را برآورده کرد، قانون بعدی با مقدار هدف مشخص میشود. هر قانون دارای دو جزء Matching Component و Target Component است.
قانون Matching Component
تطبیق شرایط مختلف برای تعریف قوانینی با پروتکل، آدرس IP، آدرس پورت،,رابط ها و هدر هستند.
قانون Target Component
کار اصلی این بخش پس از تطبیق شرایط آغاز میشود.
شکل کلی دستور Iptables :
iptables -t (table) (action) (chain) (rule) -j (target)
(action):
–A قانون جدیدی به زنجیره (در انتهای Chain) میافزاید.
–C برطرفکردن الزامات زنجیره ازطریق قانون (Rule) را بررسی میکند.
–D به کاربران اجازه میدهد تا یک Rule موجود را از زنجیره (Chain) حذف کنند.
–F قانونهای تعریفشده کاربران را حذف میکند.
–I به کاربران اجازه میدهد تا قانون جدیدی به پوزیشن مشخصشده اضافه کنند.
–N زنجیره کاملاً جدیدی ایجاد میکند.
–V زمانیکه با گزینه لیست استفاده میشود، اطلاعات دقیقی دراختیار کاربر قرار میدهد.
–X زنجیره را حذف میکند.
اگر قصد دارید از تمامی آپشنهای فوق استفاده کنید، لازم است به ترتیب زیر وارد شوند:
با انجام یک مثال در زیر استفاده از iptables را بهتر درک خواهید کرد:
مثال: فرض کنید می خواهیم دسترسی هر پکتی که توسط آی پی 2.2.2.2 از eth1 وارد شده را به پورت 22 ببندیم که
برای این کار از دستور زیر استفاده خواهیم کرد.
iptables -t filter -A INPUT -i eth1 -s 2.2.2.2 --dport 22 -j reject
در دستور بالا منظور از s- آدرس مبدا ما و dport– نیز پورت مقصد ما می باشد.
لینک ویدئو این آموزش در یوتیوب:
لینک چنل یوتوب:
https://www.youtube.com/@linuxacademyir
اینستاگرام:
https://www.instagram.com/linuxacademy.ir
لینکدین:
https://www.linkedin.com/in/taleghanipv
تلگرام: