[CS/네트워크] 보안그룹이란?

연유라떼·2025년 8월 30일
post-thumbnail

보안그룹이란?

Security Group 이란
이는 항상 "방화벽"이라고 하고 다녔다.

근데 더도말고 방화벽의 개념이 맞다!


클라우드 환경(AWS, Azure, GCP 등)에서 가상 방화벽(Virtual Firewall) 역할을 하는 핵심 보안 구성 요소다.

  • 인바운드(Inbound) 규칙: 외부에서 인스턴스로 들어오는 트래픽을 허용 또는 차단 , 일반적으로 인바운드에서는 연결될 리소스의 포트 번호를 허용해야한다

  • 아웃바운드(Outbound) 규칙: 인스턴스에서 외부로 나가는 트래픽을 허용 또는 차단, 아웃바운드는 외부적으로 나가는 것이기 때문에 다 오픈해두는 경우가 많다

즉, 보안 그룹은 서버 단위의 네트워크 접근 제어 리스트(ACL, Access Controll List)로서, 인스턴스가 수신·송신할 수 있는 트래픽의 IP, 포트, 프로토콜을 명시적으로 관리한다.


필요 이유

클라우드 환경의 서버 인스턴스는
인터넷에 직접 연결될 가능성이 크며,
무분별한 접근을 허용하면 다음과 같은 위험이 발생할 수 있다.

  • 무단 접근 및 데이터 유출
  • 서비스 장애(DoS/DDoS 공격)
  • 악성 코드 및 불법 트래픽 유입

이런 식의 위험이 존재한다면 매우매우 힘들어질 것이다...

보안 그룹은 이러한 위험을 네트워크 계층에서 선제적으로 차단하는 보안 장치다!

이를 통해 인스턴스 자체의 방화벽 설정을 최소화하거나, 애플리케이션 단의 인증 이전 단계에서 네트워크 레벨 보안을 확보할 수 있다.


동작 방식

보안 그룹은 상태 저장(Stateful) 방화벽으로 동작한다.

이는 한쪽 방향의 트래픽이 허용되면, 그에 대한 응답 트래픽은 자동으로 허용되는 특성을 의미한다.

예를 들어, 인바운드에서 443(HTTPS) 포트를 허용하면,
클라이언트가 서버에 HTTPS 요청을 보내고 서버가 응답을 반환할 때
아웃바운드 규칙을 별도로 설정하지 않아도 응답이 허용된다!

인바운드 규칙

외부 → 인스턴스로 들어오는 요청을 제어

허용할 프로토콜(TCP/UDP/ICMP), 포트 범위, 소스 IP 또는 다른 보안 그룹을 지정

예시)

- 22번 포트(TCP) : SSH 원격 접속 허용
- 443번 포트(TCP) : HTTPS 웹 서비스 허용

아웃바운드 규칙

인스턴스 → 외부로 나가는 요청을 제어

기본값은 모든 트래픽 허용(0.0.0.0/0)이지만, 보안 강화를 위해 필요한 포트만 제한적으로 열 수 있다.

예시 ) 데이터베이스 서버의 경우 특정 포트(예: 3306 MySQL)만 외부 접근 허용

규칙의 적용 단위

보안 그룹은 인스턴스 단위에 적용되며, 하나의 인스턴스는 여러 보안 그룹을 동시에 참조할 수 있다.

그래서인지
동일한 VPC(Virtual Private Cloud) 내에서 서버 간 통신 시에도
반드시 서로의 보안 그룹 규칙을 상호 허용해야 통신이 가능하다.!

실제 예시

활용 사례설정 예시
웹 서버 보안인바운드: 80/443 포트(HTTP/HTTPS)만 허용, 아웃바운드: 기본값 유지
데이터베이스 서버 보호인바운드: 3306(MySQL) 포트를 애플리케이션 서버의 보안 그룹에서만 허용
관리자 접근 제어인바운드: 22(SSH) 포트를 특정 사무실 IP만 허용
서버 간 내부 통신인바운드: 특정 보안 그룹 간만 허용해 VPC 내부 트래픽을 안전하게 관리



이번에 서버 2대를 기반으로 통신을 하였다

둘의 통신을 가능하게하려면
보안그룹 규칙을 우선적으로 설정해야한다

=> 동일한 VPC 내에서 작업
가장 우선적으로는 이 전제가 만족돼야한다!

  • 보안그룹 규칙 설정하기

인바운드 규칙: 나가려는 port에 대하여 허용을 해야한다.
아웃바운드 규칙: 웬만해선 전부 허용해두긴 하는 거 같은데, 만약 원한다면 통신하려는 포트는 꼭 필수로 설정해둔다.



다른 IP 접속 허용하기

server1이 있고, server2가 있다고 하자.
나의 경우 server1의 docker container에 server2가 접속을 해야하는 상황이다.

이때 보안 강화를 위해 server2의 사설 IP만 허용하려면 server1에서 다음과 같이 설정한다.

# 다른 서버의 사설 IP만 허용
sudo ufw allow from <SERVER2_PRIVATE_IP> to any port 6379
sudo ufw status

이렇게 설정하고 inactive 라고 뜨면 성공이다!
왜 이러면 성공이냐고?

다른 아이피에서 접속하는 것에 대하여 inactive, 즉.. 방화벽에 대하여 꺼준다는 것이기 때문이다!

sudo ufw status 명령은 UFW(Ubuntu Firewall)의 동작 상태와 설정된 규칙을 보여준다.

Status : inactive는 UFW 자체가 비활성화되어 있음을 의미한다.
즉, UFW 규칙이 아예 적용되지 않는 상태다.

현재 UFW 방화벽은 꺼져 있으므로 위에서 추가한 규칙(allow from …)도 효과가 없다는 뜻이다.

이 상태에서 접속이 가능한 이유는 운영체제의 기본 네트워크 정책(기본 허용 상태) 때문이지, UFW 설정 덕분이 아니다.


만약 안전하게 허용하고 싶다면,

  • UFW 활성화
    먼저 UFW 방화벽을 켜야 설정이 적용된다.
sudo ufw enable
  • 특정 IP와 포트 허용
    앞서 설정한 것처럼 server2의 사설 IP에서 오는 6379 포트만 허용한다.
sudo ufw allow from <SERVER2_PRIVATE_IP> to any port 6379
  • 상태 확인
    이제 sudo ufw status를 실행하면 다음과 같이 표시된다.
Status: active
To                         Action      From
--                         ------      ----
6379                       ALLOW       <SERVER2_PRIVATE_IP>

이제야 server2만 server1의 6379 포트에 접근할 수 있도록 방화벽이 동작하게 된다. (이게 제일 정석)



다른 서버에서 접속하기

# server1에서의 해당 포트가 열려있는지 확인
nc -vz <SERVER1_PRIVATE_IP> <PORT>

이렇게 확인했을 때 SUCCED라고 뜨면 된다

profile
일단 공부해보겠습니다..

0개의 댓글