在 Linux 環境下進行網路管理和安全維護,需要熟悉各種網路診斷工具和防火牆組態技巧。對於大型網路的掃描,MASSCAN 提供比 Nmap 更高效的解決方案,尤其在處理 /8 或 /16 網段時,能大幅縮短掃描時間。無線網路診斷方面,Kismet、Wavemon 和 LinSSID 各具特色,Kismet 適合偵測隱藏 SSID,Wavemon 專注於連線狀態監控,而 LinSSID 則提供全面的頻譜分析功能,方便管理員找出幹擾源並最佳化頻道組態。此外,Linux 防火牆 iptables 提供了精細的流量控制能力,透過設定規則可以限制特定 IP 或埠的存取,並記錄相關日誌以供安全稽核。
無線網路診斷操作
在處理大型網路時,Nmap 的效能限制成為一個挑戰。對於 /8 或 /16 網路,甚至是龐大的 IPv6 網路,掃描時間可能長達數小時、數天甚至數週。為瞭解決這個問題,可以使用 MASSCAN 這種專為高效能掃描設計的工具。
Nmap 的限制與解決方案
Nmap 的主要限制在於效能。隨著網路規模的擴大,Nmap 掃描所需時間會越來越長。在生產環境中,如果掃描從早上 8 點開始,到第二天才結束,那麼掃描結果的有效性將大打折扣,尤其是當許多裝置在掃描期間關機或斷開連線時。
提升 Nmap 掃描速度的方法
- 調整引數:參考 Nmap 的 man 頁面,調整平行運算元量、主機逾時、往返逾時和操作之間的延遲等待時間。
- 使用替代工具:Rob Graham 維護的 MASSCAN 工具專為高效能掃描設計,能夠在 10 分鐘內掃描整個 IPv4 網際網路。MASSCAN 的語法與 Nmap 類別似,但需要注意一些使用上的差異。
使用 MASSCAN 進行高效掃描
對於非常大的網路,常見的做法是先使用 MASSCAN 或調校過的 Nmap 進行初步掃描,然後將輸出結果提供給其他工具,如 Nmap 或安全掃描器(例如 Nessus 或 OpenVAS)。這種工具連結的方式能夠最大化每個工具的優勢,在最短的時間內獲得最佳結果。
無線網路診斷工具
在無線網路中,診斷工具主要用於檢測訊號強度低和幹擾的區域。以下是三個常用的 Linux 無線工具:
Kismet:一個較老的無線工具,最初作為資訊安全工具使用,用於檢測隱藏的無線 SSID。
- 使用指令
$ sudo kismet –c <無線介面名稱>執行 Kismet。 - 在另一個視窗中執行
$ kismet_client以連線到 Kismet 伺服器。 - Kismet 顯示各種 SSID、BSSID、通道和加密型別,以及客戶端站點的 MAC 位址、頻率和封包計數。
- 使用指令
Wavemon 和 LinSSID:其他兩個免費且可透過
apt-get install安裝的無線工具。
Kismet 的使用與輸出
Kismet 能夠顯示隱藏的 SSID 以及相關的客戶端資訊。透過在 Kismet 主畫面選擇特定的網路,可以獲得更多關於該 SSID 的詳細資訊。
$ sudo kismet –c wlan0
$ kismet_client
圖表說明:Kismet 輸出範例
此圖示顯示了 Kismet 的典型輸出,包含 SSID、BSSID 和相關客戶端的資訊。 雖然 Kismet 是用於偵察和示範的好工具,但其選單容易讓人迷失,不太適合用於追蹤訊號強度等故障排除工作。
內容解密:
- Nmap限制:Nmap在大型網路中(如/8或/16網路)掃描時間過長,可能長達數天或數週。
- 解決方案:
- 調整Nmap引數(如平行運算元量、逾時設定)以提升掃描速度。
- 使用MASSCAN等高效能工具,能在10分鐘內掃描整個IPv4網際網路。
- MASSCAN使用:MASSCAN語法與Nmap類別似,但需注意使用差異,適合用於初步掃描後再交由其他工具處理。
- 無線診斷工具:
- Kismet:用於檢測隱藏SSID,顯示BSSID、通道、加密型別及客戶端資訊。
- Wavemon和LinSSID:其他Linux下免費的無線診斷工具。
- Kismet操作:透過特定指令啟動Kismet並連線客戶端,能夠顯示詳細的無線網路資訊。
無線網路診斷工具的實務應用
在無線網路的環境中,Linux 提供了一系列強大的工具來進行網路診斷與故障排除。這些工具能夠幫助我們深入瞭解無線網路的運作狀況,找出潛在的問題,並進行適當的調整。
Wavemon:監測連線狀態的專用工具
Wavemon 是一個專門用於監測無線連線狀態的工具。它需要與特定的 SSID 關聯後,才能提供相關的連線資訊,例如目前連線的存取點、連線速度、使用的頻道等。雖然 Wavemon 提供了即時的連線狀態,但它的視野相對狹隘,主要聚焦於目前連線的網路,對於整體無線網路環境的瞭解幫助有限。因此,Wavemon 較適用於排除與特定網路連線相關的問題。
Wavemon 的實務應用
- 監測連線品質:Wavemon 能夠即時顯示訊號強度、傳輸速率等資訊,幫助我們瞭解目前連線的品質。
- 診斷上行鏈路問題:由於 Wavemon 提供了詳細的上行鏈路資訊,因此特別適合用於診斷與上行鏈路相關的問題。
LinSSID:無線頻譜分析的利器
相較於 Wavemon,LinSSID 是一個更為全面的無線網路分析工具。它是 inSSIDer 的 Linux 版本,能夠掃描周圍的無線網路,並以圖形化的方式呈現各個頻道的佔用情況和訊號強度。透過 LinSSID,我們可以輕易地發現頻道之間的幹擾問題,以及各個存取點的訊號覆寫情況。
LinSSID 的實務應用
- 頻譜分析:LinSSID 能夠掃描 2.4 GHz 和 5 GHz 頻段,顯示各個頻道的佔用情況和訊號強度,幫助我們選擇最佳的頻道。
- 幹擾排查:透過觀察不同 SSID 的訊號重疊情況,我們可以找出幹擾源,並進行適當的調整。
- 無線網路規劃:在進行無線網路規劃時,LinSSID 能夠幫助我們找出最佳的存取點佈署位置,以確保最佳的覆寫範圍和最小的幹擾。
無線網路診斷的最佳實踐
在進行無線網路診斷時,我們應該結合多種工具和技術,以獲得對網路環境的全貌瞭解。以下是一些最佳實踐:
使用 Kismet 發現隱藏的 SSID:Kismet 能夠幫助我們發現隱藏的無線網路,這對於全面瞭解無線環境至關重要。
利用 Wavemon 監測連線狀態:對於目前連線的網路,Wavemon 能夠提供詳細的連線資訊,幫助我們診斷與特定網路相關的問題。
使用 LinSSID 分析無線頻譜:透過 LinSSID,我們可以全面瞭解周圍的無線環境,找出幹擾源,並最佳化頻道選擇。
在下一章中,我們將探討 Linux 防火牆的管理和組態。防火牆是網路安全的重要組成部分,能夠幫助我們控制進出網路的流量,防止未經授權的存取。透過學習 Linux 防火牆的相關知識,我們將能夠更好地保護我們的網路環境,確保資料的安全和完整性。
Linux 防火牆組態與管理
Linux 作業系統幾乎總是內建防火牆供管理員使用。利用原生防火牆工具,可以建立傳統的周邊防火牆並進行位址轉換,或是設定代理伺服器。然而,在現代資料中心中,這些並不是典型的使用案例。現代基礎設施中主機防火牆的典型使用案例包括:
- 限制對管理介面的存取
- 限制對其他已安裝服務的存取
- 在安全事件發生後,記錄存取日誌以便進行後續的事件回應
雖然輸出過濾(輸出存取控制)也是被推薦的,但這通常是在網路周邊實施的,例如在防火牆和路由器之間,或者面對不太可信的網路,如公共網際網路。
在本章中,我們將重點關注如何實作一套規則,以控制對提供一般存取的網頁服務和提供管理存取的 SSH 服務的主機的存取。
技術需求
要跟隨本章的範例,我們將繼續使用我們現有的 Ubuntu 主機或虛擬機器。由於本章重點關注 Linux 防火牆,因此可能會需要第二個主機來測試您的防火牆變更。
在處理各種防火牆組態時,我們將主要使用兩個主要的 Linux 命令:iptables 和 nftables。
組態 iptables
撰寫本文時(2021 年),防火牆架構正在發生變化。iptables 仍然是許多發行版(包括我們的範例 Ubuntu 發行版)上的預設主機防火牆。然而,業界已經開始轉向新的架構 nftables(Netfilter)。例如,Red Hat 和 CentOS v8(在 Linux 核心 4.18 上)已經將 nftables 作為其預設防火牆。只是為了提供一些背景,當 iptables 在核心版本 3.13(約 2014 年)中被引入時,它又取代了 ipchains 軟體包(該軟體包在核心版本 2.2 中被引入,大約在 1999 年)。轉向新命令的主要原因是為了實作更一致的命令集、提供更好的 IPv6 支援,以及透過 API 提供更好的組態操作程式支援。
iptables 簡介
iptables 是一種 Linux 防火牆應用程式,預設安裝在大多數現代發行版中。如果啟用,它將控制進出主機的所有流量。防火牆組態儲存在一個文字檔案中,按照預期在 Linux 上,該檔案被組織成由規則集(稱為鏈)組成的表格。
當封包符合規則時,規則結果將是一個目標。目標可以是另一個鏈,也可以是三個主要動作之一:
- Accept:封包被允許透過。
- Drop:封包被丟棄,不被允許透過。
- Return:停止封包遍歷此鏈;告訴它傳回到前一個鏈。
預設表格之一稱為 filter。此表格有三個預設鏈:
- Input:控制進入主機的封包
- Forward:處理要轉發到其他地方的進入封包
- Output:處理離開主機的封包
其他兩個預設表格是 NAT 和 Mangle。
檢視 iptables 組態
預設情況下,iptables 未組態。我們可以從 iptables -L -v(用於「列出」)看到,在三個預設鏈中都沒有規則:
robv@ubuntu:~$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 254 packets, 43091 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 146 packets, 18148 bytes)
pkts bytes target prot opt in out source destination
內容解密:
此輸出顯示了 iptables 的預設組態,包括三個鏈(INPUT、FORWARD 和 OUTPUT)的規則。每個鏈都有一個預設策略(在本例中均為 ACCEPT),以及目前的封包和位元組計數。無規則被定義,因此所有流量都被允許透過。
為什麼需要了解 iptables 和 nftables?
由於 Linux 發行版正在逐漸從 iptables 遷移到 nftables,因此瞭解兩者的組態和管理對於系統管理員來說至關重要。這不僅有助於維護現有的系統,也能為未來的升級和遷移做好準備。
Linux 防火牆組態
Linux 防火牆是保護系統免受未授權存取的重要工具。本文將介紹如何使用 iptables 組態防火牆規則,以確保系統的安全。
檢查防火牆狀態
首先,我們需要檢查防火牆的目前狀態。可以使用以下命令來檢視 iptables 的規則:
sudo iptables -L -n -v --line-numbers
這個命令會顯示目前的防火牆規則,包括 INPUT、FORWARD 和 OUTPUT 鏈的規則。
新增防火牆規則
要新增規則到鏈中,我們使用 -A 引數。以下是一些常用的引數:
-i:指定輸入介面-p:指定協定(例如 TCP、UDP)-s:指定來源 IP 地址或網段--dport:指定目標埠號-j:指定動作(例如 ACCEPT、DROP)
例如,以下兩個規則允許來自 1.2.3.0/24 網段的主機存取本機的 TCP/22 埠,並允許任何主機存取 TCP/443 埠:
sudo iptables -A INPUT -i ens33 -p tcp -s 1.2.3.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
內容解密:
sudo iptables -A INPUT -i ens33 -p tcp -s 1.2.3.0/24 --dport 22 -j ACCEPT:允許來自1.2.3.0/24網段的主機透過ens33網路卡存取本機的 TCP/22 埠(SSH)。-i ens33指定了輸入介面為ens33。-p tcp指定了協定為 TCP。-s 1.2.3.0/24指定了來源網段。--dport 22指定了目標埠號為 22(SSH)。-j ACCEPT表示允許符合條件的封包透過。
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT:允許任何主機存取本機的 TCP/443 埠(HTTPS)。-p tcp指定了協定為 TCP。--dport 443指定了目標埠號為 443(HTTPS)。-j ACCEPT表示允許符合條件的封包透過。
檢視規則
新增規則後,可以使用以下命令檢視目前的規則:
sudo iptables -L -n -v --line-numbers
這個命令會顯示目前的防火牆規則,包括 INPUT、FORWARD 和 OUTPUT 鏈的規則,並顯示行號。
插入規則
如果需要插入規則到特定的位置,可以使用 -I 引數。例如,以下命令在 INPUT 鏈的第 2 行插入一個規則,拒絕來自 1.2.3.5 的主機存取 TCP/443 埠:
sudo iptables -I INPUT 2 -i ens33 -p tcp -s 1.2.3.5 --dport 443 -j DROP
內容解密:
sudo iptables -I INPUT 2 -i ens33 -p tcp -s 1.2.3.5 --dport 443 -j DROP:在 INPUT 鏈的第 2 行插入一個規則,拒絕來自1.2.3.5的主機透過ens33網路卡存取本機的 TCP/443 埠。-I INPUT 2表示在 INPUT 鏈的第 2 行插入規則。-i ens33指定了輸入介面為ens33。-p tcp指定了協定為 TCP。-s 1.2.3.5指定了來源 IP 地址。--dport 443指定了目標埠號為 443(HTTPS)。-j DROP表示拒絕符合條件的封包。
分組和管理規則
為了提高防火牆的可讀性和可管理性,建議將相關的規則分組。例如,將 SSH 相關的規則放在一起,將 HTTPS 相關的規則放在一起。
sudo iptables -L
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 1.2.3.0/24 anywhere tcp dpt:ssh
2 DROP tcp -- anywhere anywhere tcp dpt:ssh
3 DROP tcp -- 1.2.3.5 anywhere tcp dpt:https
4 ACCEPT tcp -- anywhere anywhere tcp dpt:https
圖表說明:防火牆規則處理流程圖示
此圖示展示了防火牆處理封包的基本流程,包括檢查封包、比對規則和執行相應動作。
日誌記錄
為了監控和除錯防火牆,需要啟用日誌記錄功能。可以使用以下命令來記錄日誌:
sudo iptables -A INPUT -j LOG
也可以指定日誌級別和字首:
sudo iptables -A INPUT -s 192.168.122.0/24 -j LOG --log-level 3 --log-prefix '*SUSPECT Traffic Rule 9*'
內容解密:
sudo iptables -A INPUT -j LOG:將所有進入 INPUT 鏈的封包記錄到日誌中。-j LOG表示將封包日誌記錄下來。
sudo iptables -A INPUT -s 192.168.122.0/24 -j LOG --log-level 3 --log-prefix '*SUSPECT Traffic Rule 9*':將來自192.168.122.0/24網段的封包記錄到日誌中,並指定日誌級別為 3,字首為 ‘SUSPECT Traffic Rule 9’。-s 192.168.122.0/24指定了來源網段。--log-level 3指定了日誌級別。--log-prefix '*SUSPECT Traffic Rule 9*'指定了日誌字首。
新增註解
為了提高防火牆的可讀性,建議新增註解。可以使用以下命令來新增註解:
sudo iptables -A INPUT -i ens33 -p tcp -s 1.2.3.0/24 --dport 22 -j ACCEPT -m comment --comment "Permit Admin"
圖表說明:新增註解範例圖示
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux 無線網路診斷與防火牆組態
package "網路架構" {
package "應用層" {
component [HTTP/HTTPS] as http
component [WebSocket] as ws
component [gRPC] as grpc
}
package "傳輸層" {
component [TCP] as tcp
component [UDP] as udp
component [TLS/SSL] as tls
}
package "網路層" {
component [IP] as ip
component [ICMP] as icmp
component [路由協議] as routing
}
package "鏈路層" {
component [Ethernet] as eth
component [WiFi] as wifi
component [ARP] as arp
}
}
http --> tcp
ws --> tcp
grpc --> tcp
tcp --> tls : 加密
tls --> ip
udp --> ip
ip --> routing
routing --> eth
routing --> wifi
eth --> arp
@enduml
此圖示展示瞭如何為防火牆規則新增註解,以提高可讀性。