在現代網路環境中,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/24192.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-timemax-lease-time 設定了租約的預設和最大時間;ping trueping-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位址時,管理員需要進行一系列的故障排除步驟。以下是一些常見的處理方法:

  1. 檢查DHCP伺服器狀態:首先確認DHCP伺服器是否正常運作,檢查其服務是否啟動、設定是否正確。
  2. 網路連線檢查:確認使用者端與DHCP伺服器之間的網路連線是否正常,檢查交換器、路由器等網路裝置的狀態。
  3. 使用者端設定檢查:檢查使用者端的網路設定,確保其被設定為自動取得IP位址。
  4. 日誌檔案分析:檢視DHCP伺服器的日誌檔案,尋找可能的錯誤訊息或異常記錄。

偵測流氓DHCP伺服器

如果工程部門無法存取網路,但仍可到達該子網路,則可能是存在流氓DHCP伺服器。以下是一些偵測方法:

  1. 使用網路掃描工具:利用如Nmap等網路掃描工具掃描子網路,尋找未經授權的DHCP伺服器。
  2. 檢查網路流量:使用Wireshark等網路封包分析工具,監控網路流量,尋找異常的DHCP封包。
  3. 檢視交換器日誌:檢查網路交換器的日誌,尋找與DHCP相關的異常記錄。

憑證服務基礎

憑證是用於驗證身分和加密通訊的重要工具。在Linux上建立私有的憑證授權單位(CA)可以滿足組織內部的憑證需求。

取得憑證

要取得憑證,需要產生憑證簽署請求(CSR),並將其提交給CA進行簽署。以下是CSR產生的步驟:

  1. 產生私鑰:使用OpenSSL等工具產生私鑰。
  2. 建立CSR:使用私鑰產生CSR,包含組織和伺服器的相關資訊。
  3. 提交CSR:將CSR提交給CA進行簽署。
# 產生私鑰
openssl genrsa -out server.key 2048

# 產生CSR
openssl req -new -key server.key -out server.csr

使用憑證

憑證可用於各種應用,如Web伺服器的HTTPS加密。以下是Web伺服器使用憑證的範例:

  1. 安裝憑證:將CA簽署的憑證安裝到Web伺服器上。
  2. 設定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需要進行以下步驟:

  1. 產生根CA私鑰和憑證:使用OpenSSL等工具產生根CA的私鑰和憑證。
  2. 建立中間CA:建立中間CA,並使用根CA私鑰進行簽署。
  3. 釋出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並產生憑證。

數位憑證的申請與使用流程

在現代網路安全中,數位憑證扮演著至關重要的角色。憑證主要用於驗證伺服器身份並加密客戶端與伺服器之間的通訊。本章節將詳細闡述憑證的申請流程以及其在加密通訊中的作用。

憑證申請流程

憑證的申請涉及多個步驟,以下是具體流程:

  1. 產生金鑰對:首先,申請者需產生一對金鑰,包括私鑰和公鑰。私鑰必須妥善保管,而公鑰則會被用於後續的憑證申請過程中。

  2. 建立憑證簽署請求(CSR):申請者將身份資訊(如公司名稱、電子郵件等)與公鑰結合,形成CSR檔案。這個過程是密碼學上的結合,確保了憑證資訊與公鑰的不可篡改性。

    openssl req -new -key server.key -out server.csr
    

    內容解密:

    • openssl req:用於建立和管理憑證簽署請求。
    • -new:表示建立新的CSR。
    • -key server.key:指定私鑰檔案。
    • -out server.csr:輸出CSR檔案。
  3. 提交CSR至憑證授權單位(CA):申請者將CSR提交給CA進行驗證。公共CA通常透過網站進行提交,而自動化CA(如Let’s Encrypt)則使用ACME API進行通訊。

  4. CA驗證身份資訊:CA對申請者的身份資訊進行驗證,這個過程可能是自動或手動的,取決於CA的政策和申請者的帳戶狀態。

  5. 簽發憑證:驗證透過後,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天。
  6. 下發憑證:最終的憑證被送回給申請者,並安裝在相關應用程式中。

憑證在加密通訊中的作用

以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非常重要。
  • 定期更新和復原不再使用的憑證,以防止潛在的安全風險。