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]
fail2ban 및 sendmail을 활성화하려면 다음 명령을 사용하십시오.
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 – 모든 데이터 출력
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 파일은 기본적으로 Debian 및 Ubuntu에 대해 SSH를 활성화하지만 CentOS에서는 활성화하지 않습니다. 활성화하려면 /etc/fail2ban/jail.local에서 다음 줄을 변경하면 됩니다.
[sshd]
enabled = true
차단 및 재시도 시간
IP 주소가 차단되는 상황을 구성할 수 있습니다. 이를 위해 fail2ban은 bantime, findtime 및 maxretry를 사용합니다.
- 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 시스템에 추가 보안을 제공하는 훌륭하고 잘 문서화된 침입 방지 시스템입니다. 설정과 구문에 익숙해지는 데 시간이 좀 걸리지만 일단 익숙해지면 규칙을 자유롭게 변경하고 확장할 수 있습니다.