آموزش IPTables در لینوکس
در این مقاله میخوانید
اگر تابهحال با کامپیوتر کار کرده باشید، بهاحتمال فراوان نام واژه «فایروال» را شنیدهاید. در این مقاله از آموزش لینوکس بلاگ پارس پک، قصد داریم درباره فایروال IPTables در لینوکس بهطورمفصل صحبت کنیم و نحوه استفاده از دستورهای اولیه و اساس کار با آن را برایتان شرح دهیم.
IPTables چیست؟
IPTables فایروالی قوی و رایگان در سیستمعامل لینوکس است که شبکههای ایمن و غیرایمن را مشخص و از سیستم دربرابر پکتهای مخرب محافظت میکند. در حالت عادی، شما اختیاراتی برای تنظیم قوانین فایروال خود خواهید داشت؛ اما برای نظارت بیشتر روی بستههای ورودیوخروجی، به IPTables نیاز دارید. با استفاده از IPTables، میتوانید قوانینی را برای پکتهای شبکه ورودیوخروجی اِعمال کنید؛ قوانینی که روی پکتها نظارت و آنها را مجاز (Allow) یا مسدود میکنند.
خرید سرویس لینوکس با قابلیت نصب فایروال
از این مقاله میتوانید برای مدیریت سرویسهای لینوکسی خود استفاده کنید و اگر قصد خرید سرور لینوکس پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، میتوانید جهت کسب اطلاعات بیشتر به لینکهای زیر مراجعه کنید.
آشنایی با مفاهیم IPTables
پس از آشنایی با فایروال IPTables، بهتر است اطلاعاتی نیز درباره مفاهیم اصلی و مهم آن کسب کنیم. درادامه، سه اصطلاح اصلی مربوط به این فایروال شامل جدولها (Tables) و زنجیرهها (Chains) و قوانین (Rules) را معرفی میکنیم.
۱. جداول (Tables) در IPTables
در این فایروال، پنج نوع جدول وجود دارد که هرکدام از آنها، قوانین متفاوتی را اِعمال میکنند. درادامه، این جداول را معرفی میکنیم.
۱. جدول فیلتر (Filter Table)
هنگام استفاده از IPTables، جدول اصلی و پیشفرض Filter Table نام دارد. بهطورکلی، وقتی موقع ایجاد قوانین به جدول خاصی اشاره نکنید، آن قوانین در جدول فیلتر اِعمال میشوند. درنهایت، این Filter Table است که تصمیم میگیرد درخواست بستهها را رد کند یا اجازه دهد که به مقصد نهاییشان برسند.
NAT .۲ (مخفف Network Address Translation)
NAT یکی دیگر از جداول IPTables است که به کاربران اجازه میدهد تا ترجمه آدرسهای شبکه را تعیین کنند. این جدول مشخص میکند که مبدأ و مقصد آدرس پکت به تغییر نیاز دارد یا خیر.
Manage Table .۳
Manage Table به شما امکان میدهد تا IP هِدِر پکتها را تغییر دهید.
۴. جدول RAW
RAW Table کانکشنها را ردیابی میکند. این جدول مکانیزمی نیز برای نشانهگذاری پکتها بهمنظور مشاهده آنها بهعنوان بخشی از یک Session دارد.
۵. جدول امنیتی
جدول امنیتی (Security Table) جدولی است که با استفاده از آن کاربران میتوانند علائم امنیتی SELinux داخلی را بر پکتهای شبکه اعمال کنند.
شایان ذکر است که معمولاً سه جدول ابتدایی بهعنوان جداول اصلی استفاده میشوند و جدول RAW و جدول امنیتی جزو جداول اصلی نیستند و چندان بهکار گرفته نمیشوند.
۲. زنجیرهها (Chains) در IPTables
با استفاده از زنجیرهها، میتوانید قوانین را اِعمال کنید. در IPTables، پنج نوع Chain وجود دارد. ناگفته نماند صرفاً تمام زنجیرهها برای تمامی جداول موجود نیستند. درادامه، انواع زنجیرهها در IPTables را معرفی میکنیم.
Pre-routing .۱
این Chain به هر پکت ورودی (بعد از ورود به شبکه) مربوط است و فرایند تصمیمگیری برای مقصد نهایی پکتها در همین زنجیره انجام میشود.
Input Chain .۲
Input Chain به نقطهای میگویند که پکت به پشته شبکه (Network Stack) وارد شود.
Forward Chain .۳
Forward Chain به نقطهای میگویند که پکت ازطریق سیستم شما به مقصد ارسال شود.
Output Chain .۴
Output Chain به نقطهای میگویند که پکت از سیستم شما عبور میکند و خارج میشود تا به مقصد برسد.
Post-routing .۵
Post-routing کاملاً برعکس Pre-routing است و پکتها بعد از تصمیمگیری درباره مقصد، وارد این زنجیره میشوند.
۳. قوانین (Rules) در IPTables
بعد از معرفی جدولها و زنجیرهها، نوبت به قوانین میرسد. قوانین در IPTables درمقایسهبا جدولها و زنجیرهها پیچیدگی کمتری دارند. Ruleها پکتهای دریافتی را باتوجهبه قوانین اِعمالشده بررسی میکنند. درواقع، این قوانین هستند که نوع رفتار با پکتها را تعیین میکنند.
اگر قانونی شرط مشخصشده را روی پکت اجرا نکرد، پکت به Rule بعدی میرود؛ اما درصورتیکه شرط روی پکت اجرا شود، Rule بعدی با میزان هدف (Target) مشخص خواهد شد. هر Rule دو جزء دارد: یکی Matching Component (جزء تطبیق) و دیگری Target Component (جزء هدف).
Matching Component .۱
این جزء شامل شرایط مختلفی برای تعریف Ruleها است. این قوانین میتوانند با پروتکل، آدرس IP، آدرس پورت، رابطها و سربرگها مطابقت داشته باشند.
Target Component .۲
جزء هدف موارد بعد از اِعمال شرط یا شرایط روی پکتها را شامل میشود. درواقع، کار اصلی Target Component بعد از اِعمال شرایط آغاز خواهد شد.
نصب فایروال IPTables در لینوکس
در توزیعهای لینوکس مدرن مثل Pop!_OS ،IPTables از گذشته نصب شده است. اگر سیستمتان این فایروال را ندارد، بهراحتی میتوانید آن را با کمک دستورالعملهای موجود نصب کنید. برای نصب IPTables روی توزیعهای لینوکس مبتنیبر RHEL مانند Rocky Linux و AlmaLinux و CentOS Stream، از دستور dnf زیر استفاده کنید:
$ sudo dnf install iptables-services
توجه کنید که اگر از Firewalld استفاده میکنید، قبل از شروع فرایند نصب، باید آن را غیرفعال کنید. برای غیرفعالکردن Firewalld، از دستورهای زیر استفاده کنید:
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld $ sudo systemctl mask firewalld
برای نصب IPTables روی توزیعهای لینوکس مبتنیبر دبیان، از دستور apt زیر استفاده کنید:
$ sudo apt install iptables
بعد از نصب IPTables، میتوانید فایروال را با استفاده از دستورهای زیر فعال کنید:
$ sudo systemctl enable iptables $ sudo systemctl start iptables
برای نظارت بر وضعیت سرویس IPTable، از دستور زیر میتوانید استفاده کنید:
$ sudo systemctl status iptables
اصول اولیه دستور IPTables در لینوکس
بعد از پایانیافتن فرایند نصب این فایروال، با استفاده از سینتکس (Syntax) IPTables، میتوانید پیشفرضها (Defaults) را تغییر و کانفیگ آن را طبق نیازهایتان انجام دهید. سینتکس اصلی IPTables بهصورت زیر است:
# iptables -t {type of table} -options {chain points} {condition or matching component} {action}
درادامه، دستور بالا را برایتان شرح میدهیم.
Table .۱
در قسمت ابتدایی، -t قرار دارد که درادامه آن، میتوانید از بین پنج نوع جدول یکی از آنها را انتخاب کنید. درصورتیکه عبارت -t را حذف کنید، جدول فیلتر بهطورخودکار استفاده میشود؛ زیرا این جدول بهعنوان جدول پیشفرض شناخته میشود.
Chain Options .۲
قسمت دوم دستوری که در بالا آورده شده است، با زنجیره (Chain) ارتباط دارد. شما میتوانید از بین زنجیرههای مختلف یکی از آنها را انتخاب کنید. درادامه، آنها را شرح میدهیم.
- -A
-A قانون جدیدی به زنجیره (در انتهای Chain) میافزاید.
- -C
-C برطرفکردن الزامات زنجیره ازطریق قانون (Rule) را بررسی میکند.
- -D
-D به کاربران اجازه میدهد تا یک Rule موجود را از زنجیره (Chain) حذف کنند.
- -F
-F قانونهای تعریفشده کاربران را حذف میکند.
- -I
-I به کاربران اجازه میدهد تا قانون جدیدی به پوزیشن مشخصشده اضافه کنند.
- -N
-N زنجیره کاملاً جدیدی ایجاد میکند.
- -V
-V زمانیکه با گزینه لیست استفاده میشود، اطلاعات دقیقی دراختیار کاربر قرار میدهد.
- -X
-X زنجیره را حذف میکند.
Matching Component .۲
Matching Component شرط بررسی نیاز Chain است. از بین گزینههای مختلف میتوانید یکی از آنها را انتخاب کنید. برخی از این گزینهها عبارتاند از:
Protocols -p Source IP -s Destination IP -d IN interface -i OUT interface -o
این گزینهها برای TCP ازاینقرار خواهند بود:
-sport -dport --tcp-flags
Action Component .۳
گزینههای موجود در Action Component به نوع جدول (مانند NAT) بستگی دارد. جدول Manage درمقایسهبا سایر جدولها گزینههای بیشتری دارد. با استفاده از Action، میتوانید Table یا Chain خاصی را نیز بهعنوان Target خود در نظر بگیرید.
پرکاربردترین گزینه در Action، Jump (-j) است که گزینههای مختلفی را دراختیار کاربر قرار میدهد. درادامه، این گزینهها را شرح میدهیم.
- ACCEPT
برای پذیرفتن پکتها و پایاندادن به عبور آنها استفاده میشود.
- DROP
برای رهاکردن پکتها و پایاندادن به عبور آنها استفاده میشود.
- REJECT
REJECT شبیه به ACCEPT است؛ اما پکتهای ردشده را به منبع ارسال میکند.
- RETURN
عبور از پکت را در Sub Chain متوقف و پکت خاص را به Superior Chain ارسال میکند.
۴. فهرستکردن مجموعه قوانین فعلی IPTables
اگر قصد دارید بررسی کنید که چه چیزی بهطورپیشفرض از فایروال شما عبور میکند، فهرستکردن مجموعهای از قوانین فعلی میتواند بهترین راه باشد. برای فهرستکردن Ruleهای اِعمالشده، از دستور زیر استفاده کنید:
$ sudo iptables -L
۵. اجازهدادن یا ردکردن (Allow Or Deny) ترافیک شبکه در پورتهای خاص
درصورتیکه میخواهید ترافیک شبکه HTTPS را مجاز کنید، باید پورت 443 را با استفاده از دستور زیر مجاز کنید:
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
با استفاده از دستور زیر، میتوانید ترافیک وب HTTP را غیرفعال کنید:
$ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT
درادامه، دستورهای بالا را توضیح میدهیم.
- -p
برای بررسی پروتکل مشخصشده بهکار میرود. در اینجا، پروتکلی که با سروکار داریم، TCP است.
- —dport
برای تعیین پورت مقصد استفاده میشود.
- -j
برای پذیرفتن (Accept) یا رهاکردن (Drop) استفاده میشود.
۶. کنترل ترافیک با آدرس IP
شما میتوانید ترافیک شبکه را با استفاده از آدرس IP کنترل کنید. درادامه، دراینباره توضیحات بیشتری ارائه میدهیم.
برای اجازهدادن به آدرس IP خاص، از دستور زیر استفاده کنید:
$ sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT
برای رهاکردن (Drop) پکتها از آدرس IP خاص، از دستور زیر استفاده کنید:
$ sudo iptables -A INPUT -s 192.168.0.27 -j DROP
شایان ذکر است که با استفاده از دستور زیر، میتوانید محدوده آدرسهای IP را کنترل کنید:
$ sudo iptables -A INPUT -m range --src-range 192.168.0.1-192.168.0.255 -j REJECT
۷. حذف قانون تعریفشده کاربر
گاهی اوقات ممکن است هنگام ایجاد قوانین، کاربر اشتباهاتی مرتکب شود. در این شرایط بهترین راه برای جبران آن اشتباه، حذف قانون ایجاد شده است. حذف قانون تعریفشده کار دشواری نیست و بهراحتی میتوانید آن را انجام دهید.
برای فهرستکردن قوانین تعریفشده با اعداد، از دستور زیر استفاده کنید:
$ sudo iptables -L --line-numbers
برای حذف قوانین نیز، باید ساختار دستور زیر را دنبال کنید:
$ sudo iptables -D <INPUT/FORWARD/OUTPUT> <Number>
در اینجا، فرض کنید که قصد دارید قانون هشتم را از INPUT حذف کنید. برای حذف این قانون، از دستور زیر استفاده کنید:
$ sudo iptables -D INPUT 10
برای اینکه ببینید قانون را با موفقیت حذف کردهاید یا خیر، با استفاده از دستور زیر باید قوانین را فهرست کنید:
$ sudo iptables -L –line-numbers
۸. ذخیره قوانین تعریفشده IPTables
بعد از اِعمال قوانین، آنها را باید در جایی ذخیره کنید. فراموش نکنید که بعد از راهاندازی مجدد سیستم، تمام قوانین تعریفشده، ولی ذخیرهنشده حذف میشوند؛ بههمیندلیل، باید قوانین تعریفشده را در جایی ذخیره کنید.
برای ذخیره Rules در توزیعهای مبتنیبر RHEL، از دستور زیر استفاده کنید:
$ sudo /sbin/service iptables save
برای ذخیره قوانین در توزیعهای مبتنیبر دبیان نیز، از دستور زیر استفاده کنید:
$ sudo /sbin/iptables–save
جمعبندی
در این مقاله از بلاگ پارس پک، با آموزش IPTables در لینوکس همراه شما بودیم و موضوعات مختلف مربوط به این فایروال را برایتان شرح دادیم. درصورت داشتن هرگونه سؤال یا ابهام، آن را ازطریق کامنتها با ما در میان بگذارید.
سوالات متداول
1. IPTables چطور در لینوکس کار میکند؟
iptables یک ابزار فایروال خط فرمان است که اجازه ورود یا مسدود کردن ترافیک را صادر میکند. هنگامی که یک اتصال سعی میکند در سیستم شما برقرار شود، iptables آن را با قاعدههای از پیش تعیین شده خود مطابقت میدهد.
2. چطور iptables را در لینوکس چک کنیم؟
- ترمینال را باز کنید یا با استفاده از دستور ssh وارد شوید: $ ssh user@server-name.
- برای فهرست کردن همه قوانین: $ sudo iptables -S.
- لیست تمام قوانین IPv6 را دریافت کنید: $ sudo ip6tables -S.
- برای فهرست کردن همه قوانین جداول: $ sudo iptables -L -v -n | more.
- فقط تمام قوانین جداول INPUT را فهرست کنید.