NACL(Network ACL)

도은호·2025년 10월 6일

AWS SAA

목록 보기
8/53

한 줄 정의: NACL은 VPC 서브넷 단위의 ‘무상태(Stateless) 방화벽’이에요. 허용(Allow)/거부(Deny) 규칙을 번호 순서대로 평가하며, 양방향 규칙을 모두 허용해야 트래픽이 통과합니다.


1) NACL이란?

  • 적용 범위: 서브넷 단위(해당 서브넷의 모든 ENI/EC2에 적용)

  • 상태성: Stateless → 요청·응답을 구분해 Inbound/Outbound 각각 허용 필요

  • 규칙 타입: Allow / Deny 모두 지원 (SG는 Allow만)

  • 평가 순서: 작은 번호부터 첫 매칭 규칙으로 결정 → 매칭 없으면 기본 거부

  • 기본값:

    • Default NACL: 모든 In/Out 허용
    • Custom NACL: 모든 In/Out 거부

2) 보안그룹(SG) vs NACL 비교

  • SG: 인스턴스(ENI) 단위, Stateful, Allow만 존재, 규칙 순서 없음
  • NACL: 서브넷 단위, Stateless, Allow/Deny 존재, 규칙 번호 순서대로 평가

시험/실무 포인트: 특정 IP 대역 차단(deny) 같은 일괄 차단이 필요하면 NACL이 편합니다. 반대로 일반 앱 방화벽은 SG 중심이 단순합니다.


3) 규칙 구성 요소

  • Rule # (1–32766): 낮을수록 우선
  • Direction: Inbound / Outbound
  • Protocol: TCP, UDP, ICMP 등
  • Port Range: 목적지 포트 범위
  • CIDR: 소스(인바운드) / 목적지(아웃바운드)
  • Action: Allow 또는 Deny

마지막엔 암묵적 * Deny가 있다고 생각하세요(매칭 없으면 드롭).


4) 왜 ‘무상태’가 중요한가? (Ephemeral 포트)

응답 패킷을 자동으로 허용하지 않으므로 반대 방향 규칙도 따로 허용해야 합니다.

  • 예) 인스턴스가 아웃바운드로 443에 접속

    • Outbound: 목적지 포트 443 Allow
    • Inbound: 에페멀 포트(보통 1024–65535) Allow ← 응답 패킷이 인스턴스의 에페멀 목적지 포트로 들어옵니다.
  • 예) 외부 클라이언트가 인바운드로 80/443 접속(웹 서버)

    • Inbound: 목적지 포트 80/443 Allow
    • Outbound: 에페멀 포트 1024–65535 Allow ← 서버의 응답이 클라이언트 에페멀로 나가요.

에페멀 범위는 OS에 따라 다르지만 시험/가이드에선 1024–65535로 기억해도 충분합니다.


5) 자주 쓰는 규칙 패턴 (예시)

(A) 퍼블릭 웹 서브넷 (ALB/웹서버)

Inbound

  • ALLOW TCP 80,443 from 0.0.0.0/0
  • (옵션) ALLOW TCP 1024–65535 from 0.0.0.0/0 ← 서버가 클라이언트로 먼저 나가는 트래픽이 있을 때 대비

Outbound

  • ALLOW TCP 1024–65535 to 0.0.0.0/0 ← 웹 응답
  • (옵션) DNS 등 필요한 포트: 53/udp, NTP(123/udp) 등

(B) 프라이빗 앱 서브넷 (NAT 게이트웨이 통해 인터넷 나감)

Inbound

  • ALLOW TCP 1024–65535 from 0.0.0.0/0외부 서버(443 등) 응답 수신
  • (내부 통신 필요 시) ALLOW TCP 앱포트 from 내부 CIDR

Outbound

  • ALLOW TCP 443 to 0.0.0.0/0 (외부 API)
  • (필요 시) ALLOW TCP 80 to 0.0.0.0/0, DNS 53 등

(C) DB 서브넷 (내부 전용)

Inbound

  • ALLOW TCP 3306 (예: MySQL) from 앱 서브넷 CIDR
    Outbound
  • ALLOW TCP 1024–65535 to 앱 서브넷 CIDR ← 응답
  • (관리/백업 목적 포트만 최소 허용)

팁: SG와 NACL 모두 통과해야 합니다. 하나라도 막히면 패킷은 드롭됩니다.


6) 운영 팁

  • 연결 끊김/타임아웃이 생기면: 먼저 VPC Flow Logs로 ALLOW/DENY 확인 → 양방향 규칙/에페멀을 체크
  • 규칙 정리: 작은 번호 = 우선. Deny를 상단에 두면 간단한 블록 리스트를 만들 수 있어요.
  • 연관(Association): 서브넷–NACL 연결은 언제든 교체 가능(트래픽 영향 주의)
  • IPv6도 별도 규칙 필요(포트/프로토콜 동일하게 설계)

7) CLI

# 1) NACL 생성
aws ec2 create-network-acl --vpc-id vpc-0123456789abcdef0

# 2) 서브넷과 연결
aws ec2 associate-network-acl \
  --network-acl-id acl-0abc1234def567890 \
  --subnet-id subnet-0a1b2c3d4e5f67890

# 3) 인바운드 80 허용 (Rule#100)
aws ec2 create-network-acl-entry \
  --network-acl-id acl-0abc1234def567890 \
  --ingress \
  --rule-number 100 \
  --protocol tcp \
  --port-range From=80,To=80 \
  --cidr-block 0.0.0.0/0 \
  --rule-action allow

# 4) 아웃바운드 에페멀 허용 (Rule#110)
aws ec2 create-network-acl-entry \
  --network-acl-id acl-0abc1234def567890 \
  --egress \
  --rule-number 110 \
  --protocol tcp \
  --port-range From=1024,To=65535 \
  --cidr-block 0.0.0.0/0 \
  --rule-action allow

8) 시험에서 잘 나오는 함정

  • “Stateless?”맞다. 그래서 양방향 모두 허용 필요
  • “SG처럼 자동 응답 허용?”아님(그건 SG의 stateful 동작)
  • “특정 IP 차단은 어디서?”NACL(Deny 지원)
  • “Default NACL 동작?” → 모든 In/Out 허용
  • “Custom NACL 기본?” → 모든 In/Out 거부

9) 요약

  • NACL = 서브넷 레벨, Stateless, Allow/Deny, 규칙 번호순
  • 에페멀 포트 꼭 기억(1024–65535)
  • SG와 함께 설계하고, 문제 생기면 Flow Logs로 원인 추적!
profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글