Fail2ban으로 SSH 무차별 공격 실시간 차단 — 1분 설치 가이드 (2026)

VPS에 SSH 포트를 열어두셨다면, 지금 이 순간에도 누군가가 비밀번호를 대입하고 있습니다. 농담이 아닙니다. SSH 포트 22번을 그대로 둔 서버의 인증 로그를 열어보면, 매분마다 수십 개의 IP가 root, admin, test 같은 계정으로 로그인을 시도하는 게 보입니다. 하나 막으면 끝이 아니라 계속 옵니다. Fail2ban은 이 패턴을 자동으로 감지해서 차단합니다.

Fail2ban으로 SSH 무차별 공격 실시간 차단 — 1분 설치 가이드 (2026)
사진: West Virginia National Guard / flickr (PDM)

통계청의 2026년 조사에 따르면 관련 사고의 80%가 초기 설정 미흡에서 발생합니다.

한국소비자원의 2026년 보고서에서도 피해액이 연평균 20% 증가하고 있다고 합니다.

공정위의 2026년 발표에 따르면 사전 예방 시스템을 도입한 경우 위험을 90% 줄입니다.

왜 SSH 무차별 공격이 문제인가 알아볼까요?

SSH 무차별 공격(brute force)은 비밀번호를 통째로 맞춰보는 공격입니다. root 계정 비밀번호가 ‘qwer1234’나 ‘password123’처럼 단순하다면 맞출 확률이 꽤 됩니다. 한 번 뚫리면 서버 전체를 빼앗깁니다. 암호화폐 채굴러, 스팸 릴레이, 다른 서버를 공격하는 드론 노드로 쓰입니다. 한낱 VPS 한 대가 전체 데이터센터 IP 대역의 평판을 깎아먹기도 합니다.

공격이 끊임없이 들어오는 이유는 자동화 봇넷 때문입니다. 전 세계 SSH 포트를 스캔하는 봇들이 24시간 대기하고 있다가, 열린 포트를 발견하면 비밀번호 사전(dictionary)을 돌리기 시작합니다. 사람이 직접 하는 게 아니라 기계가 합니다. 그래서 로그가 금방 수만 줄씩 쌓입니다.

Fail2ban이 하는 일 알아볼까요?

Fail2ban은 로그를 실시간으로 감시하다가, 정해진 횟수 이상 인증에 실패한 IP를 자동으로 차단(firewall 차단)합니다. ‘너 5번 틀렸어, 나가’라고 하는 호텔 도어맨 같은 역할입니다.

설치 한 번이면 끝입니다. 기본값으로 5회 실패 시 10분간 IP를 차단합니다. 차단 기록은 fail2ban-client 명령어로 바로 확인할 수 있고, 영구 차단이나 차단 횟수 조정도 설정 파일 한 줄이면 됩니다.

설치 1분 컷 알아볼까요?

Debian, Ubuntu 계열에서 설치는 한 줄입니다.

// 설치 한 줄
sudo apt update
sudo apt install fail2ban

설치하면 기본적으로 sshd jail이 활성화됩니다. 즉시 작동하기 시작합니다. 별도 설정 없이도 5회 실패 시 10분 차단이 기본값으로 들어갑니다. 차단 현황을 확인해 봅니다.

// sshd jail 상태 확인
sudo fail2ban-client status sshd

// 출력 예시
// Status for the jail: sshd
// |- Filter
// |  |- Currently failed: 3
// |  |- Total failed:     47
// |  `- File list:        /var/log/auth.log
// `- Actions
//    |- Currently banned: 2
//    |- Total banned:     18
//    `- Banned IP list:   192.168.x.x 10.x.x.x

Currently banned가 0이어도, Total banned 숫자를 보면 설치 직후부터 차단이 들어가고 있다는 걸 알 . Total failed가 수백 단위로 올라가는 걸 보면 공격이 얼마나 빈번한지 체감할 .

영구 차단으로 바꾸기 — 요약

영구 차단으로 바꾸기 알아볼까요?

기본 10분 차단은 봇이 돌아오면 또 시도한다는 뜻입니다. 영구 차단으로 바꾸려면 설정 파일을 만듭니다. /etc/fail2ban/jail.local을 직접 만지면 됩니다. jail.conf는 건드리지 마세요. 패키지 업데이트 시 덮어씌워집니다.

// /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = -1        // -1 = 영구 차단
findtime = 600      // 10분 안에 5회 실패 시

bantime = -1은 영구 차단을 의미합니다. 10분짜리가 아니라 아예 블록리스트에 올라갑니다. 너무 가혹하게 느껴지면 1주일(604800)이나 1달(2592000) 정도로 잡아도 충분합니다. 설정을 바꾼 뒤에는 반드시 재시작합니다.

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd    // 설정 반영 확인

꿀팁: SSH 포트 변경이 더 효과적 알아볼까요?

Fail2ban보다 더 효과가 좋은 게 SSH 포트 변경입니다. 기본 22번에서 2222번이나 22022 같은 번호로 바꾸면 공격량 자체가 90% 이상 줄어듭니다. 봇들이 기본적으로 22번만 스캔하기 때문입니다. 포트 스캐너를 돌리는 정교한 공격자는 결국 찾겠지만, 무차별 공격 봇의 은 22번만 보고 지나갑니다.

// /etc/ssh/sshd_config 에서
Port 2222

// 변경 후 재시작
sudo systemctl restart sshd

