이 글에는 제휴 링크(affiliate link)가 포함되어 있습니다. Vultr·DigitalOcean 가입 링크로 가입하시면 추가 비용 없이 크레딧 혜택을 받으실 수 있으며, 블로그 운영에 도움이 됩니다.
VPS를 방치하면 곧 봇이 들어온다
VPS 한 대를 개통하고 아무 설정도 하지 않으면, 인터넷 자동화 봇들이 22번 포트(SSH)를 무차별 대입(brute force) 공격하기 시작합니다. 로그를 확인해 보면 실패한 로그인 시도가 계속 기록되어 있을 것입니다. 방화벽과 SSH 보안 강화는 VPS 셋업의 가장 첫 단계입니다.

이 튜토리얼에서는 ufw(Uncomplicated Firewall)로 기본 방화벽을 설정하고, SSH 보안을 강화하여 자동화 공격을 차단하는 전체 과정을 다룹니다. Vultr, DigitalOcean, Hetzner VPS에서 그대로 적용됩니다.
1. ufw 설치 및 기본 룰셋
Ubuntu/Debian에는 기본 설치되어 있습니다. 없다면:
sudo apt update && sudo apt install -y ufw
기본 정책을 설정합니다 — 들어오는 건 전부 거부, 나가는 건 전부 허용:
sudo ufw default deny incoming
sudo ufw default allow outgoing
2. SSH 허용 후 방화벽 활성화
주의: SSH를 허용하기 전에 방화벽을 켜면 접속이 끊깁니다. 반드시 SSH 먼저 허용:
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw enable
상태 확인:
sudo ufw status verbose

3. 웹 서비스 포트 개방
Nginx/Apache 웹서버를 운영한다면:
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
4. SSH 포트 변경 (보안 강화 1단계)
기본 22번 포트를 다른 포트(예: 2222)로 변경하면 22번 포트만 노리는 자동화 스캔을 줄일 수 있습니다:
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sudo systemctl restart sshd
Ubuntu 22.10 이후(24.04 포함)는 sshd가 ssh.socket 소켓 활성화로 시작해서 sshd_config의 Port만 바꾸면 적용되지 않는 경우가 있습니다(Ubuntu 서버 팀 안내). 새 포트로 접속되는지 별도 세션에서 확인하기 전에는 기존 22번 접속과 방화벽 규칙을 지우지 마세요. /etc/ssh/sshd_config.d/의 설정 파일이 같은 항목을 덮어쓸 수도 있으니 sudo sshd -T로 실제 적용값을 확인하세요.
변경 후 ufw에서 새 포트 허용:
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
주의: 기존 SSH 세션을 끊기 전에 새 포트로 접속되는지 반드시 확인하세요.
5. 키 인증 전환 (비밀번호 로그인 차단)
가장 효과적인 SSH 보안 조치입니다. 비밀번호 로그인을 끄고 키 인증만 허용:
# 로컬에서 키 생성 (아직 없다면)
ssh-keygen -t ed25519
# 공개키를 VPS에 복사
ssh-copy-id user@your-vps-ip
# VPS에서 비밀번호 로그인 차단
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
키 인증을 켠 뒤에 비밀번호 로그인을 꺼야 합니다 — 순서가 중요합니다.

6. fail2ban으로 무차별 대입 공격 차단
fail2ban은 로그를 모니터링하여 여러 번 실패한 IP를 자동으로 차단합니다:
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
기본 설정으로도 효과적이지만, 커스텀 규칙을 추가할 수 있습니다:
sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF'
[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600
EOF
sudo systemctl restart fail2ban
3번 실패하면 1시간 차단, 10분 내 3번 실패 기준입니다.
7. 포트 노출 최소화 원칙
필요한 포트만 열어두는 것이 핵심입니다. ufw status로 주기적으로 열린 포트를 점검하세요. 데이터베이스(3306, 5432), Redis(6379)는 절대 외부에 열지 말고, 같은 서버 내 통신으로만 사용합니다.
마무리: 보안은 최소 권한이 전부다
ufw 방화벽 + SSH 키 인증 + fail2ban 조합으로 VPS의 자동화 공격 위험을 크게 줄일 수 있습니다. VPS 개통 직후 바로 적용하세요.
추천 VPS: 이 튜토리얼은 Vultr, DigitalOcean, Hetzner VPS에서 그대로 적용됩니다.
자주 묻는 질문 (FAQ)
Q1. 방화벽을 켰더니 SSH 접속이 끊겼습니다.
SSH를 허용하기 전에 ufw를 활성화하면 접속이 끊깁니다. 반드시 sudo ufw allow 22/tcp를 먼저 실행한 뒤 sudo ufw enable 순서로 진행하세요.
Q2. SSH 포트를 22번에서 바꾸면 실제로 효과가 있나요?
자동화 봇 대부분이 22번 포트만 노리기 때문에 2222 같은 다른 포트로 옮기면 단순 스캔 일부를 피할 수 있습니다. 다만 포트 변경 후 ufw에서 새 포트를 허용하고, 기존 SSH 세션을 끊기 전에 새 포트로 접속되는지 반드시 확인해야 합니다.
Q3. 키 인증과 비밀번호 차단은 어떤 순서로 해야 하나요?
순서가 중요합니다. ssh-keygen으로 키를 만들고 ssh-copy-id로 공개키를 서버에 올려 키 접속이 되는 것을 확인한 다음에 PasswordAuthentication no를 적용하세요. 반대로 하면 서버에 들어갈 수단이 사라집니다.
Q4. 데이터베이스 포트도 열어야 하나요?
열지 마세요. MySQL(3306), PostgreSQL(5432), Redis(6379)는 외부에 노출하지 않고 같은 서버 안에서만 통신하게 두는 것이 원칙입니다. sudo ufw status로 주기적으로 열린 포트를 점검하세요.



















