معرفی کاربرد و روش کار با ابزار iptables در لینوکس

ابزار IPTables

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

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

محدود کردن ترافیک ورودی و خروجی: ابزار iptables به شما اجازه می‌دهد مثلا ترافیک از آدرس‌های خاص یا پروتکل‌های خاص (مثل HTTP، SSH) را مسدود یا مجاز کنید.

حفاظت از سرور: می‌توانید با استفاده از ابزار iptables از حملات مختلفی مانند DDoS، Port Scanning و Brute-force جلوگیری کنید.

ردیابی و نظارت بر ترافیک: همچنین با استفاده از این دستور امکان مشاهده و ردیابی ترافیک عبوری از سیستم را خواهید داشت.

NAT (Network Address Translation): می‌توانید از iptables برای NAT استفاده کنید تا آدرس‌های IP خصوصی به آدرس‌های عمومی ترجمه شوند.

ایجاد VPN و مسیریابی پیشرفته: برای راه‌اندازی VPN یا مسیریابی پیشرفته در شبکه می‌توان از ابزار iptables استفاده کرد.

ساختار کلی قوانین در ابزار iptables

iptables قوانین را به صورت زنجیره‌ای از قوانین در سه جدول اصلی دسته‌بندی می‌کند:

filter table: این جدول برای فیلتر کردن ترافیک استفاده می‌شود و شامل زنجیره‌های INPUT، OUTPUT و FORWARD است.

nat table: برای ترجمه آدرس شبکه (NAT) استفاده می‌شود و شامل زنجیره‌های PREROUTING، POSTROUTING و OUTPUT است.

mangle table: برای تغییر بسته‌ها (مانند تغییر TTL یا تغییر کیفیت سرویس) به کار می‌رود.

مفهوم زنجیره (Chain) در iptables

یک زنجیره مجموعه‌ای از قوانین است که به ترتیب بر روی بسته‌های داده اعمال می‌شوند. وقتی یک بسته وارد زنجیره می‌شود، iptables آن را با قوانین موجود در زنجیره مقایسه می‌کند و بر اساس اولین قانونی که با آن مطابقت دارد، عمل مورد نظر (مانند ACCEPT یا DROP) را انجام می‌دهد.

زنجیره‌های اصلی در ابزار iptables

ابزار iptables دارای چند زنجیره پیش‌فرض است که هر کدام وظیفه خاصی در مدیریت ترافیک شبکه دارند:

INPUT Chain (ورودی)

این زنجیره مسئول کنترل بسته‌هایی است که به سیستم وارد می‌شوند. مثلاً وقتی کسی می‌خواهد از بیرون به سرور SSH وصل شود، بسته‌های این درخواست ابتدا وارد زنجیره INPUT می‌شوند. مثالا می‌توانید قانونی اضافه کنید که فقط بسته‌های SSH (پورت 22) را بپذیرد و بقیه را مسدود کند.

OUTPUT Chain (خروجی)

این زنجیره برای بسته‌هایی که از سیستم خارج می‌شوند استفاده می‌شود. اگر سرور شما بخواهد به یک وب‌سایت متصل شود، ترافیک خروجی ابتدا از زنجیره OUTPUT عبور می‌کند.
مثالا می‌توانید قانونی ایجاد کنید که فقط اجازه خروجی به پورت 80 (HTTP) را بدهد.

FORWARD Chain (عبوری)

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

زنجیره‌های دیگر (PREROUTING, POSTROUTING)

این زنجیره‌ها بیشتر در جداول NAT و Mangle استفاده می‌شوند و برای تغییر مسیر بسته‌ها قبل یا بعد از مسیریابی استفاده می‌شوند. فرض کنید می‌خواهید بسته‌های ورودی به سرور را کنترل کنید در این حالت مراحل زیر انجام خواهد شد:

یک درخواست HTTP از بیرون به سرور شما ارسال می‌شود.
این درخواست به زنجیره INPUT وارد می‌شود.
در زنجیره INPUT، قوانین یکی‌یکی بررسی می‌شوند:
قانون اول می‌گوید اگر بسته از IP خاصی باشد، آن را رد کن (DROP).
قانون دوم می‌گوید اگر بسته برای پورت 80 باشد، آن را بپذیر (ACCEPT).
اگر بسته با هیچ قانونی مطابقت نداشته باشد، سیاست پیش‌فرض زنجیره اعمال می‌شود (مثلاً ACCEPT یا DROP).

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

