Fail2ban 정규식 필터가 nginx 로그 파일에서 작동하지 않습니다.

Fail2ban 정규식 필터가 nginx 로그 파일에서 작동하지 않습니다.

나는 정규식 필터를 내 access.log와 일치시키려고 하루 종일 머리를 두들겼습니다. 나는 젠투 서버에 Fail2ban을 설치했고 잘 돌아가고 있지만(내 IP를 수동으로 차단했고 작동합니다), Fail2ban 정규식은 실패하고 필터를 사용하여 0 결과를 반환합니다. 심지어 내 사이트가 현재와 지난 며칠간 과부하 공격을 받고 있습니다.

그런데 나는 내 서버에서 iptables 소프트웨어를 사용하지 않습니다. (fail2ban이 작동하려면 하나를 설치해야 합니까?) fall2ban이 내 로그 형식이나 시간 형식을 읽을 수 없는 것 같아요. 모든 것을 조정하려고 했지만 운이 없었습니다. 어떤 도움이라도 받을 수 있을까요? 매우 매우 감사합니다

여기 내 감옥이 있습니다.

[INCLUDES]
before = paths-common.conf
[DEFAULT]
action=%(action_mwl)s
ignoreip = 127.0.0.1/8 192.168.99.25
ignorecommand =
bantime  = 86400
findtime  = 300
backend = gamin

[wp-login]
enabled = true
filter = wp-login
banaction=iptables-allports
logpath = /var/log/nginx/localhost*access_log
bantime = 7200
maxretry = 1


[nginx-nohome]
enabled=true
port=http,https
filter=nginx-nohome
logpath=/var/log/nginx/localhost.error.log
bantime=86400
maxretry=2

[nginx-dos]
enabled = true
port    = http,8090,8080
filter  = nginx-dos
logpath = /var/log/nginx/localhost.access*log
findtime = 30
bantime  = 172800
maxretry = 140

[nginx-login]
enabled = true
filter = nginx-login
action = iptables-multiport[name=NoLoginFailures, port="http,https"]
logpath = /var/log/messages
bantime = 7200
maxretry = 6

[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/localhost.access*log
findtime = 600
bantime = 7200
maxretry = 10

내 필터는 다음과 같습니다.

[Definition]i
failregex = limiting requests, excess:.* by zone.*client: <HOST>

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
~

[Definition]
failregex = ^<HOST> -.*GET */wp-login* HTTP/1\.."
ignoreregex =

#
[Definition]
failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =


[Definition]
failregex = ^<HOST> -.*GET .*/~.*
ignoreregex =
~

nginx 측에서 이것은 내 로그 형식 구문 및 출력입니다.

로그 형식

 log_format main
 '[$time_local] - $remote_addr '
 '"$request" $status $bytes_sent '
 '"$http_referer" "$http_user_agent" ';

액세스 로그 출력:

[01/Oct/2015:09:15:52 +0800] - 60.18.17.206, 113.21.15.23 "POST/httprl_async_function_callback?count=121 HTTP/1.1" 200 1351 "-" "Drupal (+http://drupal.org/)" "-"

오류 로그 형식:

2015/09/22 00:04:06 [error] 7418#0: *287 FastCGI sent in stderr: "Primary    scriptunknown", client: 192.168.99.76, server: www.sams.com, request: "GET/city HTTP/1.0", host: "www.sams.com"

업데이트: 내 사이트는 wordpress를 사용하지 않지만 차단하고 싶은 수백만 개의 wordpress 관련 링크 링크 wp-login.php를 받고 있습니다. 공격적인 악성 검색 봇, 광고 봇, 서버를 손상시키는 스파이더도 많이 있습니다. 차단하고 싶습니다.

답변1

따라서 귀하는 정규 표현식에 익숙하지 않은 것 같습니다. 학습 곡선이 가파릅니다. Fail2ban 유틸리티는 다음을 사용합니다.파이썬 정규식, 해당 페이지를 조금 읽어 볼 가치가 있습니다.

당신이 겪고 있는 문제의 일부는 Failregex의 이 부분입니다.

^<HOST>

<HOST>이는 줄의 시작 부분(또는 개행 바로 뒤)에서 미리 정의된 정규식을 찾는다는 것을 의미합니다 ^.

로그 예제를 보면 모두 날짜/시간으로 시작하며 정규 표현식이 나머지 줄에 적용되기 전에 fall2ban에 의해 제거됩니다. 이 줄은 '^'이 인식할 수 있는 항목으로 시작하지 않으므로 정규 표현식이 실패합니다.

오류 로그 항목을 사용한 간단한 예입니다. 오류 에 대한 조치를 취하려면 scriptunknown(좋은 것일 수도 있고 좋지 않을 수도 있음) 다음과 같은 실패 정규식을 사용할 수 있습니다.

failregex= scriptunknown", clinet: <HOST>

다음을 사용하여 로그 파일을 지나 실행하여 이를 테스트할 수 있습니다.실패2반-정규식(1)예를 들어

fail2ban-regex /path/to/logfile 'scriptunknown", client: <HOST>'
Running tests
=============

Use   failregex line : scriptunknown", client: <HOST>
Use         log file : /path/to/logfile
Use         encoding : UTF-8


Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] scriptunknown", client: <HOST>
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
|  [1] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 2 lines, 0 ignored, 1 matched, 1 missed [processed in 0.00 sec]    
|- Missed line(s):
|  [01/Oct/2015:09:15:52 +0800] - 60.18.17.206, 113.21.15.23  "POST/httprl_async_function_callback?count=121 HTTP/1.1" 200 1351 "-" "Drupal (+http://drupal.org/)" "-"

좋아, 그러면 원하는 대로 작동할 수 있지만 너무 광범위할 수 있으므로 결과를 보고 호출해야 합니다.

그런데 나는 내 서버에서 iptables 소프트웨어를 사용하지 않습니다(fail2ban이 작동하려면 하나를 설치해야 합니까?)

시스템에 설치되어 작동하는 Fail2ban과 호환되는 일종의 방화벽이 필요합니다. 당신이 그것을 테스트하고

내 IP를 수동으로 차단했는데 작동합니다

그렇다면 뭔가 일을 하고 있는 것 같아요.

관련 정보