UFW 방화벽 설정 방법: VPS 보안 강화 가이드
Linux VPS 보안을 위해 UFW를 설정하는 방법을 설명합니다. SSH 접속 차단 사고를 방지하기 위한 필수 규칙과 default-deny 정책 설정법을 확인하십시오. 단 4개의 명령어로 서버의 보안 노출을 효과적으로 제거할 수 있습니다.
UFW의 정의 및 필요성
UFW는 Uncomplicated Firewall의 약자이며, 그 이름은 정직합니다. 이 도구는 Linux kernel에 이미 포함된 firewall을 위한 사용자 친화적인 front end입니다. 따라서 raw rules를 직접 작성하는 대신 ufw allow 22/tcp와 같은 짧은 명령어를 사용할 수 있습니다. 초기 상태의 VPS에서는 기본적으로 모든 listening service가 인터넷에서 접근 가능합니다. firewall은 이 설정을 반대로 바꿉니다. 모든 접속을 차단한 뒤, 실제로 사용하는 소수의 port만 허용합니다. 이 설정 하나만으로 약 4개의 명령어를 통해 대부분의 보안 노출을 제거할 수 있습니다.
설정을 변경하기 전에 무엇이 listening 상태인지 확인해야 합니다. firewall은 바로 이 service들의 접속 여부를 결정하기 때문입니다. ss -tlnp를 사용하여 listening 상태 확인하기를 수행하는 것이 올바른 첫 단계입니다.
접속 차단을 방지하기 위한 단 하나의 규칙
방화벽 설정 시 사람들이 가장 두려워하는 실수입니다. UFW를 기본 차단(default-deny) 정책으로 활성화한 후 SSH를 허용하지 않으면, 방화벽이 작동하는 즉시 연결이 끊겨 다시 접속할 수 없습니다. UFW를 활성화하기 전에 항상 SSH를 먼저 허용하십시오. 이것이 핵심이며, 아래 단계는 안전한 순서로 구성되어 있습니다.
만약 접속이 차단되더라도 해결 방법이 있습니다. VNC 또는 Serial을 통한 서비스 제공업체의 웹 콘솔은 SSH를 거치지 않으므로, 해당 콘솔로 로그인하여 ufw disable를 실행하거나 누락된 규칙을 추가할 수 있습니다.
Step 1: 기본 정책 설정
먼저 UFW가 모든 수신 트래픽은 차단하고 모든 송신 트래픽은 허용하도록 설정합니다.
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming 설정이 중요합니다. 이 설정은 명시적인 허용 규칙이 없는 모든 포트를 외부에서 접속할 수 없게 차단합니다. 서비스가 해당 포트에서 실행 중이더라도 접속이 불가능합니다. allow outgoing 설정은 서버가 업데이트 등을 위해 인터넷에 정상적으로 접속할 수 있게 합니다. 이 두 명령은 정책만 변경합니다. 3단계에서 UFW를 활성화하기 전까지는 아무것도 적용되지 않습니다.
Step 2: 실제 필요한 포트 허용하기
설정을 활성화하기 전에, 연결 유지를 위해 SSH를 먼저 허용하십시오.
sudo ufw allow 22/tcpUFW는 SSH에 대한 속도 제한(rate-limit) 기능도 제공합니다. sudo ufw limit 22/tcp를 사용하면 포트는 허용하되, 30초 동안 6회 이상의 연결을 시도하는 IP 주소를 차단합니다. 이를 통해 추가 소프트웨어 없이도 무차별 대입 공격(brute-force) 스크립트를 방어할 수 있습니다.
웹 서버를 운영하는 경우, HTTP와 HTTPS도 허용하십시오.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp공개적으로 서비스할 포트만 허용하십시오. 5432 포트를 사용하는 Postgres와 같은 데이터베이스는 허용 규칙을 설정하지 않는 것이 원칙입니다. 대신 127.0.0.1에 바인딩하여 해당 서버 내에서만 접속할 수 있도록 설정하십시오. 개방된 모든 포트는 방어해야 할 통로입니다. 따라서 허용 목록을 최소한으로 유지하십시오.
서버에 필요한 ufw 명령어 전체 시퀀스를 여기서 생성한 후, 순서대로 실행할 수 있습니다.
Step 3: Enable, and confirm it is on
sudo ufw enable이 명령은 기존 SSH 연결을 중단할 수 있다는 경고를 표시합니다. Step 2에서 22/tcp을 허용했으므로 세션은 유지됩니다. 결과를 확인하십시오:
sudo ufw status verboseStatus: 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은 firewall이 실행 중임을 의미합니다. 모든 rule은 일반 형태와 (v6)이 포함된 형태의 두 가지로 나타납니다. 이는 UFW가 IPv4뿐만 아니라 IPv6도 관리하고 있음을 나타냅니다. 만약 (v6) 라인이 없다면 IPv6 설정이 관리되지 않는 상태입니다. 이 문제는 the IPv6 firewall post에서 다룹니다.
나중에 규칙 관리하기
특정 규칙을 삭제하기 위해 번호와 함께 규칙을 확인하려면 다음을 실행합니다:
sudo ufw status numbered
sudo ufw delete 3관리 서비스를 본인의 IP에만 노출하는 방법으로, 특정 주소에서만 포트에 접속하도록 허용하려면 다음을 실행합니다:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp방화벽은 하나의 보안 계층입니다. 방화벽은 포트에 도달할 수 있는 트래픽을 제어하지만, SSH와 같이 열려 있는 포트에 반복적으로 접속을 시도하는 공격을 늦추지는 못합니다. 이를 방지하려면 Fail2ban in front of SSH를 추가하여 반복적인 공격자를 차단하십시오. 심층 방어(Defence in depth)란 각 계층이 다른 계층이 처리할 수 없는 부분을 보완하는 것을 의미합니다.
방화벽은 포트의 개념과 서비스의 리스닝 방식을 이해한 후에 사용하는 것이 유효하며, 방화벽 설정은 새 VPS 운영 초기 10분 내에 수행해야 할 작업 중 하나입니다.
FAQ
UFW를 활성화하면 SSH 세션이 끊깁니까?
SSH를 먼저 허용했다면 끊기지 않습니다. sudo ufw enable를 실행하기 전에 sudo ufw allow 22/tcp를 실행하십시오. 방화벽이 22번 포트를 허용하므로 연결이 유지됩니다. SSH 허용 규칙 없이 기본 차단(default-deny) 방화벽을 활성화하면 연결이 끊기는 위험이 있습니다. 이 문제가 발생하면 제공업체의 VNC 또는 serial console을 통해 로그인한 후 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 N을 실행하십시오. 또는 sudo ufw delete allow 80/tcp와 같이 상세 사양을 지정하여 삭제할 수도 있습니다.
특정 IP 주소에서만 포트를 허용하려면 어떻게 합니까?
일반적인 allow 규칙 대신 from 규칙을 사용하십시오. 사무실 주소에서만 PostgreSQL에 접속하게 하려면 sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp를 실행하십시오. 기본 차단 정책이 설정된 경우, 규칙이 허용하기 전까지 해당 포트는 모두에게 닫혀 있습니다. 따라서 이 from 규칙만이 유일한 접속 방법입니다. 전체 인터넷은 차단된 상태로 유지되며 지정한 주소만 통과할 수 있습니다. 이때 일반적인 allow 5432/tcp 규칙을 추가하지 마십시오. 포트가 모든 사용자에게 개방됩니다. 이 방법은 데이터베이스나 관리 패널을 노출할 때 가장 안전한 방법입니다. sudo ufw status verbose를 실행하면 포트 옆에 소스 주소가 표시되어 설정을 확인할 수 있습니다.