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