UFW 방화벽 설정, 포트 하나 잘못 열었다가 서버 털릴 뻔했다

서버 세팅하다가 UFW 방화벽 설정에서 막힌 분들께

리눅스 UFW 방화벽 설정, 처음엔 진짜 뭔 말인지 하나도 모르겠더라고요. 저도 처음 Ubuntu 서버를 올렸을 때 "방화벽은 당연히 켜야 하는 거 아닌가?" 싶어서 무작정 ufw enable 만 딱 쳤다가, SSH 포트까지 막혀서 서버에 접속 자체가 안 되는 참사를 겪었습니다. 그때 패닉했던 거 생각하면 지금도 식은땀이 나요.

그래서 이 글은 "명령어 모음"이 아니라, 실제로 제가 삽질하면서 배운 순서대로 설명드리려고 합니다. 포트 개방, 차단, 규칙 삭제, 상태 확인까지 — 딱 이 글 하나만 보셔도 실 서버에 바로 적용하실 수 있게 정리해뒀습니다.

핵심 먼저 말씀드리면: UFW를 켜기 전에 반드시 SSH 포트(기본 22번)를 먼저 허용해야 합니다. 이 순서를 지키지 않으면 서버 접속이 끊깁니다.

서버 세팅하다가 UFW 방화벽 설정에서 막힌 분들께

UFW가 뭔지부터 — 방화벽 개념 쉽게 이해하기

UFW는 Uncomplicated Firewall의 약자인데요, 이름 그대로 "복잡하지 않은 방화벽"입니다. 리눅스의 기본 방화벽 엔진인 iptables는 규칙 문법이 복잡해서 진입 장벽이 꽤 높은데, UFW는 그걸 사람이 읽을 수 있는 명령어로 감싸놓은 프론트엔드예요.

UFW = iptables의 쉬운 껍데기 (리모컨 없이 TV 내부 회로를 직접 건드리는 것 vs. 리모컨으로 채널 바꾸는 것)

UFW가 기본 설치되는 배포판

배포판UFW 기본 포함 여부
Ubuntu 18.04 이상✅ 기본 포함
Debian 11 이상✅ 기본 포함
CentOS / Rocky Linux❌ firewalld 사용 (UFW 별도 설치 필요)
Raspberry Pi OS✅ 기본 포함

CentOS 계열을 쓰신다면 sudo apt install ufw 전에 sudo yum install ufw로 설치해야 하는데, 솔직히 CentOS에서는 그냥 firewalld 쓰는 게 훨씬 편합니다 (UFW 굳이 쓰실 필요 없어요).

UFW가 제어하는 것들

방화벽은 쉽게 말해 "우리 서버로 들어오고 나가는 트래픽에 문지기를 세우는 것"입니다.

▶ 인바운드(Inbound): 외부에서 서버로 들어오는 연결 (예: 웹 브라우저가 내 서버 80번 포트에 접속)

▶ 아웃바운드(Outbound): 서버에서 외부로 나가는 연결 (예: 서버가 apt update 할 때 인터넷에 연결)

▶ 포트(Port): 서비스별 문 번호. 80=HTTP, 443=HTTPS, 22=SSH, 3306=MySQL 이런 식

UFW 기본 정책은 "인바운드 전부 차단, 아웃바운드 전부 허용"입니다. 그래서 UFW를 켜면 내가 명시적으로 열어준 포트 외에는 전부 막히는 거예요. 이게 보안 측면에서는 가장 안전한 기본값이지만, SSH 포트를 미리 열어두지 않으면 자기 서버에도 못 들어가는 상황이 벌어지는 거죠.

UFW가 뭔지부터 — 방화벽 개념 쉽게 이해하기

실제로 UFW 방화벽 설정하는 방법 — 단계별로 따라하기

제가 실제 Ubuntu 24.04 LTS 서버에 UFW를 설정했던 순서 그대로 알려드릴게요. 이 순서 지키시면 서버 접속 끊길 일 없습니다.

1단계: UFW 설치 및 상태 확인

먼저 UFW가 설치돼 있는지, 현재 활성화 상태인지 확인합니다.

sudo apt update && sudo apt install ufw -y sudo ufw status verbose

Status: inactive 라고 뜨면 아직 꺼진 상태입니다. 이 상태에서 규칙을 먼저 잡아두고 켜는 게 포인트예요.

2단계: 기본 정책 설정 (이게 진짜 중요합니다)

sudo ufw default deny incoming sudo ufw default allow outgoing 

인바운드는 전부 차단, 아웃바운드는 전부 허용. 이게 가장 안전한 기본값입니다.

3단계: SSH 포트 먼저 열기 (★ 이거 빠뜨리면 서버 접속 불가)

sudo ufw allow 22/tcp

만약 SSH 포트를 22번이 아닌 다른 번호(예: 2222)로 바꿔서 쓰고 계시다면 반드시 그 번호로 여세요.

sudo ufw allow 2222/tcp

저는 처음에 이 단계를 건너뛰고 ufw enable을 눌렀다가 SSH가 끊겼고, 결국 클라우드 콘솔(AWS EC2 기준으로는 Session Manager)로 겨우 복구했습니다. 그때 30분을 날렸어요 ㅠ;;

4단계: 필요한 서비스 포트 추가 개방

웹 서버를 운영한다면 HTTP(80)와 HTTPS(443)를 열어야 합니다.

sudo ufw allow 80/tcp sudo ufw allow 443/tcp

UFW는 서비스 이름으로도 허용이 가능합니다. sudo ufw allow Nginx Full 처럼 치면 80, 443을 한 번에 열어줍니다 (Nginx가 설치돼 있어야 함). 아래는 자주 쓰는 포트 정리예요.

