[서버] 무차별 접속 시도 IP 차단 방법(fail2ban)
AWS에 테스트 서버를 배포 하고 몇일 구동 시켰더니, DB 접속이 안된다면서 웹 서비스 구동이 멈췄다.
Docker Log를 확인 해 보니, DB에 User, Password가 일치 하지 않아 접속에 실패 되는 것을 확인 하였다.
아무래도, 누군가 DB에 접속해서 Password를 변경 한 것으로 보인다. ( 기본 DB 계정에, Default Port 번호, 쉬운 비밀번호를 사용 했더니 쉽게 보안이 뚤린거 같다. )
보안을 강화 하기 DB 포트 변경 및 강화된 비밀번호를 사용하고, 무차별 접속 시도를 하는 IP를 OS 단에서 차단 하기 위해 "fail2ban"을 설치 하여 설정 하였다.
fail2ban 설치
$ apt-get install fail2ban
fail2ban 설정
설정 파일 경로 : /etc/fail2ban/jail.local
[DEFAULT]
ignoreip : ban이 절대 되지 않을 아이피를 적는다. (123.234.123.234/32 형태로 적는다. 추가시 스페이스바로 구분) 관리자 ip를 입력하면 됨. 입력한 ip는 차단되지 않음.
bantime : 접속을 차단할 시간. 60=1분, 600=10분, 86400=1일... (초단위임) 영구차단을 하거나 차단시간을 많이 주면 재부팅시 느려짐.
findtime : 입력시간
maxretry : 인증시도하여 fail된 횟수
[옵션] destemail : 메일 수신자. 다중 수신자는 지원하지 않음.
[옵션] sender : 메일 보낸 사람 (= fail2ban)
[옵션] mta : 메일 전송 프로그램. mta = sendmail
fail2ban 시작및 종료
fail2ban 서비스 재시작: service fail2ban restart
fail2ban 설정확인 : fail2ban-client status sshd
실시간 SSH로그인 실패기록 보기 : journalctl -f
fail2ban 동작 원리
ssh연결 로그인 성공/실패 여부는 모두 /var/log/auth.log에 저장 된다. fail2ban이 /var/log/auth.log파일을 읽어 findtime동안 maxretry회 이상 실패 기록이 있으면 bantime동안 연결을 차단 시킨다.
fail2ban이 reload되거나, restart될 때에는 ban목록이 초기화된다. 서버재부팅시 목록이 초기화된다.
만약 bruteforce 공격으로 ssh접속 시도가 엄청나게 많아지면 fail2ban 작동 시 서버가 부하에 걸릴 수도 있다.