![]()
오늘 서버 접속해보니 아래와 같이 53회 로그인 실패 알림이 표시되었다.
Last login: Fri Dec 12 09:43:01 KST 2025 on pts/0
Last failed login: Tue Dec 16 10:30:15 KST 2025 from 87.121.84.136 on ssh:notty
There were 53 failed login attempts since the last successful login.
- 외부 IP(87.121.84.136) 에서 SSH 무차별 대입 시도
- 아직 뚫린 건 아님 → 운이 좋았을 뿐
- 53회 실패 → 자동화 봇 스캔 단계
이건 네 서버가 이미 타겟 리스트에 올라갔다는 뜻이다.
Fail2ban으로 SSH 공격 자동 차단하는 이유
서버에 SSH 포트가 열려 있으면 봇이 24시간 스캔합니다. 문제는 공격 자체가 아니라, 언젠가 약한 계정이나 설정 실수로 뚫릴 수 있다는 점입니다. Fail2ban은 반복 실패를 빠르게 차단해 리스크를 크게 줄입니다.
- 로그인 실패 누적을 기반으로 자동 차단
- SSH 뿐 아니라 웹, DB, 프록시 등 확장 가능
- 설정이 단순하고 운영 부담이 낮음
점검: Fail2ban이 실제로 동작 중인지 확인
아래 명령어로 서비스 상태와 jail 목록을 확인합니다.
systemctl status fail2ban fail2ban-client status
정상이라면 sshd jail이 리스트에 보여야 합니다.
fail2ban-client status sshd
SSH 포트 변경으로 기본 스캔을 회피
예시로 SSH 포트를 24888로 변경합니다. 실제 운영에서는 본인 환경에 맞는 포트를 선택하세요.
vi /etc/ssh/sshd_config Port 24888
포트 변경 후 SSH를 재 시작합니다.
systemctl restart sshd
firewalld를 사용 중이면 새 포트를 허용합니다.
firewall-cmd --add-port=24888/tcp --permanent firewall-cmd --reload
Fail2ban sshd jail 실전 설정 템플릿
/etc/fail2ban/jail.local 파일을 사용해 sshd jail을 명확히 설정합니다.
vi /etc/fail2ban/jail.local
아래 예시는 실전에서 많이 쓰는 구성입니다. 허용 IP와 SSH 포트는 예시 값이며, 글에서 사용하는 값은 실제 서버 값과 다르게 구성했습니다.
[sshd] enabled = true port = 24888 maxretry = 3 findtime = 10m bantime = 1d mode = aggressive ignoreip = 127.0.0.1/8 203.0.113.10 198.51.100.25
- maxretry 3: 사람은 보통 3번 이상 틀리지 않지만 봇은 바로 걸립니다
- findtime 10m: 10분 안에 실패 누적을 판단합니다
- bantime 1d: 하루 차단으로 재시도를 크게 줄입니다
- mode aggressive: 더 다양한 실패 패턴까지 잡습니다
- ignoreip: 운영자 고정 IP나 내부 대역만 최소로 추가합니다
설정 적용을 위해 fail2ban을 재 시작합니다.
systemctl restart fail2ban
동작 확인: bantime과 로그 감지 체크
bantime 값이 제대로 반영됐는지 확인합니다.
fail2ban-client get sshd bantime
1일 차단이면 다음과 같이 표시됩니다.
86400
실시간 로그를 보며 감지 및 밴이 되는지 확인합니다.
tail -f /var/log/fail2ban.log
로그에서 확인할 대표 패턴입니다.
- Found x.x.x.x: 실패 감지 단계
- Ban x.x.x.x: 설정 조건 충족으로 차단 단계
추가 강화 옵션
- root 직접 로그인 금지: PermitRootLogin no
- 비밀번호 로그인 금지: PasswordAuthentication no, 키 인증만 허용
- 운영자 IP가 고정이면 SSH 포트를 특정 IP만 허용하는 방식 고려
SSH 설정을 변경했다면 반드시 재시작합니다.
systemctl restart sshd
정리
이 글의 템플릿대로 적용하면 SSH 무차별 대입 공격은 대부분 자동 차단됩니다. 운영에서는 ignoreip를 최소화하고, 가능하면 키 인증 기반으로 전환하는 것을 권장합니다.