firewalld يك ديواره آتش پويا مي باشد كه از قابليت zone بندي براي مشخص كردن سطح اعتماد(Trust) ارتباطات و كارت هاي شبكه پشتيباني مي كند اين ديواره آتش از آي پي نسخه 4 و 6 پشتيباني كرده و شامل گزينه هايي پيكربندي runtime و permanent مي باشد از جمله مزيت هاي اين ديواره آتش نسبت به نسل هاي قبلي ديواره هاي آتش كه به صورت static بود اين است كه بعد از تغييرات پيكربندي ديواره آتش نياز به راه اندازي مجدد آن نمي باشد و مي توان با بارگذاري دوباره پيكربندي تغييرات را اعمال كرد. در اين نوشته ديواره آتش firewalld را به صورت مختصر مورد بررسي قرار خواهيم داد.
منظور از zone چيست؟
يك zone در واقع سطح اعتماد(Trust) يك ارتباط شبكه اي(كارت شبكه) را مشخص مي كند اين ارتباط بين يك zone و كارت شبكه مي تواند چند به يك باشد يعني يك كارت شبكه مي تواند در يك zone قرار بگيرد ولي يك zone مي تواند در چندين كارت شبكه مورد استفاده قرار بگيرد firewalld شامل چنيدين zone پيش فرض با يكسري پيكربندي هاي خاص به شكل زير مي باشند.
1 |
block dmz drop external home internal public trusted work |
فعال كردن سرويس firewalld:
1 |
[root@mcentos ~]# systemctl enable firewalld |
غیرفعال كردن سرويس firewalld:
1 |
[root@mcentos ~]# systemctl disable firewalld |
شروع به كار سرويس firewalld:
1 |
[root@mcentos ~]# systemctl start firewalld |
متوقف كردن سرويس firewalld:
1 |
[root@mcentos ~]# systemctl stop firewalld |
نمايش وضيعت سرويس firewalld:
1 |
[root@mcentos ~]# systemctl status firewalld |
براي كار با firewalld بايد از دستور firewall-cmd استفاده كنيد براي شروع كار با اين دستور از ساده ترين شكل آن شروع مي كنيم و كار را با گزينه هاي پيچيده تر با مثال ادامه مي دهيم.
براي نمايش وضيعت firewalld از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --state running |
براي نمايش نسخه firewalld از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# rpm -qf $(which firewall-cmd) firewalld-0.3.9-7.el7.noarch |
براي بارگذاري مجدد پيكربندي از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --reload success |
براي برگشت به حالت اوليه و ناديده گرفتن كليه پيكربندي ها از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --complete-reload success |
براي نمايش كليه zone ها از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work |
براي نمايش كليه سرويس ها از دستور زير استفاده كنيد.
1 2 3 |
[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 ها از دستور زير استفاده كنيد.
1 2 3 |
[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 ها با پيكربندي هاي آنها از دستور زير استفاده كنيد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
[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 پيش فرض در نظر گرفته مي شود)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[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 پيش فرض از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --get-default-zone public |
منظور از zone پيش فرض چيست؟
zone پيش فرض زماني كه براي يك كارت شبكه هيچ zone تعريف نشده باشد به آن كارت شبكه اختصاص داده مي شود يعني اگر براي يك كارت شبكه هيچ zone تعريف نشده باشد عضو zone پيش فرض مي شود در دستور firewall-cmd هر جا كه گزينه –zone نياز باشد و مقدار آن مشخص نشود zone پيش فرض به عنوان مقدار آن در نظر گرفته مي شود.
براي تنظيم zone پيش فرض از دستور زير استفاده كنيد.(در اين مثال zone انتخابي ما work مي باشد)
1 2 3 |
[root@mcentos ~]# firewall-cmd --set-default-zone=work success |
براي نمايش zone هاي فعال از دستور زير استفاده كنيد.
1 2 3 4 5 |
[root@mcentos ~]# firewall-cmd --get-active-zones public interfaces: ens32 |
منظور از zone فعال چيست؟
هر zone كه حداقل يك كارت شبكه عضو آن باشد به عنوان zone فعال در نظر گرفته مي شود.
براي نمايش zone مربوط به يك كارت شبكه خاص از دستور زير استفاده كنيد.(در اين مثال كارت شبكه ما ens32 مي باشد)
1 2 3 |
[root@mcentos ~]# firewall-cmd --get-zone-of-interface=ens32 public |
براي اضافه كردن يك كارت شبكه خاص يه يك zone خاص از دستور زير استفاده كنيد.(در اين مثال كارت شبكه ens34 به work اضافه مي شود)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-interface=ens34 success |
براي تغيير zone يك كارت شبكه از دستور زير استفاده كنيد. (در اين مثال zone كارت شبكه ens34 به public تغيير داده مي شود)
براي حذف يك كارت شبكه از يك zone از دستور زير استفاده كنيد.(در اين مثال كارت شبكه ens34 از zone، work حذف مي شود)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-interface=ens34 success |
براي بررسي اينكه يك كارت شبكه در يك zone خاص مي باشد از دستور زير استفاده كنيد.(در اين مثال كارت شبكه ens32 و zone، public)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=public --query-interface=ens32 yes |
براي نمايش سرويس هاي فعال در يك zone از دستور زير استفاده كنيد.(در اين مثال zone ما public مي باشد)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=public --list-services dhcpv6-client ssh |
براي فعال كردن حالت panic از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --panic-on success |
منظور از حالت panic چيست؟
حالت panic حالتي مي باشد كه در آن كليه ي ترافيك شبكه بلاك مي شود.
براي غيرفعال كردن حالت panic از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --panic-off success |
براي نمايش وضيعت panic از دستور زير استفاده كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --query-panic no |
منظوز از حالت runtime و permanent چيست؟
هر تغييري كه در يك zone صورت مي گيرد يا در حالت runtime است يا در حالت permanent اگر در حالت runtime باشد اين تغييرات بعد از اجرا دستور reload و يا بارگذاري مجدد سرويس firewalld و يا راه اندازي مجدد سيستم از بين مي روند ولي تغييراتي كه در حالت permanent صورت مي گيرند در فايل config ثبت مي شوند و به صورت دايمي هستند و با اجراي دستور reload و يا بارگذاري مجدد سرويس firewalld و يا راه اندازي مجدد سيستم از بين نمي روند توجه داشته باشيد كه گزينه runtime به صورت پيش فرض مي باشد.
براي فعال كردن يك سرويس در يك zone از دستور زير استفاده كنيد.(در اين مثال سرويس http در zone، work فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-service=http –timeout=600 success |
گزينه timeout:
گزينه timeout در واقع مدت زمان فعال بودن سرويس را مشخص مي كند توجه داشته باشيد كه چون در اين دستور از گزينه –permanent استفاده نشده است فعال بودن سرويس http در zone، work به صورت موقت مي باشد و با اجراي دستور reload و يا بارگذاري مجدد سرويس firewalld و يا راه اندازي مجدد سيستم از بين مي روند.
براي غير فعال كردن يك سرويس در يك zone از دستور زير استفاده كنيد.(در اين مثال سرويس http در zone، work غير فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-service=http success |
براي نمايش وضيعت فعال بودن يك سرويس در يك zone از دستور زير استفاده كنيد .(در اين مثال سرويس http در zone، work مورد بررسي واقع شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --query-service=http no |
براي فعال كردن پورت و پروتكل از دستور زير استفاده كنيد.(در اين مثال پورت 80 از نوع tcp در zone، work فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-port=80/tcp success |
توجه داشته باشيد كه هم مي توانيد يك پورت را مشخص كنيد هم مي توانيد محدوده پورت را به صورت startport-endport مشخص كنيد مقدار مربوط به پروتكل هم مي تواند tcp يا udp باشد
براي غير فعال كردن پورت و پروتكل از دستور زير استفاده كنيد.(در اين مثال پورت 80 از نوع tcp در zone، work غيرفعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-port=80/tcp success |
براي نمايش وضيعت فعال بودن پورت و پروتكل در يك zone از دستور زير استفاده كنيد.(در اين مثال پورت 80 از نوع tcp در zone، work مورد بررسي واقع شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --query-port=80/tcp yes |
براي فعال كردن قابليت masquerading از دستور زير استفاده كنيد.(در اين مثال اين قابليت براي zone، work فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-masquerade success |
منظور از masquerading چيست؟
masquerading نوع خاصي از NAT مي باشد كه در آن سيستم هاي كه در طرف خارجي NAT قرار گرفته اند به هيچ عنوان نمي توانند آي پي مربوط به يك سيستم داخلي را به دست بياورند در واقع در اين نوع NAT آي پي سيستم هاي داخلي در سمت خارجي NAT پنهان مي شود.
توجه داشته باشيد كه قابليت masquerading در firewalld فقط براي آي پي نسخه 4 قابل فعال سازي مي شود و masquerading نسخه 6 آي پي در اين ديواره آتش پشتيباني نمي شود.
براي غيرفعال كردن قابليت masquerading از دستور زير استفاده كنيد.(در اين مثال اين قابليت براي zone، work غير فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-masquerade success |
براي بررسي وضيعت فعال بودن قابليت masquerading از دستور زير استفاده كنيد.(در اين مثال اين قابليت براي zone، work مورد بررسي واقع شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --query-masquerade no |
براي فعال كردن icmptype در يك zone ازدستور زير استفاده كنيد.(در اين مثال icmptype از نوع echo-reply براي zone، work فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply success |
همان طور كه در بخش هاي قبلي بيان شد براي به دست آوردن انواع icmptype ها مي توانيد ار دستور زير استفاده كنيد.
1 2 3 |
[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 غيرفعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply success |
براي بررسي وضيعت فعال بودن icmptype از دستور زير استفاده كنيد. (در اين مثال icmptype از نوع echo-reply براي zone، work مورد بررسي واقع شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --query-icmp-block=echo-reply no |
براي فعال كردن قابليت port forwarding از دستور زير استفاده كنيد.(در اين مثال پورت 80 به پورت 88 در zone،word ارسال (forward) مي شود)
1 2 3 |
[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 مشخص شود به مثال زير توجه كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toport=88 success |
در اين مثال پورت 80 از نوع tcp به پورت 88 forward شده است.
2-toaddr: در اين نوع forwarding به يك آدرس صورت مي گيرد به مثال زير توجه كنيد.
1 2 3 |
[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 به يك پورت يا محدوده محدوده پورت براي يك سرور ديگر صورت مي گيرد به مثال زير توجه كنيد.
1 2 3 |
[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 غير فعال مي شود)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-forward-port=port=80:proto=tcp:toport=88 success |
براي بررسي فعال بودن قابليت port forwarding از دستور زير استفاده كنيد.(در اين مثال forwarding پورت 80 به پورت 88 در zone،word مورد بررسي واقع مي شود)
1 2 3 |
[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 راه اندازي مجدد شود به مثال زير توجه كنيد.
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-port=443/tcp --permanent success |
با اجراي دستور بالا پورت 443 از نوع tcp به zone، work اضافه مي شود ولي چون از نوع permanent است تا اجراي دستور زير يا راه اندازي مجدد firewalld اعمال نمي شود.
1 2 3 |
[root@mcentos ~]# firewall-cmd --reload success |