SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor · 업데이트됨 2026-08-27

UFW 방화벽 설정 방법: VPS 보안 기초

UFW를 사용하여 VPS 보안을 강화하는 방법을 설명합니다. 기본 거부 정책을 설정하고 SSH 접속 차단 없이 필요한 포트만 허용하는 안전한 명령어 순서를 안내합니다. 서버 관리자가 반드시 알아야 할 필수 방화벽 설정 가이드를 확인하여 외부 공격으로부터 서버를 보호하십시오.

UFW란 무엇이며 왜 필요한가

UFW는 Uncomplicated Firewall의 약자로, 이름 그대로 사용하기 간편한 방화벽입니다. 리눅스 커널에 내장된 방화벽을 쉽게 다룰 수 있도록 돕는 프런트엔드 도구이므로, 복잡한 규칙을 직접 작성하는 대신 ufw allow 22/tcp와 같은 짧은 명령어를 사용합니다. 새로 생성한 VPS는 기본적으로 모든 리스닝 서비스가 외부 인터넷에서 접근 가능한 상태입니다. 방화벽은 이를 반대로 뒤집어, 모든 접근을 차단한 뒤 실제로 사용하는 포트만 허용하는 방식으로 동작합니다. 이 간단한 설정만으로도 약 4개의 명령어를 통해 대부분의 보안 노출을 제거할 수 있습니다. UFW는 Ubuntu와 Debian에서 사용하는 도구이므로, Rocky나 AlmaLinux를 사용하는 VPS라면 규칙을 영역(zone)별로 관리하는 firewalld를 사용해야 합니다.

방화벽을 설정하기 전에 현재 어떤 서비스가 리스닝 상태인지 확인해야 합니다. 방화벽은 바로 이 서비스들의 접근 여부를 결정하기 때문입니다. ss -tlnp를 사용하여 리스닝 상태를 확인하는 것이 올바른 첫 단계입니다.

접근 차단을 방지하는 필수 규칙

방화벽 사용을 주저하게 만드는 가장 큰 실수는 다음과 같습니다. 기본 차단 정책으로 UFW를 활성화하면서 SSH 허용을 잊는 경우입니다. 이 경우 방화벽이 켜지는 즉시 현재 연결이 끊기며 서버에 다시 접속할 수 없게 됩니다. 이를 방지하려면 UFW를 활성화하기 전에 반드시 SSH를 먼저 허용해야 합니다. 이것이 전부이며, 아래 단계들은 안전한 순서대로 진행됩니다.

만약 실수로 접속이 차단되더라도 당황할 필요는 없습니다. 제공업체의 웹 콘솔이나 VNC, 시리얼 콘솔은 SSH를 거치지 않으므로, 해당 경로로 로그인하여 ufw disable를 실행하거나 누락된 규칙을 추가하면 됩니다. 방화벽에 의한 차단은 뚜렷한 증상이 있습니다. 패킷이 드롭되면 SSH 클라이언트는 타임아웃이 발생할 때까지 응답을 기다리지만, SSH 데몬이 중지된 상태라면 즉시 연결이 거부됩니다. 이것이 connection refused와 connection timed out의 차이입니다.

1단계: 기본 정책 설정

먼저 UFW가 모든 수신 연결을 거부하고 모든 발신 연결을 허용하도록 설정합니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming는 중요한 절반의 설정입니다. 이는 명시적인 허용 규칙이 없는 모든 포트가 외부로부터 닫힘을 의미하며, 서비스가 해당 포트에서 수신 대기 중이라도 마찬가지입니다. allow outgoing은 서버가 업데이트 등을 위해 인터넷에 정상적으로 접근할 수 있도록 합니다. 이 두 명령어는 정책만 변경할 뿐이며, 3단계에서 UFW를 활성화하기 전까지는 아무것도 적용되지 않습니다.

2단계: 필요한 포트만 허용하기

방화벽을 활성화하기 전에 SSH 포트를 열어 연결이 끊기지 않도록 합니다:

sudo ufw allow 22/tcp

UFW를 사용하면 SSH 연결에 속도 제한을 걸 수 있습니다. sudo ufw limit 22/tcp 명령은 해당 포트를 허용하되, 30초 동안 6회 이상 연결을 시도하는 주소를 차단하므로 별도의 소프트웨어 없이도 무차별 대입 공격 스크립트를 효과적으로 방어할 수 있습니다.

웹 서버를 운영 중이라면 HTTP와 HTTPS도 허용해야 합니다:

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

외부에 서비스하는 포트만 허용하십시오. 5432 포트를 사용하는 Postgres와 같은 데이터베이스는 거의 예외 없이 외부 접근 허용 규칙을 추가해서는 안 됩니다. 대신 127.0.0.1에 바인딩하여 해당 서버 내부에서만 접근할 수 있도록 설정하십시오. 포트를 하나 열 때마다 방어해야 할 통로가 하나 늘어나는 셈이므로, 허용 목록은 최대한 짧게 유지해야 합니다.

서버에 필요한 ufw 명령 전체를 여기서 구성한 뒤 순서대로 실행할 수 있습니다:

ToolUFW rule generator

3단계: 활성화 및 상태 확인

sudo ufw enable

