[2] 250909~ 클라우드/[b] 12월 : Terraform + Ansible

[9] RT, SG, ACL

서버관리자 페페 2025. 12. 22. 10:51

 

외부
 ↓
[ Route Table ]
 ↓
[ NACL Inbound ]  ← 서브넷 입구
 ↓
[ Security Group Inbound ]
 ↓
[ EC2 ]
 ↓
[ Security Group Outbound ]
 ↓
[ NACL Outbound ] ← 서브넷 출구
 ↓
외부

 

 

[0]

개요

Route Table

Security Group

Access Control List

 

-

 

[1]

Route Table은 길을 만들어준다

- RT를 만들때 VPC_ID로 생성

- RT 아래 Route에 IGW와 CIDR(0.0.0.0/16) 을 만들어 기본 루트인 VPC와 연결

- assoc으로 subnet에 rt를 연결

 

-

 

[2]

Security Group // 리소스 단위 문지기

EC2 ENI(네트워크 인터페이스)에 직접 어태치됨

stateful이므로 인바운드만 허용해주면 아웃바운드 자동 허용됨

허용 기반

 

-

 

[3]

Network ACL // 서브넷 단위 문지기

패킷 단위 필터여서, 이 패킷이 요청 응답인지? 를 구분 x

rule number 낮은게 먼저 적용

 

TCP 80
Source: 0.0.0.0/0
ALLOW

 

TCP 1024-65535
Destination: 0.0.0.0/0
ALLOW

 

목적지 포트는 54321 (ephemeral port)

 

-

 

[4]

반송지 (inbound target) 의 IP주소와 Port가 필요 (포트는 특정할 수 없으므로 사실상 임의로 설정) 하다는 점에 주의해야 합니다

반송지 : 응답 패킷이 되돌아가는 목적지

 

 

# Inbound PACKET
Src IP: 1.2.3.4
Src Port: 54321  ← 임시 포트 (Ephemeral Port)
Dst IP: 10.0.0.10
Dst Port: 80

클라이언트는 임의의 고포트 (1024 ~ 65535) 를 사용

이 포트는 매 요청마다 바뀜

서버 입장에서는 미리 알 수 없음

 

# 응답 패킷 (반송)
Src IP: 10.0.0.10
Src Port: 80
Dst IP: 1.2.3.4
Dst Port: 54321  ← 아까 그 임의 포트

 

SG는 포트를 몰라도 자동 허용, 그래서 설정이 단순함

NACL : 이 패킷이 응답인지 모르고, 그냥 outbound 패킷 하나 뿐, 그래서 목적지 IP / port가 필요한데

문제는 포트가 매번 랜덤

따라서 포트는 특정할 수 없으므로, 사실상 임의로 설정

실제 의미 : 1024 ~ 65535 전부 열어라

 

-

 

[5]

실제 NACL 설정 예시

Inbound (요청 허용)

ALLOW
Protocol : TCP
Port : 80
Source : 0.0.0.0/0

 

ALLOW
Protocol : TCP
Port : 1024-65535 // 임시 포트 전체
Destination : 0.0.0.0/0

 

 

-------------------------------------

 

[6]

실무

SG NACL
서비스 포트 제어 전체 IP 차단
리소스별 접근 제어 국가/대역 블로킹
Bastion / ALB 연결 제어 서브넷 단위 보호