فهرست مندرجات
آموزش و گذری بر دیوار آتش FirewallD
این آموزش تلفیق ۳ آموزش موجود در fedorafans است امیدوارم که مفید واقع بشه
در نسخه های جدید فدورا و توزیع های هم خانواده ی آن یعنی سری هفت توزیع هایی چون RHEL
و CentOS
از firewalld
به عنوان دیوار اتش استفاده می شود که در واقع جایگزینی برای iptables
می باشد.
از این رو قصد دارم تا در این مطلب به صورت کاملا خلاصه گذری بر نحوه نصب و بررسی وضعیت و همچنین باز کردن پورت های مورد نیاز در firewalld
را خدمت شما عزیران آموزش دهم.
همانطور که گفته شد firewalld
به صورت پیش فرض روی فدورا و سری جدید توزیع های هم خانواده خود نصب می باشد.ولی به هر حال برای نصب firewalld می توانید از این دستور استفاده کنید :
yum install firewalld
اگر از دستور dnf ( مدیریت بسته ) استفاده می کنید کافیست تا از این دستور استفاده کنید :
dnf install firewalld
اگر از میزکارهای گرافیکی استفاده می کنید،جهت استفاده از رابط کاربری گرافیکی firewalld کافیست تا آن را از طریق منو های میزکار خود اجرا کنید و یا این دستور را اجرا کنید تا رابط گرافیکی firewalld را مشاهده کنید :
firewall-config
برای استفاده از firewalld در خط فرمان باید از دستور firewall-cmd استفاه کرد.
نمایش نسخه
-> $firewall-cmd -V 0.5.2
نمایش help
-> $man firewall-cmd Usage: firewall-cmd [OPTIONS...] General Options -h, --help Prints a short help text and exists -V, --version Print the version string of firewalld -q, --quiet Do not print status messages Status Options --state Return and print firewalld state --reload Reload firewall and keep state information --complete-reload Reload firewall and lose state information --runtime-to-permanent Create permanent from runtime configuration
بررسی وضعیت firewalld
-> $firewall-cmd --state running
نمایش Zone فعال
جهت نمایش Zone فعال و رابط های شبکه ای که به آن تخصیص داده شده است از این دستور استفاده کنید :
-> $sudo firewall-cmd --get-active-zones public interfaces: wlp3s0
تعیین کردن یک zone به عنوان zone پیش فرض
firewall-cmd --set-default-zone=<zone>
فهمیدن اینکه یک رابط شبکه (NIC) به کدام Zone اختصاص داده شده است
firewall-cmd --get-zone-of-interface=eth0
نکته اینکه بجای eth0 باید نام رابط شبکه ی مورد نظر خود را نوشت.
نمایش لیستی از رابط های شبکه که به یک Zone اختصاص داده شده
firewall-cmd --zone=public --list-interfaces
نکته اینکه بجای public می توان نام zone مورد نظر خود را نوشت.
اضافه کردن یک رابط شبکه (NIC) به یک zone
firewall-cmd [--zone=<zone>] --add-interface=<interface>
توجه داشته باشید اگر zone مشخص نشود از zone پیش فرض استفاده خواهد شد.
نمایش همه ی تنظیمات یک zone
firewall-cmd --zone=public --list-all
نکته اینکه بجای public می توان نام zone مورد نظر خود را نوشت.
Runtime zone handling و Permanent zone handling
باز کردن پورت و یا فعال کردن یک سرویس در firewalld می توان به دو صورت Runtime
و یا Permanent
باشد که در حالت اول پس از reload کردن و یا restart کردن firewalld آن roule غیر فعال می شود ولی در حالت Permanent تغییرات به صورت دائمی می باشد.
Runtime zone handling
دستور کلی برای فعال کردن سرویس در حالت Runtime به این صورت می باشد :
firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]
اگر در دستور بالا zone نوشته نشود از zone پیشفرض استفاده خواهد شد.
اگر از timeout استفاده شود به این معنا می باشد که سرویس مورد نظر تا همان مقدار ثانیه که تعیین می کنیم فعال خواهد بود.
به عنوان نمونه برای فعال کردن سرویس http برای 60 ثانیه این دستور را اجرا کنید :
firewall-cmd --zone=home --add-service=http --timeout=60
فعال کردن سرویس http در zone پیش فرض
firewall-cmd --add-service=http
دستور کلی برای غیر فعال کردن در یک zone
firewall-cmd [--zone=<zone>] --remove-service=<service>
توجه داشته باشید اگر zone مشخص نشود از zone پیش فرض استفاده خواهد شد.
غیر فعال کردن سرویس http در zone home
firewall-cmd --zone=home --remove-service=http
پرس و جو در مورد اینکه آیا یک سرویس در zone مورد نظر فعال هست یا نه
firewall-cmd [--zone=<zone>] --query-service=<service>
Permanent zone handling
حالت Permanent
که در واقع حالت دائمی برای تغییرات می باشد که برای اعمال تغییرات حتما نیاز هست تا از reload یا restart استفاده شود.
لیست سرویس هایی که از permanent پشتیبانی می کنند
firewall-cmd --permanent --get-services
نمایش لیستی از zone ها که از permanent پشتیبانی می کنند
firewall-cmd --permanent --get-zones
فعال کردن سرویس در یک zone
firewall-cmd --permanent [--zone=<zone>] --add-service=<service>
توجه داشته باشید اگر zone مشخص نشود از zone پیش فرض استفاده خواهد شد.
به عنوان نمونه برای فعال کردن سرویس http
در zone home از این دستور می توان استفاده کرد :
firewall-cmd --permanent --zone=home --add-service=http
دستور کلی برای غیر فعال کردن یک سرویس
firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
پرس و جو کردن یک سرویس در zone مورد نظر فعال هست یا نه
firewall-cmd --permanent [--zone=<zone>] --query-service=<service>
فعال کردن پورت و پروتکل در یک zone به صورت permanent
firewall-cmd --permanent [--zone=<zone>] --add-port=<port>[-<port>]/<protocol>
اکنون به عنوان مثال برای باز کردن پورت 80 از نوع tcp
در zone public باید از این دستور استفاده کرد :
firewall-cmd --permanent --zone=public --add-port=80/tcp
برای باز کردن پورت 5060 از نوع tcp و udp باید این دستورها را اجرا کرد :
firewall-cmd --permanent --zone=public --add-port=5060/tcp firewall-cmd --permanent --zone=public --add-port=5060/udp
باز کردن رنجی از پورت ها
firewall-cmd --permanent --zone=public --add-port=10000-20000/udp
غیرفعال کردن یک پورت و پروتکل
firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
جهت غیر فعال کردن یک پورت (به عنوان مثال پورت ۸۰) از دستور پایین می توان استفاده کرد :
firewall-cmd --permanent --zone=public --remove-port=80/tcp
پرس و جو کردن اینکه یک پورت و پروتکل در حالت permanent در یک zone فعال می باشد یا نه
firewall-cmd --permanent [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
توجه داشته باسید پس ازفعال و یا غیر فعال کردن پورت ها و یا هر تغییری این دستور را جهت اعمال سازی اجرا کنید :
firewall-cmd --reload
مشاهده ی تغییرات انجام شده روی zone
firewall-cmd --zone=public --list-all
فعال و غیرفعال کردن Masquerading
ابتدا بررسی کنید که IP address masquerading
برای zone مورد نظر فعال باشد که برای اینکار می توانید از دستور زیر استفاده نمایید :
firewall-cmd --zone=public --list-all
نکته اینکه به جای public باید zone مورد نظر خود را بنویسید.یک نمونه خروجی از اجرای دستور بالا را در پایین مشاهده می کنید :
# firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: dhcpv6-client ssh ports: 2003/tcp 2004/tcp 8126/tcp 80-81/tcp 8125/udp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
همانطور که در خروجی دستور مشاهده می کنید masquerade: no می باشد. همچنین می توانید از دستور پایین نیز استفاده کنید :
firewall-cmd --zone=public --query-masquerade
یک نمونه خروجی از اجرای دستور گفته شده را در پایین مشاهده می کنید :
firewall-cmd --zone=public --query-masquerade no