CCNA01-ACCESS-LIST

CCNA ACL Cheat Sheet — Access-List từ Cơ bản đến Nâng cao
Standard Extended Named IPv6 Time-based Reflexive
Tổng quan
Standard ACL
Extended ACL
Named ACL
Wildcard Mask
Kịch bản thực tế
Nâng cao
IPv6 ACL
Verify & Debug
Giải phẫu một dòng ACL Extended — Extended ACL Anatomy
Cú pháp đầy đủ:
Keywordaccess-list
Number100
Actionpermit
Protocoltcp
Source IP192.168.1.0
Wildcard0.0.0.255
Dest IPany
Porteq 443
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443
Nghĩa: Cho phép traffic TCP từ mạng 192.168.1.0/24 đến bất kỳ đích nào, port đích 443 (HTTPS)
Cú pháp Standard ACL:
Keywordaccess-list
Number10
Actionpermit
Source IP192.168.1.0
Wildcard0.0.0.255
Standard ACL chỉ lọc theo địa chỉ nguồn — không kiểm tra protocol hay port đích.
Luồng xử lý ACL
Packet
đến
Interface
nhận
ACL
gán IN?
Yes →
kiểm tra
Quá trình kiểm tra từng entry (top-down):
Match + permit Cho packet đi qua tiếp tục xử lý
Match + deny Drop packet, gửi ICMP unreachable
No match Kiểm tra entry tiếp theo
Hết entries Implicit deny any — drop tất cả!
Các loại ACL — Phân loại
Theo số (Numbered)
1 – 99 Standard Chỉ lọc theo Source IP
100 – 199 Extended Lọc src/dst IP, protocol, port
1300 – 1999 Standard Standard mở rộng (IOS mới)
2000 – 2699 Extended Extended mở rộng (IOS mới)
Theo tên (Named) — khuyến nghị
ip access-list standard NAME Named Std Dễ đặt tên, sửa từng entry
ip access-list extended NAME Named Ext Linh hoạt nhất, dùng sequence
Loại đặc biệt
ip access-list extended Reflexive Dynamic — tự tạo entry trả lời
time-range + ACL Time-based Lọc theo thời gian
ipv6 access-list NAME IPv6 ACL Named only, không có numbered
Quy tắc vàng — ACL Golden Rules
Top-down processing — Khớp entry đầu tiên là dừng, không kiểm tra tiếp
Implicit deny any — Cuối mỗi ACL luôn có deny any ẩn — phải có ít nhất 1 permit
Standard → gần đích — Standard ACL chỉ lọc src → đặt gần destination tránh chặn nhầm
Extended → gần nguồn — Extended ACL lọc cụ thể → đặt gần source tiết kiệm băng thông
Chỉ 1 ACL/interface/direction — 1 interface = 1 ACL in + 1 ACL out tối đa
Specific trước, general sau — host cụ thể → subnet → any
Log deny — Luôn thêm deny any log để theo dõi traffic bị chặn
Test trước khi áp — Kiểm tra logic ACL bằng show access-lists trước khi gán vào interface
Chiều áp dụng ACL — IN vs OUT
ACL inbound (in)
ip access-group ACL_NAME inLọc packet trước khi router xử lý/định tuyến — packet bị drop không vào routing table
Ưu điểmTiết kiệm tài nguyên — drop sớm, không tốn CPU routing
Dùng khiBảo vệ router, lọc traffic đến từ untrusted network
ACL outbound (out)
ip access-group ACL_NAME outLọc packet sau khi router định tuyến xong, trước khi gửi ra interface
Ưu điểmCó thể dùng 1 ACL cho nhiều nguồn đến cùng đích
Dùng khiKiểm soát traffic rời khỏi network cụ thể
Lưu ý quan trọng
Router's own trafficACL inbound không ảnh hưởng traffic do chính router tạo ra (OSPF hello, ping từ router...)
VTY access-classaccess-class cho VTY — chỉ áp dụng chiều in để kiểm soát ai SSH được vào
Nhớ nhanh vị trí đặt ACL: Standard ACL số nhỏ (1–99) → đặt gần đích (destination). Extended ACL số lớn (100–199) → đặt gần nguồn (source). Named ACL → linh hoạt, chỉnh sửa được từng sequence entry.
Standard ACL — Numbered (1–99)
Cú pháp cơ bản
access-list 10 permit host 192.168.1.5Permit một host cụ thể (/32)
access-list 10 permit 192.168.1.0 0.0.0.255Permit cả subnet /24
access-list 10 permit 10.0.0.0 0.255.255.255Permit toàn bộ 10.x.x.x (/8)
access-list 10 permit anyPermit tất cả = permit 0.0.0.0 255.255.255.255
access-list 10 deny host 192.168.1.99Deny một host cụ thể
access-list 10 deny 192.168.2.0 0.0.0.255Deny một subnet
access-list 10 deny anyDeny tất cả (tường minh hóa implicit deny)
Gán vào interface
int gi0/1 ip access-group 10 inLọc traffic đến router từ gi0/1
int gi0/1 ip access-group 10 outLọc traffic rời router qua gi0/1
int gi0/1 no ip access-group 10 inGỡ ACL khỏi interface
Gán vào VTY (quản lý truy cập)
line vty 0 4 access-class 10 inChỉ IP trong ACL 10 mới SSH/Telnet được
line vty 0 4 access-class 10 outGiới hạn router telnet ra ngoài
Standard ACL — Named
Tạo Named Standard ACL
ip access-list standard MGMT_ACCESSTạo named standard ACL
10 permit host 10.0.0.5Seq 10: permit host quản trị
20 permit 172.16.0.0 0.0.255.255Seq 20: permit toàn bộ 172.16/16
30 permit 192.168.100.0 0.0.0.255Seq 30: permit subnet quản lý
40 deny any logSeq 40: deny tất cả + ghi log
Chỉnh sửa Named ACL (không xóa toàn bộ)
ip access-list standard MGMT_ACCESS no 30Xóa sequence 30
25 permit 192.168.200.0 0.0.0.255Thêm entry mới giữa seq 20 và 30
30 permit 192.168.100.0 0.0.0.255Thêm lại seq 30 mới
Resequence (đánh lại số thứ tự)
ip access-list resequence MGMT_ACCESS 10 10Bắt đầu từ 10, bước nhảy 10 (10,20,30...)
Gán vào interface / VTY
int gi0/0 ip access-group MGMT_ACCESS inGán named ACL vào interface
line vty 0 15 access-class MGMT_ACCESS inGán named ACL vào VTY
Ví dụ Standard ACL thực tế
Ví dụ 1: Chỉ cho phép mạng IT quản lý router
! Chỉ subnet IT 10.1.1.0/24 được SSH vào router ip access-list standard SSH_ALLOWED 10 permit 10.1.1.0 0.0.0.255 20 deny any log ! line vty 0 15 access-class SSH_ALLOWED in transport input ssh
Ví dụ 2: Chặn user cụ thể ra Internet
! Chặn PC của nhân viên thực tập (192.168.1.50) access-list 15 deny host 192.168.1.50 access-list 15 permit 192.168.1.0 0.0.0.255 access-list 15 deny any log ! interface gi0/1 ! WAN interface ip access-group 15 out
Cẩn thận khi sửa Numbered ACL: Numbered ACL (access-list 10 ...) không sửa từng dòng được — phải no access-list 10 xóa toàn bộ rồi viết lại. Named ACL cho phép xóa/thêm từng sequence entry → luôn nên dùng Named ACL trong production.
Extended ACL — Numbered (100–199)
Cú pháp: access-list [100-199] [permit|deny] [protocol] [src] [wildcard] [dst] [wildcard] [operator port]
Lọc theo Protocol
access-list 100 permit ip any anyCho phép tất cả IP traffic
access-list 100 permit tcp any anyCho phép tất cả TCP
access-list 100 permit udp any anyCho phép tất cả UDP
access-list 100 permit icmp any anyCho phép ICMP (ping)
access-list 100 deny ospf any anyDeny OSPF protocol
access-list 100 deny eigrp any anyDeny EIGRP protocol
Lọc theo Port (TCP/UDP)
... eq 80eq equal — bằng đúng port 80
... gt 1023gt greater than — lớn hơn 1023
... lt 1024lt less than — nhỏ hơn 1024
... neq 23neq not equal — khác port 23
... range 8080 8090range — từ 8080 đến 8090
Từ khóa đặc biệt
... establishedTCP established — ACK hoặc RST set (return traffic)
... fragmentsÁp dụng cho fragment packet
... logGhi log khi khớp entry
... log-inputLog kèm theo interface input
... ttl eq 1Lọc theo TTL value
... dscp efLọc theo DSCP marking (QoS)
... tos 16Lọc theo ToS byte
Well-Known Ports — Tham chiếu nhanh
ProtocolPortKeyword IOSDùng trong ACL
FTP DataTCP 20ftp-dataeq ftp-data
FTP ControlTCP 21ftpeq ftp
SSHTCP 2222eq 22
TelnetTCP 23telneteq telnet
SMTP (Mail)TCP 25smtpeq smtp
DNSUDP/TCP 53domaineq domain
DHCP ServerUDP 67bootpseq bootps
TFTPUDP 69tftpeq tftp
HTTPTCP 80wwweq www hoặc eq 80
POP3 (Mail)TCP 110pop3eq pop3
NTPUDP 123ntpeq ntp
SNMPUDP 161snmpeq snmp
HTTPSTCP 443443eq 443
SMB (Windows)TCP 445445eq 445
IMAPTCP 143imap4eq 143
RDPTCP 33893389eq 3389
MySQLTCP 33063306eq 3306
SyslogUDP 514514eq 514
Extended ACL — Ví dụ thực tế đầy đủ
Ví dụ 1: Firewall ACL cho LAN ra Internet
! LAN 192.168.1.0/24 ra Internet qua gi0/1 access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80 access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443 access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 22 access-list 100 permit udp 192.168.1.0 0.0.0.255 any eq 53 access-list 100 permit icmp 192.168.1.0 0.0.0.255 any access-list 100 permit tcp any any established access-list 100 deny ip any any log ! interface gi0/0 ! LAN interface ip access-group 100 in
Ví dụ 2: Bảo vệ server trong DMZ
! Chỉ cho phép traffic cần thiết vào Web Server access-list 110 permit tcp any host 10.0.1.10 eq 80 access-list 110 permit tcp any host 10.0.1.10 eq 443 ! Chỉ admin 10.0.0.5 được SSH vào server access-list 110 permit tcp host 10.0.0.5 host 10.0.1.10 eq 22 access-list 110 deny ip any host 10.0.1.10 log access-list 110 permit ip any any ! interface gi0/2 ! DMZ interface ip access-group 110 out
Ví dụ 3: Phân cách giữa các VLAN
! VLAN 10 (HR) không được truy cập VLAN 20 (Finance) access-list 120 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 log ! Nhưng Finance có thể ra Internet access-list 120 permit ip 192.168.10.0 0.0.0.255 any ! interface vlan 10 ip access-group 120 in
Ví dụ 4: Chặn Telnet, cho phép SSH
! Chặn Telnet (port 23), cho phép SSH (port 22) access-list 130 deny tcp any any eq telnet log access-list 130 permit tcp 10.0.0.0 0.0.0.255 any eq 22 access-list 130 permit ip any any ! interface gi0/0 ip access-group 130 in
TCP established: permit tcp any any established cho phép return traffic của các kết nối TCP đã được khởi tạo từ bên trong. Đây là cơ chế stateless "pseudo-stateful" — chỉ kiểm tra ACK/RST bit, không theo dõi session như stateful firewall.
Named ACL — Cú pháp đầy đủ
Tạo Named Standard ACL
ip access-list standard ACL_NAMEVào config mode của named standard ACL
[seq] permit|deny [src] [wildcard]Thêm entry (sequence tự động 10, 20, 30...)
Tạo Named Extended ACL
ip access-list extended ACL_NAMEVào config mode của named extended ACL
[seq] permit|deny [proto] [src] [wc] [dst] [wc] [port] [options]Entry với đầy đủ tùy chọn
Quản lý sequence numbers
10 permit host 192.168.1.1Entry với sequence 10
no 10Xóa entry có sequence 10
15 permit host 192.168.1.2Thêm entry giữa 10 và 20
ip access-list resequence FIREWALL 5 5Resequence: bắt đầu 5, bước 5 → 5,10,15,20...
Remarks (chú thích)
remark === SECTION: Web Traffic ===Thêm chú thích vào ACL
remark Allow HTTP from LANGiải thích mục đích entry tiếp theo
Xóa Named ACL
no ip access-list extended FIREWALLXóa toàn bộ named ACL
no ip access-list standard MGMTXóa named standard ACL
Named vs Numbered — So sánh
Tiêu chíNumbered ACLNamed ACL
Cấu hình
Syntaxaccess-list 100 permit...ip access-list extended NAME
Đặt tên mô tả Chỉ có số Tên rõ ràng (FIREWALL, DMZ_IN...)
Xóa từng entry Phải xóa toàn bộ no [sequence_number]
Thêm entry giữa Không thể Dùng sequence trung gian
Resequence Không hỗ trợ ip access-list resequence
Remark/commentHạn chế remark trong ACL
Ứng dụng
Interfaceip access-group 100 inip access-group NAME in
VTYaccess-class 10 inaccess-class NAME in
NATip nat inside source list 1ip nat inside source list NAME
Route-mapmatch ip address 100match ip address NAME
Khuyến nghị
ProductionHạn chế — khó quản lýNên dùng — linh hoạt, rõ ràng
Lab/học tập Nhanh gọn Cũng dùng được
Named ACL thực tế — Production-grade Firewall
Named Extended ACL đầy đủ với remarks và sequence
! ======================================== ! Named Extended ACL: INTERNET_FIREWALL ! Applied: interface gi0/0 (LAN) in ! ======================================== ip access-list extended INTERNET_FIREWALL ! remark === DNS Traffic === 10 permit udp 192.168.0.0 0.0.255.255 any eq domain 15 permit tcp 192.168.0.0 0.0.255.255 any eq domain ! remark === Web Traffic === 20 permit tcp 192.168.0.0 0.0.255.255 any eq www 30 permit tcp 192.168.0.0 0.0.255.255 any eq 443 ! remark === Email === 40 permit tcp 192.168.0.0 0.0.255.255 any eq smtp 50 permit tcp 192.168.0.0 0.0.255.255 any eq pop3 60 permit tcp 192.168.0.0 0.0.255.255 any eq 143 ! remark === Return Traffic (TCP established) === 70 permit tcp any any established 80 permit udp any 192.168.0.0 0.0.255.255 gt 1023 ! remark === ICMP === 90 permit icmp any 192.168.0.0 0.0.255.255 echo-reply 95 permit icmp any 192.168.0.0 0.0.255.255 unreachable ! remark === Deny Everything Else === 100 deny ip any any log ! interface gi0/0 ip access-group INTERNET_FIREWALL in
Best practice sequence numbering: Dùng bước nhảy 10 (10, 20, 30...) để luôn có chỗ chèn entry mới giữa. Dùng remark để nhóm và mô tả logic của từng section. Resequence định kỳ khi sequence bị phân mảnh.
Wildcard Mask — Nguyên tắc tính
Quy tắc
Bit 0 Phải khớp — bit này của địa chỉ phải giống nhau
Bit 1 Bỏ qua — bit này không cần kiểm tra
Wildcard = ? Wildcard = 255.255.255.255 − Subnet Mask
Ví dụ tính wildcard
/24 → 255.255.255.0255.255.255.255 − 255.255.255.0 = 0.0.0.255
/16 → 255.255.0.0255.255.255.255 − 255.255.0.0 = 0.0.255.255
/8 → 255.0.0.0255.255.255.255 − 255.0.0.0 = 0.255.255.255
/25 → 255.255.255.128255.255.255.255 − 255.255.255.128 = 0.0.0.127
/26 → 255.255.255.192255.255.255.255 − 255.255.255.192 = 0.0.0.63
/27 → 255.255.255.224255.255.255.255 − 255.255.255.224 = 0.0.0.31
/28 → 255.255.255.240255.255.255.255 − 255.255.255.240 = 0.0.0.15
/29 → 255.255.255.248255.255.255.255 − 255.255.255.248 = 0.0.0.7
/30 → 255.255.255.252255.255.255.255 − 255.255.255.252 = 0.0.0.3
Wildcard Mask — Ví dụ đặc biệt
Từ khóa đặc biệt
host 192.168.1.5= 192.168.1.5 0.0.0.0 — chính xác 1 IP
any= 0.0.0.0 255.255.255.255 — tất cả IP
Wildcard cho IP lẻ không phải subnet chuẩn
Chẵn/Lẻ — odd/even192.168.1.0 0.0.0.1 → khớp .0 và .1 (bit cuối bỏ qua)
Bội số 4192.168.1.0 0.0.0.3 → khớp .0, .1, .2, .3
Bội số 8192.168.1.0 0.0.0.7 → khớp .0 đến .7
Summarize nhiều subnet
192.168.0.0 + 192.168.1.0→ 192.168.0.0 0.0.1.255 (2 subnet /24)
10.1.0.0 đến 10.1.3.0→ 10.1.0.0 0.0.3.255 (4 subnet /24)
10.1.0.0 đến 10.1.7.0→ 10.1.0.0 0.0.7.255 (8 subnet /24)
Wildcard với OSPF network statement
network 192.168.1.1 0.0.0.0 area 0Chính xác interface có IP .1 (host wildcard)
network 0.0.0.0 255.255.255.255 area 0Tất cả interface (any wildcard)
Bảng tham chiếu nhanh Wildcard Mask
0.0.0.0
= host
Chính xác 1 địa chỉ IP
/32
0.0.0.1
2 hosts
Chỉ 2 IP (chẵn + lẻ liền kề)
/31
0.0.0.3
4 hosts
4 địa chỉ liên tiếp
/30
0.0.0.7
8 hosts
8 địa chỉ liên tiếp
/29
0.0.0.15
16 hosts
16 địa chỉ liên tiếp
/28
0.0.0.31
32 hosts
32 địa chỉ liên tiếp
/27
0.0.0.63
64 hosts
64 địa chỉ liên tiếp
/26
0.0.0.127
128 hosts
128 địa chỉ liên tiếp
/25
0.0.0.255
256 hosts
Subnet /24 đầy đủ
/24
0.0.1.255
512 hosts
2 subnet /24 liên tiếp
/23
0.0.3.255
1024 hosts
4 subnet /24 liên tiếp
/22
0.0.7.255
2048 hosts
8 subnet /24 liên tiếp
/21
0.0.15.255
4096 hosts
16 subnet /24
/20
0.0.255.255
65536 hosts
Subnet /16 đầy đủ
/16
0.255.255.255
16M hosts
Subnet /8 đầy đủ
/8
255.255.255.255
= any
Tất cả địa chỉ IP
/0
Công thức nhớ: Wildcard = 255.255.255.255 – Subnet Mask. Ví dụ /26 = mask 255.255.255.192 → wildcard = 255.255.255.255 – 255.255.255.192 = 0.0.0.63. Wildcard bit 0 = phải khớp, bit 1 = bỏ qua (ngược với subnet mask).
Kịch bản 1: Mạng doanh nghiệp văn phòng
Topology: LAN (192.168.1.0/24) → Router → Internet
Yêu cầu: LAN được ra web, email. Server 192.168.1.10 được SSH từ ngoài. Chặn tất cả còn lại.
! ── Cho LAN ra Internet ── ip access-list extended LAN_TO_INTERNET remark Web & Email 10 permit tcp 192.168.1.0 0.0.0.255 any eq 80 20 permit tcp 192.168.1.0 0.0.0.255 any eq 443 30 permit tcp 192.168.1.0 0.0.0.255 any eq smtp 40 permit udp 192.168.1.0 0.0.0.255 any eq domain 50 permit tcp any any established 60 deny ip any any log ! ! ── Cho Internet vào Web Server ── ip access-list extended INTERNET_TO_LAN 10 permit tcp any host 203.0.113.10 eq 22 20 permit tcp any any established 30 deny ip any any log ! int gi0/0 ! LAN ip access-group LAN_TO_INTERNET in int gi0/1 ! WAN ip access-group INTERNET_TO_LAN in
Kịch bản 2: Bảo vệ DMZ (3-legged firewall)
DMZ: 10.0.1.0/24 · LAN: 192.168.1.0/24 · WAN: gi0/2
Yêu cầu: Internet vào được Web/Mail server trong DMZ. LAN admin SSH vào server. DMZ không được vào LAN.
! ── Internet → DMZ ── ip access-list extended WAN_TO_DMZ 10 permit tcp any host 10.0.1.10 eq 80 20 permit tcp any host 10.0.1.10 eq 443 30 permit tcp any host 10.0.1.20 eq smtp 40 deny ip any any log ! ! ── LAN → DMZ (admin access) ── ip access-list extended LAN_TO_DMZ 10 permit tcp host 192.168.1.5 10.0.1.0 0.0.0.255 eq 22 20 permit icmp 192.168.1.0 0.0.0.255 10.0.1.0 0.0.0.255 30 deny ip any any log ! ! ── DMZ → LAN (BLOCK!) ── ip access-list extended DMZ_TO_LAN 10 deny ip 10.0.1.0 0.0.0.255 192.168.1.0 0.0.0.255 log 20 permit tcp 10.0.1.0 0.0.0.255 any established 30 permit udp 10.0.1.0 0.0.0.255 any eq domain 40 deny ip any any log
Kịch bản 3: Phân cách VLAN trong campus
VLAN 10 HR · VLAN 20 Finance · VLAN 30 IT · VLAN 99 Mgmt
Yêu cầu: HR và Finance không được truy cập nhau. IT được truy cập tất cả. Chỉ VLAN 99 SSH vào thiết bị.
! ── HR không vào Finance ── ip access-list extended VLAN10_POLICY 10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 log 20 permit ip 192.168.10.0 0.0.0.255 any ! ! ── Finance không vào HR ── ip access-list extended VLAN20_POLICY 10 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 log 20 permit ip 192.168.20.0 0.0.0.255 any ! ! ── SSH chỉ từ VLAN Mgmt ── ip access-list standard SSH_MGMT 10 permit 192.168.99.0 0.0.0.255 20 deny any log ! interface vlan 10 ip access-group VLAN10_POLICY in interface vlan 20 ip access-group VLAN20_POLICY in line vty 0 15 access-class SSH_MGMT in
Kịch bản 4: Giờ làm việc (Time-based ACL)
Cho phép social media chỉ ngoài giờ làm việc
Yêu cầu: Chặn Facebook/YouTube 8h-18h thứ 2-6. Ngoài giờ và cuối tuần: cho phép.
! Bước 1: Khai báo time-range time-range WORK_HOURS periodic weekdays 8:00 to 18:00 ! time-range LUNCH_BREAK periodic weekdays 12:00 to 13:00 ! ! Bước 2: Tạo ACL với time-range ip access-list extended SOCIAL_POLICY remark Allow lunch break 10 permit tcp any any eq 443 time-range LUNCH_BREAK remark Block social media during work hours 20 deny tcp any host 31.13.72.36 eq 443 time-range WORK_HOURS 30 deny tcp any host 142.250.0.0 0.0.255.255 eq 443 time-range WORK_HOURS 40 permit ip any any ! show time-range ! Kiểm tra trạng thái active/inactive
Thiết kế ACL tốt: (1) Xác định rõ yêu cầu bảo mật trước khi viết. (2) Vẽ topology và luồng traffic. (3) Viết permit các service cần thiết. (4) Kết thúc bằng deny any log. (5) Test trên lab trước khi deploy production. (6) Dùng show ip access-lists kiểm tra hit counter.
Reflexive ACL — Dynamic Session Tracking
Khái niệm
Reflexive ACLTự động tạo temporary permit entry cho return traffic — stateless "stateful"
reflect keywordTạo dynamic entry theo dõi session outbound
evaluate keywordKiểm tra inbound traffic với dynamic entries đã tạo
Cấu hình
ip access-list extended OUTBOUND permit tcp 192.168.1.0 0.0.0.255 any reflect TCP_SESSION
permit udp 192.168.1.0 0.0.0.255 any reflect UDP_SESSION
permit icmp 192.168.1.0 0.0.0.255 any reflect ICMP_SESSION
Outbound ACL tạo dynamic session tracking
ip access-list extended INBOUND evaluate TCP_SESSION
evaluate UDP_SESSION
evaluate ICMP_SESSION
deny ip any any log
Inbound ACL chỉ cho phép return của session đã mở
int gi0/1 ip access-group OUTBOUND out
ip access-group INBOUND in
Gán cả 2 ACL vào interface WAN
ip reflexive-list timeout 300Timeout dynamic entry sau 300s không hoạt động
Kiểm tra
show ip access-lists INBOUNDXem dynamic entries tạo tự động
Time-based ACL — Đầy đủ
Time-range types
time-range WEEKEND periodic weekend 00:00 to 23:59Cuối tuần tất cả ngày
time-range NIGHT periodic daily 22:00 to 06:00Mỗi ngày từ 22h đến 6h sáng
time-range HOLIDAY absolute start 00:00 01 January 2026
end 23:59 03 January 2026
Khoảng thời gian cố định (absolute)
time-range TEMP periodic weekdays 09:00 to 17:00
periodic weekend 10:00 to 16:00
Kết hợp nhiều periodic trong 1 time-range
Gán time-range vào ACL
ip access-list extended TIME_ACL 10 permit tcp any any eq 80 time-range WORK_HOURS
20 deny tcp any any eq 80 log
Cho phép HTTP chỉ trong giờ làm việc
Yêu cầu
NTP syncRouter phải đồng bộ NTP chính xác, nếu không time-range sẽ inactive
show time-rangeXem trạng thái: active / inactive
show clockKiểm tra thời gian router
ACL với CBAC / Zone-based Firewall
Zone-Based Firewall (ZBF) — IOS 12.4+
zone security INSIDETạo security zone INSIDE
zone security OUTSIDETạo security zone OUTSIDE
zone security DMZTạo security zone DMZ
class-map type inspect match-any WEB_TRAFFIC match protocol http
match protocol https
Class-map phân loại Web traffic
policy-map type inspect IN_TO_OUT class WEB_TRAFFIC
inspect
class class-default
drop log
Policy: inspect web, drop khác
zone-pair security IN-TO-OUT source INSIDE destination OUTSIDE service-policy type inspect IN_TO_OUTÁp policy cho zone-pair
int gi0/0 zone-member security INSIDEGán interface vào zone
Kiểm tra ZBF
show policy-map type inspect zone-pairThống kê traffic theo policy
show zone securityXem zone và member interfaces
ACL Performance & Best Practices
Tối ưu hiệu năng ACL
Specific firstĐặt entry khớp nhiều nhất (specific) lên đầu → giảm số entries cần kiểm tra
Permit first nếu có thểNếu hầu hết traffic được permit: permit lên đầu, deny ở sau
Avoid fragment checkKiểm tra fragment tốn CPU — chỉ thêm khi cần thiết
Log sparinglylog tốn CPU — chỉ dùng cho deny entries quan trọng
CEF compatibleACL với log vô hiệu hóa CEF switching → process switching (chậm hơn)
Maintenance
clear ip access-list countersReset hit counter để đánh giá traffic mới
show ip access-lists | countĐếm số entries trong ACL
Backup trước khi sửashow run | section ip access-list → copy ra text editor
Test bằng ACL simulationPacket Tracer / GNS3 / EVE-NG trước khi deploy
Common mistakes
Deny trước permitViết deny quá rộng trước permit cụ thể → chặn nhầm traffic hợp lệ
Quên return trafficCho phép TCP outbound nhưng quên established → không có response
Xóa ACL khi đang gánXóa numbered ACL trong khi đang gán vào interface → implicit deny all
Áp sai directionNhầm in/out → ACL không có tác dụng hoặc chặn sai
Reflexive ACL limitations: Không track UDP/ICMP state tốt như TCP. Không hiểu FTP passive mode (cần CBAC hoặc ZBF). Không chống được application-layer attacks. Với mạng production hiện đại → dùng Zone-Based Firewall (ZBF) hoặc dedicated firewall (ASA, FTD).
IPv6 ACL — Cú pháp & Khác biệt
Khác biệt với IPv4 ACL
Named onlyIPv6 ACL không có numbered — chỉ named
Prefix thay wildcardDùng prefix length (/64) thay vì wildcard mask
Implicit permit NDPIPv6 ACL tự động permit NDP (ND, NA, RS, RA) — không chặn
ipv6 access-listKeyword bắt đầu bằng ipv6 thay vì ip
ipv6 traffic-filterGán vào interface bằng ipv6 traffic-filter thay vì ip access-group
Cú pháp tạo IPv6 ACL
ipv6 access-list IPV6_FILTERTạo IPv6 named ACL
permit tcp 2001:db8:1::/64 any eq 80Permit HTTP từ subnet /64
permit tcp 2001:db8:1::/64 any eq 443Permit HTTPS
permit ipv6 2001:db8::/32 anyPermit tất cả IPv6 từ prefix /32
permit tcp any any establishedReturn traffic TCP
deny ipv6 any any logDeny tất cả còn lại
Gán vào interface
int gi0/0 ipv6 traffic-filter IPV6_FILTER inÁp IPv6 ACL vào interface inbound
int gi0/1 ipv6 traffic-filter IPV6_FILTER outÁp IPv6 ACL outbound
line vty 0 15 ipv6 access-class IPV6_FILTER inÁp vào VTY cho IPv6 management
IPv6 ACL — Ví dụ & Kiểm tra
IPv6 địa chỉ đặc biệt trong ACL
any= ::/0 — tất cả địa chỉ IPv6
host 2001:db8::1Chính xác 1 địa chỉ IPv6 (/128)
2001:db8::/32Prefix /32 — không cần wildcard
fe80::/10Link-local range
ff00::/8Multicast range IPv6
NDP implicit permit (tự động có)
permit icmp any any nd-naNeighbor Advertisement (tự động)
permit icmp any any nd-nsNeighbor Solicitation (tự động)
permit icmp any any router-advertisementRouter Advertisement (tự động)
Kiểm tra IPv6 ACL
show ipv6 access-listXem tất cả IPv6 ACL + hit counter
show ipv6 access-list IPV6_FILTERXem ACL cụ thể
show ipv6 interface gi0/0ACL đang gán vào interface
clear ipv6 access-list countersReset hit counter
debug ipv6 packetDebug IPv6 packet processing
Ví dụ IPv6 Firewall ACL
ipv6 access-list IPV6_FIREWALL remark Web traffic from internal network 10 permit tcp 2001:db8:1::/64 any eq 80 20 permit tcp 2001:db8:1::/64 any eq 443 30 permit udp 2001:db8:1::/64 any eq 53 remark Return traffic 40 permit tcp any any established remark ICMPv6 needed for IPv6 to function 50 permit icmp any any echo-request 60 permit icmp any any echo-reply remark Deny all else 70 deny ipv6 any any log ! int gi0/0 ipv6 traffic-filter IPV6_FIREWALL in
IPv6 ACL không có numbered — phải dùng named. NDP (Neighbor Discovery) không bị ảnh hưởng bởi implicit deny — IOS tự thêm permit NDP. Tuy nhiên ICMPv6 echo cần permit thủ công nếu muốn ping. Dual-stack router cần cả IPv4 ACL và IPv6 ACL riêng biệt.
Show Commands — Kiểm tra ACL
Xem ACL
show access-listsTất cả ACL (IPv4 + IPv6) với hit counter
show access-lists 100Numbered ACL 100 cụ thể
show access-lists FIREWALLNamed ACL FIREWALL cụ thể
show ip access-listsChỉ IPv4 ACL
show ipv6 access-listChỉ IPv6 ACL
Xem ACL gán vào interface
show ip interface gi0/0ACL inbound/outbound trên interface cụ thể
show ip interface gi0/0 | include accessLọc chỉ dòng ACL
show running-config | section access-listTất cả numbered ACL trong config
show running-config | section ip access-listTất cả named ACL trong config
show running-config | include access-classACL gán vào VTY/console
Hit counter & statistics
show access-listsXem matches count: 10 permit ... (25 matches)
clear ip access-list countersReset tất cả hit counter
clear ip access-list counters FIREWALLReset counter của 1 ACL cụ thể
Time-range verification
show time-rangeTrạng thái time-range: active / inactive
show clock detailThời gian router + NTP sync status
Debug ACL — Troubleshooting
Debug commands
debug ip packet detailNGUY HIỂM — debug tất cả packet, CPU cao trên production
debug ip packet 101 detailChỉ debug packet khớp ACL 101 — an toàn hơn
debug ip packet 101Debug không chi tiết — ít tốn CPU hơn
debug ip access-list FIREWALLDebug ACL cụ thể khi match
undebug all / no debug allBắt buộc tắt debug ngay sau khi xong
terminal monitorHiển thị debug output ra VTY session
terminal no monitorTắt debug trên VTY
Checklist troubleshoot ACL không hoạt động
1. ACL có gán chưa?show ip interface gi0/0 → xem Inbound/Outbound access list
2. Gán đúng direction?In hay out? Kiểm tra logic traffic flow
3. Đúng interface?Traffic đi qua interface nào? Trace traffic path
4. Sequence đúng?Entry deny có ở trước permit rộng hơn không?
5. Hit counter tăng?show access-lists → kiểm tra entry nào được match
6. Implicit deny?Có ít nhất 1 permit entry không? Không có = deny all
7. NAT conflict?ACL với NAT — thứ tự xử lý quan trọng (NAT trước ACL với inbound)
Thứ tự xử lý — ACL với NAT & Routing
Inbound packet → Router
1Inbound ACL kiểm tra (ip access-group in)
2Routing table lookup (xác định outbound interface)
3NAT inside-to-outside translation (nếu có)
4Outbound ACL kiểm tra (ip access-group out)
5Gửi ra outbound interface
Ý nghĩa với NAT
ACL inbound + NATACL thấy địa chỉ trước NAT (private IP). Dùng private IP trong ACL inbound
ACL outbound + NATACL thấy địa chỉ sau NAT (public IP). Dùng public IP trong ACL outbound
Ví dụ tránh nhầm lẫn
Inbound gi0/0 (LAN)Source là 192.168.1.x (private) — chưa NAT
Outbound gi0/1 (WAN)Source là 203.0.113.x (public) — đã NAT
Quick Reference — Tóm tắt lệnh quan trọng
Tạo ACL
access-list 10 permit ...Standard numbered
access-list 100 permit tcp ...Extended numbered
ip access-list standard NAMEStandard named
ip access-list extended NAMEExtended named khuyến nghị
ipv6 access-list NAMEIPv6 named ACL
Gán ACL
ip access-group NAME in/outGán vào IPv4 interface
ipv6 traffic-filter NAME in/outGán vào IPv6 interface
access-class NAME inGán vào VTY/console line
Xóa ACL
no access-list 100Xóa toàn bộ numbered ACL 100
no ip access-list extended FIREWALLXóa toàn bộ named ACL
ip access-list extended FIREWALL / no 30Xóa entry seq 30 của named ACL
Kiểm tra
show access-listsTất cả ACL + matches
show ip interface gi0/0ACL gán vào interface
clear ip access-list countersReset hit counter
Production safety: Khi sửa ACL trên thiết bị đang hoạt động — luôn giữ 1 phiên console đang mở. Numbered ACL: xóa + viết lại trong 1 thao tác copy-paste (không từng dòng). Có thể dùng kron để schedule tự động xóa ACL sau X phút nếu không xác nhận — tránh tự khóa mình.

Nhận xét