在現代網路環境中,DHCP 伺服器扮演著自動分配 IP 位址的關鍵角色,而憑證管理則是確保網路安全的根本。本文將探討 DHCP 伺服器的設定、故障排除,以及憑證的申請與使用,幫助讀者建立安全可靠的網路環境。首先,我們將逐步講解 DHCP 伺服器的安裝與設定,包括租約時間、DNS 伺服器設定、作用域定義等。接著,我們將探討 DHCP 伺服器的故障排除技巧,例如檢查伺服器狀態、網路連線、使用者端設定以及日誌分析。此外,我們將介紹如何偵測流氓 DHCP 伺服器,以避免網路安全風險。最後,我們將探討憑證的申請流程,包括產生金鑰對、建立 CSR、提交 CSR 至 CA 等步驟,以及憑證在 HTTPS 加密通訊中的作用,並提供建立私有 CA 的方法。
DHCP 伺服器安裝與設定
在大多數情況下,使用者端可以在租約間隔的 50% 時開始請求續租,這個間隔是協商好的。讓我們編輯 DHCP 伺服器的主要設定檔 /etc/dhcp/dhcpd.conf。請務必使用 sudo 以確保您在編輯此檔案時具有適當的許可權:
default-lease-time 3600;
max-lease-time 7200;
ping true;
ping-timeout 2;
option domain-name-servers 192.168.122.10, 192.168.124.11;
進一步在檔案中取消 authoritative 引數的註解:
# 如果此 DHCP 伺服器是本地網路的官方 DHCP 伺服器,則應取消註解 authoritative 指令。
authoritative;
在該檔案的末尾,新增您的作用域詳細資訊。請注意,如果您正在佈署新的子網路,請嘗試避免使用 192.168.0.0/24 或 192.168.1.0/24,因為這些在家庭網路中使用得非常頻繁,在工作場所使用可能會讓遠端使用者混淆。如果他們使用 VPN 連線,將會遇到兩個不同的 192.168.1.0 網路,其中一個或另一個可能無法存取:
# 指定網路位址和子網路遮罩
subnet 192.168.122.0 netmask 255.255.255.0 {
# 指定預設閘道位址
option routers 192.168.122.1;
# 指定子網路遮罩
option subnet-mask 255.255.255.0;
# 指定租用的 IP 位址範圍
range 192.168.122.10 192.168.122.200;
}
內容解密:
此設定了一個定義 DHCP 作用域,用於為 192.168.122.0/24 網路中的裝置分配 IP 位址。其中,default-lease-time 和 max-lease-time 設定了租約的預設和最大時間;ping true 和 ping-timeout 2 用於檢查 IP 位址是否已被使用;option domain-name-servers 指定了 DNS 伺服器的位址;authoritative 表示此 DHCP 伺服器是該網路的官方伺服器。
最後,重啟 DHCP 伺服器:
$ sudo systemctl restart isc-dhcp-server.service
動態 DNS 更新
如果您希望使用者端嘗試使用其資訊更新 DNS 伺服器,可以新增以下設定:
ddns-update-style interim;
# 如果您有固定位址專案想使用動態 DNS,請啟用以下設定
update-static-leases on;
靜態保留
要為主機新增靜態定義,請在 dhcpd.conf 中新增一個 host 部分。在最基本的設定中,當看到特定的 MAC 位址時,我們會分配一個固定的 IP 位址:
host PrtAccounting01 {
hardware ethernet 00:b1:48:bd:14:9a;
fixed-address 172.16.12.49;
}
內容解密:
此設定為 MAC 位址 00:b1:48:bd:14:9a 的裝置分配固定 IP 位址 172.16.12.49。
對於可能會漫遊的工作站,例如無線裝置可能會在不同的網路中出現,我們希望分配其他選項,但保留 IP 位址為動態。在這種情況下,我們告訴裝置要使用的 DNS 字尾,以及如何使用動態 DNS 註冊自己:
host LTOP-0786 {
hardware ethernet 3C:52:82:15:57:1D;
option host-name "LTOP-0786";
option domain-name "coherentsecurity.com";
ddns-hostname "LTOP-786";
ddns-domain-name "coherentsecurity.com";
}
或者,要為一組主機新增靜態定義,請執行以下命令:
group {
option domain-name "coherentsecurity.com";
ddns-domainname "coherentsecurity";
host PrtAccounting01 {
hardware ethernet 40:b0:34:72:48:e4;
option host-name "PrtAccounting01";
ddns-hostname "PrtAccounting01";
fixed-address 192.168.122.10;
}
host PrtCafe01 {
hardware ethernet 00:b1:48:1c:ac:12;
option host-name "PrtCafe01";
ddns-hostname "PrtCafe01";
fixed-address 192.168.125.9;
}
}
內容解密:
此設定了一個定義主機群組,並為其中的兩個主機分配了靜態 IP 位址和相關的 DNS 設定。
簡單的 DHCP 日誌記錄和故障排除
要檢視目前的 DHCP 租約列表,請使用 dhcp-lease-list 命令:
$ dhcp-lease-list
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC IP hostname valid until manufacturer
==================================================================================
e0:37:17:6b:c1:39 192.168.122.161 -NA- 2021-03-22 14:53:26 Technicolor CH USA Inc.
內容解密:
此命令列出了目前所有的 DHCP 租約,包括 MAC 位址、IP 位址、主機名稱、租約到期時間和製造商資訊。
如果需要更詳細的資訊或調查過去的事件,您可能需要從日誌中取得資料。DHCP 日誌記錄在 /var/log/dhcpd.log,輸出非常詳細。例如,您可以收集特定 MAC 位址的整個 DORA(Discover、Offer、Request、Acknowledgment)序列:
cat dhcpd.log | grep e0:37:17:6b:c1:39 | grep "Mar 19" | more
內容解密:
此命令從日誌中篩選出與指定 MAC 位址相關的 DORA 序列,顯示了該裝置取得 IP 位址的過程。
Linux上的DHCP服務疑難排解與憑證服務
疑難排解DHCP服務
當遠端辦公室報告無法取得DHCP位址時,管理員需要進行一系列的故障排除步驟。以下是一些常見的處理方法:
- 檢查DHCP伺服器狀態:首先確認DHCP伺服器是否正常運作,檢查其服務是否啟動、設定是否正確。
- 網路連線檢查:確認使用者端與DHCP伺服器之間的網路連線是否正常,檢查交換器、路由器等網路裝置的狀態。
- 使用者端設定檢查:檢查使用者端的網路設定,確保其被設定為自動取得IP位址。
- 日誌檔案分析:檢視DHCP伺服器的日誌檔案,尋找可能的錯誤訊息或異常記錄。
偵測流氓DHCP伺服器
如果工程部門無法存取網路,但仍可到達該子網路,則可能是存在流氓DHCP伺服器。以下是一些偵測方法:
- 使用網路掃描工具:利用如Nmap等網路掃描工具掃描子網路,尋找未經授權的DHCP伺服器。
- 檢查網路流量:使用Wireshark等網路封包分析工具,監控網路流量,尋找異常的DHCP封包。
- 檢視交換器日誌:檢查網路交換器的日誌,尋找與DHCP相關的異常記錄。
憑證服務基礎
憑證是用於驗證身分和加密通訊的重要工具。在Linux上建立私有的憑證授權單位(CA)可以滿足組織內部的憑證需求。
取得憑證
要取得憑證,需要產生憑證簽署請求(CSR),並將其提交給CA進行簽署。以下是CSR產生的步驟:
- 產生私鑰:使用OpenSSL等工具產生私鑰。
- 建立CSR:使用私鑰產生CSR,包含組織和伺服器的相關資訊。
- 提交CSR:將CSR提交給CA進行簽署。
# 產生私鑰
openssl genrsa -out server.key 2048
# 產生CSR
openssl req -new -key server.key -out server.csr
使用憑證
憑證可用於各種應用,如Web伺服器的HTTPS加密。以下是Web伺服器使用憑證的範例:
- 安裝憑證:將CA簽署的憑證安裝到Web伺服器上。
- 設定Web伺服器:設定Web伺服器使用憑證和私鑰進行HTTPS加密。
# 設定Apache Web伺服器使用憑證
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key
</VirtualHost>
#### 內容解密:
此範例展示瞭如何設定Apache Web伺服器使用憑證和私鑰進行HTTPS加密。其中,SSLCertificateFile指定了憑證檔案的位置,而SSLCertificateKeyFile則指定了私鑰檔案的位置。
建立私有CA
建立私有CA需要進行以下步驟:
- 產生根CA私鑰和憑證:使用OpenSSL等工具產生根CA的私鑰和憑證。
- 建立中間CA:建立中間CA,並使用根CA私鑰進行簽署。
- 釋出CA憑證:將CA憑證釋出到組織內部的使用者端和伺服器上。
# 產生根CA私鑰和憑證
openssl req -x509 -newkey rsa:2048 -nodes -keyout rootCA.key -out rootCA.crt -days 3650 -subj "/C=TW/ST=Taiwan/L=Taipei/O=Example/CN=rootCA"
# 建立中間CA
openssl req -newkey rsa:2048 -nodes -keyout intermediateCA.key -out intermediateCA.csr -subj "/C=TW/ST=Taiwan/L=Taipei/O=Example/CN=intermediateCA"
openssl x509 -req -in intermediateCA.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out intermediateCA.crt -days 365
#### 內容解密:
此範例展示瞭如何建立私有CA,包括產生根CA私鑰和憑證、建立中間CA等步驟。其中,openssl req命令用於產生私鑰和CSR,而openssl x509命令則用於簽署CSR並產生憑證。
數位憑證的申請與使用流程
在現代網路安全中,數位憑證扮演著至關重要的角色。憑證主要用於驗證伺服器身份並加密客戶端與伺服器之間的通訊。本章節將詳細闡述憑證的申請流程以及其在加密通訊中的作用。
憑證申請流程
憑證的申請涉及多個步驟,以下是具體流程:
產生金鑰對:首先,申請者需產生一對金鑰,包括私鑰和公鑰。私鑰必須妥善保管,而公鑰則會被用於後續的憑證申請過程中。
建立憑證簽署請求(CSR):申請者將身份資訊(如公司名稱、電子郵件等)與公鑰結合,形成CSR檔案。這個過程是密碼學上的結合,確保了憑證資訊與公鑰的不可篡改性。
openssl req -new -key server.key -out server.csr內容解密:
openssl req:用於建立和管理憑證簽署請求。-new:表示建立新的CSR。-key server.key:指定私鑰檔案。-out server.csr:輸出CSR檔案。
提交CSR至憑證授權單位(CA):申請者將CSR提交給CA進行驗證。公共CA通常透過網站進行提交,而自動化CA(如Let’s Encrypt)則使用ACME API進行通訊。
CA驗證身份資訊:CA對申請者的身份資訊進行驗證,這個過程可能是自動或手動的,取決於CA的政策和申請者的帳戶狀態。
簽發憑證:驗證透過後,CA使用其私鑰對CSR進行簽署,生成最終的憑證。
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365內容解密:
openssl x509:用於X.509憑證簽署。-req:表示輸入是CSR檔案。-in server.csr:輸入CSR檔案。-CA ca.crt、-CAkey ca.key:指定CA的憑證和私鑰。-CAcreateserial:如果序列號檔案不存在,則建立它。-out server.crt:輸出簽署後的憑證。-days 365:設定憑證的有效期為365天。
下發憑證:最終的憑證被送回給申請者,並安裝在相關應用程式中。
憑證在加密通訊中的作用
以HTTPS通訊為例,以下是憑證如何被用來建立信任和加密通訊的過程:
Step 1: 客戶端發起連線請求(CLIENT HELLO)
客戶端向伺服器傳送初始的HTTPS請求,包含支援的TLS版本和加密套件。
Step 2: 伺服器回應(SERVER HELLO)
伺服器回應客戶端請求,傳送其憑證、支援的TLS版本和首選加密套件。
Step 3: 客戶端驗證憑證
客戶端驗證收到的憑證,包括檢查伺服器身份、憑證有效期、CA信任度以及憑證是否被復原。
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title Step 3: 客戶端驗證憑證
rectangle "CLIENT HELLO" as node1
rectangle "SERVER HELLO + 憑證" as node2
rectangle "驗證憑證" as node3
node1 --> node2
node2 --> node3
@enduml此圖示展示了客戶端與伺服器之間的初始TLS握手流程。
Step 4: 建立對稱金鑰
客戶端生成一個偽隨機對稱金鑰(稱為預主金鑰),使用伺服器的公鑰加密後傳送給伺服器。
Step 5: 完成金鑰交換
伺服器接收到預主金鑰後,雙方完成對稱金鑰的協商。這個對稱金鑰將用於後續的TLS通訊加密。
Step 6: 加密通訊
雙方使用協商好的對稱金鑰進行加密通訊,憑證在此階段不再被使用。
安全注意事項
- 私鑰的安全保管至關重要,任何私鑰的洩露都可能導致安全風險。
- CA的信任度直接影響到憑證的安全性,因此選擇評價良好的CA非常重要。
- 定期更新和復原不再使用的憑證,以防止潛在的安全風險。