در لینوکس، فایروال یک برنامه یا سرویس است که ترافیک شبکه را هنگام عبور و مرور به سرور لینوکس با استفاده از مجموعهای از قوانین از پیش تعیینشده فیلتر یا کنترل میکند. یک فایروال معمولاً طوری پیکربندی میشود که به ترافیک مورد نظر اجازه عبور دهد و بقیه ترافیک خارجی را مسدود کند.
فایروال از مفهوم مناطق (zones) برای مدیریت ترافیک شبکه استفاده میکند. مناطق (zones) مجموعهای از قوانین از پیش تعریف شده هستند که میتوانند به رابطهای شبکه اختصاص داده شوند. میتوانید فایروال را طوری پیکربندی کنید که سرویسها یا پورتهای مرتبط با برنامهها را مجاز یا مسدود کند.
در این آموزش، نحوه راهاندازی فایروال لینوکس با استفاده از سرویس firewalld را نشان خواهیم داد. ما این کار را روی یک سرور Red Hat Enterprise 9 (RHEL 9) نشان خواهیم داد.
نحوه نصب و فعال کردن فایروال #
به طور پیشفرض، firewalld در توزیعهای مبتنی بر RHEL مانند RHEL، AlmaLinux، CentOS، Rocky Linux و Fedora نصب شده است. با این حال، اگر به هر دلیلی firewalld نصب نشد، میتوانید آن را به صورت زیر نصب کنید.
sudo dnf install firewalld -y
در توزیعهای اوبونتو و دبیان، دستورات زیر را اجرا کنید:
sudo apt update
sudo apt install firewalld -y
پس از نصب، آن را فعال کنید تا هنگام بوت شروع به کار کند.
sudo systemctl enable firewalld
در مرحله بعد، سرویس یا دیمون firewalld را شروع کنید.
sudo systemctl start firewalld
اکنون فایروال باید با مناطق و قوانین پیشفرض فایروال شروع به کار کند. برای تأیید اجرای سرویس فایروال، دستور زیر را اجرا کنید:
sudo systemctl status firewalld

روش دیگر، میتوانید دستور زیر را اجرا کنید:
sudo firewall-cmd --state

خروجی بالا تأیید میکند که فایروال فعال و در حال اجرا است.
مناطق فایروال #
قبل از اینکه نحوه تنظیم فایروال firewalld را یاد بگیرید، بهتر است با چند مفهوم مرتبط با این ابزار آشنا شوید.
این firewalldسرویس از مناطق (zones) برای مدیریت ترافیک استفاده میکند. مناطق (zones) به سادگی مجموعهای از قوانین از پیش تعریف شده هستند که بر اساس سطح اعتماد در شبکه شما، تعیین میکنند چه ترافیکی باید مجاز باشد. بیایید نگاهی سریع به مناطق از پیش تعریف شده بیندازیم.
بلوک – تمام اتصالات ورودی با پیام icmp-host-prohibited قطع میشوند. فقط اتصالات شبکهای که از داخل سیستم آغاز میشوند، امکانپذیر هستند.
**قطع اتصال**- این ناحیه با پایینترین سطح اعتماد است. تمام اتصالات ورودی بدون پاسخ قطع میشوند و فقط اتصالات خروجی مجاز هستند.
عمومی – این نشان دهنده شبکههای غیرقابل اعتماد است. این زمانی پیادهسازی میشود که به سرورهای دیگر در شبکه اعتماد ندارید. این حالت زمانی توصیه میشود که سروری روی ابر یا شبکه محلی دارید.
خارجی – زمانی استفاده میشود که میخواهید فایروال را به عنوان یک دروازه NAT پیکربندی کنید. منطقه خارجی برای نقاب NAT استفاده میشود به طوری که شبکه داخلی شما خصوصی باقی بماند اما از سیستمهای خارجی قابل دسترسی باشد.
**داخلی**- برای شبکههای داخلی زمانی استفاده میشود که به رایانهها یا سرورهای دیگر در شبکه محلی خود اعتماد دارید.
dmz – برای سرورها یا رایانههای موجود در DMZ (منطقه غیرنظامی) استفاده میشود. این موارد برای سیستمهای موجود در شبکه شما قابل دسترسی نخواهند بود و فقط اتصالات ورودی خاص مجاز هستند.
محل کار – در محل کار شما که به اکثر رایانهها و رایانههای همکارانتان اعتماد دارید، استفاده میشود.
خانگی – در محیط خانه، به خصوص روی کامپیوترهای رومیزی و لپتاپهای موجود در شبکه محلی شما استفاده میشود. مفهوم آن این است که شما به اکثر دستگاههای موجود در شبکه محلی خانگی خود اعتماد دارید و برخی از سرویسها مجاز هستند.
مورد اعتماد – همه اتصالات پذیرفته میشوند.
با اجرای دستور زیر در ترمینال میتوانید لیستی از تمام مناطق را دریافت کنید.
sudo firewall-cmd --get-zones

