ابزار Firewalld یک فرمول مدیریتی فایروال برای بسیاری از توزیعهای لینوکس شامل اوبونتو، دبیان، CentOS، RHEL و فدورا محسوب میشود. عملکرد این ابزار بر اساس سیستم فیلترینگ IP کرنل لینوکس است. همچنین ابزار Firewalld به صورت مستقل از پروتکل عمل میکند. به این معنا که از پروتکلهای IPv4، IPv6، ethernet bridge ها و IP set ها پشتیبانی میکند.
مفاهیم پایه ابزار Firewalld
ابزار Firewalld به جای زنجیره و قوانین iptable ها، از مفهوم نواحی و سرویسها استفاده میکند. نواحی یا Zone ها مجموعهای از قوانین هستند که ترافیکهای قابلقبول در شبکه را مشخص میکنند. این ترافیک بر اساس میزان اعتمادی که به کامپیوترهای شبکه دارید، تعیین میشود. رابط های کاربری شبکه یک ناحیه برای یک رفتار خاص تعریف میکنند. فایروال باید به این رفتار خاص اجازه فعالیت بدهد.
مدیریت ابزار FirewallD از طریق فرمان firewall-cmd امکانپذیر است. از طریق این فرمان میتوانید به مدیریت تنظیمات آنی و همیشگی این ابزار بپردازید.
نواحی Firewalld
تعداد ۹ ناحیه از پیش تعریفشده در ابزار Firewalld وجود دارد. این نواحی سطح اعتماد به صورت صعودی مرتب میشوند. در ادامه، توضیح مختصری در مورد هر کدام از این نواحی ارائه میکنیم.
Drop: این ناحیه دارای کمترین سطح اعتماد است و برای چشمپوشی از تمام ترافیکهای ورودی به کار میرود. در این حالت، هیچگونه پیامی مبنی بر قدردانی به فرستنده ارسال نمیشود.
Block: این ناحیه بسیار شبیه به Drop است. ترافیک ورودی پس زده میشود و در همین حال، فرستنده یک پیام دریافت میکند.
Public: ناحیه دارای مجوز ترافیک ورودی از برخی شبکههای پابلیک خاص.
External: این ناحیه زمانی استفاده میشود که سیستم شما به عنوان یک درگاه یا روتر عمل میکند.
Internal: مجموعهای از قوانین که در کامپیوترهای یک شبکه داخلی خصوصی اِعمال میشود.
DMZ: این ناحیه یک مجموعه ایزوله از کامپیوترهای شبکه داخلی شماست که ممکن است از طریق سایر منابع داخلی قابلدسترسی نباشد.
Work: این ناحیه برای سیستمهای کاری استفاده میشود. سطح اعتماد در این ناحیه بسیار بالاست.
Home: بسیاری از کامپیوترها در این ناحیه به یکدیگر اعتماد دارند. سطح اعتماد در اینجا بالاتر از ناحیه Work است.
Trusted: این ناحیه دارای بالاترین سطح اعتماد است. تمام کامپیوترها در شبکه مورد اعتماد هستند.
گام ۱) نصب ابزار Firewalld
Firewalld به صورت پیشفرض در بسیاری از سیستمعاملها نصب میشود. ولی شاید برخی سیستمهای سبک و جمعوجور آن را نصب نکنند. در هر صورت، نصب این ابزار از طریق فرمان زیر ممکن خواهد بود.
[php]
sudo yum install firewalld # CentOS/RHEL 8/7/6
sudo dnf install firewalld # Fedora and CentOS/RHEL 8
sudo apt install firewalld # Ubuntu and Debian
[/php]
پس از نصب ابزار firewall، باید آن را راهاندازی کنید. همچنین باید آن را به گونهای تنظیم کنید که پس از هر بار راهاندازی سیستم، فعال شود.
[php]
sudo systemctl start firewalld
sudo systemctl enable firewalld
[/php]
برای بررسی وضعیت firewalld، از فرمان زیر کمک بگیرید.
[php]
systemctl status firewalld
[/php]
و یا:
[php]
firewall-cmd –state
[/php]
گام ۲) کار با نواحی و سرویسها
در firewalld به صورت پیشفرض از ناحیه Public استفاده میشود. تمام رابطهای کاربری شبکه با ناحیه public تنظیم شدهاند. برای تهیه لیست نواحی پیشفرض، داریم:
[php]
firewall-cmd –get-default-zone
[/php]
خروجی
[php]
public
[/php]
سپس برای دریافت فهرتسی از نواحی فعال، میتوانید فرمان زیر را تایپ کنید.
[php]
firewall-cmd –get-active-zones
[/php]
شما بایستی خروجی زیر را مشاهده کنید.
[php]
public
interfaces: eth0 eth1
[/php]
برای اینکه لیست تمام نواحی در دسترس را ببینید، فرمان زیر را اجرا نمایید.
[php]
firewall-cmd –get-zones
[/php]
خروجی چیزی شبیه به زیر خواهد بود.
[php]
block dmz drop external home internal public trusted work
[/php]
فرمان زیر نیز برای مشاهده تمام سرویسهای مرتبط با یک ناحیه public است.
[php]
firewall-cmd –list-all
[/php]
شما باید خروجیای مطابق زیر دریافت کنید.
[php]
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[/php]
برای اینکه ناحیه پیشفرض را از public به work تغییر دهیم، داریم:
[php]
firewall-cmd –set-default-zone=work
[/php]
حالا میتوانید با استفاده از فرمان زیر بررسی کنید که ناحیه پیشفرض تغییر کرده است یا خیر.
[php]
firewall-cmd –get-default-zone
[/php]
خروجی
[php]
work
[/php]
میتوانید با استفاده از فرمان زیر از تمام سرویس های موجود در سیستمتان فهرست تهیه کنید.
[php]
firewall-cmd –get-services
[/php]
در این حالت، خروجی زیر را دریافت میکنید.
[php]
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
[/php]
گام ۳) تأییدیه ورودی در ابزار Firewalld
شما بر اساس سرویسهای از پیش تعریفشده در firewalld میتوانید ترافیک ورودی را کنترل کنید. به عنوان مثال، برای دادن مجوّز به تمام ترافیک ورودی سرویس http در ناحیه public، فرمان زیر را تایپ نمایید.
[php]
firewall-cmd –zone=public –add-service=http
[/php]
خروجی
[php]
success
[/php]
برای تأیید ترافیک ورودی سرویس FTP در ناحیه public نیز از فرمان زیر استفاده میکنیم.
[php]
firewall-cmd –zone=public –add-service=ftp
[/php]
خروجی
[php]
success
[/php]
فرمان بالا سرویسهای http و ftp را به صورت موقت اضافه میکند. به این معنا که پس از هر بار راهاندازی، دوباره باید این تنظیم را انجام دهید. در نتیجه، برای تنظیم همیشگی این سرویسها باید از گزینه –permanent در فرمان استفاده کنید.
[php]
firewall-cmd –permanent –zone=public –add-service=http
firewall-cmd –permanent –zone=public –add-service=ftp
[/php]
حالا با استفاده از فرمان زیر، تغییرات صورتگرفته را به کار بگیرید.
[php]
firewall-cmd –reload
[/php]
اکنون با فرمان زیر لیستی از سرویسهای اضافهشده دریافت کنید.
[php]
firewall-cmd –permanent –zone=public –list-services
[/php]
شما باید خروجیای مطابق زیر ببینید.
[php]
cockpit dhcpv6-client ftp http ssh
[/php]
همچنین میتوانید با استفاده از فرمان زیر، اطلاعات جزئی ناحیه public را بررسی نمایید.
[php]
firewall-cmd –info-zone public
[/php]
خروجی
[php]
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: cockpit dhcpv6-client ftp http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[/php]
اگر بخواهید هر کدام از سرویسهای بالا را در ابزار firewalld حذف و یا متوقف کنید، گزینه –remove-service در اختیار شماست.
[php]
firewall-cmd –permanent –zone=public –remove-service=http
firewall-cmd –permanent –zone=public –remove-service=ftp
[/php]
در مرحله بعد، برای اِعمال تغییرات، فرمان زیر را اجرا کنید.
[php]
firewall-cmd –reload
[/php]
گام ۴) تأیید پورتها در Firewalld
امکان تأیید ترافیک ورودی به ابزار firewalld بر اساس پورت نیز وجود دارد. به عنوان مثال، اگر بخواهید به ترافیک ورودی از پورتهای 8080 و 443 مجوّز بدهید، باید فرمان زیر را تایپ کنید.
[php]
firewall-cmd –permanent –zone=public –add-port=443/tcp
firewall-cmd –permanent –zone=public –add-port=8080/tcp
[/php]
سپس، برای ذخیرهشدن تغییرات، فرمان زیر اجرا میشود.
[php]
firewall-cmd –reload
[/php]
حالا باید بررسی کنید که پورتهایی اضافه شدهاند. این امر با استفاده از فرمان زیر صورت میگیرد.
[php]
firewall-cmd –permanent –zone=public –list-ports
[/php]
خروجی
[php]
443/tcp 8080/tcp
[/php]
به همین ترتیب، حذف و توقف پورتهای بالا در ابزار firewalld با استفاده از فرمان –remove-port انجام میشود.
[php]
firewall-cmd –permanent –zone=public –remove-port=443/tcp
firewall-cmd –permanent –zone=public –remove-port=8080/tcp
[/php]
اکنون فرمان زیر را اجرا کنید تا تغییرات ذخیره شوند.
[php]
firewall-cmd –reload
[/php]
گام ۵) فرآیند Port Forwarding در Firewalld
Port forwarding پروسهای است که در آن درخواستها از IP یا پورت گرفته میشود و به یک IP یا پورت متفاوت منعکس میگردد. این تکنیک به سیستمهای ریموت اجازه میدهد که در یک شبکه خصوصی، به یک سرویس خاص متصل شوند.
قبل از انجام تنظیمات port forwarding، باید ویژگی masquerade را در ناحیه دلخواهتان فعال کنید. این کار با استفاده از گزینه –add-masquerade ممکن خواهد بود.
[php]
firewall-cmd –zone=public –add-masquerade
[/php]
سپس برای فوروارد کردن پورت 80 به پورت 8080 در همان سرور، از فرمان زیر استفاده کنید.
[php]
firewall-cmd –permanent –zone=public –add-forward-port=port=80:proto=tcp:toport=8080
[/php]
اگر بخواهید ترافیک پورت محلی 80 را به پورت 8080 در یک سرور ریموت با استفاده از آیپی 192.168.1.200 فوروارد کنید، باید فرمان زیر را اجرا کنید.
[php]
firewall-cmd –permanent –zone=public –add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
[/php]
حالا فرمان زیر را اجرا کنید تا تغییرات اِعمال شوند.
[php]
firewall-cmd –reload
[/php]
اگر میخواهید، قوانین بالا را لغو کنید، مطابق زیر، گزینه –add را با –remove جایگزین کنید.
[php]
firewall-cmd –permanent –zone=public –remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
firewall-cmd –permanent –zone=public –remove-forward-port=port=80:proto=tcp:toport=8080
[/php]
جمعبندی
در مطلب آموزشی بالا، شما با مفاهیم پایه ابزار Firewalld آشنا شدید. همچنین نحوه بهکارگیری این ابزار را در سیستمعامل لینوکس مشاهده کردید. امیدواریم که این مطلب مور استفاده شما قرار گرفته باشد و بتوانید ترافیکهای غیرضروری را با استفاده از firewalld حذف کنید.