한 줄 정의: NACL은 VPC 서브넷 단위의 ‘무상태(Stateless) 방화벽’이에요. 허용(Allow)/거부(Deny) 규칙을 번호 순서대로 평가하며, 양방향 규칙을 모두 허용해야 트래픽이 통과합니다.
적용 범위: 서브넷 단위(해당 서브넷의 모든 ENI/EC2에 적용)
상태성: Stateless → 요청·응답을 구분해 Inbound/Outbound 각각 허용 필요
규칙 타입: Allow / Deny 모두 지원 (SG는 Allow만)
평가 순서: 작은 번호부터 첫 매칭 규칙으로 결정 → 매칭 없으면 기본 거부
기본값:
시험/실무 포인트: 특정 IP 대역 차단(deny) 같은 일괄 차단이 필요하면 NACL이 편합니다. 반대로 일반 앱 방화벽은 SG 중심이 단순합니다.
마지막엔 암묵적
* Deny가 있다고 생각하세요(매칭 없으면 드롭).
응답 패킷을 자동으로 허용하지 않으므로 반대 방향 규칙도 따로 허용해야 합니다.
예) 인스턴스가 아웃바운드로 443에 접속
예) 외부 클라이언트가 인바운드로 80/443 접속(웹 서버)
에페멀 범위는 OS에 따라 다르지만 시험/가이드에선 1024–65535로 기억해도 충분합니다.
Inbound
Outbound
Inbound
Outbound
Inbound
팁: SG와 NACL 모두 통과해야 합니다. 하나라도 막히면 패킷은 드롭됩니다.
# 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