شما برای مطالعه این مقاله فقط 9 دقیقه وقت نیاز دارید

iptables-firewall

معرفی فایروال IPTables و دستورات کاربردی در لینوکس

4.7/5 - (3 امتیاز)

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

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

IPTables چیست؟

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

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

IPTable ها را می توان برای محاسبات شخصی استفاده کرد یا می توان آن را در کل شبکه نیز اعمال کرد. با استفاده از IPTables، مجموعه‌ای از قوانین را تعریف می‌کنیم که با آن می‌توانیم بسته‌های شبکه ورودی یا خروجی را نظارت، مجاز یا مسدود کنیم.

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

درک مفهوم IPTables

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

پس بیایید با جداول شروع کنیم.

جداول در IPTables

5 نوع جدول در IPTables وجود دارد و هر کدام قوانین متفاوتی اعمال می کنند. با رایج ترین جدول «Filer» شروع می کنیم.

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

NAT (Network Address Translation): همانطور که از نامش پیداست، این جدول به کاربران اجازه می دهد تا ترجمه آدرس های شبکه را تعیین کنند. نقش این جدول تعیین این است که تشخیص دهند آیا باید مبدا و مقصد آدرس بسته را تغییر داد یا خیر.

Mangle Table: این جدول به ما امکان می دهد هدر IP بسته ها را تغییر دهیم. برای مثال، می‌توانید TTL (Time to Live یا به اختصار TTL به مدتی که یک بسته (packet) در سطح شبکه اعتبار دارد گفته می‌شود) را برای افزایش یا کاهش پرش‌های شبکه که بسته می‌تواند حفظ کند، تنظیم کنید. به طور مشابه، سایر هدرهای IP را نیز می توان با توجه به اولویت شما تغییر داد.

جدول RAW: کاربرد اصلی این جدول ردیابی اتصالات است؛ زیرا مکانیزمی برای علامت گذاری بسته ها برای مشاهده بسته ها به عنوان بخشی از یک جلسه در حال انجام فراهم می کند.

جدول امنیتی (Security Table): با استفاده از جدول امنیت، کاربران می توانند علائم زمینه امنیتی SELinux داخلی را روی بسته های شبکه اعمال کنند.

جدول های RAW و Security کاربرد زیادی ندارند و معمولا 3 گزینه اول به عنوان جدول اصلی محاسبه می شوند.

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

زنجیره ها در IPTables

زنجیره ها در نقاطی از مسیر شبکه رفتار می کنند که ما می توانیم قوانین را اعمال کنیم. در IPTables ما 5 نوع زنجیره داریم و در مورد هر کدام بحث خواهیم کرد. به خاطر داشته باشید که هر نوع زنجیره ای برای هر نوع Table موجود نیست.

پیش مسیریابی (Pre-routing): این زنجیره به هر بسته ورودی پس از ورود به پشته شبکه اعمال می شود و این زنجیره حتی قبل از تصمیم گیری در مورد مسیریابی در مورد مقصد نهایی بسته پردازش می شود.

Input Chain: نقطه ای است که یک بسته به پشته شبکه وارد می شود.

Forward Chain: نقطه ای است که بسته از طریق سیستم شما ارسال شده است.

زنجیره خروجی (Output Chain): زنجیره خروجی هنگامی که از طریق سیستم شما منشا گرفته و خارج می شود به بسته اعمال می شود.

پس از مسیریابی (Post-routing): این کاملا برعکس زنجیره پیش از مسیریابی است و پس از تصمیم گیری در مورد مسیریابی برای بسته های ارسال شده یا خروجی اعمال می شود.

اکنون، تنها چیزی که برای بحث باقی می‌ماند، قوانین است و این ساده‌ترین مورد از 3 موردی است که در اینجا بحث کرده‌ایم. بنابراین بیایید آنچه را که در بخش نظری باقی مانده است کامل کنیم.

قوانین در IPTables

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

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

هر قانون دارای دو جزء است: جزء تطبیق و جزء هدف.

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

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

این قسمت توضیح بود و اکنون دستورات اولیه مربوط به IPTables در لینوکس را پوشش خواهیم داد.

نصب فایروال IPTables در لینوکس

اگر خرید سرور مجازی لینوکس را انجام داده اید، پس این نکته را در نظر داشته باشید که در توزیع‌های لینوکس مدرن مانند Pop!_OS، این فایروال از قبل نصب شده است، اما اگر سیستم شما فاقد بسته IPTables است، می‌توانید به راحتی آن را با دستورالعمل‌های داده شده نصب کنید:

برای نصب IPTable ها بر روی توزیع های لینوکس مبتنی بر RHEL مانند Rocky Linux، AlmaLinux و CentOS Stream، از دستور dnf زیر استفاده کنید.

