بلاگ/ابزار Firewalld و نحوه استفاده از آن در سیستم‌عامل لینوکس
به‌روز شده

ابزار Firewalld و نحوه استفاده از آن در سیستم‌عامل لینوکس

ابزار Firewalld یک فرمول مدیریتی فایروال برای بسیاری از توزیع‌های لینوکس شامل اوبونتو، دبیان، CentOS، RHEL و فدورا محسوب می‌شود. عملکرد این ابزار بر اساس سیستم فیلترینگ IP کرنل لینوکس است. همچنین ابزار Firewalld به صورت مستقل از پروتکل عمل می‌کند. به این معنا که از پروتکل‌های IPv4، IPv6، ethernet...

1399/01/315699 بازدید
ابزار Firewalld و نحوه استفاده از آن در سیستم‌عامل لینوکس
ابزار 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/6sudo dnf install firewalld        # Fedora and CentOS/RHEL 8sudo apt install firewalld        # Ubuntu and Debian
پس از نصب ابزار  firewall، باید آن را راه‌اندازی کنید. همچنین باید آن را به گونه‌ای تنظیم کنید که پس از هر بار راه‌اندازی سیستم، فعال شود.
php
sudo systemctl start firewalldsudo systemctl enable firewalld
برای بررسی وضعیت firewalld، از فرمان زیر کمک بگیرید.
php
systemctl status firewalld
و یا:
php
firewall-cmd –state

گام ۲) کار با نواحی و سرویس‌ها

در firewalld به صورت پیش‌فرض از ناحیه Public استفاده می‌شود. تمام رابط‌های کاربری شبکه با ناحیه public تنظیم شده‌اند. برای تهیه لیست نواحی پیش‌فرض، داریم:
php
firewall-cmd --get-default-zone
خروجی
php
public
سپس برای دریافت  فهرتسی از نواحی فعال، می‌توانید فرمان زیر را تایپ کنید.
php
firewall-cmd --get-active-zones
شما بایستی خروجی زیر را مشاهده کنید.
php
publicinterfaces: eth0 eth1
برای اینکه لیست تمام نواحی در دسترس را ببینید، فرمان زیر را اجرا نمایید.
php
firewall-cmd --get-zones
خروجی چیزی شبیه به زیر خواهد بود.
php
block dmz drop external home internal public trusted work
فرمان زیر نیز برای مشاهده تمام سرویس‌های مرتبط با یک ناحیه public است.
php
firewall-cmd --list-all
شما باید خروجی‌ای مطابق زیر دریافت کنید.
php
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources:services: cockpit dhcpv6-client sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
برای اینکه ناحیه پیش‌فرض را از public به work تغییر دهیم، داریم:
php
firewall-cmd --set-default-zone=work
حالا می‌توانید با استفاده از فرمان زیر بررسی کنید که ناحیه پیش‌فرض تغییر کرده است یا خیر.
php
firewall-cmd --get-default-zone
خروجی
php
work
می‌توانید با استفاده از فرمان زیر از تمام سرویس های موجود در سیستم‌تان فهرست تهیه کنید.
php
firewall-cmd --get-services
در این حالت، خروجی زیر را دریافت می‌کنید.
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

گام ۳) تأییدیه ورودی در ابزار Firewalld

