ابزار 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 به صورت پیشفرض در بسیاری از سیستمعاملها نصب میشود. ولی شاید برخی سیستمهای سبک و جمعوجور آن را نصب نکنند. در هر صورت، نصب این ابزار از طریق فرمان زیر ممکن خواهد بود.
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
پس از نصب ابزار firewall، باید آن را راهاندازی کنید. همچنین باید آن را به گونهای تنظیم کنید که پس از هر بار راهاندازی سیستم، فعال شود.
sudo systemctl start firewalld sudo systemctl enable firewalld
برای بررسی وضعیت firewalld، از فرمان زیر کمک بگیرید.
systemctl status firewalld
و یا:
firewall-cmd –state
گام ۲) کار با نواحی و سرویسها
در firewalld به صورت پیشفرض از ناحیه Public استفاده میشود. تمام رابطهای کاربری شبکه با ناحیه public تنظیم شدهاند. برای تهیه لیست نواحی پیشفرض، داریم:
firewall-cmd --get-default-zone
خروجی
public
سپس برای دریافت فهرتسی از نواحی فعال، میتوانید فرمان زیر را تایپ کنید.
firewall-cmd --get-active-zones
شما بایستی خروجی زیر را مشاهده کنید.
public interfaces: eth0 eth1
برای اینکه لیست تمام نواحی در دسترس را ببینید، فرمان زیر را اجرا نمایید.
firewall-cmd --get-zones
خروجی چیزی شبیه به زیر خواهد بود.
block dmz drop external home internal public trusted work
فرمان زیر نیز برای مشاهده تمام سرویسهای مرتبط با یک ناحیه public است.
firewall-cmd --list-all
شما باید خروجیای مطابق زیر دریافت کنید.
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:
برای اینکه ناحیه پیشفرض را از public به work تغییر دهیم، داریم:
firewall-cmd --set-default-zone=work
حالا میتوانید با استفاده از فرمان زیر بررسی کنید که ناحیه پیشفرض تغییر کرده است یا خیر.
firewall-cmd --get-default-zone
خروجی
work
میتوانید با استفاده از فرمان زیر از تمام سرویس های موجود در سیستمتان فهرست تهیه کنید.
firewall-cmd --get-services
در این حالت، خروجی زیر را دریافت میکنید.
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
گام ۳) تأییدیه ورودی در ابزار Firewalld
شما بر اساس سرویسهای از پیش تعریفشده در firewalld میتوانید ترافیک ورودی را کنترل کنید. به عنوان مثال، برای دادن مجوّز به تمام ترافیک ورودی سرویس http در ناحیه public، فرمان زیر را تایپ نمایید.
firewall-cmd --zone=public --add-service=http
خروجی
success
برای تأیید ترافیک ورودی سرویس FTP در ناحیه public نیز از فرمان زیر استفاده میکنیم.
firewall-cmd --zone=public --add-service=ftp
خروجی
success
فرمان بالا سرویسهای http و ftp را به صورت موقت اضافه میکند. به این معنا که پس از هر بار راهاندازی، دوباره باید این تنظیم را انجام دهید. در نتیجه، برای تنظیم همیشگی این سرویسها باید از گزینه –permanent در فرمان استفاده کنید.
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=ftp
حالا با استفاده از فرمان زیر، تغییرات صورتگرفته را به کار بگیرید.
firewall-cmd --reload
اکنون با فرمان زیر لیستی از سرویسهای اضافهشده دریافت کنید.
firewall-cmd --permanent --zone=public --list-services
شما باید خروجیای مطابق زیر ببینید.
cockpit dhcpv6-client ftp http ssh
همچنین میتوانید با استفاده از فرمان زیر، اطلاعات جزئی ناحیه public را بررسی نمایید.
firewall-cmd --info-zone public
خروجی
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:
اگر بخواهید هر کدام از سرویسهای بالا را در ابزار firewalld حذف و یا متوقف کنید، گزینه –remove-service در اختیار شماست.
firewall-cmd --permanent --zone=public --remove-service=http firewall-cmd --permanent --zone=public --remove-service=ftp
در مرحله بعد، برای اِعمال تغییرات، فرمان زیر را اجرا کنید.
firewall-cmd --reload
گام ۴) تأیید پورتها در Firewalld
امکان تأیید ترافیک ورودی به ابزار firewalld بر اساس پورت نیز وجود دارد. به عنوان مثال، اگر بخواهید به ترافیک ورودی از پورتهای 8080 و 443 مجوّز بدهید، باید فرمان زیر را تایپ کنید.
firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=8080/tcp
سپس، برای ذخیرهشدن تغییرات، فرمان زیر اجرا میشود.
firewall-cmd –reload
حالا باید بررسی کنید که پورتهایی اضافه شدهاند. این امر با استفاده از فرمان زیر صورت میگیرد.
firewall-cmd --permanent --zone=public --list-ports
خروجی
443/tcp 8080/tcp
به همین ترتیب، حذف و توقف پورتهای بالا در ابزار firewalld با استفاده از فرمان –remove-port انجام میشود.
firewall-cmd --permanent --zone=public --remove-port=443/tcp firewall-cmd --permanent --zone=public --remove-port=8080/tcp
اکنون فرمان زیر را اجرا کنید تا تغییرات ذخیره شوند.
firewall-cmd --reload
گام ۵) فرآیند Port Forwarding در Firewalld
Port forwarding پروسهای است که در آن درخواستها از IP یا پورت گرفته میشود و به یک IP یا پورت متفاوت منعکس میگردد. این تکنیک به سیستمهای ریموت اجازه میدهد که در یک شبکه خصوصی، به یک سرویس خاص متصل شوند.
قبل از انجام تنظیمات port forwarding، باید ویژگی masquerade را در ناحیه دلخواهتان فعال کنید. این کار با استفاده از گزینه –add-masquerade ممکن خواهد بود.
firewall-cmd --zone=public --add-masquerade
سپس برای فوروارد کردن پورت 80 به پورت 8080 در همان سرور، از فرمان زیر استفاده کنید.
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
اگر بخواهید ترافیک پورت محلی 80 را به پورت 8080 در یک سرور ریموت با استفاده از آیپی 192.168.1.200 فوروارد کنید، باید فرمان زیر را اجرا کنید.
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
حالا فرمان زیر را اجرا کنید تا تغییرات اِعمال شوند.
firewall-cmd --reload
اگر میخواهید، قوانین بالا را لغو کنید، مطابق زیر، گزینه –add را با –remove جایگزین کنید.
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
جمعبندی
در مطلب آموزشی بالا، شما با مفاهیم پایه ابزار Firewalld آشنا شدید. همچنین نحوه بهکارگیری این ابزار را در سیستمعامل لینوکس مشاهده کردید. امیدواریم که این مطلب مور استفاده شما قرار گرفته باشد و بتوانید ترافیکهای غیرضروری را با استفاده از firewalld حذف کنید.