NACLs (Network Access Control Lists)

5 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

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ỉ IP 10.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ụ:
  1. IANA & Windows 10 ➜ 49152 – 65535
  2. 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 IPLocal PortRemote IPRemote Port
10.0.0.55010010.0.1.53306
10.0.0.55010110.0.1.53306

👉 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ượngCá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ùngTự độ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?