NACLs (Network Access Control Lists)

New words
- precedence/ˈpres.ə.dens/: Sự ưu tiên
NACL
- NACLs (Network Access Control Lists) giống như một tường lửa kiểm soát lưu lượng mạng đến và đi từ subnet trong một VPC.
- Mỗi subnet chỉ có thể gắn với một NACL, và ngược lại một NACL có thể gắn cho nhiều Subnet, và khi bạn tạo subnet mới, nó sẽ tự động gắn với Default NACL.
Bạn có thể định nghĩa các luật (rules) cho NACL như sau:
- Các rule có số thứ tự từ 1 đến 32766.
- Số nhỏ hơn có mức ưu tiên cao hơn.
- Rule đầu tiên khớp với gói tin sẽ quyết định hành động.
- Tức là, gói tin sẽ bị xử lý theo rule đầu tiên phù hợp, bất kể phía sau có rule khác.
- NACL là phương án tốt để block các địa chỉ IP ở cấp độ subnet
Ví dụ:
#100 ALLOW 10.0.0.10/32#200 DENY 10.0.0.10/32→ Địa chỉ IP10.0.0.10được phép vì rule #100 có ưu tiên cao hơn rule #200.- Rule có dấu sao
(*), chỉ số cuối cùng, thường là DENY để chặn nếu không có rule nào khớp. - AWS khuyến nghị bạn nên đánh số các rule cách nhau 100 đơn vị để dễ chèn thêm sau này (ví dụ: 100, 200, 300...).
Default NACL
- Chấp nhận tất cả trafic inbound/outbound đối với các subnet mà nó được liên kết.
- KHÔNG nên chỉnh sửa Default NACL, thay vào đó hãy tạo custom NACL

Ephemeral Ports
- Ephemeral port là cổng tạm thời được hệ điều hành tự động cấp phát cho một client khi khởi tạo kết nối TCP hoặc UDP.
- Để hai đầu mối (endpoint) có thể thiết lập kết nối, chúng phải sử dụng các cổng (ports).
- Client sẽ kết nối đến một cổng cố định (defined port) và mong đợi phản hồi từ một cổng tạm thời (ephemeral port).
- Hệ điều hành khác nhau sử dụng các khoảng cổng khác nhau, ví dụ:
- IANA & Windows 10 ➜ 49152 – 65535
- Nhiều bản Linux kernel ➜ 32768 – 60999
- Khi một client gửi yêu cầu đến một server (máy chủ), nó dùng cổng cố định của server (ví dụ: 443 cho HTTPS), nhưng phía client sẽ dùng một cổng tạm thời (ephemeral port) để đánh dấu kết nối đó.
- Sau khi kết thúc phiên làm việc, ephemeral port sẽ được giải phóng và có thể tái sử dụng cho phiên khác.

Tại sao phải dùng ephemeral port?
1.Phân biệt nhiều kết nối
- Một client có thể mở nhiều kết nối cùng lúc đến cùng 1 server (hoặc nhiều server).
- Nhờ ephemeral port khác nhau, hệ điều hành có thể quản lý và phân biệt các kết nối riêng biệt.
- Ví dụ:
| Local IP | Local Port | Remote IP | Remote Port |
|---|---|---|---|
| 10.0.0.5 | 50100 | 10.0.1.5 | 3306 |
| 10.0.0.5 | 50101 | 10.0.1.5 | 3306 |
👉 Dù đến cùng 1 DB, chúng là 2 kết nối hoàn toàn độc lập.
2.Tự động hóa từ OS và tăng tính bảo mật
- Khi client app gọi đến một server (DB, API...), nó không cần tự chọn port.
- OS sẽ tự động chọn một cổng rảnh trong range ephemeral, không trùng với cổng đang dùng.
- Điều này đơn giản hóa quá trình kết nối và tăng bảo mật (do port là random, khó đoán hơn).
NACL với Ephemeral Ports

