SSH 브루트포스 공격, Fail2Ban으로 간단하게 차단하기

SSH(Secure Shell)는 원격 서버에 안전하게 접속하는 데 필수적인 프로토콜입니다. 하지만 그만큼 공격자들의 주요 공격 대상이기도 합니다. 특히, 무작위 대입 공격(Brute-force attack)을 통해 비밀번호를 알아내려는 시도가 끊임없이 발생합니다. Fail2Ban은 이러한 공격 시도를 자동으로 감지하고 차단하여 서버 보안을 크게 강화할 수 있는 강력한 도구입니다.

Fail2Ban이란 무엇일까요?

Fail2Ban은 로그 파일을 분석하여 악의적인 행위를 감지하고, 미리 정의된 규칙에 따라 방화벽을 통해 해당 IP 주소를 차단하는 프로그램입니다. SSH뿐만 아니라 FTP, 웹 서버 등 다양한 서비스에 대한 공격을 방어할 수 있습니다. Fail2Ban의 핵심은 ‘필터(filter)’와 ‘제일(jail)’이라는 개념입니다.

  • 필터(Filter): 로그 파일에서 특정 패턴(예: 잘못된 비밀번호 시도)을 찾아내는 역할을 합니다. 정규 표현식을 사용하여 정의됩니다.
  • 제일(Jail): 필터를 적용하고, 차단 규칙을 정의하는 단위입니다. 각 서비스(SSH, FTP 등)에 대해 별도의 제일을 설정할 수 있습니다.

Fail2Ban, 왜 중요할까요?

SSH 브루트포스 공격은 서버 자원을 소모시키고, 성공할 경우 서버 전체를 위험에 빠뜨릴 수 있습니다. Fail2Ban을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 자동화된 방어: 공격 시도를 자동으로 감지하고 차단하여 관리자의 개입 없이도 서버를 보호합니다.
  • 리소스 절약: 공격 시도를 조기에 차단하여 서버 자원 낭비를 줄입니다.
  • 보안 강화: 성공적인 공격 가능성을 낮추고, 서버의 전반적인 보안 수준을 향상시킵니다.

Fail2Ban 설치 및 설정 방법

Fail2Ban 설치 및 설정은 비교적 간단합니다. 대부분의 리눅스 배포판에서 패키지 관리자를 통해 설치할 수 있습니다.

1. Fail2Ban 설치

터미널을 열고 다음 명령어를 실행합니다 (배포판에 따라 명령어는 다를 수 있습니다).

  • Debian/Ubuntu: sudo apt update && sudo apt install fail2ban
  • CentOS/RHEL: sudo yum install epel-release && sudo yum install fail2ban
  • Fedora: sudo dnf install fail2ban

2. 설정 파일 복사 및 수정

Fail2Ban 설정 파일은 /etc/fail2ban/jail.conf에 있습니다. 이 파일을 직접 수정하는 대신, jail.local 파일을 만들어 설정을 덮어쓰는 것이 좋습니다. 이렇게 하면 Fail2Ban 업데이트 시 설정이 초기화되는 것을 방지할 수 있습니다.

다음 명령어를 실행하여 jail.local 파일을 생성합니다.

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

이제 jail.local 파일을 편집기로 엽니다.

sudo nano /etc/fail2ban/jail.local

jail.local 파일에서 SSH 관련 설정을 찾아 수정합니다. 기본적인 설정은 다음과 같습니다.

[sshd]

enabled = true

port = ssh

logpath = %(ssh_log)s

backend = auto

bantime = 600

findtime = 60

maxretry = 3

 

각 설정 항목의 의미는 다음과 같습니다.

  • enabled: 해당 제일을 활성화할지 여부를 결정합니다. true로 설정하면 활성화됩니다.
  • port: SSH 서비스가 사용하는 포트 번호입니다. 기본값은 ssh이며, 22번 포트를 의미합니다. 포트 번호를 변경했다면 해당 번호로 수정해야 합니다.
  • logpath: SSH 로그 파일의 경로입니다. 대부분의 시스템에서 %(ssh_log)s/var/log/auth.log 또는 /var/log/secure로 해석됩니다.
  • backend: 로그 파일을 감시하는 백엔드입니다. auto로 설정하면 Fail2Ban이 자동으로 최적의 백엔드를 선택합니다.
  • bantime: 차단 시간(초)입니다. 위 설정에서는 600초(10분) 동안 차단됩니다.
  • findtime: 공격 시도를 감지하는 시간 창(초)입니다. 위 설정에서는 60초 동안의 시도를 감시합니다.
  • maxretry: 차단하기 전에 허용되는 최대 시도 횟수입니다. 위 설정에서는 3번의 시도 실패 후 차단됩니다.

필요에 따라 bantime, findtime, maxretry 값을 조정할 수 있습니다. 예를 들어, 차단 시간을 늘리거나, 허용되는 시도 횟수를 줄일 수 있습니다.

3. Fail2Ban 서비스 재시작

설정 파일을 수정한 후에는 Fail2Ban 서비스를 재시작해야 변경 사항이 적용됩니다.

sudo systemctl restart fail2ban

4. Fail2Ban 상태 확인

Fail2Ban이 제대로 작동하는지 확인하려면 다음 명령어를 사용합니다.

sudo fail2ban-client status sshd

이 명령어는 sshd 제일의 상태를 보여줍니다. 현재 차단된 IP 주소 목록도 확인할 수 있습니다.

Fail2Ban 고급 설정

Fail2Ban은 다양한 고급 설정을 제공하여 더욱 강력하게 서버를 보호할 수 있습니다. 몇 가지 유용한 고급 설정에 대해 알아보겠습니다.

