فهرست مندرجات

آموزش و گذری بر دیوار آتش 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

Port Forwarding در دیوار آتش FirewallD