서비스포트명령어
SSH22`ufw allow 22/tcp`
HTTP80`ufw allow 80/tcp`
HTTPS443`ufw allow 443/tcp`
MySQL3306`ufw allow 3306/tcp`
PostgreSQL5432`ufw allow 5432/tcp`
Node.js (예시)3000`ufw allow 3000/tcp`

MySQL이나 DB 포트는 가능하면 외부에 열지 말고, 특정 IP만 허용하는 방식을 쓰세요. 아래에서 설명드립니다.

5단계: 특정 IP만 허용하기

DB 포트처럼 민감한 포트는 전체 개방 대신 특정 IP에서만 접근 가능하게 설정할 수 있어요.

sudo ufw allow from 123.456.789.0 to any port 3306

이렇게 하면 123.456.789.0 IP에서만 3306 포트에 접근 가능하고, 나머지는 전부 차단됩니다. 실무에서 진짜 많이 쓰는 패턴이에요.

6단계: UFW 활성화

규칙을 다 잡았으면 이제 방화벽을 켭니다.

sudo ufw enable 

"Command may disrupt existing ssh connections. Proceed with operation (y|n)? "라고 물어보는데, SSH 포트를 이미 열어뒀으니 y 눌러도 됩니다.

7단계: 규칙 확인 및 삭제

현재 적용된 규칙 목록을 보려면:

sudo ufw status numbered 

번호가 붙어서 나오는데, 특정 규칙을 삭제하려면:

sudo ufw delete 3 

(3번 규칙 삭제 예시) 규칙 번호는 status numbered 로 확인하고 쓰세요.

▶ UFW 비활성화: sudo ufw disable

▶ 규칙 전체 초기화: sudo ufw reset (주의: 모든 규칙이 지워집니다)

▶ 로그 확인: sudo ufw logging on 후 sudo tail -f /var/log/ufw.log

실제로 UFW 방화벽 설정하는 방법 — 단계별로 따라하기

자주 묻는 질문 — UFW 방화벽 설정

Q. UFW를 켰더니 SSH가 끊겼어요. 어떻게 복구하나요?

A. SSH가 끊겼다면 클라우드 제공업체의 웹 콘솔(AWS는 Session Manager, GCP는 Cloud Shell, DigitalOcean은 Recovery Console)로 접속하세요. 거기서 sudo ufw allow 22/tcp 후 sudo ufw reload를 실행하면 복구됩니다. 앞으로는 반드시 UFW 활성화 전에 SSH 포트를 먼저 여세요!

Q. UFW와 클라우드 보안 그룹(Security Group)은 어떻게 다른가요?

A. 클라우드 보안 그룹(AWS Security Group, GCP Firewall Rules 등)은 서버 바깥, 네트워크 레벨에서 트래픽을 제어합니다. UFW는 서버 OS 내부에서 제어하는 거예요. 둘 다 쓰면 이중 방어가 되지만, 보안 그룹에서 막힌 포트는 UFW에서 열어도 소용없습니다. 둘 다 열어줘야 접속 가능합니다.

Q. UFW 규칙은 서버 재부팅 후에도 유지되나요?

A. 네, UFW는 systemd 서비스로 등록되어 있어서 재부팅 후에도 자동으로 활성화됩니다. sudo systemctl is-enabled ufw로 확인해보시면 enabled라고 뜹니다.

Q. 특정 포트를 범위로 한 번에 열 수 있나요?

A. 가능합니다. 예를 들어 8000~9000번 포트를 모두 열려면 sudo ufw allow 8000:9000/tcp처럼 콜론(:)으로 범위를 지정하면 됩니다.

오늘 바로 UFW 설정해보세요 — 핵심 요약

리눅스 UFW 방화벽 설정, 생각보다 어렵지 않으시죠? 핵심만 다시 정리해드릴게요.

  • UFW 활성화 전에 반드시 SSH 포트(22번 또는 커스텀 포트)를 먼저 허용할 것
  • 기본 정책은 deny incoming / allow outgoing — 이게 가장 안전한 시작점
  • DB 포트(3306, 5432 등)는 전체 개방 대신 특정 IP만 허용하는 방식으로 설정할 것

지금 바로 서버에 접속해서 sudo ufw status verbose부터 한번 쳐보세요. 현재 방화벽 상태가 어떤지 확인하는 것부터가 첫걸음입니다. 생각보다 많은 서버들이 방화벽 비활성화 상태로 운영되고 있어서 (저도 처음엔 그랬습니다), 확인해보시면 깜짝 놀라실 수도 있어요.

혹시 UFW 설정하다가 막히는 부분이 있으시면 댓글로 남겨주세요! 제가 겪었던 삽질이 많아서 웬만한 상황은 같이 해결할 수 있을 것 같습니다 😄 이 글이 도움이 되셨다면 구독 눌러주시면 리눅스 서버 관련 꿀팁을 계속 올려드릴게요.

오늘 바로 UFW 설정해보세요 — 핵심 요약

이 블로그의 인기 게시물

이메일 답장 10개를 5분 만에 끝내는 ChatGPT 활용법 (프롬프트 공개)

엑셀 수식, 저도 몰랐어요 - AI한테 맡겼더니 다 되더라고요

AI한테 맡겼더니 오히려 일이 늘었던 이유, 이 단계를 건너뛰어서였어요

ChatGPT에 질문만 던지고 있다면, 지금 절반도 못 쓰고 있는 거예요

출근길 10분으로 하루 할 일을 AI가 자동 정리하는 아침 루틴