Fail2ban 감옥이 제대로 작동하지 않습니다

Fail2ban 감옥이 제대로 작동하지 않습니다

fall2ban을 사용하여 nginx에 사용할 수 없는 스크립트 요청을 차단하려고 합니다.

# Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:
#
# Block IPs trying to execute scripts such as .php, .pl, .exe and other funny scripts.
#
# Matches e.g.
# 192.168.1.1 - - "GET /something.cgi
#
[Definition]
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =

그러나 액세스 로그의 리퍼러가 스크립트 태그를 보유하고 있는 경우에도 조회가 생성됩니다. 예를 들어 다음 줄은 다음과 같습니다. (IP와 참조자를 난독화하고 여러 줄에 걸쳐 잘랐습니다. 실제 로그에서는 이 4줄이 한 줄에 있습니다.)

1.2.3.4 - - [16/Dec/2013:18:01:10 +0100] "GET / HTTP/1.1" 
301 178 "http://referrer.com/default.aspx" 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.41 Safari/537.36"

.asp섹션 에서 등 만 찾도록 정규 표현식을 어떻게 변경할 수 있습니까 GET /xxxxx HTTP?

답변1

음, 정규식에는 매우 흥미로운 점이 있는데, 정규식은 탐욕적이라는 것입니다.

문장 시작 부분에서 일치하는 항목을 얻더라도 계속 찾고 문장에서 사용할 수 있는 마지막 일치 항목을 찾습니다. 귀하의 경우에는 "referrer.com/default.aspx"와 일치합니다. 왜냐하면 .asp와 일치하는 정규 표현식이 있고 .asp*와도 일치하기 때문입니다.

따라서 정규식을 사용하는 동안에는 매우 구체적이어야 합니다.

이를 위해 다음을 시도해야 합니다:

failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)\"\s\d*

이와 같은 것이 아주 잘 작동할 것입니다. 어떤 경우에든 작동하지 않으면 이제 문제가 무엇인지 알게 되었으며 정규식을 조금만 파고들면 문제를 해결할 수 있을 것이라고 확신합니다.

이것이 도움이 되었기를 바랍니다.

관련 정보