Fail2ban 설정 방법 WordPress에 적용하기

리눅스 서버에서 공격에 대응하기위해 사용하는 fail2ban 설정 프로그램에 대해 알아보고 기본적인 설치, 구성방법과 wordpress에서 적용하는 방법을 알아보겠습니다.

Fail2ban 소개

fail2ban 설정 방법

Fail2ban은 서버를 무차별 대입 공격으로부터 보호하는 오픈 소스 침입 방지 시스템(IPS)입니다. 주로 잘못된 로그인 시도가 반복될 경우 해당 IP 주소를 차단하여 서버의 보안을 강화합니다. Python으로 작성된 이 도구는 SSH, FTP, 웹 서버 등 다양한 서비스에 대해 보호를 제공할 수 있어 시스템 관리자들에게 필수적인 보안 도구로 자리 잡았습니다. Fail2ban은 로그 파일을 모니터링하고 특정 패턴(예: 로그인 실패)을 감지하면 자동으로 방화벽 규칙을 추가하여 공격자의 IP를 일정 시간 동안 차단함으로써 서버의 안전을 유지합니다.

리눅스에서의 fail2ban 설정 설치 명령어

리눅스 시스템에 Fail2ban을 설치하는 방법은 배포판에 따라 약간 다릅니다. CentOS나 RHEL 기반 시스템에서는 먼저 EPEL(Extra Packages for Enterprise Linux) 리포지토리를 추가해야 합니다.

1. EPEL 리포지토리 설치 (CentOS, RHEL 기반):

sudo yum install epel-release

2. Fail2ban 설치:

sudo yum install fail2ban

3. Fail2ban 서비스 시작 및 부팅 시 자동 시작 설정:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

이 명령어들은 CentOS 및 RHEL 기반의 리눅스 배포판에서 사용됩니다. Ubuntu와 같은 Debian 기반의 배포판에서는 apt 패키지 관리자를 사용하여 설치할 수 있습니다

1. Fail2ban 설치 (Ubuntu, Debian 기반):

sudo apt update
sudo apt install fail2ban

서비스 시작 및 활성화 명령어는 동일합니다.

2. Fail2ban 서비스 상태 확인:

sudo systemctl status fail2ban

이렇게 설치한 후, /etc/fail2ban/jail.local 파일을 편집하여 필요한 설정을 추가하고, 각 서비스에 대한 필터를 설정할 수 있습니다.

Fail2ban 설정 방법

Fail2ban을 설정하고 사용하는 방법은 다음과 같습니다. Fail2ban은 기본적으로 /etc/fail2ban/jail.conf 파일을 사용하여 설정하지만, 이 파일은 패키지 업데이트 시 덮어쓰여질 수 있으므로, 설정을 /etc/fail2ban/jail.local 파일에 복사하여 사용하는 것이 좋습니다.

1. 기본 설정 파일 복사:

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

2. jail.local 파일 편집jail.local 파일을 열어 설정을 수정합니다. 예를 들어, 차단할 IP의 기준이나 차단 기간 등을 설정할 수 있습니다.

 sudo nano /etc/fail2ban/jail.local 
  • [DEFAULT] 섹션에서 기본 설정을 수정합니다.
    • bantime: IP가 차단되는 시간 (예: bantime = 10m).
    • findtime: 지정된 시간 내에 실패한 시도 횟수를 계산하는 시간 (예: findtime = 10m).
    • maxretry: 차단되기 전 허용되는 최대 실패 시도 횟수 (예: maxretry = 5).

3. 서비스별 설정 추가: 각 서비스에 대한 설정을 추가합니다. 예를 들어, SSH에 대한 설정은 다음과 같습니다.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5

4. 추가 필터 활성화

/etc/fail2ban/filter.d/ 폴더를 보면 여러 Fail2ban 필터가 있습니다. jail.conf를 봐도 여러 필터가 있는 것을 확인할 수 있습니다. 예컨대 sshd의 설정은 /etc/fail2ban/filter.d/sshd.conf에서 확인할 수 있습니다. 필요에 따라서 필터를 추가하시면 됩니다.

Fail2ban 설정 명령어

Fail2ban을 효과적으로 관리하기 위해 다양한 명령어를 사용할 수 있습니다.

1. Fail2ban 서비스 시작:

sudo systemctl start fail2ban

2. Fail2ban 서비스 자동 시작 설정:

sudo systemctl enable fail2ban

3. Fail2ban 서비스 상태 확인:

sudo systemctl status fail2ban

4. Fail2ban 설정 테스트: 설정이 올바르게 적용되었는지 테스트합니다.

sudo fail2ban-client status

5. 특정 jail의 상태 확인: 특정 jail의 상태를 확인하여 차단된 IP 목록을 봅니다.

sudo fail2ban-client status sshd

6. IP 차단 해제: 잘못 차단된 IP를 해제합니다.

sudo fail2ban-client set sshd unbanip <IP_ADDRESS>

7. Fail2ban 재시작: 설정을 변경한 후에는 Fail2ban을 재시작하여 변경 사항을 적용합니다.

sudo systemctl restart fail2ban

이러한 설정과 명령어를 통해 Fail2ban을 효과적으로 구성하고 관리할 수 있습니다. 각 서비스에 맞는 필터와 로그 경로를 설정하여 다양한 공격으로부터 서버를 보호할 수 있습니다.

wordpress에 fail2ban 설정 적용하기

위의 내용을 바탕으로 wordpress에서 fail2ban을 적용해보겠습니다.

먼저 wp-login.php 와 xmlrpc 을 보호하기 위해 Jail 필터를 구성해 봅니다.

nano /etc/fail2ban/filter.d/wordpress.conf

아래 내용을 붙여넣기 하고 저장합니다.

[Definition]
failregex = ^<HOST> .* "(GET|POST) /wp-login.php
                 ^<HOST> .* "(GET|POST) /xmlrpc.php

jail.d 폴더에 설정파일을 추가 생성합니다. 이부분은 따로 파일을 생성하지 않고 jail.local 파일에 내용을 추가해도 됩니다.

nano /etc/fail2ban/jail.d/wordpress.conf

아래 내용을 추가하고 파일을 저장합니다.

[wordpress]
enabled  = true
port     = http,https
filter   = wordpress
action   = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath  = /var/log/nginx/*access*.log
maxretry = 6
findtime  = 86400
bantime  = 72000

bantime maxretry 등 세부적인 설정은 기호에 맞게 수정하면 됩니다. 로그파일의 경로는 반드시 서버의 로그파일 경로로 수정하세요.

만든 jail을 테스트 하고 에러가 없다면, 재시작 합니다.

fail2ban-client -d
service fail2ban restart

여기까지 fail2ban 설정 사용법과 wordpress에 적용하는 방법까지 알아봤습니다.

  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
  • Share on kakaotalk