웹사이트 검색

Fail2ban을 사용하여 Linux 서버를 보호하는 방법


Linux 서버 관리에 있어서 서버 보안을 개선하는 것은 최우선 순위 중 하나입니다. 서버 로그를 검토하면 무차별 로그인, 웹 플러드, 공격 탐색 및 기타 여러 가지 시도를 발견할 수 있습니다.

fail2ban과 같은 침입 방지 소프트웨어를 사용하면 서버 로그를 검사하고 추가 iptables 규칙을 추가하여 문제가 있는 IP 주소를 차단할 수 있습니다.

추가 읽기: CentOS/RHEL 8에서 SSH를 보호하기 위해 Fail2Ban을 설치하는 방법

이 튜토리얼에서는 무차별 공격으로부터 Linux 시스템을 보호하기 위해 fail2ban을 설치하고 기본 구성을 설정하는 방법을 보여줍니다.

요구사항

Fail2ban은 Python으로 작성되었으며 유일한 요구 사항은 Python을 설치하는 것입니다.

  • Fail2ban 브랜치 0.9.x에는 Python >=2.6 또는 Python >=3.2가 필요합니다.
  • Fail2ban 브랜치 0.8.x에는 Python >=2.4가 필요합니다.
  • 시스템에 대한 루트 액세스
  • 선택적으로 iptables 또는 showewall 및 sendmail

Linux 시스템에 Fail2Ban을 설치하는 방법

fail2ban 설치는 비교적 쉽습니다.

CentOS/RHEL에 Fail2Ban 설치

먼저 패키지를 업데이트하고 Epel 저장소를 활성화한 다음 표시된 대로 fail2ban을 설치합니다.

yum update
yum install epel-release
yum install fail2ban

Debian/Ubuntu에 Fail2Ban 설치

먼저 패키지를 업데이트하고 표시된 대로 fail2ban을 설치합니다.

apt-get update && apt-get upgrade -y
apt-get install fail2ban

선택적으로 메일 지원(메일 알림용)을 활성화하려면 sendmail을 설치할 수 있습니다.

yum install sendmail                   [On CentOS/RHEL]
apt-get install sendmail-bin sendmail  [On Debian/Ubuntu]

fail2bansendmail을 활성화하려면 다음 명령을 사용하십시오.

systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail

Linux 시스템에서 Fail2ban을 구성하는 방법

기본적으로 fail2ban은 먼저 읽혀지는 /etc/fail2ban/에 있는 .conf 파일을 사용합니다. 그러나 동일한 디렉터리에 있는 .local 파일로 재정의될 수 있습니다.

따라서 .local 파일은 .conf 파일의 모든 설정을 포함할 필요가 없고 재정의하려는 설정만 포함할 필요가 있습니다. .conf가 아닌 .local 파일에서 변경해야 합니다. 이렇게 하면 Fail2ban 패킷을 업그레이드할 때 변경 내용을 덮어쓰는 것을 방지할 수 있습니다.

이 튜토리얼에서는 기존 fail2ban.conf 파일을 fail2ban.local에 복사합니다.

cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

이제 즐겨 사용하는 텍스트 편집기를 사용하여 .local 파일을 변경할 수 있습니다. 편집할 수 있는 값은 다음과 같습니다.

  • loglevel - 기록할 세부정보 수준입니다. 가능한 옵션은 다음과 같습니다:

    • 비판적인
    • 오류
    • 경고
    • 알아채다
    • 정보
    • 디버그
  • logtarget – 특정 파일에 작업을 기록합니다. 기본값은 /var/log/fail2ban.log입니다. 그러나 이를 다음과 같이 변경할 수 있습니다.

    • STDOUT – 모든 데이터 출력
    • STDERR – 오류를 출력합니다.
    • SYSLOG – 메시지 기반 로깅
    • 파일 – 파일로 출력
  • 소켓 – 소켓 파일이 배치될 디렉터리입니다.
  • pidfile – pidfile의 위치입니다.

Fail2banjail.local 구성

fall2ban에서 가장 중요한 파일 중 하나는 감옥을 정의하는 jail.conf입니다. 여기서는 failure2ban을 활성화해야 하는 서비스를 정의합니다.

앞서 언급했듯이 .conf 파일은 업그레이드 중에 변경될 수 있으므로 수정 사항을 적용할 수 있는 jail.local 파일을 생성해야 합니다.

이를 수행하는 또 다른 방법은 다음을 사용하여 .conf 파일을 복사하는 것입니다.

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

CentOS 또는 Fedora를 사용하는 경우 jail.local백엔드를 <에서 변경해야 합니다. Strong>'auto'를 'systemd'로 변경합니다.

