[Server] 미니 홈서버 구축하기 6편 - fail2ban 으로 SSH 보안 강화하기

2021. 1. 13. 10:23Server

지난번에는 SSH의 포트를 기본 포트인 22번에서 사용자 지정 포트로 바꾸는 법을 알려드렸습니다. 그렇게 함으로써 어느 정도의 구닥다리 해킹 알고리즘의 위험은 회피할 수 있으나 아직 많은 사람들이 SSH에 자유롭게 접근할 수 있다는 것은 변하지 않습니다.

UFW 방화벽 설치 포스트에서 저는 보안(물론 서버가 외부와 연결되어있을 때)을 현관문에 빗대어 표현했었습니다. 즉 인터넷에 연결되어있는 모든 기기가 현관문에 비밀번호를 그것도 여러 번 반복해서 입력해 볼 수 있다는 것입니다. 그렇기에 인터넷에 브루트 포스 (Brute-force 혹은 무차별 대입 공격)으로 인한 SSH 권한 탈취 피해 사고들을 많이 접할 수 있습니다.

 

추가로 UFW 까지 있으니..

사실 단단한 보안을 위해서는 위처럼 SSH의 외부 접근을 완벽하게 차단하고 내부만 허용한 뒤, 필요한 경우 VPN을 통해 내부 인터넷 접근, 그 후 SSH에 접근하도록 만들어 놓으면 됩니다.

위와같은 보안에 구글 OTP인증, RSA키까지 포함시키면 극한의 보안환경이 구측이 됩니다. 그런 극한의 보안환경을 목표로 두고, 오늘은 fail2ban의 설치와 사용법에 관해 알아보도록 합시다.

fail2ban

시작하기 앞서, fail2ban이 필요한 이유를 설명해 드릴까 합니다.

만약 지금 사용 중이신 서버가 외부 인터넷과 직접적으로 연결되어있다면, 아래의 명령어를 한번 입력해보세요.

journalctl -f

위의 명령어는 해당 서버에 들어오는 SSH 로그인 로그를 보여줍니다.

수많은 로그인 요청이..!!

저의 매인 서버는 아직 포트 포워딩이 안되어있는 상태임으로, 라즈베리파이에서의 결과를 가져오자면 위와 같습니다. 불과 1분도 안 되는 사이에 상당히 많은 로그인 요청이 세계 각국에서 시도되었음을 알 수 있습니다.

이러한 로그인 시도를 조금 더 강화된 필터로 걸러주는 역할을 하는 것이 바로 fail2ban의 용도입니다.

fail2ban 설치하기

fail2ban을 설치하기 위해 아래의 명령어를 입력합니다.

sudo apt-get install fail2ban

 

fail2ban은 설치가 완료된 후, 자동으로 서비스를 실행합니다만,

sudo service fail2ban status

위의 명령어를 통하여 fail2ban이 실행 중인지 확인할 수 있습니다.

정상적으로 작동중인 모습

 

설정

설정 파일을 수정해 보도록 합시다.

sudo vi /etc/fail2ban/jail.local

위의 명령어를 통해 새로운 jail.local 파일을 생성합니다.

 

 

[DEFAULT]
# findtime동안 maxretry많큼의 로그인 실패가 있을시, bantime동안 해당 ip를 밴함.
# 주기
findtime = 1d

# 로그인 허용 횟수
maxretry = 5

# 차단 시간
bantime = 1w

backend = systemd

# 이메일 설정 (부가 옵션)
destemail = receiver@email.com
sendername = fail2ban@server.com
mta = sendmail

# IP whitelist
ignoreip = 127.0.0.1/8 192.168.0.0/24


# Service
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/fail2ban-ssh.log

위의 내용을 보고 입맛에 맞게 수정한 후, 저장하시면 됩니다.

* 지난번 포스트를 보고 오신 분이라면, sshd 아래의 port를 자신의 SSH포트에 알맞게 수정해주셔야 합니다.

 

서비스 재시작

service fail2ban restart

위 명령어를 통하여 서비스를 재시작하면, 아까의 설정이 적용됩니다.

fail2ban 사용법

필터링된 목록 보기

sudo fail2ban-client status sshd

위의 명령어를 통하여 sshd 필터에 걸러진 IP의 목록을 확인할 수 있습니다.

 

Unban IP

sudo fail2ban-client set sshd unbanip <IP>

위의 명령어를 이용하여 <IP>를 밴 목록에서 제외할 수 있으며,

 

Ban IP

sudo fail2ban-client set sshd banip <IP>

위 명령어를 통하여 <IP>를 밴 목록에 추가할 수 있습니다.

이렇게 SSH에 fail2ban을 적용하는 방법을 알아보았습니다. 이로서 세계 각국에서 들어오는 브루투포스 공격을 어느정도 걸러낼 수 있게 되었습니다.

다음에는 SSH로그인에 2FA로 구글 OTP를 추가해 보도록 하겠습니다.

참고

https://linuxize.com/post/install-configure-fail2ban-on-ubuntu-20-04/

 

How to Install and Configure Fail2ban on Ubuntu 20.04

This article describes how to install and configure Fail2ban on Ubuntu 20.04. Fail2ban is a tool that helps protect your Linux machine from brute-force and other automated attacks by monitoring the services logs for malicious activity.

linuxize.com

반응형