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개의 명령어를 통해 대부분의 보안 노출 위험을 제거할 수 있습니다.

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

서버 접근 차단을 방지하는 단 하나의 규칙

방화벽 설정을 두려워하게 만드는 가장 흔한 실수는 다음과 같습니다. UFW를 기본 거부(default-deny) 정책으로 활성화하면서 SSH 허용 규칙을 추가하지 않는 경우입니다. 이 상태로 방화벽을 켜면 즉시 현재 연결이 끊기며 서버에 다시 접속할 수 없게 됩니다. UFW를 활성화하기 전에 항상 SSH를 먼저 허용하십시오. 이것이 전부이며, 아래 단계는 안전한 순서대로 진행됩니다.

만약 실수로 접속이 차단되더라도 당황할 필요는 없습니다. 서버 제공업체가 제공하는 웹 콘솔이나 VNC, 시리얼 연결은 SSH를 거치지 않으므로, 해당 경로로 로그인하여 ufw disable 명령을 실행하거나 누락된 규칙을 추가하면 됩니다.

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

자체 주소가 변경되거나 여러 시스템에서 접속해야 하면 이 방식은 더 이상 제대로 작동하지 않는다. 일반적인 해결 방법은 포트를 아예 외부에 공개하지 않고 대신 사설 네트워크를 통해 서비스에 접속하는 것이다. 서버의 사설 서브넷을 tailnet에 광고하기는 이를 위한 기능이다.

방화벽은 하나의 계층일 뿐입니다. 방화벽은 포트에 도달할 수 있는 대상을 제어하지만, SSH처럼 열어둔 포트에 무차별 대입 공격을 시도하는 행위까지 늦추지는 못합니다. 이를 방지하려면 SSH 앞단에 Fail2ban 구성을 추가하여 반복적인 공격자를 차단하십시오. 심층 방어란 각 계층이 다른 계층에서 다루지 못하는 부분을 보완하는 것을 의미합니다.

방화벽은 포트의 개념과 서비스의 리스닝 방식을 이해한 후에야 의미가 있으며, 방화벽 설정은 새로운 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/ufwIPV6=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으로 확인하면 포트 옆에 소스 주소가 표시됩니다.