</>Học Dev
Bài học

Tuần 4 - Ngày 3: Security Groups và NACLs

Tuần 4 – Ngày 3

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

TypeProtocolPortRangeSource/DestinationHTTPTCP800.0.0.0/0HTTPSTCP4430.0.0.0/0SSHTCP2210.0.0.0/16MySQLTCP3306sg-app-tier(referenceSG)ICMPIPv4ICMPEchoRequest10.0.0.0/16

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

Rule#TypeProtocolPortRangeSourceAction100HTTPTCP800.0.0.0/0ALLOW110HTTPSTCP4430.0.0.0/0ALLOW120SSHTCP2210.0.0.0/16ALLOW130TCP1024-655350.0.0.0/0ALLOW(ephemeralports!)*ALLALLALLALLDENY(implicit)

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

FeatureSecurity GroupNACL
LevelInstance (ENI)Subnet
StateStatefulStateless
RulesAllow onlyAllow + Deny
DefaultDeny all inbound, allow all outboundAllow all (default NACL) / Deny all (custom NACL)
EvaluationAll rulesBy rule number, first match wins
UseApp-level firewallBackup defense, IP blocking
Limit60 rules/SG20 rules/NACL (soft, max 40)
ReferenceCó thể ref SG khácChỉ 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 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

ServicePortProtocol
HTTP80TCP
HTTPS443TCP
SSH22TCP
RDP3389TCP
FTP21TCP
SFTP22TCP
SMTP25, 587TCP
DNS53TCP/UDP
MySQL/Aurora3306TCP
PostgreSQL5432TCP
Microsoft SQL Server1433TCP
Oracle1521TCP
Redis6379TCP
Memcached11211TCP
MongoDB27017TCP
NFS (EFS)2049TCP
ICMPICMP

8. VPC Flow Logs

Định nghĩa

Flow Logs capture IP traffic information flowing thông qua ENIs.

3 levels

  1. VPC level: tất cả ENIs trong VPC
  2. Subnet level: tất cả ENIs trong subnet
  3. 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: 22
  • action: 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"

  1. SG inbound: allow port 22 from your IP?
  2. NACL inbound: allow port 22?
  3. NACL outbound: allow ephemeral 32768-65535?
  4. Route table: 0.0.0.0/0 → IGW?
  5. Public IP assigned to instance?
  6. OS firewall (ufw, iptables)?

"EC2 cannot reach internet"

  1. Public subnet: route 0.0.0.0/0 → IGW + has Public IP?
  2. Private subnet: route 0.0.0.0/0 → NAT GW?
  3. NAT GW in public subnet với EIP?
  4. Source/Dest check (NAT instance)?
  5. SG outbound allow?
  6. NACL allow?

"Web traffic không reach EC2"

  1. ALB SG: allow 443 from 0.0.0.0/0?
  2. EC2 SG: allow ALB port from ALB SG (reference)?
  3. Target Group health check passing?
  4. App listening on right port?

Câu hỏi ôn tập

  1. 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.

  2. Khi NACL inbound allow port 80, có cần outbound rule cho response không?

    Xem đáp án

    — 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/0 trên NACL hoặc ít nhất allow ephemeral port range, và dùng SG cho fine-grained control.

  3. 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.

  4. 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.

  5. Để 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