11.NACLs
🛡️ Network ACL (NACL) trên AWS: Lý thuyết & thực chiến cho người mới (Đủ thi cert & đi làm)¶
PHẦN 1: Network ACL (NACL) là gì?¶
Định nghĩa cơ bản¶
- Network Access Control List (NACL) = firewall truyền thống ở cấp subnet trong AWS VPC
- Associate với subnet, không phải với instance
- Stateless firewall (không nhớ trạng thái kết nối)
- Filter traffic khi đi qua biên giới subnet (vào/ra subnet)
Điểm quan trọng cần nhớ¶
- ✅ Traffic vào/ra subnet: Bị NACL kiểm soát
- ❌ Traffic giữa các instance trong cùng subnet: KHÔNG bị NACL kiểm soát
- 🔄 Cần 2 rule cho 1 kết nối: Inbound rule + Outbound rule (vì stateless)
PHẦN 2: Cách NACL hoạt động (Cực quan trọng)¶
Cấu trúc rule trong NACL¶
NACL Rules Structure:
Inbound Rules: # Traffic vào subnet
- Rule #100: Allow TCP 443 from 0.0.0.0/0
- Rule #200: Allow TCP 80 from 0.0.0.0/0
- Rule #*: DENY all (implicit deny)
Outbound Rules: # Traffic ra khỏi subnet
- Rule #100: Allow TCP 1024-65535 to 0.0.0.0/0
- Rule #*: DENY all (implicit deny)
Rule processing logic¶
- NACL xác định: Dùng inbound hay outbound rule set
- Process theo thứ tự: Rule number thấp nhất trước (100 → 200 → 300...)
- First match wins: Gặp rule khớp đầu tiên → apply → dừng
- Implicit deny (*): Nếu không match rule nào → deny
Critical: Rule 100 DENY sẽ block ngay, dù rule 200 ALLOW cùng traffic!
PHẦN 3: Vì sao NACL phức tạp? (Stateless Problems)¶
Ví dụ thực tế: Web server nhận HTTPS¶
🌐 User (Bob) → Web Server (HTTPS):
Request:
Bob:random_port → Server:443 (inbound to subnet)
Response:
Server:443 → Bob:random_port (outbound from subnet)
Required NACL Rules:
Inbound: Allow TCP 443 from 0.0.0.0/0 # Cho request
Outbound: Allow TCP 1024-65535 to 0.0.0.0/0 # Cho response (ephemeral)
Multi-tier architecture nightmare¶
🏗️ Kiến trúc: Bob → Web Subnet → App Subnet
Cần rules:
1. Bob → Web:
- Web subnet inbound: Allow 443
- Web subnet outbound: Allow ephemeral
2. Web → App:
- Web subnet outbound: Allow app_port
- App subnet inbound: Allow app_port
- App subnet outbound: Allow ephemeral
- Web subnet inbound: Allow ephemeral
Kết quả: 1 kết nối end-to-end = 6 rules! 😵
Vấn đề ephemeral port¶
- Response luôn dùng ephemeral port (1024-65535)
- NACL phải allow cả dải (kém bảo mật)
- Không biết trước port nào → mở rộng
PHẦN 4: Default NACL vs Custom NACL¶
Default NACL (khi tạo VPC)¶
✅ Default NACL behavior:
- Auto tạo cùng VPC
- Inbound: Allow all (Rule #100: 0.0.0.0/0)
- Outbound: Allow all (Rule #100: 0.0.0.0/0)
- Net effect: Không block gì cả
- Beginner-friendly
Custom NACL (tự tạo)¶
❌ Custom NACL behavior:
- Tạo riêng cho VPC
- Ban đầu: chỉ có implicit deny (*)
- Associate với subnet → block ALL traffic
- Phải tự add allow rules
- Khá nguy hiểm nếu không cẩn thận!
PHẦN 5: NACL Key Characteristics (Cần thuộc lòng)¶
Core Properties¶
- Stateless: Request & response cần rule riêng
- Subnet-level: 1 subnet = 1 NACL, 1 NACL = nhiều subnet
- Ordered processing: Rule number thứ tự xử lý
- Allow & Deny: Có thể explicit allow + explicit deny
- Protocol/Port/IP based: Không reference logical AWS resources
Use Cases thực tế¶
✅ NACL tốt cho:
- Block specific malicious IPs/ranges
- Compliance requirements (explicit deny)
- Network-level security (defense in depth)
- Backup security layer
❌ NACL không tốt cho:
- Primary security control (dùng Security Group)
- Complex application rules
- Dynamic resources (Auto Scaling...)
PHẦN 6: NACL vs Security Group (So sánh cực quan trọng)¶
Aspect | NACL | Security Group |
---|---|---|
Level | Subnet | Instance/ENI |
State | Stateless | Stateful |
Rules needed | 2 (inbound + outbound) | 1 (auto allow response) |
Allow/Deny | Both | Allow only |
Processing | Ordered (first match) | All rules evaluated |
Default behavior | Allow all (default NACL) | Deny all |
Use case | Block bad actors | Primary access control |
PHẦN 7: Best Practices & Real-world Tips¶
Thực tế khi đi làm¶
🔧 Production practices:
- Dùng Security Group làm primary security
- Dùng NACL để block malicious IPs
- Giữ NACL rules đơn giản, ít rule
- Document rule numbers & purposes
- Test carefully trước khi apply production
Common Mistakes¶
- Quên rule cho response (ephemeral ports)
- Rule ordering sai (deny trước allow)
- Associate custom NACL mà chưa có allow rules
- Quên subnet boundary behavior
PHẦN 8: Checklist kiến thức thi cert & phỏng vấn¶
- [x] NACL là stateless, cần 2 rule/kết nối
- [x] Process theo rule number order, first match wins
- [x] 1 subnet = 1 NACL, 1 NACL = nhiều subnet
- [x] Default NACL allow all, custom NACL deny all
- [x] Chỉ filter traffic cross subnet boundary
- [x] Có thể explicit deny (khác Security Group)
- [x] Không reference AWS logical resources
Câu hỏi exam thường gặp¶
- "EC2 trong subnet không access được Internet, có thể do NACL?"
- "Muốn block specific IP range, dùng NACL hay Security Group?"
- "Custom NACL associate với subnet, traffic bị block hết. Tại sao?"
- "NACL rule 100 DENY, rule 200 ALLOW cùng traffic. Kết quả?"
PHẦN 9: Tổng kết & takeaways¶
- NACL = subnet-level stateless firewall
- Phức tạp để setup đúng → chỉ dùng khi cần thiết
- Combination với Security Group = defense in depth
- Primary use: Block bad actors, compliance
- Rule ordering matters! Deny trước có thể block allow sau
Ghi nhớ: NACL là tool mạnh nhưng phức tạp. Trong thực tế, Security Group đơn giản và hiệu quả hơn cho hầu hết use case. NACL dùng khi cần explicit deny specific IPs/ranges!
Đọc lại bài này trước khi design VPC security hoặc chuẩn bị thi AWS SAA!