امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

Firewalld چیست؟ آموزش کار با Firewalld و سرویس هایش

همانطور که میدانید فایروال نرم افزار یا سخت افزاری هست که شبکه شما را از دسترسی ها و ترافیک های غیر مجاز خارجی حفظ می کند و عضو جدایی ناپذیر از شبکه شما محسوب می شود. همه سیستم عامل ها یک فایروال داخلی درون خودشان دارند و سیستم عامل لینوکس نیز از این قاعده مستثنی نیست و فایروال firewalld یکی از این فایروال ها می باشد. firewalld با زبان برنامه نویسی پایتون نوشته شده است و تحت لیسانس GNU GPL 2 می باشد. firewalld هم از IPv4 و هم از IPv6 پشتیبانی می کند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

در فایروال های لینوکسی مفهومی هست به نام Zone ها و ادمین های سیستم می توانند هر یک از Zone ها را توسط Rule ها پیکربندی کنند. این Rule ها هستند که به فایروال می گویند چه ترافیک هایی اجازه ورود یا خروج دارند و چه ترافیک هایی اجازه ورود و خروج به سیستم را ندارند. مطابق با استاندارد های NIST 800-171 و 53-800 به صورت پیش فرض firewalld ترافیک outbound یا خروجی از سیستم را Block یا مسدود نمی کند اما شما با استفاده از نوشتن Policy ها می توانید ترافیک های outbound را با توجه به نیازتان نیز مسدود کنید.

دوستان عزیز ، firewalld در سیستم عامل لینوکس سرویس (daemon) فایروال هست که به عنوان یک فایروال Host-based که توسط اینترفیس D-bus کنترل می شود. همانطور که در بالا ذکر شد فایروال ها از یکسری Rule های از پیش تعریف شده به همراه Zone ها استفاده می کنند درست همانطور که هر سرویس از یک پورت خاص برای انجام کارش استفاده می کند.

ما میتوانیم هر ترافیکی که میخواهد وارد سیستم شود را اجازه عبور بدهیم و یا برعکس میتوانیم ورود ترافیک را بر اساس شماره پورت مربوطه مسدود کنیم. به عنوان مثال ، اگر شما نمیخواهید هیچ کسی به سیستم شما SSH connection بزند میتوانید شماره پورت 22 را Block یا مسدود کنید. و اینگونه میتوانید مطمئن شوید که هیچ شخصی نمیتواند به سیستم تان از بیرون با SSH متصل شود.

Zone ها

سرویس firewalld از مفهوم zone ها برای کارش استفاده می کند. ما اینترفیس های شبکه را میتوانیم به Zone ها اختصاص دهیم و میتوانیم تصمیم بگیریم که کدام نوع ترافیک میتواند وارد شبکه ما شود. ما با استفاده از Network Manager میتوانیم اینترفیس های شبکه مان را با استفاده از دستور firewall-cmd به Zone های خاصی نسبت دهیم. firewall-cmd یکی از ابزار های خط فرمانی بسیار معروف و پرکاربرد در سیستم عامل لینوکس هست. Default Zone های firewalld در دایرکتوری /usr/lib/firewalld/zones/ ذخیره می شوند. حالا بیاید چند نمونه از Zone های از پیش تعریف شده در firewalld را با هم بررسی کنیم :

  • Block : در این zone ، هر connection ورودی توسط پیامی با عنوان  icmp-host-prohibited ریجکت یا مسدود می شود. و تنها connection های آغاز شده درون خود سیستم اجازه برقراری ارتباط خواهند داشت.
  • DMZ : همانطور که میدانید DMZ مخفف DeMilitarized Zone است برای سیستم هایی که ارتباطات محدود در شبکه داخلی را دارند این zone تنها connection های از پیش انتخاب شده را اجازه برقراری ارتباط میدهد. 
  • Drop : در این zone ترافیک ها بدون هیچگونه اطلاع رسانی drop خواهند شد. اما ترافیک های خروجی اجازه عبور خواهند داشت.
  • Public : این zone همانطور که میدانید برای دیوایس های موجود در شبکه اینترنت استفاده می شود. همانطور که انتظار میرود بیشتری سختگیری ها برای این zone در نظر گرفته می شود.
  • Trusted : در این zone همه connection ها و ترافیک ها اجازه عبور دارند.

نکته : هر یک از این zone ها با توجه به نیاز کاربر میتواند به عنوان zone پیش فرض سیستم در نظر گرفته شود. Public zone بعد از راه اندازی firewalld به عنوان Default Zone سیستم در نظر گرفته می شود زیرا همانطور که قبلا نیز گفته شد بیشترین سخت گیری برای این نوع zone است. اگر چه شما میتوانید این پیش فرض را بنا به نیاز خود تغییر دهید.

کار با Firewall Rules در سیستم عامل لینوکس توزیع Red Hat Enterprise

