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

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

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

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

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



답변

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것이 좋습니다.


답변

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


답변

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

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

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

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

답변

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


답변

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의 이전 버전을 사용하면 이 버그를 얻을 수 있습니다 .


답변

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***


답변