이 명령을 실행하면 기존 SSH 연결이 끊길 수 있다는 경고가 표시됩니다. 2단계에서 22/tcp을 허용했으므로 현재 세션은 유지됩니다. 결과를 확인하십시오.

sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing)

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp                     ALLOW IN    Anywhere

여기서 두 가지를 확인해야 합니다. Status: active은 방화벽이 실행 중임을 의미합니다. 모든 규칙이 두 번씩 나타나는데, 한 번은 일반 규칙이고 다른 한 번은 (v6)가 포함된 규칙입니다. 이는 UFW가 IPv4뿐만 아니라 IPv6도 관리하고 있음을 나타냅니다. (v6) 줄이 보이지 않는다면 IPv6 쪽이 관리되지 않는 상태이며, 이는 IPv6 방화벽 게시물에서 다루는 함정에 해당합니다.

규칙 관리 방법

규칙에 번호를 붙여 확인하고 삭제하려면 다음 명령어를 사용합니다.

sudo ufw status numbered
sudo ufw delete 3

특정 IP 주소에서만 포트에 접근하도록 허용하려면 다음 방식을 사용합니다. 관리용 서비스를 본인의 IP에서만 접근하게 할 때 유용합니다.

sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp

이 방식은 본인의 IP 주소가 변경되거나 여러 대의 기기에서 접근해야 할 때 한계가 있습니다. 일반적인 해결책은 포트를 외부로 아예 열지 않고 사설 네트워크를 통해 서비스에 접근하는 것입니다. 이것이 바로 서버의 사설 서브넷을 tailnet에 광고하는 이유입니다.

방화벽은 하나의 보안 계층일 뿐입니다. 포트 접근은 제어할 수 있지만, SSH처럼 열려 있는 포트에 무차별 대입 공격을 시도하는 것을 막지는 못합니다. 이를 위해 SSH 앞에 Fail2ban을 추가하여 반복적인 공격자를 차단해야 합니다. 심층 방어(Defence in depth)란 각 계층이 서로 보완할 수 없는 부분을 담당하는 것을 의미합니다.

방화벽은 포트의 개념과 서비스의 리스닝 방식을 이해한 뒤에야 의미가 있으며, 방화벽 설정은 새로운 VPS를 설정하는 첫 10분 과정 중 하나입니다.

FAQ

UFW를 활성화하면 SSH 세션이 끊기나요?

SSH를 먼저 허용하면 끊기지 않습니다. sudo ufw enable를 실행하기 전에 sudo ufw allow 22/tcp을 먼저 실행하십시오. 방화벽이 포트 22를 허용하므로 연결이 유지됩니다. SSH 허용 규칙 없이 기본 거부(default-deny) 방화벽을 활성화하면 연결이 차단되는 위험이 있습니다. 이런 상황이 발생하면 제공업체의 VNC나 시리얼 콘솔로 로그인하여 ufw disable을 실행하십시오.

VPS에는 어떤 포트를 열어야 하나요?

외부에 서비스하는 포트만 열어야 합니다. 서버를 관리하기 위한 SSH(22/tcp)와 웹사이트를 운영할 경우 HTTP 및 HTTPS(80/tcp, 443/tcp)만 엽니다. 나머지는 모두 거부 상태로 둡니다. 데이터베이스와 같은 내부 서비스는 127.0.0.1에 바인딩하고 방화벽 규칙을 추가하지 마십시오. 이렇게 하면 네트워크를 통해 외부에서 접근할 수 없습니다.

UFW는 IPv6를 지원하나요?

최신 Ubuntu에서는 지원합니다. /etc/default/ufw에 IPV6=yes이 설정되어 있으므로 각 규칙은 두 스택 모두에 적용되며, ufw status은 (v6) 접미사가 붙은 IPv6 규칙을 보여줍니다. 여전히 문제가 발생할 수 있는 상황은 IPv6 방화벽의 함정에서 다룹니다.

UFW 규칙은 어떻게 삭제하나요?

sudo ufw status numbered를 실행하여 규칙 번호를 확인한 다음, 삭제하려는 규칙 번호인 N을 사용하여 sudo ufw delete N을 실행하십시오. 규칙 명세로 삭제할 수도 있습니다. 예를 들어 sudo ufw delete allow 80/tcp와 같이 사용합니다.

특정 IP 주소에서만 포트에 접근하도록 허용하려면 어떻게 하나요?

일반 allow 규칙 대신 from 규칙을 사용하십시오. 사무실 IP 주소에서만 PostgreSQL에 접근하도록 하려면 sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp을 실행하십시오. 기본 거부 정책을 사용하면 규칙이 추가되기 전까지 모든 포트는 닫혀 있습니다. 따라서 이 from 규칙이 유일한 접근 방법이 됩니다. 전체 인터넷은 차단된 상태로 유지되고 지정한 주소만 통과합니다. 이때 일반 allow 5432/tcp를 추가하지 마십시오. 추가할 경우 모든 사람에게 포트가 열리게 됩니다. 이는 데이터베이스나 관리자 패널을 노출하는 가장 안전한 방법입니다. sudo ufw status verbose으로 확인하면 포트 옆에 소스 주소가 표시됩니다.