DHCP是動態主機配置協議(DHCP:Dynamic Host Configuration Protocol),主要用於中大型網絡的IP地址、網關、掩碼和DNS地址的動態分配,可以減少管理員的工作量,避免用戶手工配置網絡參數時造成的地址沖突。而隨着網絡規模的增大,DHCP也面臨了許多的危險(例如:DHCP餓死攻擊、仿冒DHCP server和中間人攻擊),下面我們先從原理上來理解DHCP是如何工作的,及DHCP的各種配置實現,后面會介紹DHCP面臨的威脅以及該如何避免。
- 人工配置面臨的問題:人員素質要求高、容易出錯、靈活性差、IP地址資源利用率低 工作量大
- 自動配置的優點:效率高、靈活性強、易於集中化管理
DHCP工作原理
- 建立過程
地址分配過程是通過DHCP Client與DHCP Server之間交互各種DHCP消息來實現的。DHCP消息是封裝在UDP報文中的,DHCP Server使用端口號67來接收DHCP消息,DHCP Client使用端口號68來接收DHCP消息。
發現階段:發送DHCP Discover消息,尋找DHCP Server,並表示自己需要獲得一個IP地址。二層廣播域如果存在多個DHCP Server ,那么都會收到Discover的報文,因此所有server都會回應Client。
提供階段:Server 向Client 提供IP地址的階段,每個Server都會從自己維護的地址池中選擇一個合適的IP地址,並通過單播的方式 DHCP Offer消息將這個IP地址發送給DHCP Client。
請求階段:在請求階段中,PC上的DHCP Client會在若干個收到的Offer(即若干個收到的DHCP Offer消息)中根據某種原則來確定出自己將要接受哪一個Offer。通常情況下,DHCP Client會接受它所收到的第一個Offer(即最先收到的那個DHCP Offer消息)。如果PC最先收到的DHCP Offer消息是來自路由器R。於是,PC上的DHCP Client會以廣播方式發送一個DHCP Request消息,其意圖就是向路由器R上的DHCP Server提出請求,希望獲取到該DHCP Server發送給自己的DHCP Offer消息中所提供的那個IP地址。注意,這個DHCP Request消息中攜帶有R上的DHCP Server的標識(稱為Server Identifier),表示PC上的DHCP Client只願意接受R上的DHCP Server所給出的Offer。以廣播的方式請求是可以告訴其它的server “ 我已經接受了R的offer,你們不是R的就不用給我分配地址啦,管其他PC分配就行”。
確認階段:Server 根據Request報文中的Server Identifier標識 確認是否指示自己,如果是則給Request報文的發送者回復Ack報文來確認IP地址。當然會因為各種原因導致無法確認,則回復Nak報文。此時Client需要從回到Discover階段。
- 續租過程
DHCP租約期的缺省值不得小於1個小時,租約期的缺省值通常都是24小時。
T1時期:IP租約期限到達50%時,DHCP客戶端會以單播的方式請求更新IP地址租約,如果在T2之前收到Ack消息說明續租成功,否則進入第二次請求。
T2時期:DHCP客戶端在租約期限到達87.5%時,還沒收到服務器響應,會申請重綁定IP。Client會以為原Server不可用了,就以廣播方式發送一個DHCP Request消息,繼續請求續租IP地址。
釋放過程:如果直到租約期到期時,PC上的DHCP Client仍未收到回應的DHCP Ack消息,那么PC就必須停止使用原來的IP地址,也就是說,PC只能重新從發現階段開始來重新申請一個IP地址。如果PC不需要DHCP功能了,也可以主動向DHCP服務器發送DHCP Release報文,釋放該IP地址。
DHCP Relay
DHCP有三種配置模式:接口模式、全局模式、中繼模式。
- 接口模式:靠用戶則,配置簡單易實現;
- 全局模式:最典型的配置,但靈活性不夠中繼模式好;
- 中繼模式:適用於大中型網絡,靈活性好,一個服務器可以實現多個廣播域的網絡地址分配,集中化管理同時節省了網絡設備成本。
工作原理
- 普通的DHCP是工作在二層為一個廣播域里面的主機分配IP地址,也就是說DHCP的報文是無法跨越二層層進行傳輸的,那么像服務器這樣的設備是不可能只在一個二層網絡的,所以引入了DCHP Relay。
- DHCP Relay的基本作用就是專門在DHCP Client和DHCP Server之間進行DHCP消息的中轉。DHCP Relay與DHCP Server之間是以單播方式交換DHCP消息的(這就意味着,DHCP Relay必須事先知道DHCP Server的IP地址)。
- 配置實現
接口DHCP
[Huawei]dhcp enable // 全局模式下開啟使能DHCP功能 [Huawei]interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0]dhcp select interface // 選擇為接口模式 [Huawei-GigabitEthernet0/0/0]dhcp server dns-list 10.1.1.2 // 配置dns地址 [Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 10.1.1.2 // 排除的地址 [Huawei-GigabitEthernet0/0/0]dhcp server lease day 3 // 租期時間
全局DHCP
[Huawei]dhcp enable [Huawei]ip pool pool1 // 創建地址池 [Huawei-ip-pool-pool1]gateway-list 192.168.1.1 // 配置網關 [Huawei-ip-pool-pool1]network 192.168.1.0 mask 255.255.255.0 // 可用地址范圍 [Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [Huawei-GigabitEthernet0/0/0]dhcp select global // 接口開啟全局模式
中繼DHCP
配置DHCP-Server: (以基於全局地址池分配地址為例) [Huawei]dhcp enable [Huawei]ip pool DHCP-relay [Huawei-ip-pool-DHCP-relay]gateway-list 192.168.1.1 // 配置網關 [Huawei-ip-pool-DHCP-relay]network 192.168.1.0 mask 24 // 可用地址 [Huawei-ip-pool-DHCP-relay]dns-list 10.1.1.1 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthernet0/0/0]dhcp select global // 接口開啟全局模式 [Huawei]ip route-static 192.168.1.0 24 10.1.1.2 // 靜態路由提供連通 配置DHCP中繼(GW): [Huawei]dhcp enable [Huawei-GigabitEthernet0/0/1]ip address 192.168.1.1 24 // 配置IP地址,此為網關 [Huawei-GigabitEthernet0/0/1]dhcp select relay // 選擇為中繼模式 [Huawei-GigabitEthernet0/0/1]dhcp relay server-ip 10.1.1.1 // 指定服務器地址 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.2 24 // 連接服務器的地址
DHCP安全問題
DHCP如果在設計時沒有考慮到安全因素,那么會帶來許多的安全漏洞和隱患,下面舉了三種DHCP的安全問題。
- DHCP 餓死攻擊
原理:DHCP餓死攻擊是指利用DHCP server 無法正確區分合法的申請者和攻擊者的申請,而攻擊者持續大量地向DHCP Server申請IP地址,直到耗盡DHCP Server地址池中的IP地址,導致DHCP Server不能給正常的用戶進行分配。
避免:DHCP消息中有一個名叫CHADDR(Client Hardware Address)的字段,該字段是由DHCP客戶端填寫的,表示的是客戶端的硬件地址(也就是客戶端的MAC地址)。DHCP Snooping技術支持在端口下對DHCP Request報文的源MAC地址與CHADDR進行一致性檢查:如果二者相同,則轉發報文;如果二者不相同,則丟棄。一致性檢測一定程度上避免了餓死攻擊,但不是絕對的,因為CHADDR和MAC地址可以是人為操作的。
配置實現:端口上使能 dhcp-chaddr 功能即可,命令如下
[Huawei-GigabitEthernet0/0/0]dhcp snooping check dhcp-chaddr enable
- 仿冒DHCP server攻擊
原理:攻擊者仿冒DHCP Server,向客戶端分配錯誤的IP地址及提供錯誤的網關地址等參數,客戶端不會判別DHCP Sever發過來的消息是否合法,從而導致客戶端無法正常訪問網絡。
避免:DHCP Snooping將交換機上的端口分為兩種類型,即信任端口(Trusted端口)和非信任端口(Untrusted端口);與合法的DHCP Server相連接的端口應配置為Trusted端口,其他端口應配置為Untrusted端口。
配置實現:在中小型的企業網,DHCP Server不會存在多個,那么只需將設備與服務器連接的的端口配置為 安全端口(Trusted)即可,命令如下
[Huawei-GigabitEthernet0/0/0]dhcp snooping trusted
- 中間人攻擊
原理:攻擊者在客戶端和服務器之間接入網絡,這里稱為中間人,原理是利用了虛假的IP地址與MAC地址之間的映射關系來同時欺騙DHCP的客戶端和服務器。
避免:運行了DHCP Snooping的交換機會“偵聽(Snooping)”往來於用戶與DHCP Server之間的DHCP消息,並從中收集用戶的MAC地址(這里的MAC地址是指DHCP消息中CHADDR字段的值)、用戶的IP地址(這里的IP地址是指DHCP Server分配給相應CHADDR的IP地址)等信息,這些信息會集中存放在一個數據庫中,該數據庫也被稱為DHCP Snooping綁定表。交換機接收到ARP請求報文后,會檢查該ARP請求報文中的源IP地址和源MAC地址,發現該IP/MAC(IP-A/MAC-B)映射關系不能匹配DHCP Snooping綁定表中的條目,於是會丟棄該ARP請求報文
配置實現:
[Huawei]arp dhcp-snooping-detect enable // 交換機的系統視圖下執行配置命令