بررسی دیواره آتش Firewalld

firewalld یک دیواره آتش پویا می باشد که از قابلیت zone بندی برای مشخص کردن سطح اعتماد(Trust) ارتباطات و کارت های شبکه پشتیبانی می کند این دیواره آتش از آی پی نسخه 4 و 6 پشتیبانی کرده و شامل گزینه هایی پیکربندی runtime و permanent می باشد از جمله مزیت های این دیواره آتش نسبت به نسل های قبلی دیواره های آتش که به صورت static بود این است که بعد از تغییرات پیکربندی دیواره آتش نیاز به راه اندازی مجدد آن نمی باشد و می توان با بارگذاری دوباره پیکربندی تغییرات را اعمال کرد. در این نوشته دیواره آتش firewalld را به صورت مختصر مورد بررسی قرار خواهیم داد.

منظور از zone چیست؟

یک zone در واقع سطح اعتماد(Trust) یک ارتباط شبکه ای(کارت شبکه) را مشخص می کند این ارتباط بین یک zone و کارت شبکه می تواند چند به یک باشد یعنی یک کارت شبکه می تواند در یک zone قرار بگیرد ولی یک zone می تواند در چندین کارت شبکه مورد استفاده قرار بگیرد firewalld شامل چنیدین zone پیش فرض با یکسری پیکربندی های خاص به شکل زیر می باشند.

block dmz drop external home internal public trusted work

فعال کردن سرویس firewalld:

[root@mcentos ~]# systemctl enable firewalld

فعال کردن سرویس firewalld:

[root@mcentos ~]# systemctl disable firewalld

شروع به کار سرویس firewalld:

[root@mcentos ~]# systemctl start firewalld

متوقف کردن سرویس firewalld:

[root@mcentos ~]# systemctl stop firewalld

نمایش وضیعت سرویس firewalld:

[root@mcentos ~]# systemctl status firewalld

برای کار با firewalld باید از دستور firewall-cmd استفاده کنید برای شروع کار با این دستور از ساده ترین شکل آن شروع می کنیم و کار را با گزینه های پیچیده تر با مثال ادامه می دهیم. برای نمایش وضیعت firewalld از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --state
running

برای نمایش نسخه firewalld از دستور زیر استفاده کنید.

[root@mcentos ~]# rpm -qf $(which firewall-cmd)
firewalld-0.3.9-7.el7.noarch

برای بارگذاری مجدد پیکربندی از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --reload
success

برای برگشت به حالت اولیه و نادیده گرفتن کلیه پیکربندی ها از دستور زیر استفاده کنید.

root@mcentos ~]# firewall-cmd --complete-reload
success

برای نمایش کلیه zone ها از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

برای نمایش کلیه سرویس ها از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-services

amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

منظور از سرویس چیست؟

یک سرویس به زبان ساده در واقع مجموعه ای از پورت ها و ماژول های مربوط به firewalld می باشد همان طور که در کد بالا می بینید یکسری سرویس به صورت پیش فرض تعریف شده اند با فعال کردن هر سرویس پیکربندی های مربوط به آن سرویس و ماژول های آن سرویس بارگذاری می شوند. برای نمایش انواع icmptype ها از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

منظور از icmptype چیست؟

پروتکل icmp به منظور رد و بدل کردن اطلاعات و پیغام های خطا در پروتکل IP مورد استفاده قرار می گیرد در firewalld با توجه به انواع icmptype که پشتیبانی می کند امکان محدود کردن این پیغام وجود دارد. برای نمایش همه ی zone ها با پیکربندی های آنها از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --list-all-zones

block

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

dmz

interfaces:

sources:

services: ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

drop

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

external

interfaces:

sources:

services: ssh

ports:

masquerade: yes

forward-ports:

icmp-blocks:

rich rules:

 

home

interfaces:

sources:

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

internal

interfaces:

sources:

services: dhcpv6-client ipp-client mdns samba-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

public (default, active)

interfaces: ens32

sources:

services: dhcpv6-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

trusted

interfaces:

sources:

services:

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

 

work

