우분투 22.04 LTS에 fail2ban 설치 및 설정하기 (feat. 리눅스 보안설정)

fail2ban으로 brute force attack (무작위 대입공격) 막아보자.


나는 현직 SE(Server Engineer)다.
직업 특성상 수많은 서버들을 다뤄봤었는데, Linux계열 서버를 관리할 때 가장 많이 겪어 본 서버공격 사례 중 하나가 바로 'brute force attack' 이다.

brute force attack는 '무작위 대입공격' 으로 불리는 공격 중 하나로, 무차별적으로 아이디와 패스워드를 대입해서 접속 시도를 하는 공격이다.
이는 패스워드를 복잡하게 만드는 것으로도 막을 수 있지만, 과도한 공격으로 인해 서버에 부하가 오거나 공격시도가 찝찝하게 느껴 질 때가 있다.

이때 공격자의 ip를 확인하고 자동으로 차단해주는 프로그램이 있다면 앞선 걱정을 말끔히 씻어낼 수 있다.

이번 포스팅에서는 이러한 프로그램 중 하나인 'fail2ban'에 대해 자세하게 알려주겠다.


따라오라고~!


fail2ban 설치하기

  1. sudo apt install fail2ban -y : fail2ban 설치, ubuntu 22.04 LTS에는 레포지토리에 기본으로 포함되어 있다.
  2. sudo systemctl enable fail2ban --now : 부팅 시 자동으로 시작
fail2ban 설치
fail2ban 설치

fail2ban 설정하기

fail2ban을 설치한 후에는 설정 파일을 수정해서 원하는 서비스에 대한 보호 규칙을 적용할 수 있다.
fail2ban의 설정 파일은 /etc/fail2ban/ 디렉토리에 위치하고 있는데, 이 디렉토리에는 jail.conf, jail.local, jail.d, filter.d, action.d 등의 파일과 폴더가 있다.

jail.conf 파일은 fail2ban의 기본 설정을 담고 있고, jail.local 파일은 사용자가 커스텀한 설정을 담을 수 있는데 보통 jail.conf는 그대로 두고 jail.local 파일을 수정해서 쓴다.

jail.d 폴더는 각 서비스에 대한 설정을 별도의 파일로 저장할 수 있다.
jail.local에 모든 설정을 넣지않고 서비스별로 구분해서 사용하고 싶을 때, 여기에 별도 설정 파일을 만들어서 사용한다.

filter.d 폴더는 로그 파일에서 공격자의 IP 주소를 인식하는 방법을 정의한 필터 파일들이 있고, action.d 폴더는 IP 주소를 차단하는 방법을 정의한 액션 파일들이 있다.
보통 그냥 두고 쓴다.

fail2ban 설정파일
fail2ban 설정파일


fail2ban 설정 예시 : SSH

예를 들어, SSH에 대한 공격차단을 하고자 할 때 아래의 설정을 사용할 수 있다.
우선 sudo vi /etc/fail2ban/jail.d/ssh.conf로 파일을 생성하고 아래 내용을 설정한다.

[ssh]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

이 설정은 SSH 포트(22번)에 대해 sshd 필터를 적용하고, /var/log/auth.log 파일을 모니터링하면서, 3번 이상 실패한 IP 주소를 1시간 동안 차단하도록 하는 설정이다.

설정 후 반드시 sudo systemctl restart fail2ban 을 실행해서 설정파일이 적용되도록 해줘야 한다.

설정 후 테스트를 할 수 있는데, 사무실에서 한다면 꼭 ip가 다른 pc에서 테스트하기 바란다.
보통 사무실은 동일 대역대를 사용하는데 보통 외부 ip가 동일하기 때문에 vpn등을 이용해서 우회ip를 이용해서 테스트 할 것.
아니면 사무실 전체 pc에서 접속못하는 불상사가 발생할 수 있다.

3번 이상 실패하면 IP 주소가 차단되고, SSH 접속이 불가능해진다.
IP 주소가 차단된 것을 확인하려면, sudo iptables -L -n 명령어를 실행해서 iptables의 규칙을 확인해보면 된다.
fail2ban은 iptables를 사용해서 IP 주소를 차단하기 때문에, iptables에 fail2ban이 생성한 규칙이 보일 것이다.

IP 주소를 차단해제하려면, sudo fail2ban-client unban <IP> 명령어를 실행하면 된다.
서비스 상태를 확인하려면 sudo fail2ban-client status ssh를 입력하면 된다.
아래 스크린샷은 root계정을 이용했기 때문에 sudo 명령어가 필요없다.

fail2ban ssh 차단
fail2ban ssh 차단


fail2ban설정 예시 : apache

Apache 웹 서버에 대한 보호 규칙을 적용하고 싶다면, 아래 설정을 사용할 수 있다.
우선 sudo vi /etc/fail2ban/jail.d/apache2.conf로 파일을 생성하고 아래 내용을 설정한다.

[apache2]
enabled = true
port = 80,443
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 3600

이 설정은 Apache 웹 서버의 포트(80번과 443번)에 대해 apache-auth 필터를 적용하고, /var/log/apache2/*error.log 파일을 모니터링하면서, 3번 이상 실패한 IP 주소를 1시간 동안 차단하도록 한다.

설정 후 fail2ban 재시작은 필수.

fail2ban apache 차단
fail2ban apache 차단


마치며

이번 포스팅에서는 brute force attack 공격에 효과적으로 대응할 수 있는 fail2ban에 대해 알아보았다.
예시에서 이야기한 ssh나 apache뿐만 아니라 여러 프로그램에도 적용할 수 있으니 유용하게 사용하길 바란다.

이번 포스팅은 여기까지.

글 쓰는 Jiniwar
글 쓰는 Jiniwar



댓글

이 블로그의 인기 게시물

crontab 설정방법과 로그 확인하는 법

Microsoft Defender 방화벽 설정 또는 해제하는 방법

한국 군비지출 세계 9위