Security Group으로 방화벽 설정하기

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

Security Group은 EC2 인스턴스에 적용할 수 있는 방화벽 설정입니다. 서버 보안의 기본은 방화벽 설정에서 출발합니다. 예로, Linux 서버의 SSH 접속 포트인 22번만 여는 것은 기본이고, 여기에 접속 가능한 IP 대역까지 설정하면 공격 위협이 상당수 줄어듭니다.


그림 5-1 EC2 인스턴스와 방화벽 개념도

방화벽 설정의 기본요소는 다음과 같습니다.

  • Inbound: 외부에서 EC2 인스턴스로 들어오는 트래픽입니다. 대표적인 것들로는 HTTP, HTTPS, SSH, RDP 등이 있습니다.
  • Outbound: EC2 인스턴스에서 외부로 나가는 트래픽입니다. EC2 인스턴스 안에서 인터넷을 사용할 경우 Outbound라 할 수 있습니다. 대표적으로 파일을 다운로드하거나, 외부 SSH로 접속하는 것 등이 있습니다.
  • Type: 프토토콜 형태입니다. 프로토콜은 크게 TCP, UDP, ICMP로 나눌 수 있습니다.
  • Port, Port Range: 포트 번호입니다. TCP, UDP 프로토콜은 0~65535 사이의 포트 번호를 사용하게 됩니다(ICMP는 포트 번호를 사용하지 않습니다). 우리가 익히 알고 있는 HTTP는 80번 SSH는 22번처럼 각 서버 애플리케이션들은 고유의 포트 번호를 사용하고 있습니다.
  • Source/Destination: 연결 혹은 접속 가능한 IP 대역을 뜻합니다. Inbound 일 경우 Source, Outbound일 경우 Destination이라 부릅니다. IP 주소 하나만 지정할 수도 있고 CIDR 표기 방법을 이용하여 일정한 대역을 설정할 수 있습니다.
  • Rule: 지금까지 설명한 Inbound, Outbound, Type, Port, Source/Destination을 조합한 것을 Rule(규칙)이라고 합니다.

그림 5-2처럼 AWS 콘솔의 EC2 페이지에서 왼쪽 NETWORK & SECURITY → Security Groups를 클릭하면 현재 생성된 Security Group 목록이 표시됩니다. Group Name이 default인 것은 기본적으로 제공되는 Security Group이며 Inbound는 동일한 Security Group인 default에만 허용되어 있고, Outbound는 모든 접속이 허용되어 있습니다. launch-wizard-1은 EC2 인스턴스(Example Server)를 만들 때 함께 만들어진 것입니다.

Launch-wizard-1에 Inbound 탭을 보면 SSH, TCP, 22, 0.0.0.0/0으로 설정된 규칙을 볼 수 있습니다. 이것은 모든 IP에서 EC2 인스턴스로 SSH 접속을 허용하겠다는 규칙입니다. 이 규칙이 있었기 때문에 우리가 PuTTY 또는 ssh 명령으로 접속을 할 수 있었습니다.

이번에는 launch-wizard-1에 HTTP Inbound 접속을 허용하는 규칙을 넣어보겠습니다. Inbound 탭에 Edit 버튼을 클릭합니다.


그림 5-2 Security Group 목록

Inbound 규칙을 설정하는 창이 표시됩니다. 아래 Add Rule 버튼을 클릭합니다.


그림 5-3 Security Group Inbound 규칙 설정

그림 5-4처럼 규칙을 설정하는 부분이 한 줄 더 추가되었습니다.

  • Type: HTTP를 선택하면 자동으로 Protocol은 TCP, Port Range는 80으로 설정됩니다.
  • Source: 기본값 그대로 Anywhere를 사용합니다(HTTP 접속은 보통 모든 IP 주소에서 접속할 수 있도록 허용합니다) Custom IP를 선택하면 CIDR 표기법을 사용하여 IP 주소 대역을 설정할 수 있습니다. My IP를 선택하면 현재 사용하고 있는 컴퓨터 혹은 공유기의 공인 IP를 자동으로 알아내서 설정해줍니다.

설정이 완료되었으면 Save 버튼을 클릭합니다.


그림 5-4 Security Group Inbound 새 규칙 추가

launch-wizard-1의 Inbound 목록을 보면 HTTP 규칙이 추가된 것을 확인할 수 있습니다.


그림 5-5 Security Group launch-wizard-1의 Inbound 규칙 목록

CIDR 표기법
CIDR은 Classless Inter-Domain Routing의 약어로 IP 주소 할당 방법입니다. 급격히 부족해지는 IPv4 주소를 보다 효율적으로 사용하기 위해 CIDR 표기법을 사용합니다. xxx.xxx.xxx.xxx/yy 형태로 표기하는데 맨 뒤의 yy는 Subnet Mask를 2진수로 바꾸었을 때 1의 개수입니다.

255.255.255.0을 2진수로 바꾸면 11111111.11111111.11111111.00000000이 됩니다. CIDR 표기법으로는 xxx.xxx.xxx.xxx/24가 됩니다. 192.168.0.0/24라면 192.168.0.1부터 192.168.0.254까지 라는 의미입니다(192.168.0.0는 네트워크 192.168.0.255는 브로드캐스트). 192.168.0.15/32이면 1이 32개이고 Subnet Mask가 255.255.255.255가 되므로 192.168.0.15 한 개의 IP만 표현하게 됩니다.

방화벽 설정은 항상 체크
EC2 인스턴스를 생성하고 열심히 여러 가지 서버들을 설치했는데 외부에서 접속이 되지 않을 때가 많습니다. 이럴 때에는 먼저 Security Group 설정을 확인합니다. 설치된 서버들이 사용하는 포트가 Inbound 설정에서 열려 있는지, 포트 번호가 잘못 설정되지는 않았는지, 프로토콜이 잘못 설정되지는 않았는지, Inbound 설정을 Outbound에다가 하지는 않았는지 살펴봅니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.