$ sudo dnf install iptables-services

مهم: اگر از فایروال استفاده می‌کنید، قبل از شروع نصب، باید آن را غیرفعال کنید. برای متوقف کردن کامل فایروال، باید از دستورات زیر استفاده کنید:

$ 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

اصول اولیه دستور IPTables در لینوکس

پس از اتمام نصب، می‌توانیم با سینتکس IPTables ادامه دهیم که به شما امکان می‌دهد پیش‌فرض‌ها را تغییر دهید و به شما امکان می‌دهد طبق نیاز خود پیکربندی کنید.

کلیک کنید  لیست کردن سرویس های لینوکس با دستور systemctl و service

سینتکس اصلی IPTables به شرح زیر است:

# iptables -t {type of table} -options {chain points} {condition or matching component} {action}

بیایید توضیح دستور بالا را بفهمیم:

جدول ها

قسمت اولt-است که می‌توانیم از میان هر 5 گزینه جدول موجود را انتخاب کنیم و اگر قسمتt-را از دستور حذف کنید، از جدول فیلتر استفاده می‌کند زیرا نوع جدول پیش‌فرض است.

گزینه های زنجیره ای

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

A- یک قانون جدید به زنجیره در انتهای زنجیره اضافه می کند.

C- قانون را بررسی می کند که آیا الزامات زنجیره را برآورده می کند یا خیر.

D- به کاربران اجازه می دهد تا یک قانون موجود را از زنجیره حذف کنند.

F- هر قانون تعریف شده توسط کاربر را حذف می کند.

I- به کاربران اجازه می دهد تا یک قانون جدید در موقعیت مشخص شده اضافه کنند.

N- یک زنجیره کاملاً جدید ایجاد می کند.

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

X-زنجیره را حذف می کند.

مولفه تطبیق (Matching Component)

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

Protocols -p
Source IP -s
Destination IP -d
IN interface -i
OUT interface -o

برای TCP، آن ها به شرح زیر هستند:

-sport
-dport
--tcp-flags

مولفه عمل (Action Component)

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

پرکاربردترین عمل Jump (-j) است که چندین گزینه را در اختیار ما قرار می دهد مانند:

ACCEPT: برای پذیرش بسته ها و پایان دادن به عبور استفاده می شود.

DROP: برای رها کردن بسته ها و پایان دادن به پیمایش استفاده می شود.

REJECT: این کاملا شبیه DROP است اما بسته های رد شده را به منبع ارسال می کند.

RETURN: این کار عبور از بسته را در زنجیره فرعی متوقف می کند و بسته خاص را بدون تأثیر به زنجیره برتر ارسال می کند.

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

فهرست کردن مجموعه فعلی قوانین IPTables

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

$ sudo iptables -L

فایروال IPTables

اجازه/رد کردن ترافیک شبکه در پورت های خاص

در این بخش به شما نشان خواهیم داد که چگونه می توانید ترافیک شبکه را برای پورت های خاص مجاز یا رد کنید. ما برخی از پورت های شناخته شده را به شما نشان خواهیم داد تا جایی که می خواهیم مفید باشیم.

اگر می خواهید ترافیک شبکه 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- برای اقدام (پذیرفتن یا رها کردن) استفاده می شود.

کنترل ترافیک با آدرس IP

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

برای اجازه دادن به یک آدرس IP خاص، از ساختار دستور داده شده استفاده کنید:

$ sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT

به طور مشابه، برای رها کردن بسته ها از 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

فایروال IPTables

برای حذف قوانین، باید ساختار دستور داده شده را دنبال کنیم:

$ sudo iptables -D <INPUT/FORWARD/OUTPUT> <Number>

فرض کنید من می خواهم قانون دهم را از INPUT حذف کنم، بنابراین از دستور داده شده استفاده خواهم کرد:

$ sudo iptables -D INPUT 10

برای بررسی اینکه آیا قانون را با موفقیت حذف کرده ایم، باید قوانین را با دستور داده شده فهرست کنیم:

$ sudo iptables -L –line-numbers

فایروال IPTables

همانطور که می بینید، قانون دهم را با موفقیت حذف کردیم.

قوانین IPTables تعریف شده را ذخیره کنید

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

برای ذخیره قوانین در توزیع های مبتنی بر RHEL:

$ sudo /sbin/service iptables save

برای ذخیره قوانین در مشتقات دبیان:

$ sudo /sbin/iptables–save

سخن آخر

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

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

 

 

 

سوالات متداول:

بله شما می توانید به کمک دستور $ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT این کار را انجام دهید.

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

10 آذر 1401
محمد غفاری

عالی بود ساده رسا کاربردی

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید