بررسی firewalld

firewalld یک دیواره آتش پویا می باشد که از قابلیت zone بندی برای مشخص کردن سطح اعتماد(Trust) ارتباطات و کارت های شبکه پشتیبانی می کند این دیواره آتش از آی پی نسخه ۴ و ۶ پشتیبانی کرده و شامل گزینه هایی پیکربندی 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 |
برای فعال کردن پورت و پروتکل از دستور زیر استفاده کنید.(در این مثال پورت ۸۰ از نوع tcp در zone، work فعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-port=80/tcp success |
توجه داشته باشید که هم می توانید یک پورت را مشخص کنید هم می توانید محدوده پورت را به صورت startport-endport مشخص کنید مقدار مربوط به پروتکل هم می تواند tcp یا udp باشد
برای غیر فعال کردن پورت و پروتکل از دستور زیر استفاده کنید.(در این مثال پورت ۸۰ از نوع tcp در zone، work غیرفعال شده است)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-port=80/tcp success |
برای نمایش وضیعت فعال بودن پورت و پروتکل در یک zone از دستور زیر استفاده کنید.(در این مثال پورت ۸۰ از نوع 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 فقط برای آی پی نسخه ۴ قابل فعال سازی می شود و masquerading نسخه ۶ آی پی در این دیواره آتش پشتیبانی نمی شود.
برای غیرفعال کردن قابلیت 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 از دستور زیر استفاده کنید.(در این مثال پورت ۸۰ به پورت ۸۸ در 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 می توانید به سه نوع زیر مقدار وارد کنید.
۱-toport: در این نوع forwarding به یک پورت انجام می شود که می تواند تواند یک پورت و یا محدوده پورت به صورت startport-endport مشخص شود به مثال زیر توجه کنید.
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toport=88 success |
در این مثال پورت ۸۰ از نوع tcp به پورت ۸۸ forward شده است.
۲-toaddr: در این نوع forwarding به یک آدرس صورت می گیرد به مثال زیر توجه کنید.
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --add-forward-port=port=80:proto=tcp:toaddr=192.168.20.18 success |
در این مثال پورت ۸۰ از نوع tcp به آدرس ۱۹۲.۱۶۸.۲۰.۱۸ forward شده است
۳-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 |
در این مثال پورت ۸۰ از نوع tcp به پورت ۸۸ آدرس ۱۹۲.۱۶۸.۲۰.۱۸ forward شده است.
برای غیر فعال کردن قابلیت port forwarding از دستور زیر استفاده کنید.(در این مثال forwarding پورت ۸۰ به پورت ۸۸ در zone،word غیر فعال می شود)
1 2 3 |
[root@mcentos ~]# firewall-cmd --zone=work --remove-forward-port=port=80:proto=tcp:toport=88 success |
برای بررسی فعال بودن قابلیت port forwarding از دستور زیر استفاده کنید.(در این مثال forwarding پورت ۸۰ به پورت ۸۸ در 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 |
با اجرای دستور بالا پورت ۴۴۳ از نوع tcp به zone، work اضافه می شود ولی چون از نوع permanent است تا اجرای دستور زیر یا راه اندازی مجدد firewalld اعمال نمی شود.
1 2 3 |
[root@mcentos ~]# firewall-cmd --reload success |