SSH 보안 강화, fail2ban 으로 알아보기

Fail2ban 이란?

Fail2Ban은 잘못된 로그인 시도를 감지하고 이러한 시도를 차단하는 오픈 소스 소프트웨어입니다. 가장 흔한 사용 사례는 원격 서버에 SSH 접근을 시도하는 브루트포스 공격을 차단하는 것입니다.

Fail2Ban은 다음과 같은 방식으로 작동합니다:

  1. 시스템 로그 파일을 모니터링하며, 미리 정의된 패턴(예를 들어, 잘못된 패스워드를 이용한 로그인 시도)에 맞는 행동을 감지합니다.
  2. 이러한 행동을 반복하는 IP 주소를 감지하면, 해당 IP 주소를 일정 시간 동안 차단합니다. 이 차단 기간은 사용자가 설정할 수 있습니다.
  3. 차단 기간이 끝나면 자동으로 해당 IP 주소의 차단을 해제합니다.

이런 방식으로, Fail2Ban은 악의적인 로그인 시도를 효과적으로 차단하고 서버를 보호합니다. SSH 외에도, FTP, Apache, Courier, Dovecot 등 다양한 서비스에 대한 브루트포스 공격을 감지하고 차단하는데 사용할 수 있습니다.

Fail2Ban은 Python으로 작성되었으며, 주로 Unix와 Unix-like 시스템에서 작동하도록 설계되었습니다. 설치와 설정이 비교적 간단하므로, 공개 서버를 운영하는 시스템 관리자들에게는 필수적인 도구로 간주됩니다.


먼저 SSH에 대해 간단히 이해해볼 필요가 있습니다.
SSH는 Secure Shell의 약자로 네트워크 프로토콜 중 하나입니다.
SSH는 원격 위치에 있는 서버를 안전하게 제어할 수 있게 해주는 도구입니다.
SSH는 특히 시스템 관리자들에게 있어 필수적인 도구로 활용되며, 클라우드 서버, 웹 호스팅 계정 등 다양한 서버에 원격 접속할 수 있게 해줍니다.

하지만 이러한 SSH의 편리함은 또한 고려해야 할 보안 문제를 야기하기도 합니다.
SSH 서버가 공개적으로 노출되어 있다면, 악의적인 사용자들이 무작위로 로그인을 시도해 볼 수 있습니다.

이런 상황에서는 Fail2Ban 같은 도구를 사용해 이런 위협을 무력화할 수 있습니다.

Fail2Ban은 SSH 또는 다른 서비스에 대한 무작위 및 반복적인 로그인 시도를 차단하는데 도움이 되는 인기있는 오픈 소스 소프트웨어입니다. 이렇게 로그인을 시도하는 사용자의 IP 주소를 검출하고, 해당 IP 주소로부터의 모든 접속 시도를 일정 시간 동안 차단합니다.


FAil2Ban 설치 하기

먼저, fail2ban을 설치하는 방법을 알아보겠습니다. fail2ban은 파이썬으로 개발되었기 때문에 파이썬 2.6 이상 또는 3.2 이상이 설치되어 있어야 합니다. 여기서는 RHEL/CentOS와 Ubuntu에서의 설치 방법을 각각 소개하겠습니다.

RHEL/CentOS

CentOS 7의 파이썬은 요구사항을 충족하며, 리눅스 커널의 netfilter 방화벽과 IP 묶음 단위로 방화벽 정책을 수정할 수 있는 ipset 유틸리티가 필요합니다. yum으로 설치시에는 이런 필요한 부분들이 자동으로 같이 설치됩니다.

먼저, CentOS의 추가 저장소인 EPEL(Extra Packages for Enterprise Linux yum)를 설치하겠습니다.


$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

이제 EPEL 저장소에서 fail2ban을 설치합니다.


$ sudo yum --enablerepo epel install fail2ban

Ubuntu

Ubuntu에서는 아래의 명령어로 fail2ban을 설치합니다.


$ sudo apt install fail2ban

서비스 활성화

설치 후에는 fail2ban을 활성화하고 실행해야 합니다. 아래 명령어를 이용해 부팅시 자동으로 시작되도록 설정한 후 fail2ban을 구동합니다.


$ sudo systemctl enable fail2ban
$ sudo systemctl restart fail2ban

Fail2Ban 설정

Fail2Ban의 주요 설정 파일은 /etc/fail2ban/jail.conf 파일입니다. 그러나 이 파일을 직접 편집하기 보다는, /etc/fail2ban/jail.local이라는 사용자 정의 설정 파일을 생성하고 그곳에서 설정을 관리하는 것이 권장됩니다.

jail.local 파일에서는 다음의 주요 설정을 관리합니다:

  1. ignoreip: 이 설정은 차단하지 않을 IP 주소를 지정합니다. 주로 로컬 네트워크의 IP 주소나 특정 신뢰할 수 있는 IP 주소를 지정합니다.
  2. bantime: 이 설정은 인증 실패를 한 클라이언트를 얼마 동안 차단할지를 초 단위로 지정합니다. 기본값은 600초(10분)입니다.
  3. findtimemaxretry: 이 두 설정은 클라이언트를 차단하는 조건을 지정합니다. findtime은 차단 조건을 판단하는 시간
  • Fail2Ban은 잘못된 로그인 시도를 감지하고 이러한 시도를 차단하는 오픈 소스 소프트웨어입니다. 가장 흔한 사용 사례는 원격 서버에 SSH 접근을 시도하는 브루트포스 공격을 차단하는 것입니다.

Fail2Ban은 다음과 같은 방식으로 작동합니다:

  1. 시스템 로그 파일을 모니터링하며, 미리 정의된 패턴(예를 들어, 잘못된 패스워드를 이용한 로그인 시도)에 맞는 행동을 감지합니다.
  2. 이러한 행동을 반복하는 IP 주소를 감지하면, 해당 IP 주소를 일정 시간 동안 차단합니다. 이 차단 기간은 사용자가 설정할 수 있습니다.
  3. 차단 기간이 끝나면 자동으로 해당 IP 주소의 차단을 해제합니다.

이런 방식으로, Fail2Ban은 악의적인 로그인 시도를 효과적으로 차단하고 서버를 보호합니다. SSH 외에도, FTP, Apache, Courier, Dovecot 등 다양한 서비스에 대한 브루트포스 공격을 감지하고 차단하는데 사용할 수 있습니다.