IT 관련/우분투(Ubuntu) 이것저것

fail2ban (ip 차단) 설치 및 운용

islet2 2025. 4. 11. 22:48

fail2ban은 서버에 무차별 로그인 시도를 차단하여 보안을 강화하는 도구입니다. 특히 SSH와 같은 서비스에 대한 무차별 대입 공격(Brute Force Attack)을 방어하는 데 효과적입니다. 아래에서 fail2ban 설치 및 설정 방법을 자세히 알아보겠습니다.

설치 방법

Ubuntu/Debian 계열

sudo apt update
sudo apt install fail2ban

서비스 시작 및 활성화

설치 후 fail2ban 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

기본 설정

fail2ban의 기본 설정 파일은 /etc/fail2ban/jail.conf이지만, 업데이트 시 덮어쓰일 수 있으므로 이 파일을 직접 수정하지 않는 것이 좋습니다. 대신 다음 방법 중 하나를 사용합니다:

  1. /etc/fail2ban/jail.local 파일 생성
  2. /etc/fail2ban/jail.d/ 디렉토리에 .conf 확장자로 설정 파일 생성

jail.local 파일 생성 방법

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

주요 설정 항목

jail.local 파일에서 다음과 같은 주요 설정을 조정할 수 있습니다:

[DEFAULT]
# 차단 예외 IP 목록 (스페이스로 구분)
ignoreip = 127.0.0.1/8 ::1

# 접속 차단 시간 (초 단위, 86400=1일, -1=영구 차단)
bantime = 86400

# 설정 시간 내에 maxretry 횟수만큼 실패 시 차단
findtime = 600

# 최대 허용 실패 횟수
maxretry = 3

# 차단 방법 (iptables 또는 firewalld 사용)
banaction = iptables-multiport

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/fail2ban.log

설정 항목 설명:

  • ignoreip: 차단에서 제외할 IP 주소 목록
  • bantime: IP 차단 시간 (초 단위)
  • findtime: 실패 횟수를 체크할 시간 범위
  • maxretry: 차단 기준이 되는 실패 횟수
  • banaction: 차단 방식 (방화벽 종류에 따라 다름)
  • enabled: 해당 서비스 보호 활성화 여부
  • port: 보호할 포트
  • filter: 사용할 필터 규칙
  • logpath: 로그 파일 경로

설정 적용 및 서비스 재시작

설정을 변경한 후에는 fail2ban 서비스를 재시작해야 합니다.

sudo systemctl restart fail2ban

상태 확인 및 관리 명령어

상태 확인

sudo systemctl status fail2ban
sudo fail2ban-client status

특정 서비스(jail) 상태 확인

sudo fail2ban-client status sshd

차단된 IP 확인

sudo fail2ban-client status sshd

특정 IP 차단 해제

sudo fail2ban-client set sshd unbanip 

로그 확인

sudo tail -f /var/log/fail2ban.log

추가 서비스 보호 설정

SSH 외에도 Apache, FTP 등 다른 서비스에 대한 보호 설정을 추가할 수 있습니다. 예를 들어, Apache 인증 실패에 대한 보호를 설정하려면:

[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 600

fail2ban은 서버 보안을 강화하는 중요한 도구이며, 적절한 설정을 통해 무차별 공격으로부터 서버를 효과적으로 보호할 수 있습니다.