Network [LT] Spanning tree protocol (STP) (Phần 5)

Trong phần trước, mình đã giới thiệu về cách để cải thiện sự hội tụ của STP. Trong phần này mình sẽ nói về cách để bảo vệ STP.
STP có thể bị tấn công vì hai lý do chính:​
  • STP xây dựng cấu trúc mạng bằng cách chấp nhận BPDUs từ các switch lân cận.​
  • Root Bridge luôn được xác định bởi Bridge ID thấp nhất.​
- Một switch có ưu tiên thấp có thể được cài đặt vào mạng một cách có chủ đích hoặc vô tình và được chọn làm Root Bridge. STP sẽ thực hiện tái cấu trúc mạng, thường dẫn đến sự không ổn định hoặc một cấu trúc mạng không tối ưu.
- Cisco đã triển khai ba cơ chế để bảo vệ cấu trúc STP:​
  • Root Guard
  • BPDU Guard
  • BPDU Filtering
Tất cả ba cơ chế này đều được cấu hình theo từng port và đều bị tắt theo mặc định. Và có một cơ chế để tránh các lỗi gián tiếp là Loop guard

IV. Protecting STP


1. Root guard


- Root Guard ngăn chặn việc một switch không được ủy quyền quảng bá bản thân như là Root Bridge. Nếu một BPDU có ưu tiên cao hơn Root Bridge trên một port, với Root Guard được kích hoạt, port đó sẽ được đặt vào trạng thái root-inconsistent. Trong trạng thái này, port sẽ ở trạng thái tương tự như blocking và sẽ không chuyển tiếp frame. Tuy nhiên, port vẫn có thể lắng nghe các BPDU.
- Root Guard được kích hoạt theo từng port và mặc định là tắt:
Bash:
Switch(config)# interface gi0/1
Switch(config-if)# spanning-tree guard root
- Để xem tất cả các port đã bị đặt vào trạng thái root-inconsistent:
Bash:
Switch# show spanning-tree inconsistentports
- Root Guard có thể tự động phục hồi. Ngay khi các BPDU không còn được nhận nữa, port sẽ chuyển tiếp sang trạng thái STP bình thường.

2. BPDU Guard


- BPDU Guard được sử dụng để bảo vệ các port có kích hoạt PortFast khỏi việc nhận BPDUs. Nếu một port kích hoạt PortFast nhận được một BPDU, bất kể đó là BPDU gì, port sẽ được đặt vào trạng thái errdisable. Trong trạng thái này, port sẽ không hoạt động và STP topology sẽ không bị ảnh hưởng bởi switch khác được kết nối với port đó.
- BPDU Guard được bật theo từng port và mặc định là tắt:
Bash:
Switch(config)# interface gi1/14
Switch(config-if)# spanning-tree bpduguard enable
- BPDU Guard được bật trên switch, nó chỉ áp dụng cho các port có kích hoạt PortFast:
Bash:
Switch(config)# spanning-tree portfast bpduguard default
- Một port có thể được phục hồi từ trạng thái errdisable bằng cách thực hiện lệnh shutdown và sau đó là no shutdown:
Bash:
Switch(config)# interface gi1/14
Switch(config-if)# shutdown
Switch(config-if)# no shutdown
- Để kiểm tra BPDU Guard:
Bash:
Switch(config)# do show spanning-tree interface g0/1 detail

3. BPDU Filtering


- BPDU Filtering được sử dụng để ngăn các BPDU gửi ra hoặc nhận vào và phải được kích hoạt kết hợp với PortFast, đồng nghĩa với tắt spanning tree bị tắt trên port.
Khi một BPDU được nhận trên một port, BPDU Filtering sẽ phản ứng theo một trong hai cách tùy thuộc vào cách cấu hình:​
  • Nếu filtering được bật globally(trên tất cả port), Port sẽ không gửi BPDU(trừ khi interface bật lại). Nếu port nào nhận BPDU, portfast và BPDU filter sẽ bị tắt, và trở lại trạng thái STP.​
  • Nếu filtering được bật trên từng port, BPDU sẽ không được gửi qua những port này và cũng sẽ không nhận được được BPDU(Tắt STP trên port).​
- Theo mình thì nên cẩn thận khi dùng tính năng này, vì port sẽ từ chối nhận các gói BPDU. Sẽ không vào trạng thái err-disabled hoặc trở lại STP có thể gây loop.
- BPDU Filtering được bật globally, nó chỉ áp dụng cho các port có PortFast kích hoạt:
Bash:
Switch(config)# spanning-tree portfast bpdufilter default
- Để kích hoạt BPDU Filtering trên một port cụ thể:
Bash:
Switch(config)# interface gi0/0/1
Switch(config-if)# spanning-tree bpdufilter enable
- Để kiểm tra BPDU Filtering:
Bash:
Switch(config)# do show spanning-tree interface g0/1 detail | include filter

4. Loop Guard


1724126917599.png

- STP dựa vào việc trao đổi BPDUs để duy trì một môi trường không có loop. Nếu một lỗi phần mềm hoặc phần cứng khiến một switch ngừng nhận BPDUs, switch đó cuối cùng sẽ loại bỏ thông tin BPDU sau khi bộ đếm max age hết hạn. Điều này có thể dẫn đến việc switch chuyển sai trạng thái của một port từ blocking sang forwarding, từ đó tạo ra một loop.
- Loop Guard cung cấp một giải pháp toàn diện, nếu một port blocking ngừng nhận BPDUs trên một VLAN, nó sẽ được chuyển vào trạng thái loop-inconsistent cho VLAN đó. Một port trong trạng thái loop-inconsistent không thể chuyển tiếp lưu lượng cho các VLAN bị ảnh hưởng và thực tế là ở trạng thái pseudo-errdisable.
- Tuy nhiên, Loop Guard có thể tự động phục hồi. Ngay khi BPDUs được nhận lại, port sẽ chuyển trạng thái bình thường qua các trạng thái STP.
- Loop Guard có thể được bật globally:
Bash:
Switch(config)# spanning-tree loopguard default
- Loop Guard có thể bật trên từng interface:​
Bash:
Switch(config)# interface gi0/10
Switch(config-if)# spanning-tree guard loop
- Loop Guard chỉ nên được bật trên các port trunk hoặc các port kết nối với các switch khác. Loop Guard không nên được bật trên port kết nối với máy chủ, vì một port access không nên nhận BPDU.​
 

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu