서론
홈서버를 한대 운영중이고 nginx에 대해 공부중에 우분투 서버의 보안에 대한 포스트를 읽게 되었다. 이때 fail2ban을 알게 되었고 journalctl -f
를 통해 외부에서 계속 홈서버에 접근시도하려는 것을 확인하였다. 이를 막기위해 fail2ban을 적용해보자.
fail2ban이란?
공개 IP 주소를 갖는 컴퓨터에 ssh 서버를 열어 놓고 기다리면 전세계에서 접속 시도가 들어오는 것을 확인할 수 있다. 이를 막기 위해 사용하는 프로그램이 fail2ban이다. fail2ban은 서비스의 로그 파일을 읽어, 특정 IP에서 정해진 시간(findtime) 동안 정해진 횟수(maxretry)를 초과하여 접속에 실패했다면 정해진 시간(bantime) 동안 그 IP를 차단하는 간단한 서비스이다. 즉 ssh 서비스에 대해 fail2ban을 설정하면 비정상적인 ssh 접속을 차단할 수 있고, apache 웹 서버에 대해 fail2ban을 설정하면 비정상적인 로그인 시도 등을 차단할 수 있다.
fail2ban 설치
sudo apt install fail2ban
설치가 완료되었으면 활성화 하자
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
만약 fail2ban을 비활성화 하고 싶으면 다음 명령어를 입력하자
sudo systemctl stop fail2ban
sudo systemctl disable fail2ban
fail2ban 설정
fail2ban에 대한 감옥 파일인 jail.local파일을 만든 뒤 내용을 상황에 맞게 수정하자
sudo vi /etc/fail2ban/jail.local
[DEFAULT]
ignoreip=192.168.0.0/24
bantime=86400
maxretry=2
findtime=86400
[sshd]
enabled = true
port=22
filter=sshd
logpath=/var/log/auth.log
[DEFAULT]는 fail2ban에 지정할 모든 서비스에 대한 설정입니다.
ignoreip는 설정을 적용하지 않을 ip이고 내부에서의 접속은 fail2ban을 적용하지 않습니다.
bantime은 이상 접속을 감지했을 때 접속을 불가능하게 합니다. 단위는 초입니다.
maxretry는 findtime 시간동안 로그인 실패 허용횟수입니다.
findtime은 이상 접속의 횟수를 총괄낼 시간입니다. 단위는 초입니다.
[sshd] ssh 접속 서비스에 대한 설정입니다.
enabled는 동작 여부를 나타냅니다.
port 감지할 포트입니다.
filter 이상 동작이라고 판단할 문자열입니다.
logpath 필터링할 전체 문자열 파일입니다.
적용
sudo systemctl restart fail2ban
확인
sudo fail2ban-client status sshd
하루 설정하고 확인했더니 166개의 ip에서 ssh 접근시도했다는 것을 알수있다.
차단풀기
비밀번호를 잘못 입력해 차단당할 수 있으니 아래 명령어로 차단을 풀 수 있습니다.
sudo fail2ban-client set sshd unbanip [ip]
'DevOps' 카테고리의 다른 글
프로젝트에 CI/CD를 적용해보기 #1 (0) | 2024.12.04 |
---|---|
Nginx Websocket connection to failed (0) | 2024.02.17 |
ssh connection timeout (0) | 2024.02.05 |
[Ubuntu] Ubuntu 22.04 swap 메모리 설정 (0) | 2024.02.03 |
[Docker] Ubuntu 22.04 Docker 설치 (0) | 2024.02.03 |