DHCP Snooping - Hoạt động và cách cấu hình trên Cisco
Trong bài viết này, chúng ta sẽ cùng tìm hiểu về tính năng DHCP Snooping và cách cấu hình nó trên các dòng switch Cisco nhé.
DHCP Snooping là gì?
DHCP Snooping là 1 tính năng bảo mật thuộc lớp 2, hoạt động giống như 1 firewall giữa các server DHCP, giúp chúng ta có thể ngăn chặn các DHCP Server giả mạo trong mạng. DHCP Snooping là 1 tính năng chuẩn quốc tế, do vậy thì các bạn có thể cấu hình nó trên tất cả các thiết bị hỗ trợ, trong video này thì mình sẽ sử dụng Switch Cisco trên PnetLab để demo. Nó chỉ khác nhau về mặt cấu hình, còn hoạt động thì tương tự nhau.
DHCP Snooping thì hoạt động dựa trên VLAN, do vậy khi cấu hình các bạn cần phải kích hoạt trên từng VLAN, hoặc trên tất cả các VLAN đang có trong mạng.
Hoạt động của DHCP
Trước tiên chúng ta sẽ cùng tìm hiểu về hoạt động của DHCP trong mạng trước nhé.
Ban đầu khi 1 thiết bị kết nối vào mạng, nó sẽ gửi ra 1 bản tin DHCP Discover ra toàn mạng. Khi đó toàn bộ các thiết bị trong LAN sẽ đều nhận được. Tuy nhiên chỉ các thiết bị có bật tính năng DHCP Server sẽ xử lý gói tin này, và phản hồi lại 1 gói tin khác là DHCP Offer. Còn lại các thiết bị khác sẽ drop gói tin này. Gói tin DHCP Offer sẽ chứa thông tin địa chỉ IP và các option khác mà các bạn cấu hình trên DHCP Server. Địa chỉ IP này sẽ là địa chỉ IP chưa được sử dụng trong mạng.
Sau khi Client nhận được gói tin Offer với thông tin IP, nó sẽ gửi lại 1 gói tin Request về Server đã gửi Offer cho nó, cũng với thông tin IP mà Server đã gửi cho.
Cuối cùng là DHCP Server sẽ gửi lại bản tin ACK để xác nhận, chưa các thông tin IP mà 2 bên đã trao đổi, sau đó Client có thể sử dụng IP đó để giao tiếp trong mạng.
Các vấn đề thường xảy ra với DHCP Server
Như vậy sẽ có vấn đề lớn đối với DHCP. Trường hợp đầu tiên là nếu có 1 hacker nào đó giả mạo 1 DHCP Server trong mạng của bạn, với gateway chính là router của hacker. Khi đó thì toàn bộ traffic đi ra sẽ qua router hoặc switch của hacker, và hacker này có thể đọc được toàn bộ dữ liệu của người dùng. Router của Hacker vẫn có Internet nên người dùng hoàn toàn không biết về vấn đề này, do họ vẫn truy cập Internet bình thường. Nếu các thông tin nhạy cảm như các dữ liệu nội bộ, các thông tin giao dịch bị lộ ra ngoài thì rất nguy hiểm.
Trường hợp 2 là trường hợp rất hay xảy ra, mà thường là do vô tình. Đó là trường hợp mà 1 nhân viên trong phòng ban nào đó mang 1 thiết bị router wifi vào cắm trong mạng để sử dụng wifi cá nhân. Nhưng vô tình thì router wifi đó được enable DHCP lên, và họ cắm dây mạng vào cổng LAN nên DHCP Server này sẽ cấp ngược IP vào mạng LAN của các bạn. Khi đó thì những thiết bị nào nhận được IP từ bộ router wifi này đều mất mạng do bộ Router wifi này sẽ không có kết nối Internet trên dải mạng riêng của Wifi. Và nếu tại các địa điểm như bệnh viện, hay các nhà xưởng có nhiều tòa nhà thì chúng ta sẽ rất mất thời gian để tìm ra.
Hoạt động của DHCP Snooping
Do vậy DHCP Snooping sẽ giúp chúng ta giải quyết được các vấn đề này.
Ý tưởng của DHCP Snooping dựa vào các gói tin DHCP mà mình vừa kể trên. Ban đầu Client gửi ra các gói tin Discover là dạng broadcast tới toàn LAN, sau đó các Server sẽ trả về gói Offer.
Khi đó trên switch chạy DCHP Snooping sẽ chia các port role là Trust và Untrust. Chỉ có các cổng trust mới cho các gói tin DHCP Offer đi qua, như vậy thì các DHCP server giả mạo trên các cổng untrust sẽ không thể cấp ngược được IP vào mạng do gói tin DHCP Offer sẽ bị drop ngay trên switch.
Các bạn chỉ cần cấu hình cổng nối lên DHCP Server của mình là cổng trust là xong, còn lại mặc định các cổng khi bật DHCP Snooping lên thì các cổng đều là untrust.
Sau đó switch sẽ lưu lại 1 bảng DHCP Snooping Database, DHCP Snooping database cũng có thể được sử dụng cho các tính năng như Dynamic ARP inspection hoặc IP Source Guard để tăng bảo mật cho mạng.
Theo nguyên lý thì các switch sẽ drop gói tin DHCP Offer đi qua các cổng Untrust, nghĩa là ban đầu gói tin Discover sẽ vẫn gửi ra toàn mạng. Tuy nhiên thì trên switch Cisco hành vi sẽ khác. Các switch được bật DHCP Snooping sẽ chỉ chuyển tiếp gói tin Discover ra các cổng trust ngay từ đầu, do đó thì nó ngăn chặn các DHCP Server giả mạo nhận được ngay từ đầu. Do vậy nó sẽ tối ưu được cả traffic trong mạng, giúp giảm đáng kể các gói tin DHCP Discover.
Hướng dẫn cấu hình DHCP Snooping trên Cisco
Ok về cấu hình của DHCP Snooping thì rất đơn giản, mình sẽ cấu hình luôn trên mô hình bên dưới.
Mình sẽ cấu hình DHCP server cho VLAN 1 trên SW-Core. Tất cả các switch mình đều đang để mặc định thuộc VLAN 1.
SW-Core#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
SW-Core(config)#ip dhcp pool VLAN1
SW-Core(dhcp-config)#network 10.0.0.0 255.255.255.0
SW-Core(dhcp-config)#default-router 10.0.0.1
SW-Core(dhcp-config)#exit
SW-Core(config)#interface vlan 1
SW-Core(config-if)#no shutdown
SW-Core(config-if)#ip add 10.0.0.1 255.255.255.0 |
Bây giờ thì cả 2 PC bên dưới mạng LAN sẽ nhận được IP từ SW-Core cấp xuống, thuộc dải 10.0.0.0/24.
Giả sử bây giờ mình có 1 DHCP khác trong mạng, mình sẽ cấu hình trên switch Hacker, trong thực tế thì nó thường là các bộ router wifi mà người dùng lắp vào. Mình sẽ cấu hình cho nó cấp 1 dải mạng khác.
Hacker#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Hacker(config)#ip dhcp pool VLAN1
Hacker(dhcp-config)#network 192.168.1.0 255.255.255.0
Hacker(dhcp-config)#default-router 192.168.1.1
Hacker(dhcp-config)#exit
Hacker(config)#interface vlan 1
Hacker(config-if)#no shutdown
Hacker(config-if)#ip address 192.168.1.1 255.255.255.0 |
Bây giờ khi các PC nhận IP thì nó sẽ nhận ngẫu nhiên giữa 2 Server này, server nào gửi lại gói DHCP Offer trước thì các PC sẽ nhận IP từ server đó.
Các bạn có thể thấy PC đã nhận ngẫu nhiên IP, có lúc nhận IP từ hacker, có lúc nhận từ Switch Core. Vấn đề này chúng ta không control được do nó phục thuộc vào đường truyền mạng, server có đang xử lý nhiều gói tin không… DHCP Server nào gần client hơn, hoặc tài nguyên còn nhiều hơn thì khả năng cao sẽ cấp IP cho client đó.
Trong trường hợp này mình sẽ bật DHCP Snooping cho VLAN 1 trên SW-Access, và cấu hình cổng e0/0 là cổng Trust, còn các cổng khác mặc định sẽ là Tntrust. Khi đó thì chỉ switch core kết nối với cổng e0/0 của switch access mới có thể gửi gói tin DHCP Offer qua.
SW-Access#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
SW-Access(config)#ip dhcp snooping //Bật DHCP Snooping
SW-Access(config)#ip dhcp snooping vlan 1 //Bật DHCP Snooping trên VLAN 1
SW-Access(config)#interface e0/0
SW-Access(config-if)#ip dhcp snooping trust //Cấu hình cổng e0/0 là trust, tất cả các cổng còn lại là Untrust |
Các bạn cũng có thể giới hạn số lượng gói tin DHCP trên các cổng mạng bằng lệnh ip dhcp snooping limit rate.
SW-Access(config)#int e0/0
SW-Access(config-if)#ip dhcp snooping limit rate ?
<1-2048> DHCP snooping rate limit
SW-Access(config-if)#ip dhcp snooping limit rate
|
Sau đó là số lượng gói tin DHCP được cho phép trên 1s. Nó sẽ được tính bằng packet per second.
Cấu hình này có thể giúp các bạn phòng chống được các trường hợp tấn công làm cạn kiệt DHCP. Các máy tính của hacker, hoặc các máy bị nhiễm virut sẽ liên tục gửi các yêu cầu DHCP lên server, làm cho cạn IP trên server hoặc làm cho server bị quá tải. Khi đó các máy tính khác trong mạng LAN sẽ không nhận được IP nữa. Các bạn có thể tính dựa trên số lượng Client trong mạng nhân với số lượng gói tin DHCP, sau đó tính dư ra thêm khoảng 1/3 để dự phòng.
Kiểm tra
Trên các switch bật DHCP Snooping thì các bạn có thể show được thông tin về Client bằng lệnh show ip dhcp snooping binding. Bảng này sẽ khác nhau giữa các switch.
Bảng này sẽ có thông tin về MAC, IP, loại là DHCP Snooping, vlan 1 và cổng kết nối của client.
Mình sẽ bật debug trên switch access để các bạn xem hành vi xử lý trên switch Cisco nhé.
SW-Access#debug ip dhcp snooping event
DHCP Snooping Event debugging is on
SW-Access#debug ip dhcp snooping packet
DHCP Snooping Packet debugging is on
SW-Access# |
Mình sẽ cho PC12 nhận lại IP. Trên SW-Access sẽ có các log liên quan đến quá trình xử lý gói tin DHCP.
SW-Access#
*Nov 18 03:50:16.925: DHCP_SNOOPING: received new DHCP packet from input interface (Ethernet0/2)
*Nov 18 03:50:16.925: DHCP_SNOOPING: process new DHCP packet, message type: DHCPDISCOVER, input interface: Et0/2, MAC da: ffff.ffff.ffff, MAC sa: 0050.7966.6879, IP da: 255.255.255.255, IP sa: 0.0.0.0, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:16.925: DHCP_SNOOPING: message type : DHCPDISCOVER DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:16.925: DHCP_SNOOPING_SW: bridge packet get invalid mat entry: FFFF.FFFF.FFFF, packet is flooded to ingress VLAN: (1)
*Nov 18 03:50:16.925: DHCP_SNOOPING_SW: bridge packet send packet to port: Ethernet0/0, vlan 1.
*Nov 18 03:50:16.926: DHCP_SNOOPING: received new DHCP packet from input interface (Ethernet0/0)
*Nov 18 03:50:16.926: DHCP_SNOOPING: process new DHCP packet, message type: DHCPOFFER, input interface: Et0/0, MAC da: 0050.7966.6879, MAC sa: aabb.cc80.0100, IP da: 10.0.0.2, IP sa: 10.0.0.1, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 10.0.0.2, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:16.926: DHCP_SNOOPING: message type : DHCPOFFER DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 10.0.0.2, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:16.926: DHCP_SNOOPING: direct forward dhcp replyto output port: Ethernet0/2.
*Nov 18 03:50:17.925: DHCP_SNOOPING: received new DHCP packet from input interface (Ethernet0/2)
*Nov 18 03:50:17.926: DHCP_SNOOPING: process new DHCP packet, message type: DHCPREQUEST, input interface: Et0/2, MAC da: aabb.cc80.0100, MAC sa: 0050.7966.6879, IP da: 255.255.255.255, IP sa: 0.0.0.0, DHCP ciaddr: 10.0.0.2, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:17.926: DHCP_SNOOPING: message type : DHCPREQUEST DHCP ciaddr: 10.0.0.2, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:17.926: DHCP_SNOOPING_SW: bridge packet send packet to port: Ethernet0/0, vlan 1.
*Nov 18 03:50:17.926: DHCP_SNOOPING: received new DHCP packet from input interface (Ethernet0/0)
*Nov 18 03:50:17.926: DHCP_SNOOPING: process new DHCP packet, message type: DHCPACK, input interface: Et0/0, MAC da: 0050.7966.6879, MAC sa: aabb.cc80.0100, IP da: 10.0.0.2, IP sa: 10.0.0.1, DHCP ciaddr: 10.0.0.2, DHCP yiaddr: 10.0.0.2, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:17.926: DHCP_SNOOPING: message type : DHCPACK DHCP ciaddr: 10.0.0.2, DHCP yiaddr: 10.0.0.2, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0050.7966.6879
*Nov 18 03:50:17.926: DHCP_SNOOPING: add binding on port Ethernet0/2.
*Nov 18 03:50:17.926: DHCP_SNOOPING: dhcp binding entry already exists, update binding lease time to (86400) seconds
*Nov 18 03:50:17.926: DHCP_SNOOPING: direct forward dhcp replyto output port: Ethernet0/2.
SW-Access# |
Ban đầu switch sẽ nhận được 1 gói tin DHCP Discover từ cổng e0/2 là cổng nối với PC12 với MAC đích là broadcast FFFF.FFFF.FFFF.
Gói tin nhận được từ VLAN 1, nên nó sẽ được chuyển vào VLAN 1, và sau đó nó chỉ gửi gói tin qua port e0/0, là cổng Trust.
Switch core nhận được sẽ gửi lại gói tin DHCP Offer qua cổng E0/0 với các thông tin IP, nó là cổng trust nên sẽ được switch cho phép và đẩy qua cổng e0/2 cho PC12.
Và cuối cùng switch sẽ binding địa chỉ IP và port e0/2 với các thông tin của Client. Thông tin này sẽ được sử dụng vào các mục đích khác nhau để chống các loại tấn công liên quan đến giả mạo ARP, giả mạo IP…
Như vậy chúng ta vừa ngăn chặn được các server giả mạo, vừa giảm được các gói tin DHCP Discover trong mạng.
Ngoài ra thì các bạn cũng có thể kết hợp DHCP Snooping cùng với nhiều tính năng bảo mật khác để ngăn chặn việc giả địa chỉ IP hoặc MAC để lấy cắp thông tin trong mạng, mình sẽ làm tiếp các video liên quan đến DHCP Snooping trong thời gian tới.
Ok như vậy chắc các bạn cũng đã hiểu về DHCP Snooping và cách ứng dụng nó vào trong 1 mô hình cụ thể rồi phải không. Nếu các bạn có bất kỳ góp ý hay thắc mắc nào, hãy để lại comment để mọi người cùng trao đổi nhé.
Chúc các bạn thành công!
Bình luận bài viết!
Phần cổng nối giữa các switch thì tùy từng hành vi của hãng, Có hãng bạn sẽ cần phải disable Untrust trên các cổng downlink nối các switch. Còn với Cisco chỉ cần enable Trust trên các cổng uplink
Về cơ bản thì DHCP Snooping hoạt động local theo từng switch, và xử lý bằng cách chặn các gói tin offer trả về theo chiều từ DHCP Server tới Client. Do vậy Cứ cổng nào có gói offer từ DHCP theo chiều IN sẽ là Trust, theo chiều out (nếu là cổng nối giữa các switch trong hệ thống) thì không cấu hình, còn lại sẽ là untrust. Ví dụ mô hình PC => port1 SW-ACC => port2 SW-ACC => port1 SW-Core => port 2 SW-Core => DHCP Server. Thì Port1 SW-ACC sẽ là Untrust, Port2 SW-ACC là Trust, Port1 SW-Core không cấu hình, Port2 SW-Core là Trust.
Cổng nào nối tới DHCP Server thì anh mới cần cấu hình là Trust. Còn lại các cổng khác dù là trunk hay access thì đều là Untrust
Cổng Trust sẽ là cổng nối tới DHCP Server anh nhé. Mọi cổng gửi và nhận các gói DHCP từ Trust Server đều cần cấu hình là Trust
bạn thử debug ip dhcp snooping packet và events lên để kiểm tra xem hành vi lúc này thế nào nhé.