بررسی ديواره آتش 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

    سپاس

دیدگاه

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