interfaces:

sources:

services: dhcpv6-client ipp-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

برای نمایش پیکربندی های یک zone خاص از دستور زیر استفاده کنید.(در این مثال zone انتخابی ما work می باشد در صورت مشخص نکردن آن zone پیش فرض در نظر گرفته می شود)

[root@mcentos ~]# firewall-cmd --zone=work --list-all

work

interfaces:

sources:

services: dhcpv6-client ipp-client ssh

ports:

masquerade: no

forward-ports:

icmp-blocks:

rich rules:

برای نمایش پیکربندی های یک zone خاص از دستور زیر استفاده کنید.(در این مثال zone انتخابی ما work می باشد در صورت مشخص نکردن آن zone پیش فرض در نظر گرفته می شود)

[root@mcentos ~]# firewall-cmd --zone=work --list-all

work

  interfaces:

  sources:

  services: dhcpv6-client ipp-client ssh

  ports:

  masquerade: no

  forward-ports:

  icmp-blocks:

  rich rules:

برای نمایش zone پیش فرض از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-default-zone
public

منظور از zone پیش فرض چیست؟

zone پیش فرض زمانی که برای یک کارت شبکه هیچ zone تعریف نشده باشد به آن کارت شبکه اختصاص داده می شود یعنی اگر برای یک کارت شبکه هیچ zone تعریف نشده باشد عضو zone پیش فرض می شود در دستور firewall-cmd هر جا که گزینه –zone نیاز باشد و مقدار آن مشخص نشود zone پیش فرض به عنوان مقدار آن در نظر گرفته می شود. برای تنظیم zone پیش فرض از دستور زیر استفاده کنید.(در این مثال zone انتخابی ما work می باشد)

[root@mcentos ~]# firewall-cmd --set-default-zone=work
success

برای نمایش zone های فعال از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-active-zones
public
interfaces: ens32

منظور از zone فعال چیست؟

هر zone که حداقل یک کارت شبکه عضو آن باشد به عنوان zone فعال در نظر گرفته می شود. برای نمایش zone مربوط به یک کارت شبکه خاص از دستور زیر استفاده کنید.(در این مثال کارت شبکه ما ens32 می باشد)

[root@mcentos ~]# firewall-cmd --get-zone-of-interface=ens32
public

برای اضافه کردن یک کارت شبکه خاص یه یک zone خاص از دستور زیر استفاده کنید.(در این مثال کارت شبکه ens34 به work اضافه می شود)

[root@mcentos ~]# firewall-cmd --zone=work --add-interface=ens34
success

برای تغییر zone یک کارت شبکه از دستور زیر استفاده کنید. (در این مثال zone کارت شبکه ens34 به public تغییر داده می شود)

[root@mcentos ~]# firewall-cmd --zone=work --change-interface=ens34
success

برای حذف یک کارت شبکه از یک zone از دستور زیر استفاده کنید.(در این مثال کارت شبکه ens34 از zone، work حذف می شود)

[root@mcentos ~]# firewall-cmd --zone=work --remove-interface=ens34
success

برای بررسی اینکه یک کارت شبکه در یک zone خاص می باشد از دستور زیر استفاده کنید.(در این مثال کارت شبکه ens32 و zone، public)

[root@mcentos ~]# firewall-cmd --zone=public --query-interface=ens32
yes

برای نمایش سرویس های فعال در یک zone از دستور زیر استفاده کنید.(در این مثال zone ما public می باشد)

[root@mcentos ~]# firewall-cmd --zone=public --list-services
dhcpv6-client ssh

برای فعال کردن حالت panic از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --panic-on
success

منظور از حالت panic چیست؟

حالت panic حالتی می باشد که در آن کلیه ی ترافیک شبکه بلاک می شود. برای غیرفعال کردن حالت panic از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --panic-off
success

برای نمایش وضیعت panic از دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --query-panic
no

منظوز از حالت runtime و permanent چیست؟

