1. 程式人生 > 其它 >《Linux就該這麼學》 第八章_使用iptables和firewall防火牆

《Linux就該這麼學》 第八章_使用iptables和firewall防火牆

《Linux就該這麼學》

第八章

8.1 防火牆管理工具

眾所周知,相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在公網與企業內網之間充當保護屏障的防火牆(見圖8-1)雖然有軟體或硬體之分,但主要功能都是依據策略對穿越防火牆自身的流量進行過濾。就像家裡安裝的防盜門一樣,目的是保護親人和財產安全。防火牆策略可以基於流量的源目地址、埠號、協議、應用等資訊來定製,然後防火牆使用預先定製的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。這樣一來,就能夠保證僅有合法的流量在企業內網和外部公網之間流動了。

圖8-1 防火牆作為公網與內網之間的保護屏障

從RHEL 7系統開始,firewalld防火牆正式取代了iptables防火牆。對於接觸

Linux系統比較早或學習過RHEL 5/6系統的讀者來說,當他們發現曾經掌握的知識在RHEL 7/8中不再適用,需要全新學習firewalld時,難免會有牴觸心理。其實,iptables與firewalld都不是真正的防火牆,它們都只是用來定義防火牆策略的防火牆管理工具而已;或者說,它們只是一種服務。iptables服務會把配置好的防火牆策略交由核心層面的netfilter網路過濾器來處理,而firewalld服務則是把配置好的防火牆策略交由核心層面的nftables包過濾框架來處理。換句話說,當前在Linux系統中其實存在多個防火牆管理工具,旨在方便運維人員管理Linux系統中的防火牆策略,我們只需要配置妥當其中的一個就足夠了。

雖然這些工具各有優劣,但它們在防火牆策略的配置思路上是保持一致的。大家甚至可以不用完全掌握本章介紹的內容,只要在這多個防火牆管理工具中任選一款並將其學透,就足以滿足日常的工作需求了。

8.2 Iptables

在早期的Linux系統中,預設使用的是iptables防火牆管理服務來配置防火牆。儘管新型的firewalld防火牆管理服務已經被投入使用多年,但是大量的企業在生產環境中依然出於各種原因而繼續使用iptables。考慮到iptables在當前生產環境中還具有頑強的生命力,以及為了使大家在求職面試過程中被問到iptables的相關知識時能胸有成竹,劉遄老師覺得還是有必要在本書中好好地講解一下這項技術。更何況前文也提到,各個防火牆管理工具的配置思路是一致的,在掌握了iptables後再學習其他防火牆管理工具時,也有借鑑意義。

8.2.1 策略和規則鏈

防火牆會按照從上到下的順序來讀取配置的策略規則,在找到匹配項後就立即結束匹配工作並去執行匹配項中定義的行為(即放行或阻止)。如果在讀取完所有的策略規則之後沒有匹配項,就去執行預設的策略。一般而言,防火牆策略規則的設定有兩種:“通”(即放行)和“堵”(即阻止)。當防火牆的預設策略為拒絕時(堵),就要設定允許規則(通),否則誰都進不來;如果防火牆的預設策略為允許,就要設定拒絕規則,否則誰都能進來,防火牆也就失去了防範的作用。

iptables服務把用於處理或過濾流量的策略條目稱之為規則,多條規則可以組成一個規則鏈,而規則鏈則依據資料包處理位置的不同進行分類,具體如下:

在進行路由選擇前處理資料包(PREROUTING);

處理流入的資料包(INPUT);

處理流出的資料包(OUTPUT);

處理轉發的資料包(FORWARD);

在進行路由選擇後處理資料包(POSTROUTING)。

一般來說,從內網向外網傳送的流量一般都是可控且良性的,因此使用最多的就是INPUT規則鏈,該規則鏈可以增大黑客人員從外網入侵內網的難度。

比如在您居住的社群內,物業管理公司有兩條規定:禁止小商小販進入社群;各種車輛在進入社群時都要登記。顯而易見,這兩條規定應該是用於社群的正門的(流量必須經過的地方),而不是每家每戶的防盜門上。根據前面提到的防火牆策略的匹配順序,可能會存在多種情況。比如,來訪人員是小商小販,則直接會被物業公司的保安拒之門外,也就無須再對車輛進行登記。如果來訪人員乘坐一輛汽車進入社群正門,則“禁止小商小販進入社群”的第一條規則就沒有被匹配到,因此按照順序匹配第二條策略,即需要對車輛進行登記。如果是社群居民要進入正門,則這兩條規定都不會匹配到,因此會執行預設的放行策略。

但是,僅有策略規則還不能保證社群的安全,保安還應該知道採用什麼樣的動作來處理這些匹配的流量,比如“允許”“拒絕”“登記”“不理它”。這些動作對應到iptables服務的術語中分別是ACCEPT(允許流量通過)、REJECT(拒絕流量通過)、LOG(記錄日誌資訊)、DROP(拒絕流量通過)。“允許流量通過”和“記錄日誌資訊”都比較好理解,這裡需要著重講解的是REJECT和DROP的不同點。就DROP來說,它是直接將流量丟棄而且不響應;REJECT則會在拒絕流量後再回復一條“資訊已經收到,但是被扔掉了”資訊,從而讓流量傳送方清晰地看到資料被拒絕的響應資訊。

