오라클 클라우드 Ubuntu VM 방화벽 설정: iptables와 ufw 적용하기

안녕하세요. 미뇽입니다.

클라우드 환경에서 가상 머신(VM)을 생성하고 열심히 애플리케이션을 배포했는데, 외부에서 접속이 안 돼 당황했던 경험, 다들 한 번쯤 있으실 겁니다. 저 역시 최근 Oracle Cloud Ubuntu VM 인스턴스에서 서비스를 준비하다가 비슷한 상황을 겪었는데요. 확인해 보니 OS 수준의 방화벽, 바로 iptables가 활성화되어 특정 포트로의 접근을 막고 있었습니다.

오늘은 이처럼 예기치 않게 마주칠 수 있는 리눅스 방화벽 iptables에 새로운 포트를 추가하는 방법과, 보다 사용자 친화적인 ufw (Uncomplicated Firewall)로 방화벽을 교체하고 설정하는 과정을 제 경험을 바탕으로 상세히 공유해 드리고자 합니다.

iptables로 신규 포트 허용하기

iptables는 리눅스 커널에 내장된 패킷 필터링 프레임워크인 netfilter를 제어하는 사용자 공간 애플리케이션입니다. 매우 강력하고 세밀한 제어가 가능하지만, 명령어가 다소 복잡하게 느껴질 수 있습니다.

현재 iptables 규칙 확인

먼저 현재 설정된 규칙을 확인하는 것이 중요합니다. 다음 명령어로 확인할 수 있습니다.

sudo iptables -L

-L 옵션은 현재 설정된 모든 체인(chain)의 규칙을 보여줍니다. INPUT, FORWARD, OUTPUT 등의 체인이 보일 것이며, 각 체인에 어떤 규칙이 적용되어 있는지 확인할 수 있습니다.

특정 포트 허용 규칙 추가 (예: 8080번 포트)

웹 서버나 애플리케이션이 8080번 포트를 사용한다고 가정하고, 이 포트로 들어오는 TCP 트래픽을 허용하는 규칙을 추가해 보겠습니다.

sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

각 옵션의 의미는 다음과 같습니다.

  • -A INPUT: INPUT 체인(외부에서 VM으로 들어오는 트래픽)에 새로운 규칙을 추가합니다.
  • -p tcp: 프로토콜을 TCP로 지정합니다.
  • --dport 8080: 목적지 포트를 8080번으로 지정합니다.
  • -j ACCEPT: 해당 조건을 만족하는 패킷을 허용(ACCEPT)합니다.

iptables 규칙 영구 저장

iptables 명령어로 추가된 규칙은 시스템을 재부팅하면 사라집니다. 규칙을 영구적으로 저장하기 위해서는 iptables-persistent 패키지를 사용해야 합니다.

먼저 패키지를 설치합니다.

sudo apt-get update
sudo apt-get install iptables-persistent

설치 과정에서 현재 IPv4 및 IPv6 규칙을 저장할지 묻는 메시지가 나타날 수 있습니다. ‘Yes’를 선택하여 저장합니다.

이미 규칙을 추가한 후 iptables-persistent를 설치했거나, 규칙 변경 후 다시 저장하려면 다음 명령어를 사용합니다.

sudo netfilter-persistent save
# 또는
sudo systemctl start netfilter-persistent
sudo netfilter-persistent save

: iptables 규칙을 변경할 때는 특히 원격으로 서버에 접속해 작업하는 경우, SSH 접속 포트(기본 22번)를 막지 않도록 각별히 주의해야 합니다. 규칙을 잘못 설정하면 서버에 접속하지 못하는 불상사가 생길 수 있습니다. 중요한 변경 전에는 항상 현재 설정을 백업하거나 신중하게 검토하는 습관이 필요합니다.

더 쉽고 간편하게, ufw 방화벽으로 전환하기

iptables가 강력하지만 다소 어렵게 느껴진다면, ufw (Uncomplicated Firewall)가 좋은 대안이 될 수 있습니다. ufwiptables를 보다 쉽게 관리할 수 있도록 설계된 인터페이스를 제공하며, 특히 일반적인 방화벽 설정 작업을 훨씬 직관적으로 수행할 수 있게 해줍니다.

ufw 설치 확인 및 설치