روش کار با ابزار iptables

مشاهده قوانین فعلی

کار با ابزار IPTables

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

iptables -L -v -n

-L: نمایش قوانین زنجیره‌های فعلی
-v: نمایش جزئیات بیشتر
-n: نمایش آدرس‌ها به صورت عددی

افزودن قانون

به عنوان مثال برای افزودن قانون جدید به زنجیره INPUT که دسترسی به پورت 80 (HTTP) را مجاز می‌کند میتوانید به صورت زیر عمل کنید:

iptables -A INPUT -p tcp –dport 80 -j ACCEPT

-A INPUT: افزودن قانون به زنجیره INPUT
-p tcp: اعمال قانون برای پروتکل TCP
–dport 80: مشخص کردن پورت مقصد 80
-j ACCEPT: اجرای اقدام ACCEPT یعنی اجازه دادن

حذف قانون با ابزار iptables

برای حذف یک قانون مشخص از زنجیره INPUT به صورت زیر عمل میکنیم:

iptables -D INPUT 1

-D INPUT: حذف قانون از زنجیره INPUT
1: شماره قانون (که می‌توانید از iptables -L –line-numbers پیدا کنید)

مجاز کردن ترافیک SSH با استفاده از ابزار iptables

برای مجاز کردن ترافیک SSH (پورت 22) با استفاده از ابزار iptables به صورت زیر میتوان عمل کرد:

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

مسدود کردن ترافیک از یک IP خاص

برای مسدود کردن تمامی ترافیک از یک IP خاص به صورت زیر عمل میکنیم:

iptables -A INPUT -s 192.168.1.100 -j DROP

-s 192.168.1.100: اعمال قانون برای ترافیک از IP مشخص‌شده

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

برای ذخیره قوانین هم به صورت زیر عمل میکنیم:

service iptables save

برای بارگذاری مجدد قوانین هم میتوان از دستورات زیر استفاده کرد:

service iptables restart

نکات مهم در کار با ابزار iptables

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

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

روش‌های ذخیره تنظیمات iptables

روش اول استفاده از iptables-save و iptables-restore

این روش برای ذخیره‌سازی و بارگذاری قوانین iptables با استفاده از ابزارهای iptables-save و iptables-restore به‌کار می‌رود.

ذخیره قوانین

با اجرای دستور زیر، قوانین فعلی iptables را در یک فایل ذخیره کنید (مثلاً در /etc/iptables/rules.v4):

sudo iptables-save > /etc/iptables/rules.v4

بارگذاری قوانین هنگام بوت

برای بارگذاری قوانین ذخیره شده، می‌توانید از دستور iptables-restore استفاده کنید. همچنین می‌توانید آن را به یک اسکریپت اضافه کنید که در هنگام بوت سیستم اجرا شود.

مثلاً دستور زیر را در یک اسکریپت startup قرار دهید:

sudo iptables-restore < /etc/iptables/rules.v4

روش دوم استفاده از سرویس‌های iptables

در برخی از توزیع‌های لینوکس، می‌توانید از سرویس‌های iptables برای ذخیره و بارگذاری خودکار استفاده کنید.

ذخیره قوانین با استفاده از سرویس

برای ذخیره قوانین فعلی، از دستور زیر استفاده کنید:

sudo service iptables save

یا در برخی از سیستم‌ها ممکن است دستور زیر استفاده شود:

sudo /usr/libexec/iptables/iptables.init save

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

سرویس iptables به‌طور خودکار هنگام بوت سیستم فعال می‌شود و تنظیمات ذخیره شده را بارگذاری می‌کند. مطمئن شوید که این سرویس فعال است:

sudo systemctl enable iptables

روش سوم استفاده از اسکریپت‌های خودکار در /etc/rc.local

می‌توانید دستورات iptables-restore را به فایل /etc/rc.local اضافه کنید تا هنگام بوت اجرا شوند.

ویرایش فایل /etc/rc.local:

ابتدا فایل /etc/rc.local را باز کنید:

sudo nano /etc/rc.local

افزودن دستور بارگذاری:

این خط را اضافه کنید:

/sbin/iptables-restore < /etc/iptables/rules.v4

فایل را ذخیره کرده و خارج شوید. سیستم حالا در هر بار بوت، تنظیمات iptables را بارگذاری می‌کند.

با استفاده از این روش‌ها می‌توانید مطمئن شوید که تنظیمات iptables شما پس از هر ری‌استارت سیستم حفظ می‌شوند.