Tuần 4 - Ngày 3: Security Groups và NACLs
Mục tiêu học tập
- Hiểu sự khác biệt SG vs NACL
- Nắm Stateful vs Stateless behavior
- Biết khi nào dùng SG vs NACL
- Hiểu Flow Logs để debug network
1. Security Groups (SG)
Định nghĩa
Security Group = virtual firewall ở instance/ENI level.
Đặc điểm
- Stateful: response traffic tự động được allow
- Allow rules only (không có Deny rule)
- Mặc định:
- Inbound: deny all
- Outbound: allow all
- Apply vào: ENI (EC2, ALB, RDS, ElastiCache, Lambda VPC...)
- Tối đa 5 SG/ENI
- Tối đa 60 inbound + 60 outbound rules/SG
- Có thể tham chiếu SG khác hoặc CIDR làm source/destination
Rule Components
Reference SG (best practice)
SG-Web (web servers):
Inbound: HTTP/HTTPS from 0.0.0.0/0
Outbound: ALL to 0.0.0.0/0
SG-App (app servers):
Inbound: TCP 8080 from SG-Web ← reference!
Outbound: ALL
SG-DB (database):
Inbound: TCP 3306 from SG-App ← reference!
Outbound: ALL
→ Khi scale ASG, không cần update CIDR — chỉ cần đảm bảo instance ở SG đúng.
Stateful behavior
Inbound rule: Allow port 80 from 0.0.0.0/0
↓
Request đến → ALLOWED
Response ra → AUTO-ALLOWED (không cần outbound rule cho ephemeral port)
2. Network ACLs (NACL)
Định nghĩa
NACL = stateless firewall ở subnet level.
Đặc điểm
- Stateless: response traffic cần explicit rule
- Allow AND Deny rules
- Apply vào subnet (1 NACL per subnet, 1 subnet 1 NACL)
- Mặc định default NACL: allow all inbound + outbound
- Custom NACL: deny all mặc định
- Rules evaluate theo thứ tự rule number (thấp → cao)
- First match wins → stop evaluation
Rule Components
Stateless implication
- Phải allow ephemeral ports ở outbound (cho response client → server)
- Phải allow ephemeral ports ở inbound (cho response server → client)
- Easy to misconfigure → cẩn thận!
Ephemeral Ports
Linux kernel: 32768-65535
Windows: 49152-65535
NAT Gateway: 1024-65535
→ Best practice: allow 1024-65535 cho ephemeral
3. So sánh SG vs NACL
| Feature | Security Group | NACL |
|---|---|---|
| Level | Instance (ENI) | Subnet |
| State | Stateful | Stateless |
| Rules | Allow only | Allow + Deny |
| Default | Deny all inbound, allow all outbound | Allow all (default NACL) / Deny all (custom NACL) |
| Evaluation | All rules | By rule number, first match wins |
| Use | App-level firewall | Backup defense, IP blocking |
| Limit | 60 rules/SG | 20 rules/NACL (soft, max 40) |
| Reference | Có thể ref SG khác | Chỉ CIDR |
Workflow của traffic
Inbound packet:
Internet → IGW → NACL (subnet) → SG (instance) → EC2
Outbound packet:
EC2 → SG → NACL → IGW → Internet
→ Packet phải pass CẢ NACL VÀ SG để đến đích.
4. Khi nào dùng SG vs NACL?
SG (default cho hầu hết use case)
- Application-level security
- Khi cần reference giữa các SG (cleaner)
- Stateful → đơn giản hơn
NACL (additional defense)
- Block specific IP (SG không Deny được)
- Subnet-level rules áp dụng nhiều instance
- Compliance requirement (defense in depth)
Ví dụ kết hợp
NACL:
- Block known malicious IP (ví dụ: 1.2.3.4)
- Allow tất cả traffic khác
SG:
- Allow HTTP/HTTPS from 0.0.0.0/0
- Allow SSH from corporate CIDR
- Deny others (implicit)
5. Default vs Custom Setup
Default VPC defaults
- Default SG: allow all inbound from same SG, allow all outbound
- Default NACL: allow all inbound + outbound
Custom VPC defaults
- New SG: deny all inbound, allow all outbound
- Custom NACL: deny all inbound + outbound (phải explicitly add allow rules)
Cẩn thận: tạo custom NACL mà quên allow rule → block hết traffic!
6. Cross-Region Security Group Reference
Limitations
- Cùng region: SG có thể reference SG ID của VPC khác (qua peering)
- Cross-region: KHÔNG reference SG ID, chỉ dùng CIDR
7. Common Port Reference
| Service | Port | Protocol |
|---|---|---|
| HTTP | 80 | TCP |
| HTTPS | 443 | TCP |
| SSH | 22 | TCP |
| RDP | 3389 | TCP |
| FTP | 21 | TCP |
| SFTP | 22 | TCP |
| SMTP | 25, 587 | TCP |
| DNS | 53 | TCP/UDP |
| MySQL/Aurora | 3306 | TCP |
| PostgreSQL | 5432 | TCP |
| Microsoft SQL Server | 1433 | TCP |
| Oracle | 1521 | TCP |
| Redis | 6379 | TCP |
| Memcached | 11211 | TCP |
| MongoDB | 27017 | TCP |
| NFS (EFS) | 2049 | TCP |
| ICMP | — | ICMP |
8. VPC Flow Logs
Định nghĩa
Flow Logs capture IP traffic information flowing thông qua ENIs.
3 levels
- VPC level: tất cả ENIs trong VPC
- Subnet level: tất cả ENIs trong subnet
- ENI level: 1 specific ENI
Destinations
- CloudWatch Logs
- S3 bucket
- Amazon Data Firehose (cũ: Kinesis Data Firehose) → forward đến destinations khác
Flow Log Record Format
<version> <account-id> <interface-id> <srcaddr> <dstaddr>
<srcport> <dstport> <protocol> <packets> <bytes>
<start> <end> <action> <log-status>
Ví dụ record
2 111111111111 eni-1234 10.0.1.5 8.8.8.8 32768 53 17 1 64 1432917027 1432917087 ACCEPT OK
2 111111111111 eni-1234 192.168.1.1 10.0.1.5 12345 22 6 1 60 1432917027 1432917087 REJECT OK
Decode:
srcaddr: 192.168.1.1 (attempting SSH)dstport: 22action: REJECT (blocked by SG/NACL)
Custom Format (extended)
- Có thể add fields:
pkt-srcaddr,pkt-dstaddr,traffic-path,tcp-flags,vpc-id,subnet-id... - Useful cho debugging complex routing
Use cases
- Debug connectivity issue (REJECT records)
- Security audit (who connected to what)
- Compliance logging
- Network anomaly detection
Flow Logs không capture
- Traffic to Amazon DNS server (default DNS)
- DHCP traffic
- Traffic to default VPC router
- Traffic to/from default Reserved IPs (network/broadcast)
- Mirror traffic (use VPC Traffic Mirroring)
9. VPC Traffic Mirroring (Brief)
Định nghĩa
Traffic Mirroring = copy network traffic từ ENI sang destination (security appliance, IDS).
Đặc điểm
- Capture full packet (không như Flow Logs chỉ metadata)
- Send sang ENI/NLB của security tool
- Filter by VPC/subnet/protocol
- Use case: DPI, IDS/IPS, threat hunting
10. Common Network Issues Debug
"Cannot SSH to EC2"
- SG inbound: allow port 22 from your IP?
- NACL inbound: allow port 22?
- NACL outbound: allow ephemeral 32768-65535?
- Route table: 0.0.0.0/0 → IGW?
- Public IP assigned to instance?
- OS firewall (ufw, iptables)?
"EC2 cannot reach internet"
- Public subnet: route 0.0.0.0/0 → IGW + has Public IP?
- Private subnet: route 0.0.0.0/0 → NAT GW?
- NAT GW in public subnet với EIP?
- Source/Dest check (NAT instance)?
- SG outbound allow?
- NACL allow?
"Web traffic không reach EC2"
- ALB SG: allow 443 from 0.0.0.0/0?
- EC2 SG: allow ALB port from ALB SG (reference)?
- Target Group health check passing?
- App listening on right port?
Câu hỏi ôn tập
-
SG là stateful, NACL là stateless — giải thích ngắn gọn ý nghĩa.
Xem đáp án
Stateful (SG): nếu inbound request được allow, response tự động được allow — không cần outbound rule riêng. SG track connection state. Stateless (NACL): mỗi packet được evaluate độc lập — inbound allow không tự động allow response. Cần có cả inbound rule (port 80) VÀ outbound rule cho ephemeral ports (32768-65535) để response về được client.
-
Khi NACL inbound allow port 80, có cần outbound rule cho response không?
Xem đáp án
Có — NACL stateless nên cần explicit outbound rule cho response. Server trả response trên ephemeral ports (Linux: 32768-65535, Windows: 49152-65535). NACL outbound rule phải allow range này. Best practice: allow outbound
0.0.0.0/0trên NACL hoặc ít nhất allow ephemeral port range, và dùng SG cho fine-grained control. -
SG có thể có Deny rule không?
Xem đáp án
Không — Security Group chỉ có Allow rules. Mặc định tất cả inbound bị deny (implicit deny), bạn chỉ có thể add Allow rules. Để block traffic cụ thể, dùng NACL (có cả Allow và Deny rules). NACL Deny rule hữu ích để block IP cụ thể, malicious traffic, hoặc emergency block — điều không thể làm với SG.
-
Flow Logs có capture được DNS traffic đến Amazon DNS không?
Xem đáp án
Không. VPC Flow Logs có một số traffic không capture: DNS traffic đến/từ Amazon DNS server (169.254.169.253), traffic đến DHCP server, Instance Metadata Service (169.254.169.254), Amazon Time Sync Service, và Windows license activation traffic. Để monitor DNS queries, dùng Route 53 Resolver Query Logging.
-
Để block 1 specific malicious IP, dùng SG hay NACL?
Xem đáp án
NACL — vì NACL hỗ trợ Deny rules. SG chỉ có Allow rules, không thể block IP cụ thể. NACL áp dụng ở subnet level, rules được evaluate theo số thứ tự từ thấp đến cao — thêm Deny rule với priority thấp (số nhỏ) trước Allow rules. Lưu ý: nếu cần block ở scale lớn hoặc theo nhiều tiêu chí, dùng WAF hoặc Shield Advanced hiệu quả hơn.
Bài tập thực hành
- Tạo SG cho web server (port 80, 443, 22 from VPC CIDR)
- Tạo SG cho DB chỉ allow MySQL từ SG của app server (reference SG)
- Tạo NACL custom với rules: allow HTTP, HTTPS, ephemeral. Block 1 IP.
- Enable VPC Flow Logs gửi đến S3
- Test connectivity bị block ↔ check Flow Logs record
REJECT - Setup ACL rule deny attacking IP, observe Flow Logs
Tài liệu tham khảo chính thức
Tiếp theo: VPC Endpoints