Ubuntu에는 ufw가 기본적으로 설치되어 있는 경우가 많습니다. 만약 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install ufw

ufw로 전환 전 주의사항: 기존 iptables 규칙 처리

ufw는 내부적으로 iptables를 사용해 규칙을 관리합니다. 따라서 ufw를 사용하기로 결정했다면, 기존에 iptables-persistent 등을 통해 수동으로 관리되던 iptables 규칙과의 충돌을 피하는 것이 중요합니다.

가장 깔끔한 방법은 기존의 iptables 규칙을 초기화하고, iptables-persistent 서비스를 비활성화하여 ufw가 방화벽 규칙을 완전히 제어하도록 하는 것입니다.

기존 iptables 규칙 초기화 (주의!):

sudo iptables -F  # 모든 체인의 규칙을 삭제
sudo iptables -X  # 비어있는 사용자 정의 체인 삭제
sudo iptables -Z  # 모든 체인의 카운터 초기화

중요: 이 명령은 현재 활성화된 모든 iptables 규칙을 즉시 삭제합니다. SSH 연결이 끊어질 수 있으므로, ufw에서 SSH를 허용한 후 진행하거나 콘솔 접근이 가능한 환경에서 신중하게 실행해야 합니다.

iptables-persistent 서비스 중지 및 비활성화:

sudo systemctl stop netfilter-persistent
sudo systemctl disable netfilter-persistent

저장된 iptables 규칙 파일 삭제 (선택 사항, 권장):

규칙 파일 위치는 시스템에 따라 다를 수 있으나, 일반적으로 /etc/iptables/rules.v4 와 /etc/iptables/rules.v6 입니다.

sudo rm /etc/iptables/rules.v4
sudo rm /etc/iptables/rules.v6

이제 ufw를 안심하고 설정할 수 있는 환경이 마련되었습니다.

ufw 기본 설정 및 활성화

기본 정책 설정 (중요):
외부에서 들어오는 모든 연결은 기본적으로 차단하고, 내부에서 나가는 모든 연결은 허용하는 것이 일반적인 보안 정책입니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing

필수 포트 허용 (SSH):
방화벽을 활성화하기 전에 반드시 SSH 접속 포트를 허용해야 합니다. 그렇지 않으면 서버에 접속할 수 없게 됩니다.

sudo ufw allow ssh  # 기본 SSH 포트 22번을 허용
# 또는 포트 번호를 직접 지정
# sudo ufw allow 22/tcp

애플리케이션 포트 허용 (예: 8080번 포트):
앞서 iptables에서 예시로 들었던 8080번 포트를 ufw로 허용해 보겠습니다.

sudo ufw allow 8080/tcp

서비스 이름(예: http, https)으로도 포트를 지정할 수 있습니다: sudo ufw allow http (80/tcp 허용)

ufw 활성화:
모든 준비가 완료되었으면 ufw를 활성화합니다.

sudo ufw enable

활성화 시 기존 연결이 끊어질 수 있다는 경고 메시지가 나타납니다. ‘y’를 입력하여 진행합니다.

ufw 상태 확인 및 관리

상태 확인:

sudo ufw status
# 자세한 정보 확인
sudo ufw status verbose
# 규칙 번호와 함께 확인
sudo ufw status numbered

규칙 삭제:
규칙 번호를 확인한 후 해당 번호로 삭제할 수 있습니다. (예: 1번 규칙 삭제)

sudo ufw delete 1

또는 추가했던 방식 그대로 delete를 사용합니다.

sudo ufw delete allow 8080/tcp

ufw 비활성화:

sudo ufw disable

개인적으로는 여러 프로젝트를 관리하면서 다양한 포트를 열고 닫아야 할 때 ufw의 간결함이 매우 편리하게 느껴졌습니다. 특히 복잡한 네트워크 설정이 필요 없는 경우, ufw는 시간과 노력을 크게 절약해 주는 훌륭한 도구라고 생각합니다.

마무리

오늘 설명해 드린 iptablesufw 사용법이 여러분의 서버 운영에 조금이나마 도움이 되었으면 좋겠습니다. 저 역시 이러한 과정을 통해 리눅스 시스템과 네트워크에 대한 이해를 더욱 깊게 할 수 있었습니다.

읽어주셔서 감사합니다. 🙂

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