Skip to content
VDS · 보안

비밀번호 무차별 대입에 대한 Fail2ban

Fail2ban을 설치하고 설정하는 방법이에요. SSH와 웹 폼 무차별 대입 차단, 자신의 주소 화이트리스트 등록, 작동 확인, 그리고 자신을 차단 해제하는 방법을 알아봐요.

업데이트 2026년 8월 23일

Fail2ban은 로그를 읽고 한 주소에서 발생한 로그인 실패 횟수를 세어 방화벽 규칙으로 일시 차단해요. 키 기반 로그인을 대체하지는 않지만, 대부분의 백그라운드 무차별 대입 트래픽을 걸러내고 로그 부하를 줄여줘요.

설치와 기본 구성

apt install -y fail2ban

jail.conf는 업데이트할 때 덮어써지니, 직접 만든 /etc/fail2ban/jail.local 파일을 사용하세요:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw

[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd

ignoreip에 집이나 사무실 주소를 넣으세요. 자기 자신을 차단하지 않기 위한 보험입니다. 주소가 바뀌더라도 /hosting/vds/m/<id> 패널의 콘솔이 안전망이 되어줘요. 이 콘솔은 네트워크와 규칙에 관계없이 작동해요.

banaction은 사용하는 방화벽과 일치해야 해요. ufw는 ufw, nftables는 nftables-multiport를 사용하세요.

결과를 확인하는 곳

fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50

상태에는 실패 시도 횟수와 차단된 주소 목록이 표시돼요. 공인 주소에서 하루 수백 건은 정상이며, 표적 공격의 징후가 아니에요.

주소 차단 해제(자기 주소 포함):

fail2ban-client set sshd unbanip 203.0.113.5

SSH 외의 보호

Fail2ban은 실패 시도를 기록하는 모든 로그와 함께 작동할 수 있어요.

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log

[postfix-sasl]
enabled = true

직접 만든 애플리케이션에는 필터가 필요해요. /etc/fail2ban/filter.d/에 있는 파일로, 주소를 <HOST>로 표시한 정규 표현식을 담아요:

[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =

실제 로그로 표현식을 테스트하세요:

fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf

이 명령은 일치한 줄 수를 보여줘요. 일치가 0이면 규칙이 잘못된 것이고, 조용히 실패하는 보호는 아무것도 없는 것보다 나빠요.

흔한 실수

실수결과해결
jail.conf 수정업데이트 시 사라짐jail.local에 작성
ignoreip에 자기 주소 없음언젠가 자신을 차단하게 됨주소를 추가하거나 패널 콘솔로 접속
banaction이 방화벽과 불일치차단이 적용되지 않음ufw 또는 nftables에 맞추기
필터가 로그 형식과 불일치보호 대신 침묵fail2ban-regex로 확인
서비스가 systemd 로그를 읽지 못함상태가 비어 있음backend = systemd 설정

실제로 테스트하세요. 외부 주소에서 일부러 필요한 횟수만큼 잘못된 비밀번호를 입력하고, 해당 주소가 차단 목록에 들어가는지 확인하세요. 구성하지 않은 fail2ban은 잘못된 안도감을 만들어요.

방화벽 자체의 연결 속도 제한으로 마무리하세요 — ufw limit 22/tcp.