علاوه بر این، هر منطقه فایل .xml مربوط به خود را دارد که در /usr/lib/firewalld/zones/دایرکتوری ذخیره شده است. میتوانید فایلها را به صورت زیر فهرست کنید.
ls -l /usr/lib/firewalld/zones/

برای دریافت منطقه پیشفرضی که در حال حاضر به رابط شبکه شما اختصاص داده شده است، دستور زیر را اجرا کنید:
firewall-cmd --get-default-zone

بدون ایجاد هیچ تغییری در فایروال، منطقه پیشفرض، publicمنطقهای است که اتفاقاً تنها منطقه فعال موجود نیز میباشد. به طور پیشفرض، تمام رابطهای شبکه به این منطقه متصل هستند. برای نشان دادن این موضوع، ما دو رابط شبکه فعال متصل به سیستم RHEL خود داریم – ens160و ens224.
شما میتوانید با استفاده از دستور زیر، رابطهای شبکه را فهرست کنید:
ip link
یا
ip link show

برای تأیید مناطق فعال، دستور زیر را اجرا کنید:
firewall-cmd --get-active-zones

در اینجا، میتوانید ببینید که دو رابط – ens160و ens224– توسط منطقه عمومی مرتبط و مدیریت میشوند.
برای چاپ پیکربندی منطقه پیشفرض، دستور را اجرا کنید.
sudo firewall-cmd --list-all

از خروجی میتوانیم ببینیم که فقط یک منطقه فعال به نام داریم publicکه منطقه پیشفرض مرتبط با هر دو رابط شبکه نیز هست.
تغییر مناطق برای رابطهای شبکه #
وقتی یک فایروال شروع به کار میکند، هر رابط شبکه به منطقه پیشفرض متصل میشود که اتفاقاً تنها منطقه فعال نیز هست. در صورت تمایل، میتوانید در طول یک جلسه با استفاده از --zone=پرچم ** در ترکیب با --change-interface=پرچم، یک رابط را به منطقه دیگری متصل کنید.
برای مثال، برای انتقال ens160رابط به internalمنطقه، دستور زیر را اجرا کنید:
sudo firewall-cmd --change-interface=ens160 --zone=internal
برای تأیید جابجایی رابط، با استفاده از دستور زیر، مناطق فعال را جستجو کنید.
sudo firewall-cmd --get-active-zones

از خروجی میتوانید ببینید که اکنون دو منطقه فعال داریم: internalو public. ens160رابط اکنون به منطقه منتقل شده است internal.
شما میتوانید پیکربندیهای خاص مرتبط با یک منطقهی متفاوت را با استفاده از --zone=پرچم موجود در --list-allدستوری که قبلاً دیدیم، بررسی کنید. به عنوان مثال، برای بررسی پیکربندی مرتبط با internalمنطقه، دستور زیر را اجرا کنید:
sudo firewall-cmd --list-all --zone=internal

