Wildcard Mask trong ACL – “vũ khí” tinh chỉnh cực mạnh mà nhiều người bỏ qua
Khi viết ACL trên thiết bị Cisco, đa số kỹ sư chỉ nghĩ “permit/deny subnet này, host kia”. Nhưng sức mạnh thật sự nằm ở wildcard mask—thứ cho phép bạn “vẽ” chính xác những bit nào phải khớp, bit nào được bỏ qua. Làm chủ wildcard mask, bạn viết ít ACE hơn, chạy nhanh hơn, dễ bảo trì hơn. 1) Wildcard mask là gì? (và vì sao khác subnet mask)
Nhớ nhanh: Subnet mask coi 1 = khớp, 0 = không khớp; Wildcard thì 0 = phải khớp, 1 = bỏ qua.
Mẹo tính nhanh (chỉ áp dụng khi bạn muốn “đảo” một subnet mask liền mạch): wildcard = 255 − subnet mask (theo từng octet). Ví dụ, /24 → subnet mask 255.255.255.0 ⇒ wildcard 0.0.0.255. 2) Cơ chế so khớp của ACE với wildcard
Thiết bị lấy địa chỉ gói tin so với địa chỉ tham chiếu trong ACE, nhưng chỉ kiểm tra những bit có wildcard = 0. Nếu tất cả các bit “phải khớp” (0) đều khớp, coi như match. Những bit có wildcard = 1 thì bỏ qua.
Ví dụ phân tích theo từng bit (tư duy đúng bản chất):
Địa chỉ tham chiếu: 172.16.100.1. Giả sử ta chỉ minh họa octet thứ 3 (giá trị 100 = 0110 0100 nhị phân).
Đó chính là cách tạo ra các tiêu chí đặc biệt như “chọn các /24 có số lẻ ở octet thứ 3”. Ví dụ wildcard 0.0.254.255 yêu cầu bit cuối của octet thứ 3 khớp với địa chỉ tham chiếu. Nếu tham chiếu có bit cuối = 1 thì sẽ match các mạng /24 số lẻ: 192.168.1.0, 192.168.3.0, 192.168.5.0,… 3) Wildcard cho một dải subnet – viết 1 dòng thay vì cả chục dòng
Giả sử bạn đã chia subnet 172.16.0.0 và muốn match các subnet 172.16.16.0/24 → 172.16.31.0/24 (tổng cộng 16 subnet).
Lưu ý thực tế: Không phải lúc nào cũng “vừa khít”. Ví dụ cần match 172.16.16.0 → 172.16.27.0 (12 subnet), nếu dùng 0.0.15.255 sẽ quá rộng, ăn luôn 28–31. Lúc này hãy tách làm 2 ACE hoặc nhiều hơn để khít dải. 4) Ví dụ cấu hình Cisco IOS (thực chiến)
Bí quyết vận hành:
IPv6 ACL không dùng wildcard mask. Thay vào đó dùng prefix-length để chỉ định phần địa chỉ cần so khớp. (Chủ đề này nằm ngoài phạm vi bài học hiện tại.)
Câu hỏi ôn tập (CCNA/CCNP)
C1. Tiêu chí nào match chính xác traffic từ hoặc đến địa chỉ IPv4 192.168.5.7?
C2. (Chọn 3) Những tiêu chí nào có thể match traffic từ mạng 10.0.0.0/8?
Gợi ý đáp án & giải thích ngắn
C1: Đáp án 2)
C2: Đáp án B, E, G
Checklist “nhìn là biết viết wildcard”
Khi viết ACL trên thiết bị Cisco, đa số kỹ sư chỉ nghĩ “permit/deny subnet này, host kia”. Nhưng sức mạnh thật sự nằm ở wildcard mask—thứ cho phép bạn “vẽ” chính xác những bit nào phải khớp, bit nào được bỏ qua. Làm chủ wildcard mask, bạn viết ít ACE hơn, chạy nhanh hơn, dễ bảo trì hơn. 1) Wildcard mask là gì? (và vì sao khác subnet mask)
- Một wildcard mask cũng là chuỗi 32 bit như subnet mask, nhưng ý nghĩa đảo ngược:
- Bit 0 trong wildcard = bắt buộc phải khớp với bit tương ứng của địa chỉ tham chiếu.
- Bit 1 trong wildcard = không quan tâm (bỏ qua) giá trị bit ấy.
- Wildcard không đứng một mình. Nó đi với một địa chỉ IPv4 tham chiếu để tạo thành tiêu chí so khớp.
- Điểm khác quan trọng so với subnet mask:
- Subnet mask phải liền mạch từ các bit 1 sang 0 (sau bit 0 đầu tiên là toàn 0).
- Wildcard không cần liền mạch. Bạn có thể trộn 0 và 1 theo ý (ví dụ 0.0.254.255), vì thế linh hoạt hơn rất nhiều.
Nhớ nhanh: Subnet mask coi 1 = khớp, 0 = không khớp; Wildcard thì 0 = phải khớp, 1 = bỏ qua.
Mẹo tính nhanh (chỉ áp dụng khi bạn muốn “đảo” một subnet mask liền mạch): wildcard = 255 − subnet mask (theo từng octet). Ví dụ, /24 → subnet mask 255.255.255.0 ⇒ wildcard 0.0.0.255. 2) Cơ chế so khớp của ACE với wildcard
Thiết bị lấy địa chỉ gói tin so với địa chỉ tham chiếu trong ACE, nhưng chỉ kiểm tra những bit có wildcard = 0. Nếu tất cả các bit “phải khớp” (0) đều khớp, coi như match. Những bit có wildcard = 1 thì bỏ qua.
Ví dụ phân tích theo từng bit (tư duy đúng bản chất):
Địa chỉ tham chiếu: 172.16.100.1. Giả sử ta chỉ minh họa octet thứ 3 (giá trị 100 = 0110 0100 nhị phân).
- Nếu wildcard octet = 0000 0000 (0), toàn bộ 8 bit phải khớp → chỉ match duy nhất 100 ở octet thứ 3.
- Nếu wildcard octet = 1111 1111 (255), toàn bộ 8 bit bị bỏ qua → bất kỳ giá trị nào ở octet thứ 3 đều match.
- Nếu wildcard octet = 1111 1110 (254), chỉ bit cuối bắt buộc khớp. Nếu bit cuối của địa chỉ tham chiếu là 1 thì bạn đang chọn các giá trị lẻ; nếu là 0 thì đang chọn các giá trị chẵn.
Đó chính là cách tạo ra các tiêu chí đặc biệt như “chọn các /24 có số lẻ ở octet thứ 3”. Ví dụ wildcard 0.0.254.255 yêu cầu bit cuối của octet thứ 3 khớp với địa chỉ tham chiếu. Nếu tham chiếu có bit cuối = 1 thì sẽ match các mạng /24 số lẻ: 192.168.1.0, 192.168.3.0, 192.168.5.0,… 3) Wildcard cho một dải subnet – viết 1 dòng thay vì cả chục dòng
Giả sử bạn đã chia subnet 172.16.0.0 và muốn match các subnet 172.16.16.0/24 → 172.16.31.0/24 (tổng cộng 16 subnet).
- Cách “thủ công” là viết 16 ACE, mỗi dòng một subnet kèm wildcard 0.0.0.255. Tốn công và tốn CPU.
- Cách “chuẩn wildcard”: nhìn nhị phân octet thứ 3 từ 16 đến 31. Tất cả cùng bắt đầu bằng 0001****xxxx.
- 4 bit đầu phải khớp (0001), 4 bit cuối bỏ qua ⇒ wildcard octet thứ 3 = 0000 1111 = 15.
- Octet cuối muốn match “mọi host” ⇒ wildcard 255.
- Hai octet đầu phải khớp 172.16 ⇒ wildcard hai octet đầu = 0.0.
- Kết quả: 0.0.15.255.
- Viết ACE: 172.16.16.0 0.0.15.255 (địa chỉ tham chiếu có thể là bất kỳ trong dải; IOS sẽ tự “chuẩn hóa” về 172.16.16.0).
Lưu ý thực tế: Không phải lúc nào cũng “vừa khít”. Ví dụ cần match 172.16.16.0 → 172.16.27.0 (12 subnet), nếu dùng 0.0.15.255 sẽ quá rộng, ăn luôn 28–31. Lúc này hãy tách làm 2 ACE hoặc nhiều hơn để khít dải. 4) Ví dụ cấu hình Cisco IOS (thực chiến)
- Match đúng 1 host (wildcard 0.0.0.0):
access-list 101 permit ip host 192.168.5.7 any ! tương đương: access-list 101 permit ip 192.168.5.7 0.0.0.0 any - Match cả dải /24 (wildcard 0.0.0.255):
access-list 101 deny ip 10.10.10.0 0.0.0.255 any log - Match 16 subnet /24 liền nhau từ 172.16.16.0 đến 172.16.31.0:
access-list 101 permit ip 172.16.16.0 0.0.15.255 any - Match các mạng /24 lẻ ở octet thứ 3 (ví dụ dựa theo 192.168.x.0/24):
! Chọn các /24 có bit cuối octet thứ 3 = 1 (các số lẻ) access-list 101 permit ip 192.168.1.0 0.0.254.255 any - Áp ACL vào interface:
interface GigabitEthernet0/0 ip access-group 101 in
Bí quyết vận hành:
- Thứ tự ACE rất quan trọng; có implicit deny ở cuối ACL.
- Dùng log để quan sát match khi cần xử lý sự cố.
- Kiểm thử trước trên lab/CML/EVE-NG, hoặc dùng packet-tracer (ASA) / debug ip packet detail (cẩn trọng).
IPv6 ACL không dùng wildcard mask. Thay vào đó dùng prefix-length để chỉ định phần địa chỉ cần so khớp. (Chủ đề này nằm ngoài phạm vi bài học hiện tại.)
Câu hỏi ôn tập (CCNA/CCNP)
C1. Tiêu chí nào match chính xác traffic từ hoặc đến địa chỉ IPv4 192.168.5.7?
- 192.168.5.7 255.255.255.255
- 192.168.5.7 0.0.0.0
- 192.168.5.7 255.255.255.0
- 192.168.5.0 0.0.0.0
C2. (Chọn 3) Những tiêu chí nào có thể match traffic từ mạng 10.0.0.0/8?
- A) 10.0.0.0 255.255.255.0
- B) 10.10.10.10 0.255.255.255
- C) 10.10.0.0 255.255.0.0
- D) 10.0.0.0 0.0.0.0
- E) 10.10.0.0 0.255.255.255
- F) 10.255.255.255 0.0.0.0
- G) 10.0.0.0 0.255.255.255
- H) 100.10.10.0 0.255.255.255
Gợi ý đáp án & giải thích ngắn
C1: Đáp án 2)
- 0.0.0.0 nghĩa là mọi bit phải khớp ⇒ match chính xác host 192.168.5.7.
- Các phương án dùng 255.x là wildcard, không phải subnet mask—chúng sẽ bỏ qua bit, không match đúng 1 host.
C2: Đáp án B, E, G
- Mạng 10.0.0.0/8 nghĩa là octet đầu = 10; ba octet sau bất kỳ.
- B) 10.10.10.10 0.255.255.255: chỉ ép octet đầu = 10, ba octet sau bỏ qua ⇒ đúng cho 10/8.
- E) 10.10.0.0 0.255.255.255: vẫn chỉ ép octet đầu = 10, phần còn lại bỏ qua ⇒ đúng.
- G) 10.0.0.0 0.255.255.255: ép octet đầu = 10, ba octet sau bỏ qua ⇒ đúng.
- Không đúng:
- A/C/D/F/H không biểu diễn đúng ràng buộc “chỉ cần octet đầu = 10”. Ví dụ D (0.0.0.0) sẽ match chính xác 10.0.0.0 chứ không phải cả /8.
Checklist “nhìn là biết viết wildcard”
- Muốn match duy nhất một host → wildcard 0.0.0.0 hoặc dùng từ khóa host.
- Muốn match /24 → wildcard 0.0.0.255.
- Muốn match khối 2^n subnet liên tiếp → xác định các bit cố định ở đầu và bỏ qua phần biến thiên bằng wildcard (ví dụ 16 subnet /24 → octet thứ 3 wildcard 15).
- Muốn match mẫu lẻ/chẵn ở một octet → dùng wildcard có bit cuối = 0 (bắt khớp bit cuối) như 254.