[우분투 24.04 LTS] 시스템 무차별 대입 공격(Brute-force) 차단을 위한 Fail2ban 구축

[우분투 24.04 LTS] 시스템 무차별 대입 공격(Brute-force) 차단을 위한 Fail2ban 구축

시스템 방화벽(UFW)을 통해 관리 및 서비스를 위한 필수 포트를 개방하더라도, 열려 있는 포트를 겨냥하여 무작위로 패스워드 대입을 시도하는 무차별 대입 공격(Brute-force Attack)은 단순 방화벽 규칙만으로 방어하기 어렵다.

이를 원천 차단하기 위해 서버의 인증 실패 로그를 실시간으로 모니터링하고, 임계치를 초과하는 악의적 접근 IP를 방화벽과 연동하여 자동으로 영구 또는 일시 차단하는 침입 방지 시스템인 Fail2ban 도입이 필수적이다. 본 문서는 우분투 24.04 LTS 서버 환경에 Fail2ban을 구축하고 최적의 방어 정책을 수립하는 실무 과정을 기술한다.

1. Fail2ban 패키지 설치 및 데몬 활성화

최고 관리자 권한을 사용하여 공식 저장소 패키지 목록을 갱신한 후, Fail2ban 패키지를 시스템에 설치한다.

Bash

sudo apt update
sudo apt install fail2ban -y

설치가 완료되면 서버 재부팅 시에도 Fail2ban 프로세스가 자동으로 실행되도록 시스템 데몬(Daemon)에 등록하고, 즉시 구동을 시작한다.

Bash

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

2. 안전한 설정을 위한 사용자 정의 환경 파일(jail.local) 구성

Fail2ban의 원본 설정 파일인 jail.conf는 패키지 업데이트 과정에서 초기화될 위험이 존재한다. 시스템 안정성을 보장하기 위해 원본 파일을 보존하고, 사용자 정의 설정 파일인 jail.local을 생성하여 환경 변수를 통제하는 것이 시스템 관리의 표준 원칙이다.

아래 명령어를 통해 원본 파일을 복사하여 새로운 설정 파일을 생성한 후, 텍스트 에디터로 실행한다.

Bash

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

파일 내의 [DEFAULT] 섹션을 탐색하여 시스템 전체에 적용될 전역 차단 정책을 수립한다. 보안 정책의 핵심이 되는 주요 변수는 다음과 같다.

  • ignoreip: 차단 시스템에서 제외할 화이트리스트 IP 주소이다. 로컬 호스트(127.0.0.1/8)와 관리자의 고정 IP를 등록하여 자체 차단되는 사고를 방지한다.
  • bantime: 공격자로 식별된 IP를 차단할 시간을 지정한다. (예: 1d = 1일, -1 = 영구 차단)
  • findtimemaxretry: 지정된 시간(findtime) 내에 설정된 횟수(maxretry)만큼 인증에 실패할 경우 해당 IP를 공격자로 간주한다.

전역 설정(DEFAULT) 변경 예시:

Ini, TOML

[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.0.0/24
bantime  = 1d
findtime = 10m
maxretry = 5

3. SSH 서비스 특화 보안 규칙(Jail) 적용

전역 정책 설정이 완료되었다면, 가장 공격 빈도가 높은 SSH 서비스에 대한 개별 통제 규칙(Jail)을 활성화해야 한다. 동일한 jail.local 파일 내부에서 스크롤을 내려 [sshd] 섹션을 탐색한다.

해당 규칙을 시스템에 활성화하기 위해 enabled = true 구문을 추가하고, 서버 구축 초기 단계에서 변경했던 커스텀 SSH 포트 번호를 정확히 명시한다.

Ini, TOML

[sshd]
enabled = true
port    = 20222
logpath = %(sshd_log)s
backend = %(sshd_backend)s

설정값 수정이 완료되면 Ctrl + O를 눌러 저장하고, Ctrl + X로 에디터를 종료한다.

4. 서비스 적용 및 차단 로그 모니터링 체계

변경된 보안 정책을 시스템에 완전히 반영하기 위해 Fail2ban 서비스를 재시작한다.

Bash

sudo systemctl restart fail2ban

Fail2ban 데몬이 정상적으로 구동되어 관리 중인 Jail(보안 규칙) 목록을 확인하려면 다음 명령어를 실행한다.

Bash

sudo fail2ban-client status

특정 서비스(예: sshd)에 대한 상세 차단 현황과 현재 방화벽에 의해 격리된 공격자의 IP 목록을 조회하기 위해서는 서비스 명칭을 추가하여 명령을 수행한다.

Bash

sudo fail2ban-client status sshd

차단 IP 수동 해제 절차: 관리자의 실수로 정상적인 접근 IP가 차단된 경우, 아래 명령어를 통해 해당 IP에 대한 격리 조치를 즉각적으로 해제할 수 있다.

Bash

sudo fail2ban-client set sshd unbanip [해제할IP주소]

마무리

네트워크 접근을 1차적으로 제어하는 UFW 방화벽과, 악의적인 인증 시도를 능동적으로 차단하는 Fail2ban의 연동 결합을 통해 강력한 외부 보안 인프라가 구축되었다.

외부 트래픽에 대한 통제망이 완성되었으므로, 다음 포스팅에서는 서버 내부의 데이터 보안을 위한 시스템 필수 개념인 [리눅스 파일 소유권(chown) 및 접근 권한(chmod) 완벽 이해]에 대해 상세히 다루겠다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다