شما میتوانید تمام پیکربندیهای منطقه را با استفاده از --list-all-zonesپارامتر نشان داده شده چاپ کنید.
sudo firewall-cmd --list-all-zones
خروجی نمایش داده شده بسیار بزرگ است. برای مشاهده آسانتر، میتوانید خروجی را به ** متصل کنید lessکه امکان مشاهده آسانتر را هنگام پیمایش در تنظیمات فراهم میکند.
sudo firewall-cmd --list-all-zones | less
توجه:
هنگام انتقال یک رابط به یک منطقه جدید، باید احتیاط کرد زیرا برخی از سرویسهای مرتبط با یک منطقه ممکن است در منطقه دیگری وجود نداشته باشند. به عنوان مثال، انتقال یک رابط به trustedمنطقه ** باعث قطع اتصال SSH شما میشود زیرا SSH به طور پیشفرض در آن منطقه فعال نیست. در نتیجه، از سرور خارج خواهید شد.
تنظیم منطقه پیشفرض #
پارامتر ** --set-default-zone=به شما امکان میدهد منطقه پیشفرض را تغییر دهید. در این مثال، ما منطقه پیشفرض را روی تنظیم میکنیم work.
sudo firewall-cmd --set-default-zone=work
برای تأیید اینکه این منطقه پیشفرض است، دستور زیر را اجرا کنید:
sudo firewall-cmd --list-all

مدیریت سرویس فایروال #
سرویسها به سادگی سرویسهایی هستند که در پسزمینه اجرا میشوند. هر سرویس با یک پورت خاص مرتبط است. به عنوان مثال، SSH روی پورت ۲۲، HTTP روی پورت ۸۰ و cockpit روی پورت ۹۰۹۰ اجرا میشود که چند نمونه از آنها هستند.
برای فهرست کردن تمام سرویسهای مرتبط با مناطق فعال فایروال، دستور زیر را اجرا کنید:
sudo firewall-cmd --list-all

برای محدود کردن و فهرست کردن سرویسهایی که به یک منطقه خاص متصل هستند، از --zone=flag همانطور که نشان داده شده است استفاده کنید. دستور زیر سرویسهای مرتبط با homeمنطقه فایروال را فهرست میکند.
sudo firewall-cmd --list-all --zone=home

اگر به اندازه کافی مشتاق باشید، متوجه خواهید شد که برخی سرویسها به طور پیشفرض در برخی مناطق مجاز هستند. این سرویسها شامل cockpit، SSH و dhcpv6-client میشوند.
نحوه فهرست کردن سرویسهای پشتیبانی شده توسط Firewalld #
برای نمایش تمام سرویسهای پشتیبانیشده توسط Firewalld، دستور زیر را اجرا کنید:
sudo firewall-cmd --get-services

علاوه بر این، میتوانید جستجوی خود را به یک سرویس خاص محدود کنید. دستور زیر سرویس MongoDB را از بین سرویسهای فهرست شده، هایلایت میکند.
sudo firewall-cmd --get-services | grep -i mongodb
نحوه اضافه کردن/حذف سرویسها در Firewalld #
وقتی سرویسها/پورتها به فایروال اضافه میشوند، به منطقه فعال پیشفرض متصل میشوند، مگر اینکه صریحاً به منطقه دیگری پیکربندی شده باشند. برای فعال کردن یک سرویس برای یک منطقه، از --add-service=پارامتر استفاده کنید. منطقه با استفاده از --zone=پارامتر مشخص میشود.
فرض کنید شما یک وب سرور دارید که سرویس HTTP معمولی را اجرا میکند. برای اجازه دادن به سرویس HTTP در فایروال در منطقه پیشفرض – عمومی – دستور زیر را اجرا کنید.
sudo firewall-cmd --add-service=http --zone=public --permanent
این --permanentگزینه باعث میشود تغییر پایدار بماند. برای اینکه تغییر ایجاد شده حتی پس از راهاندازی مجدد اعمال شود، فایروال را مجدداً بارگذاری کنید.
sudo firewall-cmd --reload

