firewalld: 各個zone的用途

刘宏缔的架构森林發表於2024-08-17

一,檢視linux當前的所有zone

[root@blog ~]$ firewall-cmd  --get-zones
block dmz drop external home internal nm-shared public trusted work

二,各個zone的區別

1, 一個網路區域(zone)定義了網路連線的信任級別,

trusted 區 受信任區。

接受所有網路連線。該區繫結的規則(如:網路卡、源網段、服務等)不受防火牆阻擋,所有流量均可透過。

internal 區 用於內部網路。

home 區 用於家庭區域。

work 區 用於工作區域。

internal、home、work 這 3 個區你基本上相信網路上的其他計算機不會損害你的計算機。只接受選定的傳入連線。

dmz 區 用於在非軍事區內可公開訪問但對內部網路有限制訪問的計算機。只接受選定的傳入連線。

external 區 用於啟用偽裝的外部網路,特別是路由器。你不相信網路上的其他計算機不會損害你的計算機。只接受選定的傳入連線。

public 區 在公共場所使用。你不相信網路上的其他計算機不會損害你的計算機。只接受選定的傳入連線。

block 區 任何傳入的網路連線將被拒絕,IPv4和IPv6將分別傳送icmp-host- forbid訊息和icmp6-adm- forbid訊息。只有在這個系統內發起的網路連線是可能的。

drop 區 任何傳入的網路資料包被丟棄,沒有應答。只可能傳出網路連線。

2, 檢視各個區預設的規則:每個zone就是一組規則的集合,如何檢視它們預設的規則有哪些?

預設規則的儲存路徑:

/usr/lib/firewalld/zones/

上面的這個路徑可以用rpm查詢firewalld安裝包得到

[root@blog zones]# rpm -ql firewalld | grep zones
/etc/firewalld/zones
/usr/lib/firewalld/zones/block.xml
/usr/lib/firewalld/zones/dmz.xml
/usr/lib/firewalld/zones/drop.xml
/usr/lib/firewalld/zones/external.xml
/usr/lib/firewalld/zones/home.xml
/usr/lib/firewalld/zones/internal.xml
/usr/lib/firewalld/zones/public.xml
/usr/lib/firewalld/zones/trusted.xml
/usr/lib/firewalld/zones/work.xml
/usr/share/man/man5/firewalld.zones.5.gz

進入目錄後可以看到預設zone的xml配置檔案:

[root@blog zones]# cd /usr/lib/firewalld/zones/
[root@blog zones]# ls
block.xml  dmz.xml  drop.xml  external.xml  home.xml  internal.xml  nm-shared.xml  public.xml  trusted.xml  work.xml

3,檢視各個zone規則的不同:

drop.xml

[root@blog zones]# more drop.xml
<?xml version="1.0" encoding="utf-8"?>
<zone target="DROP">
  <short>Drop</short>
  <description>Unsolicited incoming network packets are dropped. Incoming packets that are related 
  to outgoing network connections are accepted. Outgoing network connections are
allowed.</description>
  <forward/>
</zone>

block

[root@blog zones]# more block.xml
<?xml version="1.0" encoding="utf-8"?>
<zone target="%%REJECT%%">
  <short>Block</short>
  <description>Unsolicited incoming network packets are rejected. Incoming packets that are related to outgoing 
  network connections are accepted. Outgoing network connections are
 allowed.</description>
  <forward/>
</zone>

public

[root@blog zones]# more public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer.
  Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>

trusted

[root@blog zones]# more trusted.xml
<?xml version="1.0" encoding="utf-8"?>
<zone target="ACCEPT">
  <short>Trusted</short>
  <description>All network connections are accepted.</description>
  <forward/>
</zone>

work

[root@blog zones]# more work.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Work</short>
  <description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. 
  Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>

home

[root@blog zones]# more home.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Home</short>
  <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. 
  Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="mdns"/>
  <service name="samba-client"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>

dmz

[root@blog zones]# more dmz.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>DMZ</short>
  <description>For computers in your demilitarized zone that are publicly-accessible with limited access to your 
  internal network. Only selected incoming connections are accepted
.</description>
  <service name="ssh"/>
  <forward/>
</zone>

external

[root@blog zones]# more external.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>External</short>
  <description>For use on external networks. You do not trust the other computers on networks to not harm your 
  computer. Only selected incoming connections are accepted.</descrip
tion>
  <service name="ssh"/>
  <masquerade/>
  <forward/>
</zone>

internal

[root@blog zones]# more internal.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Internal</short>
  <description>For use on internal networks. You mostly trust the other computers on the networks to not harm
  your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="mdns"/>
  <service name="samba-client"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>

三,檢視九個內建zone的預設target

1, 分別查詢:

說明:可以看到:多數zone的target就是default,
但有三個不同的zone:

trusted: target為ACCEPT
drop: target為DROP
block: target為REJECT

所以在生產環境中,不會對這三個zone新增複雜的規則,只是把它們作為白名單、黑名單使用

[root@blog ~]# firewall-cmd --zone=trusted --permanent --get-target
ACCEPT
[root@blog ~]# firewall-cmd --zone=public --permanent --get-target
default
[root@blog ~]# firewall-cmd --zone=drop --permanent --get-target
DROP
[root@blog ~]# firewall-cmd --zone=block --permanent --get-target
REJECT
[root@blog ~]# firewall-cmd --zone=external --permanent --get-target
default
[root@blog ~]# firewall-cmd --zone=internal --permanent --get-target
default
[root@blog ~]# firewall-cmd --zone=dmz --permanent --get-target
default
[root@blog ~]# firewall-cmd --zone=work --permanent --get-target
default
[root@blog ~]# firewall-cmd --zone=home --permanent --get-target
default

2,列出所有zone的規則:

[root@blog ~]# firewall-cmd --list-all-zones 

四,比較public/home/external/internal/work/dmz這六個zone的區別

這六個zone的target同為default,它們的區別在哪裡?

它們的不同之處在於預設規則的不同

1,work/public

work和public兩個zone相同,都允許ssh/dhcpv6-client/cockpit三種服務的訪問
ssh不用說了,
dhcpv6-client是dhcpv6的客戶端,所用的埠是:546
如果不是動態的ip,建議關閉此服務
cockpit: 紅帽開發的網頁版影像化服務管理工具,優點是無需中間層,且可以管理多種服務
它所用的埠是:9090
如果不需要從圖形介面對伺服器管理,建議關閉此服務

2,home/internal
home和internal兩個zone相同,都允許 ssh/mdns/samba-client/dhcpv6-client/cockpit五種服務的訪問
ssh/dhcpv6-client/cockpit 上面已講到
samba-client:提供samba服務的客戶端服務
它的埠是:udp協議138
mdns:mDNS是一種基於多播的服務發現協議,透過它可以使裝置在區域網內自動發現彼此的服務,
它的埠是:udp協議5353

3,dmz/external
dmz只提供ssh服務,
external則額外開啟了<masquerade/>:它用來開啟埠轉發或代理上網

相關文章