بررسی ديواره آتش 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 اعمال نمي شود.
[root@mcentos ~]# firewall-cmd --reload success
بسیار کمک کننده و تخصصی
تشکر
عالی بود
سپاس