fail2ban이 SSH에 해주는 일
fail2ban은 인증 로그를 감시하다가 어떤 IP 주소가 로그인에 너무 여러 번 실패하면 그 IP를 일시적으로 차단합니다 ── 그래서 당신의 SSH를 무차별 대입하는 봇은 끝없이 두드려대는 대신 방화벽 단계에서 막힙니다. 유용한 방어 계층이지만 그 위치는 분명히 해 두세요. 이미 SSH 키로 전환하고 비밀번호 로그인을 비활성화했다면, 그런 무차별 대입 시도는 애초에 성공할 수 없습니다. fail2ban은 심층 방어이자 로그 노이즈 감소이지, 첫 번째 방어선이 아닙니다. 먼저 키를 설정하고(키 vs 비밀번호), 그 위에 fail2ban을 더하세요.
1단계 ── fail2ban 설치
sudo apt update && sudo apt install fail2ban # Debian/Ubuntu
# RHEL/Fedora: sudo dnf install fail2ban 합리적인 기본값으로 시작하지만, 패키지 업데이트가 덮어쓰지 않도록 자신의 설정은 jail.local에 적어 두어야 합니다.
2단계 ── SSH jail 설정
/etc/fail2ban/jail.local을 생성합니다:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h 이렇게 읽힙니다: 10분 이내에 로그인에 5회 실패하면 그 IP를 1시간 차단한다. 반복하는 상대에게는 bantime을 높일 수 있습니다(하루로 두는 사람도 있고, bantime.increment = true로 점차 늘리는 사람도 있습니다). SSH를 22번 포트에서 옮겼다면 port를 실제 포트로 설정하세요.
3단계 ── 재시작 후 확인
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd 상태 줄에는 현재 차단된 IP와 합계가 표시됩니다. 실수로 차단한 주소(예를 들어 몇 번 잘못 입력한 후의 자기 자신)를 해제하려면:
sudo fail2ban-client set sshd unbanip 203.0.113.10
휴대폰에서 하기
fail2ban은 휴대폰에서 SSH로 완전히 관리할 수 있습니다: SFTP나 nano로 jail.local을 편집하고, 서비스를 재시작하고, 상태를 확인합니다. 정확한 fail2ban-client 하위 명령이 떠오르지 않으면 TermAI 어시스턴트에게 설명하세요 ── "sshd에서 차단된 IP 표시", "이 주소 차단 해제" ── 실행하기 전에 명령을 검토하세요.
자신을 가두지 마세요
자신의 로그인에 몇 번 실패하면 fail2ban이 당신도 차단할 수 있습니다. 두 가지 안전장치: 테스트하는 동안 사용 가능한 세션을 열어 두고, 자신의 IP(또는 자신의 Tailscale 범위)를 무시 목록에 추가하세요:
# in [DEFAULT] of jail.local
ignoreip = 127.0.0.1/8 100.64.0.0/10 그 100.64.0.0/10은 Tailscale 범위입니다 ── Tailscale을 통해 SSH에 접속하면 자신의 연결은 차단되지 않습니다. 더 좋은 방법: 아예 SSH를 Tailscale 뒤에 두면 공개 봇은 애초에 거기 도달하지 못합니다.
FAQ
SSH 키를 쓰면 fail2ban이 필요한가요?
선택 사항입니다. 키를 쓰고 비밀번호 로그인을 비활성화하면 무차별 대입 시도는 성공할 수 없습니다. 그래도 fail2ban은 로그 노이즈를 줄이고 트래픽을 막으므로, 많은 관리자가 추가 계층으로 운영합니다.
fail2ban은 IP를 얼마나 오래 차단하나요?bantime에 설정한 값 ── 1시간이 일반적입니다. 높이거나, 반복하는 상대에게는 점차 늘릴 수 있습니다.
fail2ban에서 IP 차단을 해제하려면?fail2ban-client set sshd unbanip <IP>를 실행하세요. 신뢰하는 IP를 ignoreip에 추가하면 절대 차단되지 않습니다.
핵심 요약
- 역할: SSH 로그인 실패가 반복된 후 IP 차단
- 위치: 심층 방어 ── 키 + 비밀번호 비활성화가 더 중요
- 설정:
/etc/fail2ban/jail.local→[sshd]maxretry / findtime / bantime - 자신을 차단하지 않기: 자신의 IP / Tailscale 범위를
ignoreip에; 더 좋은 건 SSH를 Tailscale 뒤에 두기
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.