حالا که مفاهیم اولیه firewalld را میدانیم دیگر بهتر است به سراغ تشریح استفاده از دستورات این سرویس برویم و برایتان بگوییم که چگونه می توان سرویس های مختلف این فایروال را اضافه یا کم کنیم. ابتدا به ساکن به سراغ مشاهده وضعیت سرویس میرویم. برای اینکه status یا وضعیت سرویس را مشاهده کنید یکی از دو دستور زیر را اجرا کنید :

# systemctl status firewalld
# firewall-cmd --state running

خروجی این دستور به صورت زیر است :

firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service;
enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-13 18:19:05 CET; 4
months 4 days ago

برای مشاهده اطلاعات مربوط به default zone از دستور زیر میتوانید استفاده کنید :

# firewall-cmd --list-all

خروجی این دستور به صورت زیر است :

public (active)
target: default
icmp-block-inversion: no
interfaces: baremetal cni-podman0 eno1 eno2 eno3 provisioning
sources:   services: cockpit dhcpv6-client http ssh
ports: 8080/tcp 80/tcp 80/udp 67/udp 68/udp protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

همانطور که در خروجی فوق مشاهده می کنید Public zone به عنوان Default Zone ست شده است. همچنین اینترفیس یا همان کارت شبکه های اختصاص یافته به این zone به همراه پورت های فعال شده و سرویس های تخصیص یافته را نیز میتوانید در خروجی دستور مشاهده کنید. 


شما برای اینکه اطلاعات مربوط به یک zone بخصوصی را بخواهید مشاهده کنید میتوانید از دستور زیر استفاده کنید :

# firewall-cmd --list-all --zone=MyHome

برای اینکه در زمان startup سیستم بخواهید سرویس firewalld استارت و عملیاتی شود میتوانید از دستور زیر استفاده کنید :

# systemctl enable firewalld 
# systemctl start firewalld

برای غیرفعال و متوقف کردن سرویس firewalld از دستور زیر استفاده می کنیم :

# systemctl disable firewalld 
# systemctl stop firewalld

برای نمایش تمامی Zone های ساخته شده توسط firewalld از دستور زیر استفاده می کنیم :

# firewall-cmd --list-all-zones


اضافه کردن پورت ها و سرویس ها به Zone و Permanent کردن آنها

حالا بیایید چند سرویس و پورت به یک Zone خاص اضافه کنیم و آنها را permanent کنیم. permanent کردن در سرویس firewalld به معنای این است که کاری کنیم که پورت ها و سرویس هایی که Assign شده مان بعد از Reboot شدن سیستم از بین نرود و بعبارتی اطلاعاتش به جای حافظه RAM در هارد دیسک نوشته شود. خوب برای باز یا بستن پورت ها با استفاده از firewalld از دستورات زیر استفاده می کنیم :

# firewall-cmd --list-ports         
# firewall-cmd --add-port <port-number/port-type> --permanent
# firewall-cmd --reload

همانطور که میدانید Port ها دیوایس های منطقی ای هستند که سیستم عامل را قادر میسازند تا ترافیک های ورودی را دریافت کنند و به سرویس های سیستم انتقال دهند. معمولا این سرویس ها روی پورت های استاندارد به درخواست ها گوش میدهند. برای مثال HTTP روی پورت 80 و HTTPS روی پورت 443 به درخواست ها گوش میدهد. در مثال زیر میخواهیم پورت 443 را به Default Zone سیستم یعنی Public Zone اضافه کنیم و آنرا Permanent کنیم :

# firewall-cmd --add-port 443/tcp --zone=public --permanent 
# firewall-cmd --reload

در دستور دوم سرویس firewalld را Reload می کنیم تا تغییرات روی سرویس اعمال شود. شما با استفاده از آپشن remove-port-- میتوانید پورت مربوطه را از Zone مربوطه حذف کنید. یادتان نرود که در آخر سرویس را Reload کنید.


استفاده از Rich Rule ها در firewalld

Rich Rule ها در سرویس firewalld دارای یکسری قابلیت های پیشرفته در خصوص filtering پکت ها یا بسته های اطلاعاتی هستند. با استفاده از Rich rule ها ما میتوانیم اجازه عبور Packet هایی با آدرس های IP خاص و یا رنج های خاص آدرس IP را بدهیم. با اجرای دستور زیر میتوانید Rich Rule فعلی ست شده روی سیستم تان را مشاهده کنید :

# firewall-cmd --list-rich-rules

حالا در مثال زیر در سیستم تعریف می کنیم که اجازه عبور ترافیک SSH را فقط از آدرس 10.1.111.21 بده و SSH connection دیگر IP را Block کن :

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.1.111.21/24 service name=ssh log prefix="SSH Logs" level="notice" accept'

به عنوان مثالی دیگر ، در دستور زیر بسته های Ping از طرف تمامی سیستم ها با نشان دادن یک پیغام خطا reject می شود :

# firewall-cmd --add-rich-rule='rule protocol value=icmp reject'

و در مثال زیر ترافیک های ورودی از طرف آدرس 172.92.10.90/32 و با پورت 21 ریجکت می شود و برای سایر ترافیک ها اجازه عبور داده می شود :

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.92.10.90/32 port port=21 protocol=tcp  reject'

امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

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

نظرات