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 اعمال نمی شود.
منبع : hellodigi.ir