1. 화이트리스트 설정

특정 IP 주소는 Fail2Ban에 의해 차단되지 않도록 화이트리스트에 등록할 수 있습니다. jail.local 파일에서 ignoreip 옵션을 사용하여 화이트리스트를 설정합니다.

[DEFAULT]

ignoreip = 127.0.0.1/8 ::1 your.ip.address

 

위 설정은 127.0.0.1/8, ::1, your.ip.address를 화이트리스트에 추가합니다. 여러 IP 주소를 추가하려면 공백으로 구분합니다.

2. 액션 설정

Fail2Ban은 차단 외에 다양한 액션을 수행할 수 있습니다. 예를 들어, 차단된 IP 주소에 대한 정보를 이메일로 알릴 수 있습니다. jail.local 파일에서 action 옵션을 사용하여 액션을 설정합니다.

[sshd]

enabled = true

port = ssh

logpath = %(ssh_log)s

backend = auto

bantime = 600

findtime = 60

maxretry = 3

action = %(action_mwl)s

 

위 설정에서 %(action_mwl)s는 기본적으로 차단, 메일 알림, 로그 기록을 수행하는 액션을 의미합니다. 더 자세한 액션 설정은 /etc/fail2ban/action.d/ 디렉토리에 있는 파일을 참고할 수 있습니다.

메일 알림을 사용하려면 /etc/fail2ban/action.d/sendmail-whois-lines.conf 파일을 수정하여 메일 서버 정보를 설정해야 합니다.

3. 사용자 정의 필터 생성

Fail2Ban은 기본적으로 제공하는 필터 외에 사용자 정의 필터를 생성할 수 있습니다. 사용자 정의 필터를 사용하면 특정 공격 패턴에 대한 방어를 강화할 수 있습니다. 사용자 정의 필터는 /etc/fail2ban/filter.d/ 디렉토리에 저장됩니다.

예를 들어, 특정 문자열이 포함된 로그를 감지하는 필터를 만들 수 있습니다.

[Definition]

failregex = .특정 문자열.

ignoreregex =

 

위 필터는 로그에 “특정 문자열”이 포함된 경우 공격으로 간주합니다. failregex는 감지할 패턴을 정의하는 정규 표현식입니다. ignoreregex는 무시할 패턴을 정의합니다.

사용자 정의 필터를 생성한 후에는 jail.local 파일에서 해당 필터를 사용하도록 설정해야 합니다.

[my-custom-jail]

enabled = true

port = ssh

logpath = /var/log/mylogfile.log

filter = my-custom-filter

bantime = 3600

findtime = 60

maxretry = 5

 

위 설정은 my-custom-filter라는 이름의 사용자 정의 필터를 my-custom-jail이라는 제일에 적용합니다.

실생활 활용 팁과 조언

  • SSH 포트 변경: SSH의 기본 포트인 22번 포트를 다른 포트로 변경하면 브루트포스 공격 시도를 크게 줄일 수 있습니다.
  • 키 기반 인증 사용: 비밀번호 대신 SSH 키 기반 인증을 사용하면 브루트포스 공격을 원천적으로 차단할 수 있습니다.
  • 정기적인 로그 감사: Fail2Ban 로그를 정기적으로 감사하여 오탐 또는 새로운 공격 패턴을 파악합니다.
  • Fail2Ban 업데이트: Fail2Ban을 최신 버전으로 유지하여 알려진 보안 취약점을 해결합니다.
  • 방화벽과 함께 사용: Fail2Ban은 방화벽과 함께 사용하면 더욱 강력한 보안 효과를 얻을 수 있습니다.

SSH 브루트포스 공격, Fail2Ban에 대한 흔한 오해와 사실 관계

  • 오해: Fail2Ban은 모든 공격을 막을 수 있다.
  • 사실: Fail2Ban은 브루트포스 공격과 같은 특정 유형의 공격에 효과적이지만, 모든 공격을 막을 수는 없습니다.
  • 오해: Fail2Ban 설정은 한 번 설정하면 변경할 필요가 없다.
  • 사실: 공격 패턴은 끊임없이 변화하므로, Fail2Ban 설정도 주기적으로 검토하고 조정해야 합니다.
  • 오해: Fail2Ban은 서버 성능에 큰 영향을 미친다.
  • 사실: Fail2Ban은 경량화된 프로그램이므로, 일반적인 환경에서는 서버 성능에 큰 영향을 미치지 않습니다.

비용 효율적인 활용 방법

Fail2Ban은 오픈 소스 소프트웨어이므로, 무료로 사용할 수 있습니다. 서버 보안을 강화하는 데 비용 효율적인 솔루션입니다. 기본적인 설정만으로도 상당한 수준의 보안 효과를 얻을 수 있으며, 고급 설정을 통해 더욱 강력한 방어를 구축할 수 있습니다.

Q: Fail2Ban이 차단한 IP 주소를 확인하는 방법은 무엇인가요?

A: sudo fail2ban-client status sshd 명령어를 사용하여 sshd 제일의 상태를 확인하면 차단된 IP 주소 목록을 볼 수 있습니다.

Q: Fail2Ban이 차단한 IP 주소를 해제하는 방법은 무엇인가요?

A: sudo fail2ban-client set sshd unbanip [IP 주소] 명령어를 사용하여 특정 IP 주소의 차단을 해제할 수 있습니다.

이 게시물이 얼마나 유용했나요?

별을 클릭해 평가해주세요.

평균 평점: 5 / 5. 총 투표 수: 6

아직 평가가 없습니다. 첫 번째 평가자가 되어보세요!

댓글 남기기

error: ⚠ 복사/선택이 차단된 콘텐츠입니다.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.