شما بر اساس سرویس‌های از پیش‌ تعریف‌شده در firewalld می‌توانید ترافیک ورودی را کنترل کنید. به عنوان مثال، برای دادن مجوّز به  تمام ترافیک ورودی سرویس http در ناحیه public، فرمان زیر را تایپ نمایید.
php
firewall-cmd --zone=public --add-service=http
خروجی
php
success
برای تأیید ترافیک ورودی سرویس FTP در ناحیه public نیز از فرمان زیر استفاده می‌کنیم.
php
firewall-cmd --zone=public --add-service=ftp
خروجی
php
success
فرمان بالا سرویس‌های http و ftp را به صورت موقت اضافه می‌کند. به این معنا که پس از هر بار راه‌اندازی، دوباره باید این تنظیم را انجام دهید. در نتیجه، برای تنظیم همیشگی این سرویس‌ها باید از گزینه –permanent در فرمان استفاده کنید.
php
firewall-cmd --permanent --zone=public --add-service=httpfirewall-cmd --permanent --zone=public --add-service=ftp
حالا با استفاده از فرمان زیر، تغییرات صورت‌گرفته را به کار بگیرید.
php
firewall-cmd --reload
اکنون با فرمان زیر لیستی از سرویس‌های اضافه‌شده دریافت کنید.
php
firewall-cmd --permanent --zone=public --list-services
شما باید خروجی‌ای مطابق زیر ببینید.
php
cockpit dhcpv6-client ftp http ssh
همچنین می‌توانید با استفاده از فرمان زیر، اطلاعات جزئی ناحیه public را بررسی نمایید.
php
firewall-cmd --info-zone public
خروجی
php
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources:services: cockpit dhcpv6-client ftp http sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
اگر بخواهید هر کدام از سرویس‌های بالا را در ابزار firewalld حذف و یا متوقف کنید، گزینه --remove-service در اختیار شماست.
php
firewall-cmd --permanent --zone=public --remove-service=httpfirewall-cmd --permanent --zone=public --remove-service=ftp
در مرحله بعد، برای اِعمال تغییرات، فرمان زیر را اجرا کنید.
php
firewall-cmd --reload

گام ۴) تأیید پورت‌ها در Firewalld

امکان تأیید ترافیک ورودی به ابزار firewalld بر اساس پورت نیز وجود دارد. به عنوان مثال، اگر بخواهید به ترافیک ورودی از پورت‌های 8080 و 443 مجوّز بدهید، باید فرمان زیر را تایپ کنید.
php
firewall-cmd --permanent --zone=public --add-port=443/tcpfirewall-cmd --permanent --zone=public --add-port=8080/tcp
سپس، برای ذخیره‌شدن تغییرات، فرمان زیر اجرا می‌شود.
php
firewall-cmd –reload
حالا باید بررسی کنید که پورت‌هایی اضافه شده‌اند. این امر با استفاده از فرمان زیر صورت می‌گیرد.
php
firewall-cmd --permanent --zone=public --list-ports
خروجی
php
443/tcp 8080/tcp
به همین ترتیب، حذف و توقف پورت‌های بالا در ابزار firewalld با استفاده از فرمان –remove-port انجام می‌شود.
php
firewall-cmd --permanent --zone=public --remove-port=443/tcpfirewall-cmd --permanent --zone=public --remove-port=8080/tcp
اکنون فرمان زیر را اجرا کنید تا تغییرات ذخیره شوند.
php
firewall-cmd --reload

گام ۵) فرآیند Port Forwarding در Firewalld

Port forwarding پروسه‌ای است که در آن  درخواست‌ها از IP یا پورت گرفته می‌شود و به یک IP یا پورت متفاوت منعکس می‌گردد. این تکنیک به سیستم‌های ریموت اجازه می‌دهد که در یک شبکه خصوصی، به یک سرویس خاص متصل شوند. قبل از انجام تنظیمات port forwarding، باید ویژگی masquerade را در ناحیه دلخواهتان فعال کنید. این کار با استفاده از گزینه --add-masquerade ممکن خواهد بود.
php
firewall-cmd --zone=public --add-masquerade
سپس برای فوروارد کردن پورت 80 به پورت 8080 در همان سرور، از فرمان زیر استفاده کنید.
php
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
اگر بخواهید ترافیک پورت محلی 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
firewall-cmd --reload
اگر میخواهید، قوانین بالا را لغو کنید، مطابق زیر، گزینه –add را با –remove جایگزین کنید.
php
firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080

جمع‌بندی

در مطلب آموزشی بالا، شما با مفاهیم پایه ابزار Firewalld آشنا شدید. همچنین نحوه به‌کارگیری این ابزار را در سیستم‌عامل لینوکس مشاهده کردید. امیدواریم که این مطلب مور استفاده شما قرار گرفته باشد و بتوانید ترافیک‌های غیرضروری را با استفاده از firewalld حذف کنید.