AWS

AWS - 보안그룹, NACL 차이

rygus 2025. 11. 2. 17:08
728x90

안녕하세요.

오늘은 보안그룹과 NACL의 차이점에 대해 알아보겠습니다. 

# "보안그룹"이란?

보안그룹은 방화벽의 역할을 하는 AWS 서비스입니다. 

특징

  • Deny는 불가능
  • 화이트 리스트 기반
  • 한 개의 EC2에는 반드시 하나 이상의 보안그룹이 필요
  • Stateful 방식이다
  • 보안그룹의 위치는 서브넷 안 EC2 앞단에 위치하게 된다

앞으로 말씀드릴 NACL과의 차이점 중에 가장 큰 차이점이 Stateful이냐 Stateless냐 입니다.

stateful은 상태 저장 방식으로 트래픽의 상태를 저장하는 것입니다. 

EC2 A에서 EC2 B로 SSH 통신을 한다고 가정해보겠습니다. 

EC2 B의 보안그룹 인바운드 룰에는 EC2 A 대역에서 들어오는 SSH 통신을 허용한다는 규칙이 있습니다.

그러나 아웃바운드룰에는 아무것도 없습니다. 

이때 통신은 어떻게 될까요? 

앞서 말씀드렸듯이 보안그룹은 상태 저장방식이기 때문에 따로 아웃바운드룰을 적용하지 않아도 자동으로 허용이 되어 통신이 가능하게 됩니다.

보안그룹은 "응답에 대한 요청" 또는 "요청에 대한 응답" 트래픽을 기억하고 있다가 알아서 통신이 가능하게 하는 똑똑한 놈이라고 할 수 있습니다.

 

 

# NACL이란? 

NACL은 Network Access Control List의 준말로 서브넷 앞단에 위치해서 트래픽은 허용하거나 거부하는 방화벽의 역할을 하는 서비스입니다. 

특징

  • Deny / Allow 모두 가능
  • Stateless 방식이다
  • VPC를 생성하면 Default NACL이 같이 생성된다
  • 서브넷 앞단에 위치하게 된다

앞서 설명드린 보안그룹과 다르게 Stateless 상태 비저장 방식입니다. 

그래서 inbound와 outbound를 모두 신경써야합니다. 

문제는 outbound시에 허용 포트인데요.

일반적으로 컴퓨터는 서버에 요청할 때 현재 사용하고 있지 않은 임의의 포트(1024 ~ 65535) 를 사용하여 통신을 하게 됩니다.

서버는 클라이언트 PC의 요청 포트를 확인하고 해당 임의포트로 다시 응답을 하게되는데 NACL에서 해당 포트를 허용해놓지 않으면 통신이 막히게 되어버립니다. 

그래서 1024 ~ 65535 아웃바운드 룰에 해당 포트를 모두 허용해야 원활한 통신이 가능하게 됩니다.

즉 위와 같이 아웃바운드 룰이 없으면 통신이 차단됩니다. 

위 사진과 같이 1024 ~ 65535 포트가 뚫려 있어야만 통신이 가능하게 됩니다.

 

그리고 VPC를 하나 생성하면 Default NACL도 같이 생성됩니다. 

(*인바운드 룰과 아웃바운드 룰이 모두 허용인 상태라 따로 건드리지 않아도 통신에는 문제가 없습니다.)

 

Default NACL Inboud Rule

 

Default NACL Outboud Rule

 

테스트

이번에는 테스트를 통해 보안그룹에서 차단되었을 때와 NACL에서 차단되었을 때 OS 내부에서는 어떻게 확인되는지 알아보겠습니다. 

테스트 환경은 위와 같이 서로 다른 서브넷 간 Http 통신을 하는 환경입니다.

일단 NACL, 보안그룹을 모두 허용한 상태로 통신 후 WEB EC2에서 tcpdump 명령어로 트래픽을 확인해보겠습니다.

 

NACL, 보안그룹 모두 허용

당연히 SYN, SYN + ACK, ACK 패킷 까지 모두 확인되며 정상 통신이 되는 것을 확인할 수 있습니다. 

 

NACL 인바운드 룰 차단

이번에는 NACL 인바운드 룰에서 차단해보겠습니다. 

OS 내부에서는 http 트래픽은 확인되지 않습니다.

flow log로 확인했을 때 src : 10.0.1.5 (client ip) dst : 10.0.0.5 (web server ip) port : 80 차단 로그가 남아있는 것을 확인 가능합니다.

NACL 허용 보안그룹 차단 

이번에는 NACL은 인바운드, 아웃바운드 모두 허용하고 보안그룹에서 차단 해보겠습니다.

마찬가지로 OS 내부에서는 http 트래픽은 확인되지 않습니다.

 

flow log로 확인했을 때 src : 10.0.1.5 (client ip) dst : 10.0.0.5 (web server ip) port : 80 차단 로그가 남아있는 것을 확인 가능합니다.

NACL 인바운드 허용, 아웃바운드 차단, 보안그룹 허용

이번에는 NACL의 아웃바운드만 차단해보겠습니다. 

통신은 당연히 되지 않지만 SYN과 SYN + ACK까지는 확인이 가능합니다. 

NACL 인바운드룰과 보안그룹에서 허용은 되었기 때문에 일단 WEB 서버 까지 요청 트래픽이 도착할 수 있었습니다.

그러나 요청에 대한 응답을 날릴 때 NACL 아웃바운드 룰에서 차단되기 때문에 통신이 되지 않는 것입니다.

즉 위 그림과 같이 SYN은 받을 수 있었고 SYN에 대한 응답을 날린 것 까지는 WEB EC2에서 확인이 되는 것입니다. 

flow log에서도 src : client ip (10.0.1.5) dst : web server ip (10.0.0.5) 트래픽은 허용되고 

src : web server ip (10.0.0.5) dst : client ip (10.0.1.5) 트래픽은 차단된 것을 확인 가능합니다.