首頁 > 軟體

firewalld防火牆基礎設定

2020-06-16 16:31:22

Linux的防火牆體系主要工作在網路層,針對TCP/IP封包實時過濾和限制,屬於典型的包過濾防火牆。

Linux防火牆是如何檢查資料流量的?

對於進入系統的封包,首先檢查的就是其源地址:

若源地址關聯到特定的區域,則執行該區域所制定的規則;
若源地址未關聯到特定的區域,則使用傳入網路介面的區域並執行該區域所制定的規則。
若網路介面未關聯到特定的區域,那麼就使用預設區域並執行該區域所制定的規則。
預設區域並不是單獨的區域,而是指向系統上定義的某個其他區域。預設情況下,預設區域是public,但是也可以更改預設區域。以上匹配規則,按照先後順序,第一個匹配的規則勝出,和網路裝置的ACL匹配規則差不多,俗稱匹配即停。
firewalld的相關預定義區域:

firewalld防火牆有兩種設定模式:

1 、執行時模式:表示當前記憶體中執行的防火牆設定,在系統或firewalld服務重新啟動、停止時將失效;

2、永久模式:表示重新啟動防火牆或重新載入防火牆時的規則設定,是永久儲存在組態檔中的。

firewall-cmd命令工具與設定模式相關的選項有三個:

--reload:重新載入防火牆規則並保持狀態資訊,即將永久設定應用為執行時設定;
--permanent:帶有此選項的命令用於設定永久性規則,這些規則只有在重新啟動或重新載入防火牆規則時才會生效;若不帶此項,表示用於設定執行時規則。
--runtime-to-permanent:將當前執行時的設定寫入規則組態檔中,使當前記憶體中的規則稱為永久性設定。
1、防火牆相關命令使用:

[root@localhost ~]# systemctl start firewalld                #啟動防火牆
[root@localhost ~]# systemctl enable firewalld            #設定開機自啟動
[root@localhost /]# firewall-cmd --reload                     #過載防火牆
[root@localhost ~]# systemctl status firewalld             #檢視防火牆狀態
[root@localhost ~]# systemctl stop firewalld                #停止防火牆
[root@localhost ~]# systemctl disable firewalld            #設定防火牆開機不自啟動
[root@localhost ~]# firewall-cmd --get-zones                #顯示預定義的區域
block dmz drop external home internal public trusted work
[root@localhost ~]# firewall-cmd --get-service                     #顯示預定義的服務
[root@localhost /]# firewall-cmd --list-all --zone=dmz                #檢視指定區域的設定
dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

[root@localhost ~]# firewall-cmd --get-icmptypes                #顯示預定義的ICMP型別
address-unreachable bad-header communication-prohibited destination-unreachable 
echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited
host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement
neighbour-solicitation network-prohibited network-redirect network-unknown 
network-unreachable no-route packet-too-big parameter-problem port-unreachable
precedence-cutoff protocol-unreachable redirect required-option-missing
router-advertisement router-solicitation source-quench source-route-failed time-exceeded
timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable 
tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly 
ttl-zero-during-transit unknown-header-type unknown-option

firewall-cmd --get-icmptypes命令執行結果中部分阻塞型別的含義如下:

destination-unreachable:目的地址不可達;
echo-reply:應答回應;
parameter-problem:引數問題;
redirect:重新定向;
router-advertisement:路由器通告;
router-solicitation:路由器徵尋;
source-quench:源端抑制;
time-exceeded:超時;
timestamp-reply:時間戳應答回應;
timestamp-request:時間戳請求;

2、firewalld防火牆區域管理命令及範例:

[root@localhost /]# firewall-cmd --set-default-zone=dmz           #設定預設區域為DMZ區域
[root@localhost ~]# firewall-cmd --get-default-zone                #顯示當前系統中的預設區域
[root@localhost ~]# firewall-cmd --list-all                                 #顯示預設區域的所有規則
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33       #顯示網路介面ens33對應區域
[root@localhost ~]# firewall-cmd --get-active-zones           #顯示所有啟用區域
internal
  interfaces: ens33

 #執行以下操作可將網路介面ens33對應區域更改為internal區域,並檢視:
 [root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
 The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces    #檢視internal區域的介面列表
ens33
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33    #檢視介面ens33對應的區域
internal

3、防火牆服務管理相關命令及範例:

部分服務管理的範例:

為預設區域設定允許存取的服務

 [root@localhost services]# firewall-cmd --list-services          #顯示預設區域內允許存取的所有服務
ssh dhcpv6-client
[root@localhost services]# firewall-cmd --add-service=http     #設定預設區域允許存取http服務
success
[root@localhost services]# firewall-cmd --add-service=https     #設定預設區域允許存取https服務
success
[root@localhost services]# firewall-cmd --list-services               #顯示預設區域內允許存取的所有服務

ssh dhcpv6-client http https

為internal區域設定允許存取的服務:

[root@localhost services]# firewall-cmd --zone=internal --add-service=mysql 
#設定internal區域允許存取mysql服務
success
[root@localhost services]# firewall-cmd --zone=internal --remove-service=samba-client 
#設定internal區域不允許存取Samba-client服務
success
[root@localhost services]# firewall-cmd --zone=internal --list-services 
#顯示internal區域內允許存取的所有服務
ssh mdns dhcpv6-client mysql

埠管理:
在進行服務設定時,預定義的網路服務可以使用服務名設定,服務所涉及的埠就會自動開啟。但是,對於非預定義的服務只能手動為指定的區域新增埠。範例如下:

 [root@localhost services]# firewall-cmd --zone=internal --add-port=443/tcp
 #在internal區域開啟443/tcp埠
success
 [root@localhost services]# firewall-cmd --zone=internal --remove-port=443/tcp
 #在internal區域禁止443/tcp埠存取
success

以上設定都為臨時設定,若想將當前設定儲存為永久設定,可以使用下面命令:

 [root@localhost services]# firewall-cmd --runtime-to-permanent
success

直接設定為永久性規則,須帶--permanent選項,如下:

[root@localhost /]# firewall-cmd --add-icmp-block=echo-request --permanent   #禁止ping

success
[root@localhost /]# firewall-cmd --zone=external --add-icmp-block=echo-request --permanent           
#設定external區域禁止ping
success

IT145.com E-mail:sddin#qq.com