فایروال در لینوکس نقشی حیاتی در ایمن سازی سیستم کامپیوتری ایفا می کند. این به عنوان یک مانع عمل می کند و ترافیک شبکه را کنترل و فیلتر می کند تا از سیستم در برابر دسترسی های غیرمجاز، حملات و سایر تهدیدها محافظت کند. بدون یک فایروال به درستی پیکربندی شده، سرور می تواند در برابر انواع مختلف حملات سایبری آسیب پذیر باشد که منجر به عواقب جدی برای امنیت و محرمانه بودن داده ها می شود.
در این مقاله، دو ابزار اصلی برای پیکربندی فایروال لینوکس را بررسی خواهیم کرد: فایروال و iptables. ما یک تجزیه و تحلیل مقایسه ای از ویژگی ها، عملکرد و مزایای آنها انجام خواهیم داد. علاوه بر این، دستورالعملهای دقیقی برای راهاندازی و استفاده از هر یک از این ابزارها ارائه میکنیم، همچنین بهترین شیوهها برای ایمنسازی سیستم شما با فایروال در پلتفرم لینوکس را مورد بحث قرار میدهیم. تمام اقدامات در یک نشان داده خواهد شد سرور مجازی با دسترسی ریشه
پیکربندی فایروال در لینوکس
فایروال (Firewall Daemon) برنامه ای برای مدیریت فایروال در سیستم عامل های لینوکس است. این یک رابط کاربری برای پیکربندی قوانین فایروال، اجازه یا مسدود کردن اتصالات برنامه های شبکه را فراهم می کند. به طور پیش فرض در اکثر توزیع های سرور از قبل نصب شده است. اگر فایروال از پیش نصب نشده باشد، می توان آن را به طور مستقل از مخازن رسمی توزیع نصب کرد.
برای سیستم های Red Hat (مانند RHEL، CentOS، Fedora) نصب با دستور زیر انجام می شود:
yum install firewalld
برای دبیان/اوبونتو:
apt-get install firewalld
پس از نصب، می توان آن را بلافاصله با دستور زیر شروع و فعال کرد:
systemctl start firewalld
در مرحله بعد، باید سرویس را به راه اندازی اضافه کنید:
systemctl enable firewalld
در این مرحله، توصیه می کنیم ufw را غیرفعال کنید، زیرا استفاده همزمان از این ابزار با فایروال یا iptables توصیه نمی شود. بررسی وضعیت:
systemctl status ufw
برای متوقف کردن آن، دستور را وارد کنید:
systemctl stop ufw
برای غیرفعال سازی کامل:
ufw disable
پس از انجام این اقدامات، می توانید به پیکربندی فایروال ادامه دهید.
ابتدا لازم است مناطق اعتماد را تعریف کنیم. فایروال از مفهوم مناطق برای تعیین سطح اعتماد برای رابط های شبکه استفاده می کند. به هر رابط یک منطقه اختصاص داده شده است و قوانین فایروال بر اساس منطقه اعمال می شود. لیست تمام مناطق موجود با دستور زیر باز می شود:
firewall-cmd --get-zones
به طور معمول، 4 منطقه اصلی استفاده می شود:
- عمومی: این منطقه برای شبکه هایی است که شما آنها را ناامن می دانید.
- خصوصی: برای شبکه های خانگی یا سایر اتصالات شبکه قابل اعتماد اعمال می شود.
- داخلی: برای شبکه های داخلی، مانند شبکه های درون یک سازمان یا شبکه شرکتی استفاده می شود.
- DMZ: این منطقه جایی است که معمولا سرورهایی قرار می گیرند که باید از طریق اینترنت قابل دسترسی باشند.
با این حال، این تنها یک مثال است. می توانید منطقه خود را با استفاده از دستور اضافه کنید:
firewall-cmd --permanent --new-zone=nameyourzone
پس از افزودن، بارگیری مجدد مورد نیاز است:
firewall-cmd --reload
برای حذف یک منطقه، روش مشابهی استفاده می شود
firewall-cmd --permanent --delete-zone=nameyourzone
پس از تعریف زون ها، لازم است برای سرویس ها و پورت های مورد نیاز، امکان تردد فراهم شود. برای اجازه دادن به یک سرویس خاص، از دستور استفاده کنید:
firewall-cmd --zone=public --add-service=name
جایی که نام نام سرویس است. به عنوان مثال، برای اجازه دادن به ترافیک برای آپاچی:
firewall-cmd --zone=public --add-service=http
برای تعریف پورت های مجاز از دستور زیر استفاده کنید:
firewall-cmd --zone=public --add-port=number/protocol
به عنوان مثال، پورت استاندارد 22 برای SSH به شکل زیر است:
firewall-cmd --zone=public --add-port=22/tcp
در این مرحله، قوانین اصلی از قبل ایجاد شده است. در مرحله بعد، نحوه پردازش ترافیک بسته به منبع، مقصد، پورت و معیارهای دیگر را تعیین کنید. برای افزودن یک قانون (با استفاده از عمومی منطقه به عنوان مثال):
firewall-cmd --zone=public rule
به عنوان مثال، برای اجازه دادن به ترافیک ورودی از هر منبع به پورت 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
برای حذف یک قانون:
firewall-cmd --permanent --remove-rule=rule_specification
جایی که رد نوع قاعده است (مثلاً بندر، سرویس، rich-rule و غیره)، و rule_specification مشخصات خود قاعده است.
پس از ایجاد تغییرات در پیکربندی فایروالد، لازم است آنها را ذخیره و اعمال کنید. برای ذخیره تغییرات از دستور زیر استفاده کنید:
firewall-cmd --runtime-to-permanent
برای اعمال تغییرات:
firewall-cmd --reload
پس از تکمیل تنظیمات، میتوانید با باز کردن لیستی از قوانین، پارامترهای انتخابی را تأیید کنید:
firewall-cmd --list-all
در صورت بروز هر گونه مشکل، لاگ های فایروالد را با دستور زیر بررسی کنید:
journalctl -u firewalld
توجه: ما فقط الگوریتم کلی برای راه اندازی اتصال را پوشش داده ایم. این ابزار دارای عملکرد گسترده ای است. برای اطلاعات کامل در مورد تمام گزینه های موجود، می توانید از اسناد رسمی یا باز کردن راهنما:
firewall-cmd --help
پیکربندی iptables در لینوکس
برخلاف فایروال، iptables یک ابزار قدیمیتر اما همچنان پرکاربرد در لینوکس برای مدیریت فایروال است. این یک رویکرد مستقیم و انعطافپذیرتر برای قوانین فیلتر کردن بستهها در سطح هسته لینوکس ارائه میکند. با این حال، iptables به دانش و تجربه پیشرفته تری در مقایسه با فایروالد نیاز دارد، که باعث می شود برای مبتدیان کمتر در دسترس باشد. نسخه از پیش نصب شده ابزار را با دستور زیر بررسی کنید:
iptables -V
اگر ابزار نصب نشده باشد، باید نصب شود. دستور نصب در اوبونتو، دبیان:
apt install iptables
برای سیستم های Red Hat (به عنوان مثال، CentOS، Fedora):
yum install iptables
دستور فعال سازی پس از نصب:
systemctl start iptables
برای افزودن به راه اندازی، اجرا کنید:
systemctl enable iptables
قبل از شروع پیکربندی iptables، مهم است که بدانید چگونه کار می کند. این توسط نحو برنامه کمک می کند. به صورت زیر به نظر می رسد:
iptables -t table action chain additional_parameters
بیایید به هر مورد عمیق تر بپردازیم.
Iptables دارای چهار جدول اصلی است: فیلتر، nat، mangle و خام. هر کدام برای پردازش انواع خاصی از بستهها طراحی شدهاند و زنجیرههای قوانین خاص خود را دارند:
- فیلتر: این جدول بیشترین استفاده را دارد و حاوی قوانین فیلتر بسته است. برای تصمیم گیری در مورد اجازه یا رد بسته ها استفاده می شود.
- NAT: این جدول برای تغییر آدرس های شبکه و پورت ها در بسته ها استفاده می شود. اغلب برای راه اندازی maskareding (NAT) استفاده می شود.
- لگد زدن: در این جدول می توانید هدر بسته ها را تغییر دهید. برای عملیات بسته های تخصصی مانند علامت گذاری استفاده می شود.
- خام: این جدول برای پیکربندی قوانینی که قبل از عبور از سیستم ردیابی اتصال اعمال می شوند استفاده می شود. معمولاً برای تنظیم قوانینی استفاده میشود که نباید توسط سیستم ردیابی اصلاح شوند، مانند انداختن بستهها از آدرسهای خاص.
هر میز شامل مجموعه ای از زنجیر است. زنجیرهها مجموعهای از قوانین هستند که به صورت متوالی بررسی میشوند. سه زنجیره از پیش تعریف شده وجود دارد:
- INPUT (ورودی). قوانین موجود در این زنجیره تعیین می کنند که با بسته های ورودی چه باید کرد.
- OUTPUT (خروجی). این زنجیره برای تمام بسته هایی که رایانه شما به دستگاه های دیگر یا رایانه های موجود در شبکه می فرستد اعمال می شود.
- FORWARD (ارسال). قوانین موجود در این زنجیره مشخص می کند که با بسته های ارسال شده چه باید کرد.
در نهایت، هر زنجیره دارای یک عمل (هدف) است. در عمل، 5 عمل اصلی استفاده می شود:
- تایید کنید: به بسته اجازه دهید از فایروال عبور کند.
- رها کردن: بسته را رد کرده و بدون هیچ پاسخی دور بریزید.
- رد کنید: بسته را رد کنید و یک پیام خطای ICMP برای فرستنده ارسال کنید.
- ورود کاربران: بسته را در گزارش سیستم ثبت کنید و اقدام دیگری انجام دهید (مثلاً ACCEPT یا DROP).
- برگشت: بررسی قوانین موجود در زنجیره فعلی را متوقف کنید و به زنجیره تماس بازگردید (در صورت وجود).
برای شروع تنظیمات، لیست قوانین موجود را با دستور زیر باز کنید:
iptables -L
به عنوان راهنمای پیکربندی Iptables، بیایید نمونه های عملی از رایج ترین دستورات را بررسی کنیم. برای راحتی کار، نمونه ها را بسته به زنجیره خاص به 3 گروه تقسیم می کنیم.
زنجیر INPUT:
- اجازه دادن به ترافیک ورودی از طریق پروتکل TCP در پورت 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. اجازه دادن به ترافیک ورودی از طریق پروتکل UDP در پورت 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. ترافیک ورودی از یک آدرس IP خاص را مسدود کنید:
iptables -A INPUT -s 192.168.1.100 -j DROP
زنجیر OUTPUT:
- اجازه ترافیک خروجی از طریق پروتکل TCP در پورت 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. اجازه ترافیک خروجی از طریق پروتکل UDP در پورت 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. ترافیک خروجی به یک پورت خاص را مسدود کنید (مثلاً 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
زنجیر رو به جلو:
- مسدود کردن ترافیک ارسال شده از محدوده خاصی از آدرس های IP:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. ارسال بسته ها از یک رابط شبکه خاص را مسدود کنید:
iptables -A FORWARD -i eth1 -j DROP
3. تعداد اتصالات همزمان را برای یک پورت خاص محدود کنید (در این مثال، 10 اتصال در دقیقه در پورت 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
همانطور که مشاهده می کنید در هر مورد جداگانه از یک آرگومان (فرمان) اضافی استفاده می شود. برای دریافت فهرست کامل از آرگومان های احتمالی و پشتیبانی کلی از عملکرد ابزار، وارد کنید:
iptables -h
برای اطمینان از درست بودن تنظیمات، دستور را دوباره وارد کنید تا لیست قوانین را مشاهده کنید:
iptables -L
برای حذف یک قانون خاص، از دستور استفاده کنید:
iptables -D chain rule_number
به عنوان مثال، اگر می خواهید قانون شماره 1 را از زنجیره INPUT حذف کنید، دستور به شکل زیر خواهد بود:
iptables -D INPUT 1
برای حذف همه قوانین با یک دستور:
iptables -F
نکته مهم: قوانین iptables پس از راه اندازی مجدد سیستم یا سرویس به طور خودکار ذخیره نمی شوند. برای ذخیره قوانین، آنها باید به یک فایل پیکربندی اضافه شوند و پس از راه اندازی مجدد بازیابی شوند. را iptables-save و iptables-restore خدمات شهری می توانند در این مورد کمک کنند. برای ذخیره قوانین، دستور را وارد کنید:
iptables-save > /etc/iptables/rules.v4
با این کار قوانین iptables فعلی در فایل rules.v4 ذخیره می شود. برای بازیابی پس از راه اندازی مجدد، وارد کنید:
iptables-restore < /etc/iptables/rules.v4
این دستور قوانین را از فایل rules.v4 بازیابی می کند.
نتیجه
پیکربندی فایروال در لینوکس با استفاده از فایروال یا iptables یک جنبه مهم برای تضمین امنیت سرور است. هر دو ابزار ابزار قابل اعتمادی برای مدیریت ترافیک شبکه و محافظت از سیستم در برابر دسترسی های غیرمجاز و حملات سایبری ارائه می دهند. انتخاب بین فایروال و iptable به نیازها و ترجیحات خاص کاربر با توجه به عملکرد و نقاط قوت متفاوت آنها بستگی دارد.