هر تغییری که در یک zone صورت می گیرد یا در حالت runtime است یا در حالت permanent اگر در حالت runtime باشد این تغییرات بعد از اجرا دستور reload و یا بارگذاری مجدد سرویس firewalld و یا راه اندازی مجدد سیستم از بین می روند ولی تغییراتی که در حالت permanent صورت می گیرند در فایل config ثبت می شوند و به صورت دایمی هستند و با اجرای دستور reload و یا بارگذاری مجدد سرویس firewalld و یا راه اندازی مجدد سیستم از بین نمی روند توجه داشته باشید که گزینه runtime به صورت پیش فرض می باشد. برای فعال کردن یک سرویس در یک zone از دستور زیر استفاده کنید.(در این مثال سرویس http در zone، work فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --add-service=http –timeout=600
success

گزینه timeout:

گزینه timeout در واقع مدت زمان فعال بودن سرویس را مشخص می کند توجه داشته باشید که چون در این دستور از گزینه –permanent استفاده نشده است فعال بودن سرویس http در zone، work به صورت موقت می باشد و با اجرای دستور reload و یا بارگذاری مجدد سرویس firewalld و یا راه اندازی مجدد سیستم از بین می روند. برای غیر فعال کردن یک سرویس در یک zone از دستور زیر استفاده کنید.(در این مثال سرویس http در zone، work غیر فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --remove-service=http
success

برای نمایش وضیعت فعال بودن یک سرویس در یک zone از دستور زیر استفاده کنید .(در این مثال سرویس http در zone،  work مورد بررسی واقع شده است)

[root@mcentos ~]# firewall-cmd --zone=work --query-service=http
no

برای فعال کردن پورت و پروتکل از دستور زیر استفاده کنید.(در این مثال پورت 80 از نوع tcp در zone، work فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --add-port=80/tcp
success

توجه داشته باشید که هم می توانید یک پورت را مشخص کنید هم می توانید محدوده پورت را به صورت startport-endport مشخص کنید مقدار مربوط به پروتکل هم می تواند tcp یا udp باشد. برای غیر فعال کردن پورت و پروتکل از دستور زیر استفاده کنید.(در این مثال پورت 80 از نوع tcp در zone، work غیرفعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --remove-port=80/tcp
success

برای نمایش وضیعت فعال بودن پورت و پروتکل در یک zone از دستور زیر استفاده کنید.(در این مثال پورت 80 از نوع tcp در zone، work مورد بررسی واقع شده است)

[root@mcentos ~]# firewall-cmd --zone=work --query-port=80/tcp
yes

برای فعال کردن قابلیت masquerading از دستور زیر استفاده کنید.(در این مثال این قابلیت برای zone، work فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --add-masquerade
success

منظور از masquerading چیست؟

masquerading نوع خاصی از NAT می باشد که در آن سیستم های که در طرف خارجی NAT قرار گرفته اند به هیچ عنوان نمی توانند آی پی مربوط به یک سیستم داخلی را به دست بیاورند در واقع در این نوع NAT آی پی سیستم های داخلی در سمت خارجی NAT پنهان می شود. توجه داشته باشید که قابلیت masquerading در firewalld فقط برای آی پی نسخه 4 قابل فعال سازی می شود و masquerading نسخه 6 آی پی در این دیواره آتش پشتیبانی نمی شود. برای غیرفعال کردن قابلیت masquerading از دستور زیر استفاده کنید.(در این مثال این قابلیت برای zone، work غیر فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --remove-masquerade
success

برای بررسی وضیعت فعال بودن قابلیت masquerading از دستور زیر استفاده کنید.(در این مثال این قابلیت برای zone، work مورد بررسی واقع شده است)

[root@mcentos ~]# firewall-cmd --zone=work --query-masquerade
no

برای فعال کردن icmptype در یک zone ازدستور زیر استفاده کنید.(در این مثال icmptype از نوع echo-reply برای zone، work فعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success

همان طور که در بخش های قبلی بیان شد برای به دست آوردن انواع icmptype ها می توانید ار دستور زیر استفاده کنید.

[root@mcentos ~]# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

برای غیر فعال کردن icmptype در یک zone ازدستور زیر استفاده کنید.(در این مثال icmptype از نوع echo-reply برای zone، work غیرفعال شده است)

[root@mcentos ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success

برای بررسی وضیعت فعال بودن icmptype از دستور زیر استفاده کنید. (در این مثال icmptype از نوع echo-reply برای zone، work مورد بررسی واقع شده است)

[root@mcentos ~]# firewall-cmd --zone=work --query-icmp-block=echo-reply
no

برای فعال کردن قابلیت port forwarding از دستور زیر استفاده کنید.(در این مثال پورت 80 به پورت 88 در zone،word ارسال (forward) می شود)

[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toport=88
success

مقدار مربوط به port هم می تواند یک پورت و یا محدوده پورت به صورت startport-endport مشخص شود. مقدار مربوط به proto که مشخص کننده پروتکل می باشد می تواند tcp یا udp باشد. در قسمت to می توانید به سه نوع زیر مقدار وارد کنید.

1-toport: در این نوع forwarding به یک پورت انجام می شود که می تواند تواند یک پورت و یا محدوده پورت به صورت startport-endport مشخص شود به مثال زیر توجه کنید.

[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toport=88
success

در این مثال پورت 80 از نوع tcp به پورت 88 forward شده است.

2-toaddr:در این نوع forwarding به یک آدرس صورت می گیرد به مثال زیر توجه کنید.

[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toaddr=192.168.20.18
success

در این مثال پورت 80 از نوع tcp به آدرس 192.168.20.18 forward شده است

3-toport:toaddr: در این نوع forwarding به یک پورت یا محدوده محدوده پورت برای یک سرور دیگر صورت می گیرد به مثال زیر توجه کنید.

[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toport=88:toaddr=192.168.20.18
success

در این مثال پورت 80 از نوع tcp به پورت 88 آدرس 192.168.20.18 forward شده است. برای غیر فعال کردن قابلیت port forwarding از دستور زیر استفاده کنید.(در این مثال forwarding پورت 80 به پورت 88 در zone،word  غیر فعال می شود)

[root@mcentos ~]# firewall-cmd --zone=work --remove-forward-port=port=80:proto=tcp:toport=88
success

برای بررسی فعال بودن قابلیت port forwarding از دستور زیر استفاده کنید.(در این مثال forwarding پورت 80 به پورت 88 در zone،word  مورد بررسی واقع می شود)

[root@mcentos ~]# firewall-cmd --zone=work --query-forward-port=port=80:proto=tcp:toport=88

no

گزینه permanent:

تا این جای کار تمامی پیکربندی هایی که انجام شد از نوع runtime بود پیکربندی های از این نوع به صورت آنی اعمال می شود با اجرای گزینه reload– یا بارگذاری مجدد سرویس firewalld و یا راه اندازی مجدد سرور از بین می روند در مقابل پیکربندی هایی که از نوع permanent هستند در فایل پیکربندی ذخیره می شوند و برای اعمال آنها حتما باید گزینه –reload اجرا و یا سرویس firewalld راه اندازی مجدد شود تمامی پیکربندی هایی که در بخش های قبلی انجام شد با اضافه کردن گزینه –permanent می تواند از نوع permanent باشد بعد از انجام یک پیکربندی از نوع permanent حتما باید گزینه –reload اجرا شده و یا سرویس firewalld راه اندازی مجدد شود به مثال زیر توجه کنید.

[root@mcentos ~]# firewall-cmd --zone=work --add-port=443/tcp --permanent
success

با اجرای دستور بالا پورت 443 از نوع tcp به zone، work اضافه می شود ولی چون از نوع permanent است تا اجرای دستور زیر یا راه اندازی مجدد firewalld اعمال نمی شود.smile icon

[root@mcentos ~]# firewall-cmd --reload
success
3 دیدگاه
  1. محسن مختاری says

    بسیار کمک کننده و تخصصی
    تشکر

  2. محسن says

    عالی بود

  3. arsalan681 says

    سپاس

دیدگاه

آدرس ایمیل شما منتشر نخواهد شد.