اگر مدتی است که از کامپیوتر استفاده می کنید، حتما با کلمه فایروال آشنا هستید. ما می دانیم که همه چیز از ظاهر پیچیده به نظر می رسد، اما از طریق این آموزش، می خواهیم اساس IPTable و استفاده از دستورات کاربردی در لینوکس را توضیح دهیم تا حتی اگر دانشجوی شبکه هستید یا می خواهید در شبکه ها غوطه ور شوید، بتوانید از آن بهره مند شویید.
IPTables فایروالی است که بیشتر در لینوکس استفاده می شود. برای استفاده از آن قلق هایی وجود دارد که بیان می کنیم.
IPTables چیست؟
نحوه عملکرد فایروال بسیار ساده است. فایروال با ایجاد یک مانع بین شبکههای امن و غیرامن، از سیستم شما در برابر بستههای مخرب محافظت میکند.
اما چگونه میتوانیم تعیین کنیم که چه چیزهایی ایمن هستند و چه چیزهایی نیستند؟ با نصب فایروال بهطور پیشفرض، شما قادر به تنظیم قوانین برای فایروال خود خواهید بود، اما برای نظارت دقیقتر بر روی بستههای ورودی و خروجی، به IPTable نیاز دارید.
IPTable ها میتوانند برای استفادههای شخصی یا بهصورت سراسری در شبکهها به کار روند. با کمک IPTables، میتوانیم مجموعهای از قوانین را تعریف کنیم که به وسیله آنها قادر به نظارت، مجاز کردن یا مسدود کردن بستههای شبکه ورودی و خروجی خواهیم بود.
به جای تمرکز بر جنبههای نظری، ما بر آنچه در عمل اهمیت دارد تمرکز خواهیم کرد. بنابراین، بیایید با درک اصول اولیه IPTables شروع کنیم.
درک مفهوم IPTables
هنگام بحث در مورد IPTables، باید ۳ اصطلاح را درک کنیم: جداول، زنجیرهها و قوانین. از آنجایی که این ها بخش های مهمی هستند، ما قصد داریم در مورد هر یک از آن ها بحث کنیم.
پس بیایید با جداول شروع کنیم.
جداول در IPTables
۵ نوع جدول در IPTables وجود دارد و هر کدام قوانین متفاوتی اعمال می کنند. با رایج ترین جدول «Filter» شروع می کنیم.
جدول فیلتر – این جدول پیش فرض و اصلی در هنگام استفاده از IPTables است. این بدان معنی است که هر زمان که در هنگام اعمال قوانین به جدول خاصی اشاره نکنید، آن ها در جدول فیلتر اعمال می شوند. همانطور که از نام آن پیداست، نقش جدول فیلتر این است که تصمیم بگیرد که آیا بسته ها باید به مقصد برسند یا درخواست آن ها را رد کنند.
NAT (Network Address Translation): همانطور که از نامش پیداست، این جدول به کاربران اجازه می دهد تا ترجمه آدرس های شبکه را تعیین کنند. نقش این جدول تعیین این است که تشخیص دهند آیا باید مبدا و مقصد آدرس بسته را تغییر داد یا خیر.
Mangle Table: این جدول به ما امکان می دهد هدر IP بسته ها را تغییر دهیم. برای مثال، میتوانید TTL (Time to Live یا به اختصار TTL به مدتی که یک بسته (packet) در سطح شبکه اعتبار دارد گفته میشود) را برای افزایش یا کاهش پرشهای شبکه که بسته میتواند حفظ کند، تنظیم کنید. به طور مشابه، سایر هدرهای IP را نیز می توان با توجه به اولویت شما تغییر داد.
جدول RAW: کاربرد اصلی این جدول ردیابی اتصالات است؛ زیرا مکانیزمی برای علامت گذاری بسته ها برای مشاهده بسته ها به عنوان بخشی از یک جلسه در حال انجام فراهم می کند.
جدول امنیتی (Security Table): با استفاده از جدول امنیت، کاربران می توانند علائم زمینه امنیتی SELinux داخلی را روی بسته های شبکه اعمال کنند.
جدول های RAW و Security کاربرد زیادی ندارند و معمولا ۳ گزینه اول به عنوان جدول اصلی محاسبه می شوند.
از مبحث جدول ها عبور کردیم، اکنون نوبت آن است که در مورد زنجیر ها گفت و گو کنیم.
زنجیره ها در IPTables
زنجیره ها در نقاطی از مسیر شبکه رفتار می کنند که ما می توانیم قوانین را اعمال کنیم. در IPTables ما ۵ نوع زنجیره داریم و در مورد هر کدام بحث خواهیم کرد. به خاطر داشته باشید که هر نوع زنجیره ای برای هر نوع Table موجود نیست.
پیش مسیریابی (Pre-routing): این زنجیره به هر بسته ورودی پس از ورود به پشته شبکه اعمال می شود و این زنجیره حتی قبل از تصمیم گیری در مورد مسیریابی در مورد مقصد نهایی بسته پردازش می شود.
Input Chain: نقطه ای است که یک بسته به پشته شبکه وارد می شود.
Forward Chain: نقطه ای است که بسته از طریق سیستم شما ارسال شده است.
زنجیره خروجی (Output Chain): زنجیره خروجی هنگامی که از طریق سیستم شما منشا گرفته و خارج می شود به بسته اعمال می شود.
پس از مسیریابی (Post-routing): این کاملا برعکس زنجیره پیش از مسیریابی است و پس از تصمیم گیری در مورد مسیریابی برای بسته های ارسال شده یا خروجی اعمال می شود.
اکنون، تنها چیزی که برای بحث باقی میماند، قوانین است و این سادهترین مورد از ۳ موردی است که در اینجا بحث کردهایم. بنابراین بیایید آنچه را که در بخش نظری باقی مانده است کامل کنیم.
قوانین در 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 به شرح زیر است:
# iptables -t {type of table} -options {chain points} {condition or matching component} {action}
بیایید توضیح دستور بالا را بفهمیم:
جدول ها
قسمت اولt-
است که میتوانیم از میان هر ۵ گزینه جدول موجود را انتخاب کنیم و اگر قسمت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
اجازه/رد کردن ترافیک شبکه در پورت های خاص
در این بخش به شما نشان خواهیم داد که چگونه می توانید ترافیک شبکه را برای پورت های خاص مجاز یا رد کنید. ما برخی از پورت های شناخته شده را به شما نشان خواهیم داد تا جایی که می خواهیم مفید باشیم.
اگر می خواهید ترافیک شبکه HTTPS را مجاز کنید، باید پورت شماره ۴۴۳ را با استفاده از دستور داده شده مجاز کنیم:
$ 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