Ubuntu/Debian을 사용하는 경우 systemd를 사용하더라도 이렇게 수정할 필요가 없습니다.

Jail 파일은 기본적으로 DebianUbuntu에 대해 SSH를 활성화하지만 CentOS에서는 활성화하지 않습니다. 활성화하려면 /etc/fail2ban/jail.local에서 다음 줄을 변경하면 됩니다.

[sshd]
enabled = true
차단 및 재시도 시간

IP 주소가 차단되는 상황을 구성할 수 있습니다. 이를 위해 fail2banbantime, findtimemaxretry를 사용합니다.

  • bantime – IP 주소가 차단된 상태로 유지되는 시간(초)입니다(기본값 10분).
  • findtime – 호스트가 금지되기 전까지의 로그인 시도 간격입니다. (기본값 10분) 즉, 로그인 시도가 3번 실패하면 실패2ban이 IP 주소를 차단하도록 설정된 경우 해당 3번의 시도는 findtime 기간(10< 분).
  • maxretry – 차단이 적용되기 전에 시도할 횟수입니다. (기본값 3).
화이트리스트 IP 주소

물론 특정 IP 주소를 화이트리스트에 추가하고 싶을 것입니다. 이러한 IP 주소를 구성하려면 선호하는 텍스트 편집기로 /etc/fail2ban/jail.local을 열고 다음 줄의 주석 처리를 제거하세요.

ignoreip = 127.0.0.1/8  ::1

그런 다음 무시하려는 IP 주소를 입력할 수 있습니다. IP 주소는 공백이나 쉼표로 구분되어야 합니다.

이메일 알림

이벤트 발생 시 메일 알림을 받으려면 /etc/fail2ban/jail.local에서 다음 설정을 구성해야 합니다.

  • destemail – 알림을 받을 메일 주소입니다.
  • 발신자 이름 – 메시지를 받을 때 표시되는 발신자입니다.
  • 발신자 – Fail2ban이 이메일을 보낼 이메일 주소입니다.

기본 mta(메일 전송 에이전트)는 sendmail로 설정됩니다.

메일 알림을 받으려면 '작업' 설정을 다음에서 변경해야 합니다.

Action = %(action_)s

다음 중 하나에:

action = %(action_mw)s
action = %(action_mwl)s
  • %(action_mw)s – 호스트를 차단하고 whois 보고서가 포함된 메일을 보냅니다.
  • %(action_mwl)s – 호스트를 차단하고 로그 파일에서 whois 정보 및 모든 관련 정보를 제공합니다.

추가 Fail2ban 감옥 구성

지금까지 기본 구성 옵션을 살펴보았습니다. 감옥을 구성하려면 jail.local 파일에서 활성화해야 합니다. 구문은 매우 간단합니다.

[jail_to_enable]
. . .
enabled = true

jail_to_enable을 실제 감옥으로 바꿔야 합니다(예: “sshd ”). jail.local 파일에는 SSH 서비스에 대해 다음 값이 사전 정의됩니다.

[sshd]

port = ssh
logpath = %(sshd_log)s

로그의 행이 실패한 행인지 식별하는 데 도움이 되는 필터를 활성화할 수 있습니다. 필터 값은 실제로 서비스 이름 뒤에 .conf가 오는 파일에 대한 참조입니다. 예: /etc/fail2ban/filter.d/sshd.conf.

구문은 다음과 같습니다.

filter = service

예를 들어:

filter = sshd

다음 디렉토리에서 기존 필터를 검토할 수 있습니다: /etc/fail2ban/filter.d/.

Fail2ban-클라이언트 사용

Fail2ban에는 현재 구성을 검토하고 변경하는 데 사용할 수 있는 클라이언트가 함께 제공됩니다. 다양한 옵션을 제공하므로 다음을 사용하여 설명서를 살펴볼 수 있습니다.

man fail2ban-client 

여기서는 사용할 수 있는 몇 가지 기본 명령을 볼 수 있습니다. fail2ban 또는 특정 감옥의 현재 상태를 검토하려면 다음을 사용할 수 있습니다.

fail2ban-client status

결과는 다음과 유사합니다.

개인 감옥의 경우 다음을 실행할 수 있습니다.

fail2ban-client status sshd

아래 스크린샷에서는 내가 의도적으로 여러 번의 로그인에 실패하여 실패2ban이 내가 연결하려고 했던 IP 주소를 차단할 수 있음을 알 수 있습니다.

결론

Fail2ban은 Linux 시스템에 추가 보안을 제공하는 훌륭하고 잘 문서화된 침입 방지 시스템입니다. 설정과 구문에 익숙해지는 데 시간이 좀 걸리지만 일단 익숙해지면 규칙을 자유롭게 변경하고 확장할 수 있습니다.