[서버] 무차별 접속 시도 IP 차단 방법(fail2ban)

2022. 7. 7. 20:15프로젝트 로그/테스트x솔루션 JIG 개발기

반응형

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 작동 시 서버가 부하에 걸릴 수도 있다.

 
반응형