下面舉一個例子,讓各位讀者更直觀地理解這兩個拒絕動作的不同之處。比如有一天您正在家裡看電視,突然聽到有人敲門,您透過防盜門的貓眼一看是推銷商品的,便會在不需要的情況下開門並拒絕他們(REJECT)。但如果看到的是債主帶了十幾個小弟來討債,此時不僅要拒絕開門,還要默不作聲,偽裝成自己不在家的樣子(DROP)。

Tips

紅帽認證考試中必須用REJECT進行拒絕,好讓用於判分的指令碼得到反應,以獲得分值。而在工作中更多建議用DROP進行拒絕,這可以隱藏伺服器的執行狀態。這樣做有很多好處。

當把Linux系統中的防火牆策略設定為REJECT動作後,流量傳送方會看到埠不可達的響應:

[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
From 192.168.10.10 icmp_seq=2 Destination Port Unreachable
From 192.168.10.10 icmp_seq=3 Destination Port Unreachable
From 192.168.10.10 icmp_seq=4 Destination Port Unreachable
--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms

而把Linux系統中的防火牆策略修改成DROP動作後,流量傳送方會看到響應超時的提醒。但是流量傳送方無法判斷流量是被拒絕,還是接收方主機當前不線上:

[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.

--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3000ms

8.2.2 基本的命令引數

iptables是一款基於命令行的防火牆策略管理工具,具有大量的引數,學習難度較大。好在對於日常的防火牆策略配置來講,大家無須深入瞭解諸如“四表五鏈”的理論概念,只需要掌握常用的引數並做到靈活搭配即可,這就足以應對日常工作了。

根據OSI七層模型的定義,iptables屬於資料鏈路層的服務,所以可以根據流量的源地址、目的地址、傳輸協議、服務型別等資訊進行匹配;一旦匹配成功,iptables就會根據策略規則所預設的動作來處理這些流量。另外,再次提醒一下,防火牆策略規則的匹配順序是從上到下的,因此要把較為嚴格、優先順序較高的策略規則放到前面,以免發生錯誤。表8-1總結歸納了常用的

iptables命令

引數。再次強調,無須死記硬背這些引數,只需藉助下面的實驗來理解掌握即可。

表8-1 iptables中常用的引數以及作用

引數 作用
-P 設定預設策略
-F 清空規則鏈
-L 檢視規則鏈
-A 在規則鏈的末尾加入新規則
-I num 在規則鏈的頭部加入新規則
-D num 刪除某一條規則
-s 匹配來源地址IP/MASK,加歎號“!”表示除這個IP外
-d 匹配目標地址
-i 網絡卡名稱 匹配從這塊網絡卡流入的資料
-o 網絡卡名稱 匹配從這塊網絡卡流出的資料
-p 匹配協議,如TCP、UDP、ICMP
--dport num 匹配目標埠號
--sport num 匹配來源埠號

1.在iptables命令後新增-L引數檢視已有的防火牆規則鏈。

[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

2.****在iptables命令後新增-F引數清空已有的防火牆規則鏈。

[root@linuxprobe ~]# iptables -F
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

3.****把INPUT規則鏈的預設策略設定為拒絕。

[root@linuxprobe ~]# iptables -P INPUT DROP
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

前文提到,防火牆策略規則的設定無非有兩種方式:“通”和“堵”。當把INPUT鏈設定為預設拒絕後,就要往裡面寫入允許策略了,否則所有流入的資料包都會被預設拒絕掉。同學們需要留意的是,規則鏈的預設策略拒絕動作只能是DROP,而不能是REJECT。

4.****向INPUT鏈中新增允許ICMP流量進入的策略規則。

在日常運維工作中,經常會使用ping命令來檢查對方主機是否線上,而向防火牆的INPUT規則鏈中新增一條允許ICMP流量進入的策略規則就預設允許了這種ping命令檢測行為。

[root@linuxprobe ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.154 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.041 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.038 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.046 ms

--- 192.168.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 104ms
rtt min/avg/max/mdev = 0.038/0.069/0.154/0.049 ms

5.刪除INPUT規則鏈中剛剛加入的那條策略(允許ICMP流量),並把預設策略設定為允許。

使用-F引數會清空已有的所有防火牆策略;使用-D引數可以刪除某一條指定的策略,因此更加安全和準確。

[root@linuxprobe ~]# iptables -D INPUT 1
[root@linuxprobe ~]# iptables -P INPUT ACCEPT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

6.將INPUT規則鏈設定為只允許指定網段的主機訪問本機的22埠,拒絕來自其他所有主機的流量。

要對某臺主機進行匹配,可直接寫出它的IP地址;如需對網段進行匹配,則需要寫為子網掩碼的形式(比如192.168.10.0/24)。

[root@linuxprobe ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
 ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh 
 REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
………………省略部分輸出資訊………………

再次重申,防火牆策略規則是按照從上到下的順序匹配的,因此一定要把允許動作放到拒絕動作前面,否則所有的流量就將被拒絕掉,從而導致任何主機都無法訪問我們的服務。另外,這裡提到的22號埠是ssh服務使用的(有關ssh服務,請見第9章),這裡先挖個坑,等大家學完第9章後可再驗證這個實驗的效果。

在設定完上述INPUT規則鏈之後,使用IP地址在192.168.10.0/24網段內的主機訪問伺服器(即前面提到的設定了INPUT規則鏈的主機)的22埠,效果如下:

[root@Client A ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:5d52kZi1la/FJK4v4jibLBZhLqzGqbJAskZiME6ZXpQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
[email protected]'s password: 此處輸入伺服器密碼
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Jan 20 16:30:28 2021 from 192.168.10.1

然後,再使用IP地址在192.168.20.0/24網段內的主機訪問伺服器的22埠(雖網段不同,但已確認可以相互通訊),效果如下:

[root@Client B ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.

由上可以看到,提示連線請求被拒絕了(Connection failed)。

7.向INPUT規則鏈中新增拒絕所有人訪問本機12345埠的策略規則。

[root@linuxprobe ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT
[root@linuxprobe ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 
 REJECT udp -- anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable
 REJECT tcp -- anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable
 ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
 REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
………………省略部分輸出資訊………………

8.向INPUT規則鏈中新增拒絕192.168.10.5主機訪問本機80埠(Web服務)的策略規則。

[root@linuxprobe ~]# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 
 REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
 REJECT udp -- anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable
 REJECT tcp -- anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable
 ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
 REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
………………省略部分輸出資訊………………

9.向INPUT規則鏈中新增拒絕所有主機訪問本機1000~1024埠的策略規則。

前面在新增防火牆策略時,使用的是-I引數,它預設會把規則新增到最上面的位置,因此優先順序是最高的。如果工作中需要新增一條最後“兜底”的規則,那就用-A引數吧。這兩個引數的效果差別還是很大的:

[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
[root@linuxprobe ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 
 REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
 REJECT udp -- anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable
 REJECT tcp -- anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable
 ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
 REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
 REJECT tcp -- anywhere anywhere tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
 REJECT udp -- anywhere anywhere udp dpts:cadlock2:1024 reject-with icmp-port-unreachable
………………省略部分輸出資訊………………

有關iptables命令的知識講解到此就結束了,大家是不是意猶未盡?考慮到Linux防火牆的發展趨勢,大家只要能把上面的例項吸收消化,就可以完全搞定日常的iptables配置工作了。但是請特別注意,使用iptables命令配置的防火牆規則預設會在系統下一次重啟時失效,如果想讓配置的防火牆策略永久生效,還要執行儲存命令:

[root@linuxprobe ~]# iptables-save 
# Generated by xtables-save v1.8.2 on Wed Jan 20 16:56:27 2021
………………省略部分輸出資訊………………

對了,如果公司伺服器是5/6/7版本的話,對應的儲存命令應該是:

[root@linuxprobe ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

8.3 Firewalld

RHEL 8系統中集成了多款防火牆管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系統的動態防火牆管理器)服務是預設的防火牆配置管理工具,它擁有基於CLI(命令列介面)和基於GUI(圖形使用者介面)的兩種管理方式。

相較於傳統的防火牆管理配置工具,firewalld支援動態更新技術並加入了區域(zone)的概念。簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),使用者可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。例如,我們有一臺膝上型電腦,每天都要在辦公室、咖啡廳和家裡使用。按常理來講,這三者的安全性按照由高到低的順序來排列,應該是家庭、公司辦公室、咖啡廳。當前,我們希望為這檯筆記本電腦制定如下防火牆策略規則:在家中允許訪問所有服務;在辦公室內僅允許訪問檔案共享服務;在咖啡廳僅允許上網瀏覽。在以往,我們需要頻繁地手動設定防火牆策略規則,而現在只需要預設好區域集合,然後輕點滑鼠就可以自動切換了,從而極大地提升了防火牆策略的應用效率。firewalld中常見的區域名稱(預設為public)以及相應的策略規則如表8-2所示。

表8-2 firewalld中常用的區域名稱及策略規則

區域 預設規則策略
trusted 允許所有的資料包
home 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量
internal 等同於home區域
work 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量
public 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量
external 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量
dmz 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量
block 拒絕流入的流量,除非與流出的流量相關
drop 拒絕流入的流量,除非與流出的流量相關

8.3.1 終端管理工具

第2章在講解Linux命令時曾經提到,命令列終端是一種極富效率的工作方式,firewall-cmd是firewalld防火牆配置管理工具的CLI(命令列介面)版本。它的引數一般都是以“長格式”來提供的。大家不要一聽到長格式就頭大,因為RHEL 8系統支援部分命令的引數補齊,其中就包含這條命令(很酷吧)。也就是說,現在除了能用Tab鍵自動補齊命令或檔名等內容之外,還可以用Tab鍵來補齊表8-3中所示的長格式引數。這太棒了!。

firewall-cmd命令

中使用的引數以及作用

引數 作用
--get-default-zone 查詢預設的區域名稱
--set-default-zone=<區域名稱> 設定預設的區域,使其永久生效
--get-zones 顯示可用的區域
--get-services 顯示預先定義的服務
--get-active-zones 顯示當前正在使用的區域與網絡卡名稱
--add-source= 將源自此IP或子網的流量導向指定的區域
--remove-source= 不再將源自此IP或子網的流量導向某個指定區域
--add-interface=<網絡卡名稱> 將源自該網絡卡的所有流量都導向某個指定區域
--change-interface=<網絡卡名稱> 將某個網絡卡與區域進行關聯
--list-all 顯示當前區域的網絡卡配置引數、資源、埠以及服務等資訊
--list-all-zones 顯示所有區域的網絡卡配置引數、資源、埠以及服務等資訊
--add-service=<服務名> 設定預設區域允許該服務的流量
--add-port=<埠號/協議> 設定預設區域允許該埠的流量
--remove-service=<服務名> 設定預設區域不再允許該服務的流量
--remove-port=<埠號/協議> 設定預設區域不再允許該埠的流量
--reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則
--panic-on 開啟應急狀況模式
--panic-off 關閉應急狀況模式

與Linux系統中其他的防火牆策略配置工具一樣,使用firewalld配置的防火牆策略預設為執行時(Runtime)模式,又稱為當前生效模式,而且會隨著系統的重啟而失效。如果想讓配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常設定防火牆策略時新增--permanent引數,這樣配置的防火牆策略就可以永久生效了。但是,永久生效模式有一個“不近人情”的特點,就是使用它設定的策略只有在系統重啟之後才能自動生效。如果想讓配置的策略立即生效,需要手動執行firewall-cmd --reload命令。

Tips

Runtime:當前立即生效,重啟後失效。

Permanent:當前不生效,重啟後生效。

接下來的實驗都很簡單,但是提醒大家一定要仔細檢視使用的是Runtime模式還是Permanent模式。如果不關注這個細節,就算正確配置了防火牆策略,也可能無法達到預期的效果。

1.檢視firewalld服務當前所使用的區域。

這是一步非常重要的操作。在配置防火牆策略前,必須檢視當前生效的是哪個區域,否則配置的防火牆策略將不會立即生效。

[root@linuxprobe ~]# firewall-cmd --get-default-zone
public

2.查詢指定網絡卡在firewalld服務中繫結的區域。

在生產環境中,伺服器大多不止有一塊網絡卡。一般來說,充當閘道器的伺服器有兩塊網絡卡,一塊對公網,另外一塊對內網,那麼這兩塊網絡卡在審查流量時所用的策略肯定也是不一致的。因此,可以根據網絡卡針對的流量來源,為網絡卡繫結不同的區域,實現對防火牆策略的靈活管控。

[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=ens160
public

3.把網絡卡預設區域修改為external,並在系統重啟後生效。

[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=ens160
The interface is under control of NetworkManager, setting zone to 'external'.
success
[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=ens160
external

4.把firewalld服務的預設區域設定為public。

預設區域也叫全域性配置,指的是對所有網絡卡都生效的配置,優先順序較低。在下面的程式碼中可以看到,當前預設區域為public,而ens160網絡卡的區域為external。此時便是以網絡卡的區域名稱為準。

通俗來說,預設區域就是一種通用的政策。例如,食堂為所有人準備了一次性餐具,而環保主義者則會自己攜帶碗筷。如果您自帶了碗筷,就可以用自己的;反之就用食堂統一提供的。

[root@linuxprobe ~]# firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public
success
[root@linuxprobe ~]# firewall-cmd --get-default-zone 
public
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=ens160
externa

5.啟動和關閉firewalld防火牆服務的應急狀況模式。

如果想在1s的時間內阻斷一切網路連線,有什麼好辦法呢?大家下意識地會說:“拔掉網線!”這是一個物理級別的高招。但是,如果人在北京,伺服器在異地呢?panic緊急模式在這個時候就派上用場了。使用--panic-on引數會立即切斷一切網路連線,而使用--panic-off則會恢復網路連線。切記,緊急模式會切斷一切網路連線,因此在遠端管理伺服器時,在按下回車鍵前一定要三思。

[root@linuxprobe ~]# firewall-cmd --panic-on
success
[root@linuxprobe ~]# firewall-cmd --panic-off
success

6.查詢SSH和HTTPS協議的流量是否允許放行。

在工作中可以不使用--zone引數指定區域名稱,firewall-cmd命令會自動依據預設區域進行查詢,從而減少使用者輸入量。但是,如果預設區域與網絡卡所繫結的不一致時,就會發生衝突,因此規範寫法的zone引數是一定要加的。

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
no

7.把HTTPS協議的流量設定為永久允許放行,並立即生效。

預設情況下進行的修改都屬於Runtime模式,即當前生效而重啟後失效,因此在工作和考試中儘量避免使用。而在使用--permanent引數時,則是當前不會立即看到效果,而在重啟或重新載入後方可生效。於是,在添加了允許放行HTTPS流量的策略後,查詢當前模式策略,發現依然是不允許放行HTTPS協議的流量:

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
no

不想重啟伺服器的話,就用--reload引數吧:

[root@linuxprobe ~]# firewall-cmd --reload
success
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
yes

8.把HTTP協議的流量設定為永久拒絕,並立即生效。

由於在預設情況下HTTP協議的流量就沒有被允許,所以會有“Warning: NOT_ENABLED: http”這樣的提示資訊,因此對實際操作沒有影響。

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http
Warning: NOT_ENABLED: http
success
[root@linuxprobe ~]# firewall-cmd --reload 
success

9.把訪問8080和8081埠的流量策略設定為允許,但僅限當前生效。

[root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

10.把原本訪問本機888埠的流量轉發到22埠,要且求當前和長期均有效。

第9章介紹的SSH遠端控制協議是基於TCP/22埠傳輸控制指令的,如果想讓使用者通過其他埠號也能訪問ssh服務,就可以試試埠轉發技術了。通過這項技術,新的埠號在收到使用者請求後會自動轉發到原本服務的埠上,使得使用者能夠通過新的埠訪問到原本的服務。

來舉個例子幫助大家理解。假設小強是電子廠的工人,他喜歡上了三號流水線上的工人小花,但不好意思表白,於是寫了一封情書並交給門衛張大爺,希望由張大爺轉交給小花。這樣一來,情書(資訊)的傳輸由從小強到小花,變成了小強到張大爺再到小花,情書(資訊)依然能順利送達。

使用firewall-cmd命令實現埠轉發的格式有點長,這裡為大家總結好了:

firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源埠號>:proto=<協議>:toport=<目標埠號>:toaddr=<目標IP地址>

上述命令中的目標IP地址一般是伺服器本機的IP地址:

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
[root@linuxprobe ~]# firewall-cmd --reload
success

在客戶端使用ssh命令嘗試訪問192.168.10.10主機的888埠,訪問成功:

[root@client A ~]# ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
[email protected]'s password:此處輸入遠端root管理員的密碼
Last login: Sun Jul 19 21:43:48 2021 from 192.168.10.10

11.富規則的設定。

富規則也叫復規則,表示更細緻、更詳細的防火牆策略配置,它可以針對系統服務、埠號、源地址和目標地址等諸多資訊進行更有針對性的策略配置。它的優先順序在所有的防火牆策略中也是最高的。比如,我們可以在firewalld服務中配置一條富規則,使其拒絕192.168.10.0/24網段的所有使用者訪問本機的ssh服務(22埠):

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
[root@linuxprobe ~]# firewall-cmd --reload
success

在客戶端使用ssh命令嘗試訪問192.168.10.10主機的ssh服務(22埠):

[root@client A ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.

8.3.2 圖形管理介面

在各種版本的Linux系統中,幾乎沒有能讓劉遄老師欣慰並推薦的圖形化工具,但是firewall-config做到了。它是firewalld防火牆配置管理工具的GUI(圖形使用者介面)版本,幾乎可以實現所有以命令列來執行的操作。毫不誇張地說,即使讀者沒有紮實的Linux命令基礎,也完全可以通過它來妥善配置RHEL 8中的防火牆策略。但在預設情況下系統並沒有提供firewall-config命令,我們需要自行用dnf命令進行安裝,所以需要先配置軟體倉庫。

首先將虛擬機器的“CD/DVD(SATA)”光碟選項設定為“使用ISO映像檔案”,然後選擇已經下載好的系統映象,如圖8-2所示。

隨書配套的軟體資源請在這裡下載:https://www.linuxprobe.com/tools/

RedHatEnterpriseLinux [RHEL]8.0——紅帽作業系統(必需):

由開源軟體及全球服務性系統開發商紅帽公司出品,最穩定出色的Linux作業系統。

培訓課程介紹視訊:https://www.linuxprobe.com/training

8-2 將虛擬機器的光碟裝置指向ISO映象

Tips

下載後的系統映象是以.iso結尾的檔案,選中即可,無須解壓。

然後,把光碟裝置中的系統映象掛載到/media/cdrom目錄:

[root@linuxprobe ~]# mkdir -p /media/cdrom
[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.

為了能夠讓軟體倉庫一直為使用者提供服務,更加嚴謹的做法是將系統映象檔案的掛載資訊寫入到/etc/fstab檔案中,以保證萬無一失:

[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root                       /                  xfs       defaults        0 0
UUID=2db66eb4-d9c1-4522-8fab-ac074cd3ea0b   /boot              xfs       defaults        0 0
/dev/mapper/rhel-swap                       swap               swap      defaults        0 0
/dev/cdrom                                  /media/cdrom       iso9660   defaults        0 0 

最後,使用Vim文字編輯器建立軟體倉庫的配置檔案。與之前版本的系統不同,RHEL 8需要配置兩個軟體倉庫(即[BaseOS]與[AppStream]),且缺一不可。下述命令中用到的具體引數的含義,可參見4.1.4節。

[root@linuxprobe ~]# vim /etc/yum.repos.d/rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

在正確配置完軟體倉庫檔案後,就可以開始用yum或dnf命令安裝軟體了。這兩個命令在實際操作中除了名字不同外,執行方法完全一致,大家可隨時用yum來替代dnf命令。下面安裝firewalld圖形使用者介面工具:

[root@linuxprobe ~]# dnf install firewall-config
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream                                       3.1 MB/s | 3.2 kB     00:00    
BaseOS                                          2.7 MB/s | 2.7 kB     00:00    
Dependencies resolved.
================================================================================
 Package                Arch          Version            Repository        Size
================================================================================
Installing:
 firewall-config        noarch        0.6.3-7.el8        AppStream        157 k

Transaction Summary
================================================================================
Install  1 Package

Total size: 157 k
Installed size: 1.1 M
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : firewall-config-0.6.3-7.el8.noarch                     1/1 
  Running scriptlet: firewall-config-0.6.3-7.el8.noarch                     1/1 
  Verifying        : firewall-config-0.6.3-7.el8.noarch                     1/1 
Installed products updated.

Installed:
  firewall-config-0.6.3-7.el8.noarch                                            

Complete!

安裝成功後,firewall-config工具的介面如圖8-3所示,其功能具體如下。

1:選擇執行時(Runtime)或永久(Permanent)模式的配置。

2:可選的策略集合區域列表。

3:常用的系統服務列表。

4:主機地址的黑白名單。

5:當前正在使用的區域。

6:管理當前被選中區域中的服務。

7:管理當前被選中區域中的埠。

8:設定允許被訪問的協議。

9:設定允許被訪問的埠。

10:開啟或關閉SNAT(源網路地址轉換)技術。

11:設定埠轉發策略。

12:控制請求icmp服務的流量。

13:管理防火牆的富規則。

14:被選中區域的服務,若勾選了相應服務前面的複選框,則表示允許與之相關的流量。

15:firewall-config工具的執行狀態。

圖8-3 firewall-config的圖形介面

除了圖8-3中列出的功能,還有用於將網絡卡與區域繫結的Interfaces選項,以及用於將IP地址與區域繫結的Sources選項。另外再囉唆一句。在使用firewall-config工具配置完防火牆策略之後,無須進行二次確認,因為只要有修改內容,它就自動進行儲存。

下面進行動手實踐環節。

先將當前區域中請求http服務的流量設定為允許放行,但僅限當前生效。具體配置如圖8-4所示。

圖8-4 允許放行請求http服務的流量

嘗試新增一條防火牆策略規則,使其放行訪問8080~8088埠(TCP協議)的流量,並將其設定為永久生效,以達到系統重啟後防火牆策略依然生效的目的。在按照圖8-5所示的介面配置完畢之後,還需要在Options選單中單擊Reload Firewalld命令,讓配置的防火牆策略立即生效(見圖8-6)。這與在命令列中使用--reload引數的效果一樣。

前面在講解firewall-config工具的功能時,曾經提到了SNAT(Source Network Address Translation,源網路地址轉換)技術。SNAT是一種為了解決IP地址匱乏而設計的技術,它可以使得多個內網中的使用者通過同一個外網IP接入Internet。該技術的應用非常廣泛,甚至可以說我們每天都在使用,只不過沒有察覺到罷了。比如,當通過家中的閘道器裝置(無線路由器)訪問本書配套站點www.linuxprobe.com時,就用到了SNAT技術。

圖8-5 放行訪問8080~8088埠的流量

圖8-6 讓配置的防火牆策略規則立即生效

大家可以看一下在網路中不使用SNAT技術(見圖8-7)和使用SNAT技術(見圖8-8)時的情況。在圖8-7所示的區域網中有多臺PC,如果閘道器伺服器沒有應用SNAT技術,則網際網路中的網站伺服器在收到PC的請求資料包,並回送響應資料包時,將無法在網路中找到這個私有網路的IP地址,所以PC也就收不到響應資料包了。在圖8-8所示的區域網中,由於閘道器伺服器應用了SNAT技術,所以網際網路中的網站伺服器會將響應資料包發給閘道器伺服器,再由後者轉發給區域網中的PC。

圖8-7 沒有使用SNAT技術的網路

圖8-8 使用SNAT技術處理過的網路

使用iptables命令實現SNAT技術是一件很麻煩的事情,但是在firewall-config中卻是小菜一碟了。使用者只需按照圖8-9進行配置,並選中Masquerade zone複選框,就自動開啟了SNAT技術。

圖8-9 開啟防火牆的SNAT技術

為了讓大家直觀檢視不同工具在實現相同功能時的區別,針對前面使用firewall-cmd配置的防火牆策略規則,這裡使用firewall-config工具進行了重新演示:將本機888埠的流量轉發到22埠,且要求當前和長期均有效,具體如圖8-10和圖8-11所示。

圖8-10 配置本地的埠轉發

圖8-11 讓防火牆效策略規則立即生效

用命令配置富規則可真辛苦,幸好我們現在有了圖形使用者介面的工具。讓192.168.10.20主機訪問本機的1234埠號,如圖8-12所示。其中Element選項能夠根據服務名稱、埠號、協議等資訊進行匹配;Source與Destination選項後的inverted複選框代表反選功能,將其選中則代表對已填寫資訊進行反選,即選中填寫資訊以外的主機地址;Log複選框在選中後,日誌不僅會被記錄到日誌檔案中,而且還可以在設定日誌的級別(Level)後,再將日誌記錄到日誌檔案中,以方便後續的篩查。

圖8-12 配置防火牆富規則策略

如果生產環境中的伺服器有多塊網絡卡在同時提供服務(這種情況很常見),則對內網和對外網提供服務的網絡卡要選擇的防火牆策略區域也是不一樣的。也就是說,可以把網絡卡與防火牆策略區域進行繫結(見圖8-13和圖8-14),這樣就可以使用不同的防火牆區域策略,對源自不同網絡卡的流量進行有針對性的監控,效果會更好。

圖8-13 把網絡卡與防火牆策略區域進行繫結

圖8-14 網絡卡與策略區域繫結完成

最後再提一句,firewall-config工具真的非常實用,很多原本複雜的長命令被圖形化按鈕替代,設定規則也簡單明瞭,足以應對日常工作。所以再次向大家強調配置防火牆策略的原則—只要能實現所需的功能,用什麼工具請隨君便。

8.4 服務的訪問控制列表

TCP Wrapper是RHEL 6/7系統中預設啟用的一款流量監控程式,它能夠根據來訪主機的地址與本機的目標服務程式做出允許或拒絕的操作。在RHEL 8版本中,它已經被firewalld正式替代。換句話說,Linux系統中其實有兩個層面的防火牆,第一種是前面講到的基於TCP/IP協議的流量過濾工具,而TCP Wrapper服務則是能允許或禁止Linux系統提供服務的防火牆,從而在更高層面保護了Linux系統的安全執行。

TCP Wrapper服務的防火牆策略由兩個控制列表檔案所控制,使用者可以編輯允許控制列表檔案來放行對服務的請求流量,也可以編輯拒絕控制列表檔案來阻止對服務的請求流量。控制列表檔案修改後會立即生效,系統將會先檢查允許控制列表檔案(/etc/hosts.allow),如果匹配到相應的允許策略則放行流量;如果沒有匹配,則會進一步匹配拒絕控制列表檔案(/etc/hosts.deny),若找到匹配項則拒絕該流量。如果這兩個檔案都沒有匹配到,則預設放行流量。

由於RHEL 8版本已經不再支援TCP Wrapper服務程式,因此我們接下來選擇在一臺老版本的伺服器上進行實驗。TCP Wrapper服務的控制列表檔案配置起來並不複雜,常用的引數如表8-4所示。

表8-4 TCP Wrappers服務的控制列表檔案中常用的引數

客戶端型別 示例 滿足示例的客戶端列表
單一主機 192.168.10.10 IP地址為192.168.10.10的主機
指定網段 192.168.10. IP段為192.168.10.0/24的主機
指定網段 192.168.10.0/255.255.255.0 IP段為192.168.10.0/24的主機
指定DNS字尾 .linuxprobe.com 所有DNS字尾為.linuxprobe.com的主機
指定主機名稱 www.linuxprobe.com 主機名稱為www.linuxprobe.com的主機
指定所有客戶端 ALL 所有主機全部包括在內

在配置TCP Wrapper服務時需要遵循兩個原則:

編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;

建議先編寫拒絕策略規則,再編寫允許策略規則,以便直觀地看到相應的效果。

下面編寫拒絕策略規則檔案,禁止訪問本機sshd服務的所有流量(無須修改/etc/hosts.deny檔案中原有的註釋資訊):

[root@linuxprobe ~]# vim /etc/hosts.deny
#
# hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# The rules in this file can also be set up in
# /etc/hosts.allow with a 'deny' option instead.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
sshd:*
[root@linuxprobe ~]# ssh 192.168.10.10
ssh_exchange_identification: read: Connection reset by peer

接下來,在允許策略規則檔案中新增一條規則,使其放行源自192.168.10.0/24網段,且訪問本機sshd服務的所有流量。可以看到,伺服器立刻就放行了訪問sshd服務的流量,效果非常直觀:

[root@linuxprobe ~]# vim /etc/hosts.allow
#
# hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
sshd:192.168.10.

[root@linuxprobe ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Wed May 4 07:56:29 2021
[root@linuxprobe ~]# 

8.5 Cockpit駕駛艙管理工具

首先,Cockpit是一個英文單詞,即“(飛機、船或賽車的)駕駛艙、駕駛座”(見圖8-15),它用名字傳達出了功能豐富的特性。其次,Cockpit是一個基於Web的圖形化服務管理工具,對使用者相當友好,即便是新手也可以輕鬆上手。而且它天然具備很好的跨平臺性,因此被廣泛應用於伺服器、容器、虛擬機器等多種管理場景。最後,紅帽公司對Cockpit也十分看重,直接將它預設安裝到了RHEL 8系統中,由此衍生的CentOS和Fedora也都標配有Cockpit。

圖8-15 駕駛艙示意圖

Cockpit在預設情況下就已經被安裝到系統中。下面執行dnf命令對此進行確認:

[root@linuxprobe ~]# dnf install cockpit
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream                                       3.1 MB/s | 3.2 kB     00:00    
BaseOS                                          2.7 MB/s | 2.7 kB     00:00    
Package cockpit-185-2.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

但是,Cockpit服務程式在RHEL 8版本中沒有自動執行,下面將它開啟並加入到開機啟動項中:

[root@linuxprobe ~]# systemctl start cockpit
[root@linuxprobe ~]# systemctl enable cockpit.socket
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.

在Cockpit服務啟動後,開啟系統自帶的瀏覽器,在位址列中輸入“本機地址:9090”即可訪問。由於訪問Cockpit的流量會使用HTTPS進行加密,而證書又是在本地簽發的,因此還需要進行新增並信任本地證書的操作,如圖8-16與圖8-17所示。進入Cockpit的登入介面後,輸入root管理員的賬號與系統密碼,單擊Log In按鈕後即可進入,如圖8-18所示。

進入Cockpit的Web介面,發現裡面可謂“別有洞天”。Cockpit總共分為13個功能模組:系統狀態(System)、日誌資訊(Logs)、硬碟儲存(Storage)、網絡卡網路(Networking)、賬戶安全(Accounts)、服務程式(Services)、軟體倉庫(Applications)、報告分析(Diagnostic Reports)、核心排錯(Kernel Dump)、SElinux、更新軟體(Software Updates)、訂閱服務(Subscriptions)、終端介面(Terminal)。下面逐一進行講解。

圖8-16 新增額外允許的證書

圖8-17 確認信任本地證書

圖8-18 輸入登入賬號與系統密碼

進入到Cockpit網頁介面後可謂是別有洞天,總共分為十三個功能模組,即:系統狀態、日誌資訊、硬碟儲存、網絡卡網路、賬戶安全、服務程式、軟體倉庫、報告分析、核心排錯、SElinux、更新軟體、訂閱服務、終端介面。逐一為同學們進行講解。

1.System

進入Cockpit介面後預設顯示的便是System(系統)介面,在該介面中能夠看到系統架構、版本、主機名與時間等資訊,還能夠動態地展現出CPU、硬碟、記憶體和網路的複雜情況,這有點類似於Web版的“Winodws系統工作管理員”,屬實好用,如圖8-19所示。

圖8-19 系統狀態介面

2.Logs

這個模組能夠提供系統的全部日誌,但是同學們可能會好奇,“為什麼圖8-20中的內容這麼有限呢”?原因出在圖8-20中的兩個選項中:時間和日誌級別。通過這兩個選項可以讓使用者更快地找到所需資訊,而不是像/var/log/message檔案那樣一股腦兒地都拋給使用者。

圖8-20 日誌資訊介面

3.Storage

這個功能模組是同學們最喜歡的一個模組,原因不是這個模組顯示了硬碟的I/O讀寫負載情況,而是可以讓使用者通過該介面,用滑鼠創建出RAID、LVM、VDO和iSCSI等儲存裝置,如圖8-21所示。是的,您沒有看錯,RAID和LVM都可以用滑鼠進行建立了,是不是很開心呢?

圖8-21 硬碟儲存介面

4.Networking

既然名為Networking模組,那麼動態看網絡卡的輸出和接收值肯定是這個模組的標配功能了。如圖8-22所示,我們不僅可以在這裡進行網絡卡的繫結(Bonding)和聚合(Team),還可以建立橋接網絡卡及新增VLAN。圖8-22的最下方會單獨列出與網絡卡相關的日誌資訊。

8-22 網絡卡網路介面

5.Accounts

大家千萬別小看Accounts模組,雖然它的功能介面有些簡陋(見圖8-23),只有一個用於建立賬戶的按鈕,但只要點選進入某個使用者的管理介面中,馬上會發現“別有洞天”,如圖8-24所示。這個介面中的功能非常豐富,我們在這裡可以對使用者進行重新命名,設定使用者的許可權,還可以鎖定、修改密碼以及建立SSH金鑰資訊。

圖8-23 賬戶安全介面

圖8-24 賬戶管理介面

6.Services

在Services功能模組的介面中(見圖8-25),可以檢視系統中已有的服務列表和執行狀態。單擊某一服務,進入該服務的管理介面後(見圖8-26),可以對具體的服務進行開啟、關閉操作。在Services功能模組中設定了服務並將其加入到開機啟動項後,在系統重啟後也依然會為使用者提供服務。

圖8-25 服務程式介面

圖8-26 服務管理介面

7.Applications

後期採用Cockpit或紅帽訂閱服務安裝的軟體都會顯示在這個功能模組中,如圖8-27所示。

圖8-27 軟體倉庫介面

8.Diagnostic Report

Diagnostic Report模組的功能是幫助使用者收集及分析系統的資訊,找到系統出現問題的原因,介面如圖8-28所示。單擊Create Report按鈕後大約兩分鐘左右,會出現如圖8-29所示的介面。好吧,攤牌了,這個功能其實很雞肋,就是將sosreport命令做成了一個網頁按鈕。

圖8-28 報告分析介面

圖8-29 報告生成完畢

9.Kernel Dump

Kernel Dump(Kdump)是一個在系統崩潰、死鎖或宕機時用來收集核心引數的一個服務。舉例來說,如果有一天系統崩潰了,這時Kdump服務就會開始工作,將系統的執行狀態和核心資料收集到一個名為dump core的檔案中,以便後續讓運維人員分析並找出問題所在。由於我們在安裝系統時沒有啟動該服務,所以可以等到後續使用時再開啟該功能介面(見圖8-30)。

圖8-30 核心排錯介面

10.SElinux

圖8-31所示為SELinux服務的控制按鈕和警告資訊介面,第10章將詳細介紹SELinux安全子系統,這裡暫時略過。

圖8-29 SElinux管理介面

11.Software Updates

Software Updates功能模組的介面如圖8-32所示。但是,這裡提到的Software Updates並不是我們用來更新其他常規軟體的一個介面,而是用來對紅帽客戶訂閱的服務進行更新的介面。使用者只有在購買了紅帽第三方服務後才能使用這裡面的功能。在購買了紅帽訂閱服務後,使用者便可以在這裡下載到相應服務程式的最新版本和穩定版本。

圖8-30 更新軟體介面

12.Subscriptions

Subscriptions功能模組的介面如圖8-33所示。這裡依然是一則紅帽公司的“小廣告”—如果想成為尊貴的紅帽服務使用者,要付費購買訂閱服務。個人使用者無須購買,而且這對我們的後續實驗沒有任何影響。

圖8-31 訂閱服務介面

13.Terminal

壓軸的總是在最後。Terminal功能模組的介面如圖8-34所示。Cockpit服務提供了Shell終端的線上控制平臺,可方便使用者通過網頁上的終端功能管理伺服器。這個功能深受運維人員喜愛。

圖8-32 終端管理介面

至此,相信各位讀者已經充分掌握了防火牆的管理能力。防火牆管理工具有很多種,我們任選其一即可。在配置後續的服務前,大家要記得檢查網路和防火牆的狀態,以避免出現服務明明配置正確,但無法從外部訪問的情況,最終影響實驗效果。