[AWS] NACL 과 보안그룹

고구마양갱·2024년 12월 27일

AWS CLOUD

목록 보기
16/32
post-thumbnail

NACL(Network ACL) 과 보안그룹은 많이 사용되는 AWS 보안 서비스이다.
보안그룹은 EC2 인스턴스에 대한 네트워크 접근통제(방화벽) 역할을 하고
NACL(Network ACL)은 VPC 내 Subnet에 대한 네트워크 접근통제(방화벽) 역할을 한다.

그러면 접근통제 대상(영역)만 다르고 나머진 같을까 ?

중요한 차이점이 있는데, 보안그룹은 Stateful 방식이고, NACL은 Stateless 방식이다.
Stateful, Stateless 상세 설명은 아래의 글을 참고

[NW] Stateful, Stateless 차이점

위 글의 설명대로면 보안그룹은 request 때 ip, port를 검사한 후 허용되어 통과한다면, 세션이 유지되는 동안에는 인바운드, 아웃바운드 트래픽을 허용하고,
NACL은 세션이 유지와 관계 없이 인바운드, 아웃바운드 트래픽의 프로토콜, ip, port를 검사한다는 것이다.

NACL, 보안그룹을 구성하는 것 자체는 그렇게 어렵지 않으니, 실제 사용법과 차이점을 알아두면 좋다.

VPC > Security 카테고리에서 NACL 를 선택하면 NACL 현황을 볼 수 있다.
가장 위의 VPC-TEST-NACL 은 디폴트(기본)으로 생성된 NACL 인데 NAME 만 수정했다.
디폴트로 생성된 NACL 이어서 저번 실습에서 생성한 4개의 서브넷이 모두 포함되어 있다.
(VPC 하나 당 기본 NACL 이 존재하며, 이 NACL은 VPC 내에 생성된 모든 subnet 과 연결되어 있다.)

기본 NACL 은 연결된 서브넷을 삭제 할 수 없다. 특정 서브넷에만 NACL 을 적용하려면 NACL을 세로 생성해야 한다. 우측의 Create Network ACL 을 선택하면 생성 할 수 있다.

이름을 입력하고, 연결한 VPC 선택 후 우측 하단의 Create Network ACL 을 클릭한다.

생성된 NACL 은 인바운드, 아웃바운드 룰이 모두 any(all)로 차단되어 있고,
서브넷도 연결되어 있지 않다. 그래서 우선 서브넷을 연결 (associate) 해야 한다.

우측의 actions, edit subnet associations 선택하면 서브넷을 연결할 수 있다.

NACL 테스트할 서브넷을 선택한다. (VPC 외부와의 통신을 통해 테스트를 하므로 퍼블릭 서브넷을 선택한다.) save changes 를 통해 설정을 저장한다.

그리고 이 상태에서 퍼블릭 서브넷 1에 있는 EC2 인스턴스(베스천호스트)에 HTTP로 접속을 시도하면 접속이 안된다. 왜냐면, 인바운드/아웃바운드 룰이 ANY로 차단되어 있기 때문이다.

NACL 에서 인바운드/아웃바운드 룰을 선택 후 우측의 edit inbound rules/ edit outbound rules 를 선택하면 인바운드/아웃바운드 룰을 수정할 수 있다.
우선 http 접속을 위해 출발지 any(0.0.0.0/0), type 은 http(80)으로 해서 인바운드 룰을 추가한다.

NACL 룰은 순서가 있고 순서는 rule number 의 숫자를 입력함으로서 구성한다.
rule number 가 낮을 수록 우선순위가 높은 룰이며, 우선순위가 높은 룰이 먼저 적용되고, 그 다음 rule number 가 낮은 룰이 적용된다. 만약 동일한 조건의 차단 룰이 허용 룰 보다 우선순위에 있다면, 차단 룰이 우선 적용되어 차단되고 허용 룰은 동작하지 않을 것이다.

그리고 아웃바운드 룰도 수정해야 하는데 아웃바운드 룰은 출발지 any, 프로토콜 any로 해야 하므로 type을 all traffic 으로 설정한다.
NACL 은 Stateless 방식 이므로 세션과 상관없이 인바운드/아웃바운드 룰 모두 구성해야 한다.

이렇게 인바운드, 아웃바운드 룰 설정 시 정상 접속된다.

만약 이 상태에서 인바운드 룰만 허용하고, 아웃바운드 룰은 차단한다면 접속이 안된다. 왜냐면 NACL 은 Stateless 이므로, response를 통과 시키기 위한 아웃바운드 룰도 설정해야 하기 때문이다.

보안그룹의 아웃바운드 룰을 차단으로 설정 시 같은 결과인가?

EC2 인스턴스의 보안그룹에서 인바운드/아웃바운드 룰을 차단 설정하려면, 해당 룰을 삭제해야 한다. (보안그룹에는 허용 룰만 있으므로 차단 기능을 구현 하려면 인바운드/아웃바운드 룰을 삭제해야 한다.)

보안그룹의 아웃바운드 룰을 모두 삭제하고, EC2 인스턴스 웹서버에 접속해보면, 정상 접속 됨을 확인할 수 있다. 보안그룹은 Stateful 방식이므로 인바운드 룰만 있어도 접속에는 문제가 없는 것이다. (물론 파일 다운로드 등 기타 기능 수행 시 문제가 있을 수는 있고, 세션을 유지하는 동안의 통신은 정상 수행된다.)

보안그룹, NACL을 구성도로 나타낸 모습이다.

0개의 댓글