همه سیستمعاملهای مدرن فایروال دارند؛ برنامهای که ترافیک شبکه را از یک کامپیوتر مدیریت و تنظیم میکند. این فایروالها از قوانین مشخصشدهای برای کنترل ترافیک ورودی و خروجی استفاده میکنند تا یک لایه امنیتی به شبکه اضافه شود.
IPTables اولین اپلیکیشن فایروال برای سیستمهای لینوکس است. پس در این مقاله همراه ما باشید تا به معرفی فایروال IPTables در لینوکس بپردازیم. سپس با نحوه کارکرد آن، نصب IPTables در لینوکس و چند اسکریپت پرکاربرد IPTables آشنا شویم.
فایروال IPTables در لینوکس چیست؟
برای معرفی فایروال IPTables در لینوکس، باید بگوییم که این تکنولوژی یک ابزار خط فرمان (Command Line) برای پیکربندی فایروال هسته داخلی لینوکس (لینوکس چیست) است. این ابزار به مدیران شبکه امکان تعریف قوانین زنجیرهای و کنترل ترافیک ورودی و خروجی شبکه را میدهد.
با کمک IPTables و قوانین آن، بهراحتی بستههای دادهای مجاز برای ورود به شبکه یا مسدود کردن موارد مشکوک را انجام میدهیم. بههمیندلیل آن را نجاتدهنده متخصصان شبکه میدانیم؛ چون با اعمال سیاستهای امنیتی و محافظت از هاست وردپرس یا هاست لینوکس، انواع سرور را در برابر حملات مختلف شبکه مقاوم میکنند.
ساختار فایروال IPTables در لینوکس چگونه است؟
برای معرفی فایروال IPTables در لینوکس، آگاهی از ساختار چهار لایهای آن، شامل جدول، زنجیره، قوانین و اهداف الزامی است؛ چون این فایروال از قوانینی برای تعیین اقدامات مناسب روی یک بسته شبکه استفاده میکند. فایروال IPTables از اجزای زیر تشکیل شده است:
1. جداول
Tables فایلهایی برای گروهبندی قوانین مشابه هستند. یک جدول از چند زنجیر (Chains) حاوی قوانین تشکیل شده است.
2. زنجیرها
زنجیر رشتهای از قوانین است. هنگامیکه یک بسته در هاست دریافت میشود، IPTables جدول مناسب را پیدا و آن را از طریق زنجیره قوانین فیلتر میکند. این کار تا زمانی ادامه مییابد که مطابقت بسته با قانون تایید شود.
3. قوانین
Rule عبارتی است که شرایط تطبیق بسته را تعریف کرده و به یک مقصد خاص (Target) ارسال میکند.
4. اهداف
Target چیزی است که پس از مطابقت یک بسته با معیارهای قانون اتفاق میافتد. این بخش از فایروال IPTables پذیرفته شدن، حذف یا رد کردن بسته را مشخص میکند.
بیشتر بخوانید: سرور چیست؟ معرفی انواع سرور به زبان ساده
جزئیات اجزا فایروال IPTables
چهار جز این فایروال عمق بیشتری دارند که در ادامه بهشکل خلاصه با جزئیات هرکدام آشنا خواهید شد.
جداول
فایروالهای IPTables لینوکس دارای چهار جدول پیشفرض هستند که زنجیرههای قوانین مختلف را مدیریت میکنند:
- Filter: جدول پیشفرض برای فیلترینگ بسته. این جدول بهعنوان دروازهبانی برای تصمیمگیری درباره ورود و خروج بستههای خاص عمل میکند؛
- ترجمه آدرس شبکه (NAT): حاوی قوانین NAT برای مسیریابی بستهها به شبکههای راه دور است. این جدول فقط برای بستههایی که نیاز به تغییرات دارند، استفاده میشود؛
- Mangle: خصوصیات هدر IP بستهها را تنظیم میکند؛
- Raw: این جدول بستهها را از ردیابی اتصال معاف میکند.
برخی از توزیعهای لینوکس علاوهبر این چهار جدول، یک جدول امنیتی هم دارند که قوانین کنترل دسترسی اجباری (MAC) را برای مدیریت دقیقتر دسترسیها نگه میدارد.
بیشتر بخوانید: nat چیست و چگونه کار می کند؟
زنجیر
زنجیرههای مختلفی در IPTables وجود دارد که هر کدام هدف خاصی را دنبال میکنند:
- INPUT: این زنجیر مسئول مدیریت بستههای دریافتی است؛ بستههایی که مقصدشان یک برنامه یا سرویس محلی است. این زنجیر در جداول Filter و Mangle است؛
- OUTPUT: بستههای خروجی تولیدشده در یک برنامه یا سرویس محلی را مدیریت میکند. همه جداول حاوی این زنجیر هستند؛
- FORWARD: با بستههایی کار میکند که از یک رابط شبکه به شبکه دیگر، از طریق هاست یا کامپیوتر عبور میکنند. این زنجیر در جداول Filter، Mangle و جداول امنیتی قرار دارد؛
- PREROUTING: بستهها را قبل از مسیریابی تغییر میدهد. این تغییر قبل از تصمیم برای مسیریابی اتفاق میافتد. جداول NAT، Mangle و Raw حاوی این زنجیر هستند؛
- POSTROUTING: بستهها را پس از مسیریابی تغییر میدهد. تغییر با این زنجیر پس از تصمیم برای مسیریابی بسته انجام میشود. جداول NAT و Mangle حاوی این زنجیر هستند.
قوانین
قوانین عباراتی هستند که شرایط تطبیق بستهها را تعریف میکنند. هر قانون بخشی از یک زنجیر است که معیارهای خاصی مانند آدرس IP مبدا یا مقصد، شماره پورت یا پروتکل را دربرمیگیرد.
هر بستهای که با شرایط یک قانون مطابقت داشته باشد، به هدفی ارسال میشود که تعیین میکند چه اتفاقی برای آن میافتد.
اهداف
اهداف مشترک عبارتند از:
- ACCEPT: به بسته اجازه عبور از فایروال را میدهد؛
- DROP: بسته را بدون اطلاع به فرستنده دور میاندازد؛
- REJECT: بسته را دور میاندازد و یک پاسخ خطا به فرستنده میفرستد؛
- LOG: اطلاعات بسته را در یک فایل گزارش ثبت میکند؛
- SNAT: مخفف عبارت “Source Network Address Translation” است و آدرس منبع بسته را تغییر میدهد؛
- DNAT: مخفف عبارت “Destination Network Address Translation” و پارامتری برای تغییر آدرس مقصد بسته است؛
- MASQUERADE: آدرس منبع بسته را برای IPهای اختصاص دادهشده بهصورت پویا تغییر میدهد.
بیشتر بخوانید: آموزش ساخت swap file در لینوکس در 5 مرحله بسیار ساده
آموزش گامبهگام نصب IPTables در لینوکس
IPTables بهطور پیشفرض روی بسیاری از توزیعهای لینوکس نصب میشود. پیش از اقدام به نصب، ابتدا وضعیت IPTables را با اسکریپت زیر بررسی میکنیم:
iptables --version
چنانچه با تصویر زیر روبهرو شدید، این تکنولوژی روی لینوکس شما نصب است:
اگر این اسکریپت نسخه IPTables را نشان نداد، به این معناست که این قوانین روی سیستمعامل شما نصب نیست. پس مراحل نصب IPTables در لینوکس را بهشکل زیر پیش میبریم.
نصب IPTables در لینوکس دبیان و توزیعهای مبتنیبر آن
توجه: دو نسخه مختلف از IPTables برای IPv4 و IPv6 وجود دارد. این راهنمای معرفی فایروال IPTables در لینوکس، قوانین IPv4 را پوشش میدهد. پیکربندی این فایروال برای IPv6 مستلزم استفاده از ابزار iptables6 است. دقت داشته باشید که این دو پروتکل با هم کار نمیکنند و باید بهطور مستقل پیکربندی شوند.
برای توزیع های مبتنیبر دبیان (مانند اوبونتو)، مراحل زیر را دنبال کنید:
- ابتدا IPTables را با استفاده از مدیریت پکیج APT، با اسکریپت زیر نصب کنید:
sudo apt install iptables
- برای حفظ قوانین فایروال IPTables پس از راهاندازی مجدد لینوکس (Reboot)، پکیج Persistent را با دستور زیر نصب کنید:
sudo apt install iptables-persistent
با نوشتن این دستور، فرایند نصب مسیر فایلی را نشان میدهد که قوانین در آن ذخیره میشوند. سپس از شما میپرسد که قوانین فعلی IPv4 و IPv6 هم ذخیره شوند یا خیر.
- هنگام Restart فایروال، سرویس netfilter-persistent را بهشکل زیر فعال کنید:
sudo systemctl enable netfilter-persistent
این دستور امکان شروع خودکار سرویس را پس از Reboot میدهد؛ چون قوانین IPTables با هربار خاموش و روشن شدن سرور، از بین میرود.
بیشتر بخوانید: سیستم عامل اوبونتو ubuntu چیست؟
نصب IPTables در لینوکس RedHat و توزیعهای مبتنیبر آن
برای نصب IPTables در لینوکس RedHat و توزیعهای مبتنیبر آن، مانند Rocky Linux باید مراحل را بهشکل زیر پیش ببرید.
- ابتدا از مدیریت پکیج yum برای نصب iptables استفاده کنید:
sudo yum install iptables
- برای ثابت کردن قوانین فایروال پس از ریاستارت لینوکس، بسته زیر را نصب کنید:
sudo yum install iptables-services
این فرمان سرویسی را نصب میکند که باعث فعال شدن قوانین iptables پس از Reboot سیستمعامل میشود.
- حال با دستور زیر، سرویس را فعال کنید:
sudo systemctl enable iptables
با اجرای این اسکریپت، متن زیر را دریافت میکنید که فرآیند موفقیتآمیز نصب IPTables در لینوکس RedHat را نشان میدهد:
نحوه پیکربندی IPTables در لینوکس با مثال واقعی
دستور iptables بهطور پیشفرض عملیاتی را در جدول فیلترها اعمال میکند. برای استفاده از جداول دیگر هنگام معرفی فایروال IPTables در لینوکس، گزینه -t را بههمراه نام جدول بنویسید. برای مثال، از -t nat برای ساخت جدول NAT استفاده کنید.
بخشهای زیر نحوه استفاده و پیکربندی IPTables را در سناریوهای واقعی و کاربردی نشان میدهد.
مشاهده قوانین جاری
برای مشاهده قوانین جاری، از دستور زیر استفاده کنید. پارامتر -L باعث مشاهده قوانین جاری در جدول این فایروال میشود:
sudo iptables -L
خروجی زیر، وضعیت قوانین جاری را پس از اجرای این دستور نشان میدهد.
بیشتر بخوانید: دستور find در لینوکس چیست؟
فعال کردن Loopback Traffic
اجازه دریافت و ارسال ترافیک از سیستم شما (همان Localhost) اقدام ایمنی است و به اپلیکیشنها اجازه ارتباط با رابط لوکال هاست را میدهد. پس برای صدور مجوز این اقدام، باید دستور زیر را نوشته و اجرا کنیم:
sudo iptables -A INPUT -i lo -j ACCEPT
این دستور فایروال را برای پذیرش ترافیک از رابط Localhost (lo) (-i) پیکربندی میکند. بنابراین هر ترافیکی که از منبع سیستم شما باشد، از فایروال عبور خواهد کرد.
صدور مجوز برای عبور ترافیک خدمات خاص
با دستور زیر، به ترافیک پورتهای مختلف جهت فعالسازی سرویسهای گوناگون سرور یا کامپیوتر، اجازه عبور و تبادل میدهید.
نکته: در دستورات حاوی [IP-address]، باید آدرسهای IP مدنظرتان را بهجای این بخش بنویسید. یعنی دستور بهشکل زیر در خواهد آمد:
sudo iptables -A INPUT -s 203.0.113.51 -j REJECT
اجازه دادن به ترافیک وب روی پروتکل HTTP:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
مجاز کردن ترافیک وب برای پروتکل HTTPS:
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
مجاز کردن ترافیک ورودی SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
کنترل ترافیک با آدرس IP سیستم
برای کنترل ترافیک براساس آدرس IP سیستم مبدا و مقصد از دستورات زیر استفاده کنید:
دریافت تمام ترافیک یک آدرس IP:
sudo iptables -A INPUT -s [IP-address] -j ACCEPT
عدم پذیرش ترافیک از آدرس IP:
sudo iptables -A INPUT -s [IP-address] -j DROP
رد کردن ترافیک از محدوده آدرس IP:
sudo iptables -A INPUT -m iprange --src-range [IP-address-range] -j REJECT
بیشتر بخوانید: اشمایی با دستور انتقال فایل در لینوکس
ذخیره تغییرات در IPTables
بهطور پیشفرض IPTables قوانین نوشتهشده را ذخیره نمیکند. بههمیندلیل هنگام Restart کامپیوتر یا سرور، این فیلدها از بین میروند. پس با دستور زیر، قوانین را ذخیره میکنیم:
ذخیره قوانین در نسخههای مبتنیبر دبیان:
sudo netfilter-persistent save
ذخیره قوانین در نسخههای مبتنی بر RedHat:
sudo service iptables save
با نوشتن این دستور، در هر Restart، تکنولوژی IPTables بهطور خودکار قوانین فایروال را بارگذاری میکند.
آنچه در معرفی فایروال IPTables در لینوکس خواندیم
معرفی فایروال IPTables در لینوکس را در یک جمله خلاصه میکنیم: قوانین و شرایطی که نحوه رفتار با بستههای داده در شبکه را مشخص میکنند. پس از نصب IPTables در لینوکس، با صدها اسکریپت و دستور مواجه میشوید که در یک خط، شرایط را مشخص میکنند. امکان ادغام و تغییر این دستورات هم فراهم است. بههمیندلیل باید نسبتبه جداول، زنجیرها، قوانین و اهداف IPTables آشنایی کامل داشته باشید.
شما کدام دستور را بهطور مکرر استفاده میکنید؟ آیا تابهحال ابزاری کارآمدتر از IPTables در لینوکس را پیدا کردهاید؟ ما در بخش نظرات این مقاله، میزبان تجربه غنی شما هستیم. پس همین حالا آن را با ما و سایر مخاطبان بهاشتراک بگذارید.
سوالات متداولی که شما میپرسید
- فایروال IPTables در لینوکس چیست؟
تکنولوژی کارآمدی برای پیکربندی فایروال هسته داخلی لینوکس با یک ابزار خط فرمان (Command Line) است.
- نصب IPTables در لینوکس چگونه است؟
نصب این فایروال با دستورات apt install، iptables-persistent و systemctl enable netfilter-persistent انجام میشود.
- آیا نصب IPTables در لینوکس ضروری است؟
تا حد زیادی بله. بدون آن هم سیستمعامل شما بهخوبی اجرا شده و کار میکند؛ اما نصب و معرفی فایروال IPTables در لینوکس سرور، یک لایه محافظتی بیشتر خواهد بود.
منبع: