BPDU Guard và BPDU Filter là gì? Trường hợp sử dụng và cấu hình
Trong bài viết này, chúng ta sẽ cùng tìm hiểu về Spanning Tree STP BPDU Guard và BPDU Filter là gì? Các trường hợp sử dụng và cách cấu hình BPDU Guard, BPDU Filter trên các switch Cisco, cũng như các lưu ý khi sử dụng 2 tính năng này trong hệ thống mạng.
Tổng quan
Như chúng ta đã biết, thì các switch trong miền Layer 2 sẽ đều chạy giao thức Spanning Tree để ngăn chặn vòng lặp trong mạng bằng cách đưa 1 trong các cổng vào trạng thái Block để đảm bảo mỗi node chỉ có duy nhất 1 đường về Root. Tất cả các thiết bị chạy Spanning tree sẽ gửi các bản tin BPDU để trao đổi thông tin với nhau như địa chỉ MAC, mức độ ưu tiên, cost để các thiết bị bầu chọn role trong mạng, cũng như để xác định những thay đổi trong topo.
Có rất nhiều tính năng được triển khai trong spanning tree để tối ưu hóa giao thức này. Trong đó BPDU Guard và BPDU Filter là 2 tính năng của Spanning tree dựa vào các gói tin BPDU, thường được triển khai trên các cổng access, là các cổng kết nối đến các thiết bị đầu cuối, để bảo vệ cho Spanning tree khỏi các cuộc tấn công. Chúng ta sẽ cùng tìm hiểu về các tính năng này nhé.
BPDU Guard là gì? Cấu hình BPDU Guard trên switch Cisco
BPDU Guard là gì?
BPDU Guard là 1 tính năng trong Spanning Tree giúp chúng ta bảo vệ cấu trúc của STP. Khi các cổng được enable BPDU Guard mà vẫn nhận được các gói tin BPDU, nó sẽ đưa port đó về trạng thái err-disable.
BPDU Guard được triển khai trên các cổng nối xuống thiết bị đầu cuối như máy tính, máy in, camera… và các cổng này các bạn thường bật tính năng portfast để cổng sẽ chuyển ngay sang trạng thái forward, cho phép người dùng sử dụng dịch vụ mạng ngay sau đó mà không cần phải chờ Spanning Tree hội tụ.
Các trường hợp sử dụng BPDU Guard
Mình sẽ sử dụng mô hình bên dưới cho các bạn dễ hình dung. Giả sử chúng ta có 4 switch được kết nối với nhau. Trong đó switch Layer 3 ở phía trên chúng ta sẽ cấu hình làm Root Bridge. Link nối giữa các switch là link trunk, và chúng ta sẽ chạy Spanning Tree trên 3 link này. Các link từ switch Access nối xuống End device chúng ta sẽ cấu hình là các port access VLAN. Nếu mọi thứ đều đúng thì hệ thống của chúng ta sẽ hoạt động bình thường.
Tuy nhiên giả sử có 1 số tình huống.
Tình huống thứ nhất là có ai đó cố ý cắm thêm 1 thiết bị switch vào hệ thống của các bạn, và kết nối switch này với 2 switch access. Khi đó chúng ta sẽ có 1 vòng lặp và Spanning tree sẽ block 1 trong các cổng của vòng lặp này. Nếu đây là 1 cuộc tấn công mạng và hacker cấu hình switch này với Bridge ID tốt hơn các switch khác, thì switch của hacker sẽ được bầu chọn là Root, tất nhiên là khi các bạn chưa cấu hình các tính năng khác như Root Guard. Khi đó thì 1 trong 2 link nối lên Switch layer 3 của các bạn sẽ bị block, mình sẽ giả sử là link nối với SW-Access-2.
Lúc đó thì toàn bộ dữ liệu của người dùng thuộc switch Access 2 sẽ đi qua switch của Hacker để đi ra. Nếu như Hacker sử dụng các phần mềm bắt gói tin, thì hacker có thể xem được toàn bộ dữ liệu của các bạn.
Tình huống hai là 1 nhân viên thuộc phòng ban nào đó tự ý mang thiết bị switch đến cắm vào hệ thống. Vô tình các thiết bị này bị lỗi liên quan đến STP Process, dẫn tới STP thay đổi topology liên tục, làm gián đoạn dịch vụ người dùng. Mình đã từng gặp trường hợp này rồi.
Hoặc tình huống đơn giản nhất là các bạn muốn cấm người dùng cắm thêm switch vào hệ thống mạng của mình mà không được phép.
Trong các trường hợp này, chúng ta có thể cấu hình BPDU Guard trên tất cả các cổng access kết nối xuống end device để giải quyết vấn đề. Như các bạn đã biết thì chỉ những thiết bị như switch hoặc tương đương hỗ trợ các giao thức STP mới gửi các gói tin BPDU trong mạng để xây dựng cây STP. Khi các bạn bật BPDU Guard trên cổng, nếu như cổng đó nhận được gói tin BPDU, nó sẽ đưa cổng vào trạng thái errdisable và ngăn mọi dữ liệu trên cổng này.
Khi đó nếu các bạn cắm máy tính vào, không có BPDU được gửi ra từ máy tính, thì cổng mạng sẽ hoạt động bình thường và không có vấn đề gì xảy ra. Nếu người dùng cắm 1 thiết bị switch vào cổng đó, switch đó sẽ gửi BPDU ra, và BPDU Guard sẽ disable cổng đó, như vậy là chúng ta đã ngăn chặn được các tình huống kể trên.
Cấu hình BPDU Guard trên switch Cisco
BPDU Guard thường được khuyến nghị cấu hình trên tất cả các cổng access kèm tính năng portfast cho end device trong mọi hệ thống. Các bạn nên triển khai để tăng bảo mật cho mạng. Phần cấu hình thì rất đơn giản, mình sẽ ví dụ trên switch Cisco.
Để cấu hình BPDU Guard, chúng ta có thể cấu hình ở mode global hoặc Interface đều được. Hoạt động của 2 cách này tương tự nhau.
Ở mode Global, các bạn bật BPDU Guard bằng lệnh spanning-tree portfast edge bpduguard default. Một số OS sẽ không có chữ edge trong câu lệnh, các bạn ? để kiểm tra nhé, lệnh trên 1 số switch sẽ là spanning-tree portfast bpdufilter default.
Switch(config)#spanning-tree portfast edge bpdufilter default |
Tuy nhiên chỉ những cổng nào các bạn đã cấu hình Portfast thì cổng đó mới được enable BPDU Guard. Mình sẽ cấu hình cổng e0/0 và e0/1 sang Portfast.
Switch(config)#interface range e0/0-1
Switch(config-if-range)#spanning-tree portfast
%Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface when portfast is enabled, can cause temporary bridging loops. Use with CAUTION
%Portfast will be configured in 2 interfaces due to the range command but will only have effect when the interfaces are in a non-trunking mode.
Switch(config-if-range)#
|
Để kiểm tra thì các bạn có thể show spanning-tree summary. Chúng ta sẽ thấy BPDU Guard được bật mặc định trên Portfast.
Để xem các interface nào đang được bật BPDU Guard, các bạn show spanning tree detail. Cổng E0/0 và E0/1 đang được bật BPDU Guard, by default nghĩa là chúng ta đang cấu hình ở mode Global.
Các bạn show running interface thì sẽ không có các cấu hình liên quan đến BPDU Guard, do chúng ta chỉ enable ở mode Global.
Để tắt BPDU Guard ở mode Global thì các bạn chỉ cần thêm no vào đầu câu lệnh thôi.
Switch(config)#no spanning-tree portfast edge bpdufilter default |
Cách thứ 2 là các bạn cấu hình trong mode interface. Các bạn vào interface hoặc interface range cũng được, bật bằng lệnh spanning-tree bpduguard enable.
Switch(config)#interface range e0/0-1
Switch(config-if-range)#spanning-tree bpduguard enable |
Với cách cấu hình trên mode interface thì các bạn show run lên, chúng ta sẽ thấy được câu lệnh BPDU Guard enable trên các interface, nó chỉ khác nhau về cách cấu hình thôi, các bạn dùng cách nào cũng được.
Để tắt ở mode interface, các bạn cùng lệnh spanning-tree bpduguard disable là được.
Switch(config)#interface range e0/0-1
Switch(config-if-range)#spanning-tree bpduguard disable |
Test BPDU Guard
Bây giờ mình sẽ test thử nhé. Cổng E0/0 mình sẽ cắm máy tính vào. Các bạn có thể kiểm tra bằng lệnh show spanning-tree interface 0/0 detail. Cổng này ko nhận được BPDU (BPDU received 0) do máy tính không gửi các gói tin này, nên cổng sẽ hoạt động bình thường.
Mình sẽ cắm 1 switch vào cổng 1. Sau khi cổng 1 nhận BPDU, nó sẽ chuyển cổng này sang trạng thái err-disable và đẩy ra 1 log thông báo cho người dùng. Các bạn show interface e0/1 thì sẽ thấy cổng đang ở trạng thái down, và nguyên nhân là do err-disable.
Khôi phục trạng thái cổng khi bị err-disable
Đối với các cổng bị err-disable thì chúng ta cần phải shutdown cổng này, sau đó no shutdown, hoặc khởi động lại thiết bị thì cổng mới về trạng thái bình thường. Nếu tiếp tục nhận BPDU thì cổng sẽ lại bị err-disable. Các bạn có thể sử dụng tính năng err-disable recovery để tự động khôi phục lại trạng thái bình thường sau 1 khoảng thời gian. Tuy nhiên thì tính năng này mặc định bị disable, các bạn cần phải cấu hình.
Để bật tính năng err-disable recovery, các bạn vào mode config. Bật tự động khôi phục bằng lệnh errdisable recovery cause bpduguard. Mặc định thời gian tự động khôi phục sẽ là 300s. Các bạn có thể thay đổi bằng lệnh errdisable recovery interval, sau đó là khoảng thời gian sẽ tự động khôi phục tính bằng giây.
Switch(config)#errdisable recovery cause bpduguard
Switch(config)#errdisable recovery interval 30 |
Sau khoảng thời gian này switch sẽ tự động enable cổng, và nếu không nhận BPDU nữa thì cổng sẽ hoạt động bình thường.
BPDU Filter là gì? Cấu hình BPDU Filter trên switch Cisco
BPDU Filter là gì?
BPDU Filter cũng tương tự như BPDU Guard, nó sẽ làm việc với các gói tin BPDU. Tuy nhiên các tình huống sử dụng của 2 tính năng này sẽ khác nhau. BPDU Guard khi nhận được BPDU sẽ chuyển giao diện sang err-disable, còn BPDU Filter sẽ chỉ lọc các gói tin BPDU thôi, nghĩa là cổng nào được enable BPDU Filter thì sẽ không gửi ra các gói tin BPDU, và cũng không xử lý các gói tin BPDU mà nó nhận được. Điều này tương đương với việc các bạn disable hoàn toàn Spanning tree khỏi Interface.
Do vậy các bạn chỉ nên cấu hình BPDU Filter trên các cổng access nối xuống End device giống như BPDU Guard, không nên sử dụng trên các cổng nối giữa các switch, nếu không các bạn có thể bị loop, do không có Spanning tree thì sẽ không có cổng nào bị block.
Các trường hợp sử dụng BPDU Filter
Có 1 số tình huống sử dụng của là khi các bạn nối xuống End Device, các bạn có thể bật tính năng này lên để switch sẽ không gửi hoặc xử lý BPDU nữa, giúp tối ưu tài nguyên của switch, hoặc các bạn không muốn 1 switch nào đó tham gia vào quá trình bầu chọn Spanning Tree, ví dụ 1 switch Unmanaged. Tuy nhiên các bạn cần đảm bảo chỉ có 1 uplink giữa các switch, không có loop giữa các switch này.
Nếu các bạn cấu hình cả BPDU Guard và BPDU Filter trên cùng 1 cổng thì BPDU Filter sẽ được áp dụng, do vậy các bạn chỉ chọn 1 trong 2 thôi.
Cấu hình BPDU Filter trên switch Cisco
BPDU Filter cũng có 2 cách để cấu hình, ở mode Global hoặc trong mode Interface. Tuy nhiên cách hoạt động ở 2 mode này sẽ khác nhau, nên các bạn cần phải lưu ý khi chọn mode cấu hình nhé.
Cấu hình ở mode Global
Nếu cấu hình ở mode Global, các bạn sử dụng lệnh spanning-tree portfast edge bpdufilter default. Một số switch sẽ không có portfast edge mà chỉ là spanning-tree portfast bpdufilter default thôi, các bạn có thể gõ spanning-tree postfast kèm dấu ? để xem nhé. Lệnh chỉ hơi khác giữa các switch, còn cách hoạt động thì tương tự.
Switch(config)#spanning-tree portfast edge bpdufilter default |
Khi đó các cổng được cấu hình Portfast sẽ được enable BPDU Filter, và không gửi hoặc nhận bất cứ gói tin BPDU nào. Nếu cổng đó nhận được BPDU trên cổng đã cấu hình Portfast, thì cổng đó sẽ bị mất trạng thái portfast và BPDU Filter, trở lại thành cổng bình thường. Các bạn lưu ý đây là hành vi của BPDU Filter khi cấu hình ở mode Global nhé.
Mình sẽ cấu hình cổng E0/0 và E0/1 thành Portfast.
Switch(config)#interface range e0/0-1
Switch(config-if-range)#spanning-tree portfast |
Để kiểm tra các bạn sử dụng lệnh show spanning-tree detail. Chúng ta sẽ thấy được cổng nào đang được bật BPDU Filter, by default nghĩa là interface đó đang được bật BPDU Filter ở mode Global.
Khi được bật BPDU Filter thì 2 cổng e0/0 và e0/1 sẽ không gửi và xử lý gói tin BPDU nữa, phần sent trong ảnh bên dưới là switch gửi trước khi mình bật BPDU Filter.
Khi không có thiết bị nào được cắm vào, thì cả 2 cổng E0/0 và E0/1 đều đang ở trạng thái Portfast Edge do mình đã cấu hình.
Bây giờ mình sẽ cắm máy tính vào cổng E0/0 (không có BPDU được gửi ra), và cắm 1 switch vào cổng E0/1 (có BPDU được gửi ra từ switch mới). Các bạn có thể thấy, như ảnh bên dưới thì cổng E0/0 không nhận được BPDU, nên nó vẫn giữ cấu hình BPDU Filter. Còn cổng E0/1 sau khi nhận BPDU từ switch gửi tới, nó đã xóa cấu hình BPDU Filter trên cổng này.
Show spanning-tree cổng e0/1 đã bị mất trạng thái portfast edge. Tuy nhiên khi show cấu hình thì các vẫn còn cấu hình portfast, do switch sẽ không loại bỏ câu lệnh, mà chỉ bỏ trạng thái portfast của cổng thôi.
Đây là hành vi của BPDU Filter khi các bạn cấu hình ở mode Global. Nó sẽ hữu dụng trong trường hợp các bạn kết nối với các máy tính, thì switch sẽ vô hiệu hóa Spanning tree và không gửi các gói tin BPDU ra, giúp tối ưu tài nguyên cho switch của các bạn. Nếu có switch cắm vào thì nó sẽ khôi phục lại spanning tree và giúp các bạn tránh loop trong hệ thống.
Cấu hình ở mode Interface
Còn khi các bạn cấu hình BPDU Filter ở mode interface thì hành vi của nó sẽ khác. Ở mode Interface thì switch sẽ không gửi và xử lý BPDU nhận được, và vẫn giữ nguyên toàn bộ trạng thái của cổng khi nhận được BPDU gửi đến. Chúng ta sẽ cùng test trên switch Cisco.
Các bạn vào interface cần cấu hình, mình sẽ test trên cổng e0/1. Bật BPDU Filter bằng lệnh spanning-tree bpdufilter enable.
Switch(config)#interface e0/1
Switch(config-if)#spanning-tree bpdufilter enable |
Các bạn có thể thấy sự khác biệt. Khi cấu hình ở mode Interface, thì các bạn cắm thiết bị nào vào nó vẫn sẽ giữ nguyên cấu hình, nó sẽ chỉ bỏ qua các BPDU gửi đến, và sẽ không gửi bất kỳ BPDU nào ra. Các bạn sẽ thấy thông số sent và received sẽ không thay đổi. Tương đương với việc vô hiệu hóa hoàn toàn Spanning tree trên cổng này.
Trạng thái Portfast cũng sẽ vẫn được giữ nguyên khi các bạn cắm switch vào.
Mode này sẽ hữu dụng khi các bạn kết nối xuống end device, hoặc xuống switch nhưng không muốn switch này tham gia vào spanning tree của hệ thống. Tuy nhiên nó sẽ tiềm ẩn nguy cơ gây loop mạng nếu switch bên dưới các bạn cắm loop. Do vậy các bạn cần lựa chọn cẩn thận khi sử dụng.
Kết luận
Lựa chọn tính năng nào là tùy thuộc vào nhu cầu của của từng hệ thống và trường hợp sử dụng khác nhau. Các bạn cân nhắc lựa chọn dựa trên hành vi của từng loại giao thức và cách cấu hình để chúng ta có được phương án bảo mật nhất cho hệ thống mạng.
Ok như vậy là chúng ta đã cùng tìm hiểu về 2 tính năng liên quan đến Spanning Tree là BPDU Guard và BPDU Filter. Nếu các bạn có 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!