Troubleshooting IPv4 ACLs – Cách đọc và xử lý sự cố Access Control List trên Cisco
ACL (Access Control List) là một trong những tính năng quan trọng nhất trên thiết bị Cisco IOS, nhưng cũng là nơi rất nhiều lỗi cấu hình xảy ra. Chỉ cần sai một dòng ACL, lưu lượng mạng (traffic) có thể bị chặn hoàn toàn, NAT ngừng hoạt động, tiến trình route redistribution thất bại hoặc policy-based routing đi sai hướng. Vì vậy, với kỹ sư mạng, biết đọc và hiểu ACL như đọc log là một kỹ năng bắt buộc.
ACL được dùng để nhận diện traffic dựa trên nhiều tiêu chí như địa chỉ IP nguồn, IP đích, source port, destination port, giao thức tầng transport (TCP/UDP), QoS marking và nhiều thuộc tính khác. Tuy nhiên, ACL chỉ là tập luật. Nếu chưa được gắn vào interface, NAT, route-map hay một feature nào đó thì ACL chưa có tác dụng gì. Ví dụ, ACL có thể dùng để xác định traffic nội bộ nào được NAT ra Internet, hoặc traffic nào được phép đi qua router.
Khi troubleshoot ACL IPv4, trước tiên chúng ta cần hiểu cách ACL hoạt động. ACL xử lý theo nguyên tắc top-down processing. Nghĩa là router đọc từ dòng đầu tiên xuống dòng cuối cùng. Dòng nào match trước thì xử lý luôn, không nhìn các dòng phía sau nữa. Đây là điểm khiến nhiều người mới dễ nhầm.
Ví dụ:
access-list 1 deny 10.1.1.5
access-list 1 permit 10.1.1.0 0.0.0.63
Thoạt nhìn có vẻ host 10.1.1.5 được permit vì nó nằm trong subnet 10.1.1.0/26. Nhưng thực tế không phải vậy. Router đọc:
Nguyên tắc thứ hai là immediate execution upon match. Match là xử lý ngay. Không có khái niệm “dòng sau ưu tiên hơn”.
Nguyên tắc thứ ba là implicit deny any.
Nếu packet đi hết ACL mà không match dòng nào, router mặc định deny.
Dòng này không hiện ra khi xem config, nhưng luôn tồn tại một cách mặc định:
deny ip any any
Ví dụ:
access-list 1 permit 10.1.1.0 0.0.0.255
Traffic từ 10.1.1.10 → được permit.
Traffic từ 192.168.1.10 → không match → implicit deny → drop.
Đây là lý do vì sao nhiều kỹ sư cấu hình ACL xong rồi tự hỏi: “Sao mạng chết hết?” Standard ACL
Standard ACL chỉ kiểm tra source IP address.
Ví dụ:
Standard IP access list 1
5 deny 10.1.1.5
10 permit 10.1.1.0 0.0.0.63
20 deny 10.1.1.64 0.0.0.63
30 permit 10.1.1.0 0.0.0.255
Phân tích cụ thể cho ACL trên:
Extended ACL mạnh hơn rất nhiều. Ngoài việc kiểm tra địa chỉ nguồn source IP, nó còn lựa ra (match) được:
Extended IP access list 100
10 deny tcp host 10.1.1.5 host 192.0.2.1 eq www
20 permit tcp 10.1.1.0 0.0.0.63 host 192.0.2.1 eq telnet
30 deny ip 10.1.1.64 0.0.0.63 host 192.0.2.1
40 permit ip 10.1.1.0 0.0.0.255 any
Phân tích ACL trên như sau:
Từ máy Host 10.1.1.5:
Một lỗi rất phổ biến: tạo ACL xong… quên apply. Chúng ta phải áp ACL, ACL phải được gắn vào interface của router bằng câu lệnh:
ip access-group 100 out
ip access-group 1 in
Kiểm tra bằng:
show ip interface gigabitEthernet 0/0
Output ví dụ:
Outgoing access list is 100
Inbound access list is 1
Nếu không thấy dòng này, ACL chưa hoạt động. Những lỗi troubleshoot ACL thường gặp
1. Sai hướng direction
Inbound vs outbound.
Ví dụ bạn muốn chặn traffic từ LAN đi Internet nhưng lại apply outbound ở interface LAN → không đúng logic.
2. Sai interface
ACL đúng nhưng gắn nhầm cổng.
3. Rule tổng quát nằm trên rule cụ thể
Ví dụ:
permit ip any any
deny tcp host 10.1.1.5 any eq 80
Rule deny vô nghĩa.
4. Quên implicit deny
Không có permit phù hợp → traffic chết.
5. Sai wildcard mask
Ví dụ:
10.1.1.0 0.0.0.255
khác hoàn toàn:
10.1.1.0 0.0.0.63 Các Lệnh troubleshoot hữu ích mà chúng ta nên nhớ để dùng khi troubleshooting:
show access-lists: Dùng để Xem ACL và hit count.
show ip interface: Dùng để Xem ACL đang apply ở đâu.
show running-config: Dùng để Kiểm tra cấu hình tổng thể.
ACL không khó lắm. Nhưng ACL đòi hỏi tư duy logic cực kỳ chính xác. Router không đoán ý bạn. Nó chỉ làm đúng từng dòng, từ trên xuống dưới, không thương lượng.
ACL (Access Control List) là một trong những tính năng quan trọng nhất trên thiết bị Cisco IOS, nhưng cũng là nơi rất nhiều lỗi cấu hình xảy ra. Chỉ cần sai một dòng ACL, lưu lượng mạng (traffic) có thể bị chặn hoàn toàn, NAT ngừng hoạt động, tiến trình route redistribution thất bại hoặc policy-based routing đi sai hướng. Vì vậy, với kỹ sư mạng, biết đọc và hiểu ACL như đọc log là một kỹ năng bắt buộc.
ACL được dùng để nhận diện traffic dựa trên nhiều tiêu chí như địa chỉ IP nguồn, IP đích, source port, destination port, giao thức tầng transport (TCP/UDP), QoS marking và nhiều thuộc tính khác. Tuy nhiên, ACL chỉ là tập luật. Nếu chưa được gắn vào interface, NAT, route-map hay một feature nào đó thì ACL chưa có tác dụng gì. Ví dụ, ACL có thể dùng để xác định traffic nội bộ nào được NAT ra Internet, hoặc traffic nào được phép đi qua router.
Khi troubleshoot ACL IPv4, trước tiên chúng ta cần hiểu cách ACL hoạt động. ACL xử lý theo nguyên tắc top-down processing. Nghĩa là router đọc từ dòng đầu tiên xuống dòng cuối cùng. Dòng nào match trước thì xử lý luôn, không nhìn các dòng phía sau nữa. Đây là điểm khiến nhiều người mới dễ nhầm.
Ví dụ:
access-list 1 deny 10.1.1.5
access-list 1 permit 10.1.1.0 0.0.0.63
Thoạt nhìn có vẻ host 10.1.1.5 được permit vì nó nằm trong subnet 10.1.1.0/26. Nhưng thực tế không phải vậy. Router đọc:
- Dòng 1: deny 10.1.1.5 → match
- Dừng xử lý
- Packet bị drop liền.
Nguyên tắc thứ hai là immediate execution upon match. Match là xử lý ngay. Không có khái niệm “dòng sau ưu tiên hơn”.
Nguyên tắc thứ ba là implicit deny any.
Nếu packet đi hết ACL mà không match dòng nào, router mặc định deny.
Dòng này không hiện ra khi xem config, nhưng luôn tồn tại một cách mặc định:
deny ip any any
Ví dụ:
access-list 1 permit 10.1.1.0 0.0.0.255
Traffic từ 10.1.1.10 → được permit.
Traffic từ 192.168.1.10 → không match → implicit deny → drop.
Đây là lý do vì sao nhiều kỹ sư cấu hình ACL xong rồi tự hỏi: “Sao mạng chết hết?” Standard ACL
Standard ACL chỉ kiểm tra source IP address.
Ví dụ:
Standard IP access list 1
5 deny 10.1.1.5
10 permit 10.1.1.0 0.0.0.63
20 deny 10.1.1.64 0.0.0.63
30 permit 10.1.1.0 0.0.0.255
Phân tích cụ thể cho ACL trên:
- 10.1.1.5 → bị deny ngay dòng 5
- 10.1.1.20 → permit dòng 10
- 10.1.1.80 → deny dòng 20
- 10.1.1.200 → permit dòng 30
- 192.168.2.1 → implicit deny
Extended ACL mạnh hơn rất nhiều. Ngoài việc kiểm tra địa chỉ nguồn source IP, nó còn lựa ra (match) được:
- Địa chỉ destination IP
- Giao thức protocol
- source port
- destination port
Extended IP access list 100
10 deny tcp host 10.1.1.5 host 192.0.2.1 eq www
20 permit tcp 10.1.1.0 0.0.0.63 host 192.0.2.1 eq telnet
30 deny ip 10.1.1.64 0.0.0.63 host 192.0.2.1
40 permit ip 10.1.1.0 0.0.0.255 any
Phân tích ACL trên như sau:
Từ máy Host 10.1.1.5:
- đi HTTP tới 192.0.2.1 → sẽ bị deny
- đi Telnet tới 192.0.2.1 → sẽ được permit
- Nếu Ping tới Internet → permit dòng 40
- tới 192.0.2.1 → deny
- tới nơi khác → permit
Một lỗi rất phổ biến: tạo ACL xong… quên apply. Chúng ta phải áp ACL, ACL phải được gắn vào interface của router bằng câu lệnh:
ip access-group 100 out
ip access-group 1 in
Kiểm tra bằng:
show ip interface gigabitEthernet 0/0
Output ví dụ:
Outgoing access list is 100
Inbound access list is 1
Nếu không thấy dòng này, ACL chưa hoạt động. Những lỗi troubleshoot ACL thường gặp
1. Sai hướng direction
Inbound vs outbound.
Ví dụ bạn muốn chặn traffic từ LAN đi Internet nhưng lại apply outbound ở interface LAN → không đúng logic.
2. Sai interface
ACL đúng nhưng gắn nhầm cổng.
3. Rule tổng quát nằm trên rule cụ thể
Ví dụ:
permit ip any any
deny tcp host 10.1.1.5 any eq 80
Rule deny vô nghĩa.
4. Quên implicit deny
Không có permit phù hợp → traffic chết.
5. Sai wildcard mask
Ví dụ:
10.1.1.0 0.0.0.255
khác hoàn toàn:
10.1.1.0 0.0.0.63 Các Lệnh troubleshoot hữu ích mà chúng ta nên nhớ để dùng khi troubleshooting:
show access-lists: Dùng để Xem ACL và hit count.
show ip interface: Dùng để Xem ACL đang apply ở đâu.
show running-config: Dùng để Kiểm tra cấu hình tổng thể.
ACL không khó lắm. Nhưng ACL đòi hỏi tư duy logic cực kỳ chính xác. Router không đoán ý bạn. Nó chỉ làm đúng từng dòng, từ trên xuống dưới, không thương lượng.