VPS 서버를 개설하고 SSH로 접속한 첫날부터, 누군가 당신의 비밀번호를 대입하고 있습니다. 로그인 한 번 틀리면 잠깐 조용하다가, 다시 또 다른 IP에서 시도합니다. 이건 과장이 아니라 인터넷에 연결된 모든 서버의 현실입니다.
SSH 무차별 대입 공격이란?
SSH 무차별 대입 공격(Brute Force Attack)은 자동화된 봇이 수천 개의 IP에서 무작위 비밀번호를 반복 입력하면서 서버 접근을 시도하는 공격입니다. 기본 포트 22번이 열려 있으면 특히 표적이 되며, 수분 안에 수백~수천 회의 로그인 시도가 기록됩니다.
약한 비밀번호 하나면 서버가 통째로 탈취당할 수 있고, 그 서버는 암호화폐 채굴, 스팸 발송, 다른 서버 공격의 거점으로 악용됩니다.
Fail2ban — 자동 공격 차단 도구
Fail2ban은 서버 로그를 실시간으로 감시하다가, 짧은 시간 안에 로그인 실패가 일정 횟수를 초과하면 해당 IP를 자동으로 차단(firewall ban)하는 오픈소스 보안 도구입니다. Linux 시스템에서 가장 널리 쓰이는 SSH 보안 솔루션입니다.
작동 방식은 단순합니다. 호텔 도어맨 같은 역할이라고 생각하면 됩니다 — 5번 연속으로 열쇠를 잘못 꽂으면 더 이상 시도를 허용하지 않고 그 사람을 쫓아냅니다.
Fail2ban 설치 — 1분이면 충분합니다
1단계: 패키지 설치
Ubuntu/Debian 계열에서는 apt 패키지 매니저로 한 번에 설치됩니다.
sudo apt update
sudo apt install fail2ban
설치가 끝나면 Fail2ban 데몬이 자동으로 시작됩니다. 별도 설정 없이도 기본값으로 SSH 보호가 활성화됩니다.
2단계: SSH jail 확인
설치 직후 상태를 확인합니다.
sudo fail2ban-client status sshd
출력에서 다음 항목을 확인합니다:
- 현재 차단된 IP: 이미 공격자가 잡혀 있을 확률이 높습니다
- 총 차단 횟수: 서버가 얼마나 공격받고 있는지 실감할 수 있습니다
- maxretry: 기본값 5회 (5회 실패 시 차단)
- bantime: 기본값 10분 (10분간 IP 차단)
3단계: 차단 정책 조정 (선택)
기본값(5회 실패 / 10분 차단)으로도 충분하지만, 영구 차단으로 강화할 수 있습니다. 설정 파일을 직접 수정하지 말고 로컬 오버라이드 파일을 만듭니다:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd] 섹션에서 다음 값을 조정합니다:
[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600
- maxretry = 3: 3회 실패 시 차단 (기본 5회에서 강화)
- bantime = 3600: 1시간 차단 (반복 공격자에게 효과적)
- findtime = 600: 10분 안에 3회 실패하면 차단
변경 후 재시작:
sudo systemctl restart fail2ban
SSH 포트 변경 — 공격의 90%를 사전 차단
Fail2ban은 이미 공격이 시작된 후 차단하는 대응형 보안입니다. 더 효과적인 방법은 공격 자체를 줄이는 것입니다. SSH 기본 포트 22번을 다른 포트(예: 22022)로 변경하면 무차별 대입 공격 봇의 90% 이상이 처음부터 시도하지 않습니다 — 봇들은 기본 포트만 스캔하기 때문입니다.
포트 변경 방법:
sudo nano /etc/ssh/sshd_config
# Port 22 를 찾아서 변경
Port 22022
sudo systemctl restart sshd
주의: 포트 변경 전에 방화벽(ufw)에서 새 포트를 먼저 열어야 합니다. 그렇지 않으면 서버에 접속할 수 없게 됩니다.
sudo ufw allow 22022/tcp
sudo ufw deny 22/tcp
Fail2ban + 포트 변경 = VPS 보안 기본기
이 두 가지 설정만으로 VPS 서버의 SSH 보안은 대부분 해결됩니다:
- Fail2ban: 자동 차단으로 반복 공격자를 차단
- 포트 변경: 봇 스캔의 90%를 원천 차단
여기에 SSH 키 인증(비밀번호 로그인 비활성화)까지 추가하면 SSH 보안은 사실상 완성됩니다.
요약
| 항목 | 기본값 | 권장값 |
|---|---|---|
| 설치 | apt install fail2ban | — |
| maxretry | 5회 | 3회 |
| bantime | 10분 | 1시간~영구 |
| SSH 포트 | 22 | 비표준 포트 |
| 인증 방식 | 비밀번호 | SSH 키 |
Fail2ban은 설치 한 줄로 서버를 지키는 가장 빠르고 효과적인 방법입니다. VPS를 열었다면 이 글을 읽는 것보다 설치하는 게 더 빠릅니다 — 지금 바로 하세요.
SSH 키 인증 — 비밀번호 공격 자체를 무의미하게
Fail2ban과 포트 변경이 공격을 ‘줄이는’ 방법이라면, SSH 키 인증은 비밀번호 공격 자체를 ‘무의미하게’ 만드는 근본 해결책입니다. 비밀번호 로그인을 비활성화하고 키 기반 인증만 허용하면, 아무리 비밀번호를 대입해도 로그인할 수 없습니다.
키 쌍 생성 (로컬 PC에서):
ssh-keygen -t ed25519 -C "your_email@example.com"
공개 키를 서버에 등록:
ssh-copy-id user@your_server_ip
비밀번호 로그인 비활성화:
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
sudo systemctl restart sshd
주의: 키 인증 설정을 확인하기 전에 비밀번호 로그인을 끄지 마세요. 키가 제대로 등록되지 않은 상태에서 비밀번호 로그인까지 끄면 서버에 접속할 수 없습니다. 항상 새 터미널에서 키 로그인을 확인한 후 기존 세션에서 비밀번호를 비활성화하세요.
Fail2ban 로그 확인 — 실제 공격 패턴 분석
Fail2ban이 어떤 공격을 차단했는지 확인하려면 로그를 직접 봅니다:
sudo tail -f /var/log/fail2ban.log
또는 차단된 IP 목록만 확인:
sudo fail2ban-client status sshd
출력 예시:
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 847
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 12
|- Total banned: 156
`- Banned IP list: 185.220.101.1 193.32.162.44 ...
이 데이터를 보면 서버가 얼마나 빈번하게 공격받고 있는지 실감할 수 있습니다. 보통 VPS를 개설한 직후부터 몇 시간 안에 차단 카운트가 올라가기 시작합니다.
수동으로 IP 차단/해제
Fail2ban이 자동으로 차단한 IP를 수동으로 해제하거나, 특정 IP를 수동으로 차단할 수 있습니다.
IP 수동 차단:
sudo fail2ban-client set sshd banip 1.2.3.4
IP 수동 해제:
sudo fail2ban-client set sshd unbanip 1.2.3.4
실수로 본인 IP가 차단된 경우 (비밀번호를 여러 번 틀렸을 때) 이 명령으로 즉시 해제할 수 있습니다. 자동 차단된 IP는 bantime이 만료되면 자동으로 해제됩니다.
자주 묻는 질문 (FAQ)
Fail2ban만 설치하면 안전한가요?
Fail2ban은 SSH 무차별 대입 공격에 대한 효과적인 대응책이지만, 유일한 보안 수단이 되어서는 안 됩니다. 방화벽(ufw), SSH 키 인증, 정기적인 시스템 업데이트, 불필요한 서비스 비활성화 등 다층 보안이 필요합니다. Fail2ban은 그 중 가장 빠르게 효과를 볼 수 있는 첫 번째 단계입니다.
Fail2ban이 서버 성능에 영향을 주나요?
Fail2ban은 로그 파일을 모니터링하고 IP 차단 규칙을 firewall에 추가하는 가벼운 Python 스크립트입니다. CPU/메모리 사용량은 무시할 수 있는 수준이며, 일반적인 VPS에서 성능 영향은 체감할 수 없습니다.
CentOS/RHEL에서도 같은 방법으로 설치되나요?
패키지 매니저만 다릅니다. CentOS/RHEL 계열에서는 sudo dnf install fail2ban 또는 EPEL 저장소 추가 후 설치합니다. 설정 파일 구조와 작동 방식은 동일합니다.
심화 설정 — 영구 차단과 반복 공격자 추적
기본 차단 정책(bantime)은 10분이지만, 지속적으로 공격하는 IP에 대해서는 영구 차단이 더 효과적입니다. [sshd] 섹션에서 bantime = -1로 설정하면 차단된 IP는 수동으로 해제할 때까지 차단 상태가 유지됩니다.
[sshd]
enabled = true
maxretry = 3
bantime = -1
findtime = 600
recidive jail — 반복 공격자 자동 영구 차단
Fail2ban에는 기본으로 내장된 recidive jail이 있습니다. 이 jail은 다른 jail에서 이미 차단된 적이 있는 IP를 감시하다가, 다시 어떤 jail에서든 차단되면 자동으로 영구 차단합니다. 별도 설정 없이 활성화되어 있으므로, bantime=-1과 함께 사용하면 1회 이상 차단된 IP는 영구 차단 목록에 오릅니다.
ignoreip — 자기 IP 화이트리스트
/etc/fail2ban/jail.local 파일 상단의 [DEFAULT] 섹션에 ignoreip을 설정하면 지정된 IP는 절대 차단되지 않습니다. 실수로 자기 IP가 차단되어 서버 접속이 끊기는 사태를 방지할 수 있습니다:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
# 자기 공인 IP도 추가 권장
ignoreip = 127.0.0.1/8 ::1 YOUR_PUBLIC_IP
자기 공인 IP는 curl ifconfig.me 명령으로 확인할 수 있습니다. 설정 후 sudo systemctl restart fail2ban으로 적용합니다.
더 알아보기
Fail2ban의 전체 설정 옵션과 최신 업데이트는 공식 GitHub 저장소에서 확인할 수 있습니다. 다양한 jail(nginx, apache, postfix 등) 설정 예시와 커뮤니티 문서도 함께 제공됩니다.
VPS 서버 선택과 초기 설정에 대한 더 많은 가이드는 SSH 끊겨도 작업 유지 — tmux 세션 사용법 완벽 가이드 (2026)에서 확인할 수 있습니다.
이 글은 YouTube Shorts 영상 “SSH 해킹 시도 5초만에 자동 차단 — Fail2ban 설치 1분 완성”의 상세 버전입니다. 더 많은 VPS/DevOps 실전 팁은 채널을 구독하세요.



