شما باید successبه عنوان خروجی هر دستور، پیامی دریافت کنید که نشان میدهد همه دستورات با موفقیت اجرا شدهاند. اکنون منطقه عمومی شما باید سرویس HTTP را از طریق فایروال مجاز کند و میتوانید با استفاده از دستور زیر این موضوع را تأیید کنید.
sudo firewall-cmd --list-services --zone=public

برای حذف سرویس از منطقه، از --remove-serviceپرچم استفاده کنید و فایروال را مجدداً بارگذاری کنید.
sudo firewall-cmd --remove-service=http --zone=public --permanent
sudo firewall-cmd --reload

وقتی سرویسهای مجاز در فایروال را بررسی میکنید، این بار سرویس HTTP از لیست حذف خواهد شد.
نحوه باز کردن/مسدود کردن پورتها در Firewalld #
Firewalld سرویسهایی را برای برنامههای پرکاربرد ارائه میدهد که ممکن است بخواهید به آنها دسترسی داشته باشید. در بیشتر موارد، سرویسها با پورتهایی که برنامهها به آنها گوش میدهند مطابقت دارند. به عنوان مثال، پورت مربوطه برای ترافیک وب HTTP پورت ۸۰ و پورت ۳۳۰۶ برای سرویس MySQL است .
با این حال، در برخی موارد، ممکن است سرویسی پیدا نکنید که با پورتی که برنامه شما به آن گوش میدهد مطابقت داشته باشد. برای مثال، اگر برنامه شما به پورت ۵۰۰۰ گوش میدهد، میتوانید این پورت را با استفاده از --add-port=پرچم ** باز کنید. پورتها میتوانند TCP یا UDP باشند.
sudo firewall-cmd --add-port=5000/tcp --zone=public --permanent
برای حفظ تغییرات حتی پس از راهاندازی مجدد، فایروال را مجدداً بارگذاری کنید.
sudo firewall-cmd --reload

برای تأیید باز بودن پورت در منطقه، دستور زیر را اجرا کنید.
sudo firewall-cmd --zone=public --list-ports

علاوه بر این، میتوانید با جدا کردن پورت ابتدا و انتهایی در محدوده با یک خط فاصله، طیف وسیعی از پورتها را مشخص کنید. به عنوان مثال، برای باز کردن طیف وسیعی از پورتها بین ۵۰۰۰ تا ۶۰۰۰ در منطقه عمومی، دستورات زیر را اجرا کنید:
sudo firewall-cmd --add-port=5000-6000/tcp --zone=public --permanent
sudo firewall-cmd --reload
باز هم، میتوانید با اجرای دستور زیر این موضوع را تأیید کنید:
sudo firewall-cmd --zone=public --list-ports

برای مسدود کردن یا رد کردن یک پورت، از --remove-port=پارامتر استفاده کنید. به عنوان مثال، برای مسدود کردن پورت TCP 5000 در منطقه عمومی، دستور زیر را اجرا کنید:
sudo firewall-cmd --remove-port=5000/tcp --zone=public --permanent
سپس فایروال را مجدداً بارگذاری کنید تا تغییرات اعمال شوند.
sudo firewall-cmd --reload
نتیجه گیری #
در حال حاضر شما باید درک روشنی از نحوه پیکربندی سرویس firewalld در سیستم لینوکس خود برای مدیریت ترافیک بر اساس تنظیمات برگزیده خود داشته باشید. سرویس فایروال مجموعهای غنی از قوانین را ارائه میدهد که میتوانند بر روی رابطها و مناطق اعمال شوند و به مدیران انعطافپذیری و استقلال لازم را برای مدیریت ترافیک شبکه میدهند.