Web-NACL
✅ Cho phép Outbound TCP
Cổng: 3306
Đến: CIDR của DB Subnet
→ Client được phép gửi request đến DB trên cổng 3306 (cổng mặc định của MySQL).
✅ Cho phép Inbound TCP
Cổng: 1024–65535
Từ: CIDR của DB Subnet
→ Máy client có thể nhận phản hồi từ DB qua các cổng ephemeral.
DB-NACL
✅ Cho phép Inbound TCP
Cổng: 3306
Từ: CIDR của Web Subnet
→ Cho phép DB nhận kết nối đến cổng 3306 từ client.
✅ Cho phép Outbound TCP
Cổng: 1024–65535
Đến: CIDR của Web Subnet
→ DB được phép trả dữ liệu về qua các cổng ephemeral của client.
- Ephemeral Port là cổng ngẫu nhiên, thường nằm trong khoảng
1024–65535, được cấp tự động cho client khi khởi tạo kết nối. - NACL (Network Access Control List) là một lớp bảo mật cấp subnet, hoạt động như firewall stateless, nghĩa là bạn cần cấu hình cả inbound và outbound rõ ràng cho từng hướng đi.
Security Group và NACLs

Security Group (SG)
- Là stateful (có trạng thái).
- Nếu bạn cho phép inbound, thì outbound tương ứng của request đó được tự động cho phép, và ngược lại.
- Áp dụng ở cấp độ instance (ví dụ như EC2).
NACL (Network ACL)
- Là stateless (không có trạng thái).
- Nếu bạn cho phép inbound, bạn phải chỉ rõ ra cho phép outbound tương ứng (và ngược lại).
- Áp dụng ở cấp độ subnet.
Incoming Request
- Gói tin từ Internet đi vào NACL Inbound Rules.
- Nếu NACL không cho phép, gói tin bị chặn ngay từ đầu.
- Sau khi vượt qua NACL, gói tin tới Security Group Inbound Rules.
- Nếu SG không cho phép, gói tin cũng sẽ bị chặn ở đây.
- Sau khi vào EC2, EC2 có thể trả lời lại gói tin.
- Vì SG là stateful, nên khi đã cho phép inbound, thì outbound response được tự động cho phép.
- Tuy nhiên, NACL là stateless nên bạn phải mở NACL Outbound Rules để phản hồi ra ngoài.
Outgoing Request
- Gói tin từ EC2 đi ra, đầu tiên đi qua SG Outbound Rules.
- Nếu không được phép, gói tin bị chặn.
- Nếu SG cho phép, nó sẽ tiếp tục qua NACL Outbound Rules.
- Nếu NACL không cho phép, bị chặn tại đây.
- Khi hệ thống bên ngoài phản hồi lại, gói phản hồi sẽ đi qua NACL Inbound Rules trước.
- Vì NACL là stateless, bạn phải cấu hình rõ ràng cả Inbound cho phản hồi.
- Sau đó gói mới đến được SG Inbound Rules, và vì SG là stateful nên phản hồi được cho phép.
So sánh
| 🔒 Security Group | 🚧 NACL (Network ACL) |
|---|---|
| Áp dụng ở cấp độ instance | Áp dụng ở cấp độ subnet |
| Chỉ hỗ trợ các rule cho phép (allow) | Hỗ trợ cả rule cho phép (allow) và từ chối (deny) |
| Có trạng thái (Stateful): lưu lượng trả về được tự động cho phép, bất kể các rule là gì | Không có trạng thái (Stateless): lưu lượng trả về phải được cho phép rõ ràng bằng rule |
| Tất cả các rule được đánh giá trước khi quyết định cho phép lưu lượng | Các rule được đánh giá theo thứ tự (từ nhỏ đến lớn), khớp đầu tiên sẽ quyết định |
| Áp dụng cho từng EC2 instance khi được gán bởi người dùng | Tự động áp dụng cho tất cả EC2 instance nằm trong subnet được gán với NACL đó |
Bạn thấy bài này thế nào?