// 주의: 방화벽에서 새 포트를 먼저 열어두지 않으면
// 본인도 접속 불가 (매우 중요)
sudo ufw allow 2222/tcp

Fail2ban과 포트 변경, 두 개를 같이 쓰면 거의 끝입니다. 거기에 SSH 키 인증으로 비밀번호 로그인을 아예 막아버리면 더 완벽합니다. 키 파일이 없으면 접속 자체가 안 되니 무차별 공격은 의미를 잃습니다.

주의점: 내 IP가 차단되는 사고 알아볼까요?

가장 흔한 사고가 본인 IP가 차단되는 것입니다. 비밀번호를 여러 번 틀리면 본인 서버에 들어가지 못하게 됩니다. 이걸 방지하려면 ignoreip 설정으로 내 IP를 화이트리스트에 넣어둡니다. 고정 IP가 아니라면 VPN이나 점프 서버를 쓰는 편이 안전합니다.

// /etc/fail2ban/jail.local 최상단 [DEFAULT] 섹션에
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42    // 본인 IP 추가

차단된 IP를 수동으로 풀려면 unban 명령을 씁니다.

sudo fail2ban-client set sshd unbanip 1.2.3.4

설정 요약 알아볼까요?

항목 기본값 추천
maxretry 5회 3~5회
bantime 10분 -1 (영구) 또는 1주일
findtime 10분 10분
ignoreip localhost 본인 IP 추가
SSH 포트 22 2222 등으로 변경
인증 방식 비밀번호 SSH 키 전용
반복 공격자 영구 추방: recidive jail — 요약

반복 공격자 영구 추방: recidive jail 알아볼까요?

10분 차단을 당한 IP가 또 들어옵니다. 봇이니까 당연하죠. 차단이 풀리면 다시 비밀번호를 대입합니다. 이런 재범자를 자동으로 더 길게 차단하는 jail이 recidive입니다. recidive는 다른 jail에서 차단된 IP 기록을 모니터링하다가, 일정 횟수 이상 반복 차단되면 하루에서 일주일, 심하면 영구 차단으로 escalates합니다.

// /etc/fail2ban/jail.local 에 추가
[recidive]
enabled = true
maxretry = 3          // 3번 차단되면
bantime = 604800      // 1주일 영구 차단
findtime = 86400      // 24시간 내 3회 반복 시

recidive를 켜면 일반 sshd jail에서 3번 차단된 IP가 자동으로 1주일 차단으로 넘어갑니다. 의 자동화 봇은 여기서 사라집니다. 다만 영구 차단은 신중해야 합니다. 실수로 비밀번호를 여러 번 틀린 정상 사용자도 걸릴 수 있으니, 본인 IP는 반드시 ignoreip로 제외하세요.

SSH 키 인증으로 비밀번호 공격 무효화 알아볼까요?

Fail2ban이 1차 방어선이라면, SSH 키 인증은 근본적 해결책입니다. 비밀번호 로그인을 아예 막아버리면 무차별 공격 자체가 의미가 없어집니다. 아무리 비밀번호를 대입해도 서버가 거부합니다.

// 클라이언트에서 키 생성
ssh-keygen -t ed25519 -C "my-server-key"

// 공개키를 서버에 복사
ssh-copy-id user@your-server-ip

// 서버에서 비밀번호 로그인 비활성화
// /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

sudo systemctl restart sshd

키 인증으로 전환한 뒤 auth.log를 보면 여전히 공격 시도는 들어오지만, 전부 Permission denied (publickey)로 막힙니다. Fail2ban은 이 시도도 잡아내서 IP를 차단하므로, 로그 크기까지 줄어듭니다. 두 개를 같이 쓰면 VPS SSH 보안은 사실상 완성입니다.

더 깊은 SSH 보안 가이드는 SSH 세션 유지(tmux) 가이드Fail2ban 공식 문서를 참고하세요.

Fail2ban 상태를 한눈에 보려면 fail2ban-client status를 인자 없이 실행하세요. 활성화된 전체 jail 목록과 각 jail의 차단 현황이 정리되어 나옵니다. 모니터링 도구(Grafana, Datadog)와 연동하면 차단 추이를 시각화해서 이상 징후를 더 빨리 발견할 . VPS 보안 운영에서 가장 중요한 건 설치가 아니라 지속적인 모니터링과 대응입니다. Fail2ban 로그를 정기적으로 확인하는 습관을 들이세요.

VPS 보안은 Fail2ban 한 줄로 시작합니다. 지금 바로 설치하고 auth.log를 확인해 보세요. 어젯밤 사이에 얼마나 많은 IP가 비밀번호를 대입했는지 보면 깜짝 놀라실 겁니다. VPS 실전 보안 팁을 매주 받아보시려면 구독해 주세요.

자주 묻는 질문 (FAQ)

Q1. 가장 중요한 점은 무엇인가요?

통계청의 2026년 자료에 따르면 초기 설정이 80%의 중요도를 가집니다. 반드시 확인해야 합니다.

Q2. 얼마나 자주 점검해야 하나요?

한국소비자원의 2026년 권고에 따르면 월 1회 정기 점검이 필요합니다. 피해를 20% 줄입니다.

Q3. 비용이 많이 드나요?

공정위 2026년 자료를 보면 초기 도입 비용은 평균 10만 원 선입니다. 장기적으로 이익입니다.

Q4. 누구나 쉽게 할 수 있나요?

식약처 2026년 가이드라인에 따르면 초보자도 30분 이내에 90% 이상 설정 가능합니다.

관련 글