Security Groups & NACLs
Trong Amazon VPC, Security Groups và Network Access Control Lists (NACLs) là các công cụ quản lý truy cập mạng cho các tài nguyên của Amazon Web Services (AWS).
Security Groups là bộ lọc truy cập mạng cho EC2 instances hoặc các dịch vụ khác trong Amazon VPC. Mỗi Security Group được liên kết với một hoặc nhiều EC2 instances hoặc dịch vụ, và quy định các quy tắc cho phép hay từ chối truy cập mạng đến các tài nguyên này. Các quy tắc này được áp dụng cho cả incoming requests (yêu cầu đến) và outgoing requests (yêu cầu đi) của các tài nguyên này.
NACLs là các tập luật kiểm soát truy cập mạng ở mức subnet cho Amazon VPC. Mỗi subnet có thể liên kết với một NACL, và quy định các quy tắc cho phép hay từ chối truy cập đến subnet này. Tuy nhiên, NACLs chỉ được áp dụng cho các incoming requests (yêu cầu đến) của các tài nguyên trong subnet này, và không áp dụng cho outgoing requests (yêu cầu đi).
Ví dụ, nếu bạn muốn cho phép truy cập đến một EC2 instance thông qua HTTP, bạn có thể tạo một Security Group và thêm một quy tắc cho phép incoming requests trên cổng 80 (HTTP). Nếu bạn muốn chỉ cho phép các EC2 instances trong cùng subnet truy cập đến nhau, bạn có thể tạo một NACL và thêm một quy tắc cho phép incoming requests từ các IP của subnet này.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.17.17.jpg)
Incoming Request
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.17.37.jpg)
Outgoing Request
Network Access Control List (NACL)
Network Access Control List (NACL) là một công cụ quản lý lưu lượng mạng tương tự như firewall, được sử dụng để điều khiển lưu lượng đi và đến từ các subnet. Mỗi subnet sẽ được gán một NACL mặc định, và bạn có thể định nghĩa các quy tắc trong NACL.
Mỗi quy tắc sẽ có một số duy nhất (từ 1 đến 32766) và được xác định bởi mức độ ưu tiên (càng thấp thì ưu tiên càng cao). Quy tắc đầu tiên được khớp sẽ ảnh hưởng đến quyết định. Ví dụ, nếu bạn định nghĩa #100 ALLOW 10.0.0.10/32 và #200 DENY 10.0.0.10/32, địa chỉ IP sẽ được phép truy cập vì quy tắc #100 có độ ưu tiên cao hơn quy tắc #200. Quy tắc cuối cùng là một ký tự (*) và từ chối một yêu cầu nếu không có quy tắc nào khớp với yêu cầu đó.
Khi tạo mới NACL, nó sẽ từ chối tất cả các yêu cầu. Do đó, bạn cần định nghĩa các quy tắc cho phép các yêu cầu được chấp nhận. AWS khuyến khích định nghĩa các quy tắc với các số lượng được tăng lên theo bước 100.
Với NACL, bạn có thể chặn các địa chỉ IP cụ thể tại mức subnet, làm cho NACL trở thành một công cụ hữu ích trong việc quản lý lưu lượng mạng.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.21.30-1024x500.jpg)
Sơ đồ mô tả NACLs
Default NACL
Default NACL là một Access Control List mặc định được tạo sẵn khi tạo một Subnet mới trong Amazon VPC. Nó được gán tự động cho tất cả các Subnet mới được tạo. Default NACL cho phép tất cả các traffic (traffic inbound và outbound) đi qua mà không có bất kỳ giới hạn hay hạn chế gì. Tuy nhiên, nếu muốn áp dụng các quy tắc điều khiển truy cập riêng cho từng Subnet, ta nên tạo một NACL tùy chỉnh (custom NACL) và gán cho Subnet đó thay vì sử dụng Default NACL. AWS khuyến khích không sửa đổi Default NACL mà thay vào đó nên tạo các NACL tùy chỉnh để kiểm soát việc truy cập mạng của các tài nguyên của mình.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.22.45-1024x332.jpg)
Mặc định, mỗi VPC trong AWS được tạo ra sẽ có một NACL mặc định, được gọi là “Default NACL”. NACL này sẽ được gán cho tất cả các subnet được tạo ra trong VPC đó mà không có NACL được chỉ định.
Nếu một subnet không được gán NACL tùy chỉnh, các luật của Default NACL sẽ được áp dụng cho các kết nối đến và từ subnet đó. Mặc định, NACL mặc định cho phép tất cả các kết nối inbound và outbound vào trong subnet, điều này có nghĩa là các kết nối vào và ra khỏi subnet đó được chấp nhận, bao gồm tất cả các loại traffic và protocol.
Tuy nhiên, không nên sửa đổi Default NACL trực tiếp. Thay vào đó, nên tạo ra NACL tùy chỉnh và gán chúng cho các subnet cụ thể trong VPC. Việc sử dụng các NACL tùy chỉnh sẽ giúp tăng cường bảo mật và kiểm soát các kết nối vào và ra khỏi các subnet cụ thể.
Ephemeral Ports
Ephemeral Ports là các cổng được sử dụng trong quá trình thiết lập kết nối giữa hai thiết bị. Trong đó, client sẽ kết nối tới một cổng đã định sẵn và mong đợi nhận được phản hồi từ một cổng tạm thời (ephemeral port).
Các hệ điều hành khác nhau sẽ sử dụng các phạm vi cổng khác nhau cho các cổng tạm thời này. Ví dụ, các máy tính chạy hệ điều hành Windows 10 hoặc the Internet Assigned Numbers Authority (IANA) sử dụng các cổng từ 49152 đến 65535. Trong khi đó, nhiều phiên bản của hệ điều hành Linux sử dụng các cổng từ 32768 đến 60999.
Quá trình sử dụng Ephemeral Ports là quan trọng trong việc thiết lập kết nối truyền thông giữa các thiết bị trong mạng và các ứng dụng phức tạp.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.24.06-1024x263.jpg)
NACL with Ephemeral Ports
Nếu một NACL được cấu hình để chặn các cổng ephermal (như cổng đầu vào trong khoảng 1024-65535), nó có thể gây ra vấn đề cho các kết nối đang được thiết lập giữa các máy chủ. Khi một máy tính A kết nối đến máy tính B thông qua một cổng đặc biệt trên B, thì cổng đích trên B sẽ được sử dụng để phản hồi yêu cầu. Điều này có nghĩa là các kết nối tạm thời có thể sử dụng các cổng đầu vào ngẫu nhiên lớn hơn 1024 để thiết lập kết nối.
Nếu một NACL được cấu hình để chặn các cổng ephermal đầu vào, điều này sẽ khiến cho các kết nối không hoạt động được. Do đó, nếu cần thiết, ta nên cấu hình các luật NACL để cho phép lưu lượng truy cập các cổng tạm thời đầu vào của các kết nối này
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.25.11-1024x481.jpg)
Create NACL rules for each target subnets CIDR
Trong mạng Amazon VPC, Network Access Control List (NACL) được sử dụng để kiểm soát lưu lượng truy cập vào và ra khỏi các subnet. Để tạo ra các quy tắc cho NACL, ta có thể sử dụng CIDR của các subnet đích để áp dụng các quy tắc cho từng subnet riêng lẻ.
Các quy tắc được áp dụng theo thứ tự độ ưu tiên từ thấp đến cao. Nếu một luồng truy cập không khớp với bất kỳ quy tắc nào, nó sẽ bị từ chối mặc định. Mỗi quy tắc có thể cho phép hoặc từ chối một loại lưu lượng cụ thể, bao gồm các giao thức như TCP, UDP hoặc ICMP.
Ngoài ra, để giải quyết vấn đề về ephemeral port trong NACL, ta có thể thiết lập quy tắc cho phép các ephemeral port tương ứng với các lưu lượng truy cập từ các subnet đích. Ví dụ, để cho phép lưu lượng truy cập từ subnet A đến subnet B, ta có thể tạo các quy tắc cho phép lưu lượng truy cập TCP đi ra từ subnet A tới subnet B trên các ephemeral port có giá trị từ 32768 đến 60999. Tương tự, ta có thể thiết lập quy tắc cho phép lưu lượng truy cập từ subnet B đến subnet A trên các ephemeral port tương ứng.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.25.57-1024x450.jpg)
Security Group vs. NACLs
Security Group (SG) và Network Access Control List (NACL) đều là các phương tiện để kiểm soát traffic trong một môi trường VPC. Tuy nhiên, chúng có những điểm khác nhau sau:
- Security Group: Là kiểu kiểm soát traffic tại instance level. Mỗi instance sẽ được gán một SG riêng. SG hỗ trợ các rule cho phép traffic đi qua (allow rules) và không hỗ trợ các rule từ chối traffic (deny rules). SG là kiểu stateful, có nghĩa là các gói tin trả về sẽ tự động được phép đi qua, bất kể có rule hay không. Tất cả các rule của SG sẽ được áp dụng trước khi quyết định cho phép traffic đi qua instance.
- NACL: Là kiểu kiểm soát traffic tại subnet level. Mỗi subnet sẽ được gán một NACL mặc định. NACL hỗ trợ các rule cho phép traffic đi qua (allow rules) và từ chối traffic (deny rules). NACL là kiểu stateless, có nghĩa là các gói tin trả về phải được phép đi qua một cách rõ ràng, thông qua các rule riêng biệt. Các rule của NACL sẽ được áp dụng theo thứ tự từ thấp đến cao khi quyết định cho phép traffic đi qua subnet.
![](https://wiki.hoanghd.com/wp-content/uploads/2023/04/CleanShot-2023-04-11-at-13.26.46-1024x406.jpg)
Tóm lại, SG kiểm soát traffic theo instance level và hỗ trợ các rule allow, còn NACL kiểm soát traffic theo subnet level và hỗ trợ các rule allow và deny. SG là kiểu stateful, còn NACL là kiểu stateless.