fail2ban을 사용하여 n 번 재 시도한 후 영구적 인 IP 차단


38

아래와 같이 fail2ban을 구성했습니다.

  • 3 번의 시도 실패 후 IP 차단
  • 300 초 타임 아웃 후 IP 해제

이것은 완벽하게 작동하며 유효한 사용자가 시간 초과 후 로그인을 다시 시도 할 수있는 방식으로 유지하고 싶습니다. 이제 동일한 IP가 공격으로 탐지되어 차단 된 경우 5 회 차단 해제하고 IP를 영구적으로 차단하고 다시 차단 해제하지 않는 규칙을 구현하려고합니다. fail2ban 만으로이 작업을 수행 할 수 있습니까? 아니면 직접 스크립트를 작성해야합니까?

나는 이것을 센 토스에서하고 있습니다.


2
iptables에 더 많은 규칙을 추가할수록 속도가 느려집니다.
symcbean

14
귀하의 의견을 감사하지만 내가 필요한 것은 답변이 아니라 제안입니다. 어쨌든 고마워
BTR Naidu

5
때때로 "어떻게 X를합니까"에 대한 정답은 "X를하지 마십시오"입니다.
ceejayoz

답변:


32

0.11 이전에는 fail2ban 내에 기본 기능이나 설정없었습니다 . 그러나 다가오는 0.11 릴리스부터는 금지 시간이 자동으로 계산 되어 장기적으로 다소 영구적 인 차단을 의미하는 새로운 각 위반으로 기하 급수적으로 증가합니다.

그때까지 가장 좋은 방법은 fail2ban을 설정 하여 자체 로그 파일을 모니터링하는 것 입니다. 2 단계 프로세스입니다 ...

1 단계

로그 파일 (fail2ban의 로그 파일)에서 BAN 을 확인 하는 필터만들어야 할 수 있습니다.

2 단계

다음과 같이 감옥정의 해야합니다 ...

[fail2ban]
활성화 됨 = true
필터 = fail2ban
액션 = iptables-allports [이름 = fail2ban]
logpath = /path/to/fail2ban.log
# 검색 시간 : 1 일
찾기 시간 = 86400
# 금지 시간 : 1 년
금지 시간 = 31536000

기술적으로, 그것은 영구적 인 블록 이 아니라 1 년 동안 만 블록됩니다 (우리도 늘릴 수 있습니다).

어쨌든, 귀하의 질문에 대해 (이것은 fail2ban만으로 달성 할 수 있습니까? 아니면 직접 스크립트를 작성해야합니까?) ... 자신의 스크립트를 작성하는 것이 효과적 일 수 있습니다. 자주 금지 된 IP 를 추출하도록 스크립트를 설정 한 다음에 넣는 /etc/hosts.deny것이 좋습니다.


1
이 우수한 답변에 추가 ... 로깅 및 MaxAuthTries 구성 방법에 따라 sshd_configsshd "세션"에 대해 3 번의 로그인 실패 만 차단할 수 있습니다. 예를 들어, 침입자는 기본적으로 sshd의 연결을 끊기 전에 단일 세션에서 [ 'pass1', 'pass2', 'pass3']을 시도 할 수 있습니다. sshd가 로그로 설정되는 방법에 따라 이는 1, 2 또는 3의 fail2ban 시도로 나타날 수 있습니다.
Jonathan Vanasco

5
이를위한 fail2ban 반복 필터가 있습니다.
Guillermo Prandi

다가오는 0.11 릴리스 는 무엇을 의미 합니까? 가장 최근의 것으로 10.3.1 : github.com/fail2ban/fail2ban/releases
user5950

나는 당신이 0.10.3.1 을 의미하기를 바랍니다 . github.com/fail2ban/fail2ban/tree/0.11 에서 "0.11"의 진행 상황을 추적 할 수 있습니다 . 기본적으로 아직 출시되지 않았습니다!
Pothi Kalimuthu 2016 년

29

bantime = -1해당 구성 섹션에 넣으면 영구 블록 이라고 생각합니다 .


2
실제로, bantime음수 값으로 설정 하는 것은 영구적으로 금지됩니다 (Fail2Ban 버전 0.6.1 (2006/03/16) 기준)
voretaq7

3
설정에 -1을 추가하면 fail2ban이 응답하지
않음

13

Phil Hagen은이 주제에 대해 훌륭한 기사를 썼습니다. " fail2ban을 사용하여 반복 위반자를 영구적으로 금지 ".

그의 제안은 Pothi와 동일하지만 단계별 가이드를 제공합니다.

여기에는 다음이 포함됩니다.

  • 교도소별로 별도의 금지 목록 (ip.blocklist.ssh, ip.blocklist.xxx)
  • 서비스가 다시 시작되면 금지 목록이 자동으로로드됩니다 (이 방법의 주요 이점 imho).
  • 리피터가 작동하면 이메일 알림.

6

Chin의 답변을 확장하기 위해 이것은 매우 간단합니다. 원하는대로 2 개의 설정을 편집하면 /etc/fail2ban/jail.local됩니다.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5

4

fail2ban은 이미 수감을 금지하는 감옥을 가지고 있습니다. 를 /etc/fail2ban/jail.conf보면 다음을 발견 할 수 있습니다.

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

jail.local에 추가하는 방법?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

로그 수준을 확인하려면 다음을 수행하십시오 fail2ban-client get loglevel.

  • set loglevel MYLEVEL : 로깅 레벨을 MYLEVEL로 설정합니다. 레벨 : 치명적, 오류, 경고,주의 사항, 정보, 디버그
  • 위키에서 더 많은 명령 .

fail2ban의 이전 버전을 사용하면 이 버그를 얻을 수 있습니다 .


0

vim으로 이동하여 /etc/fail2ban/jail.conf를 엽니 다.

다음 후에 수정하십시오 fail2ban service restart.

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.