구성하려고 합니다실패2금지내 테스트 서버에서. 내 사이트를 조사하려는 스크립트 봇을 일시적으로 차단하고 싶습니다. 따라서 cgi-bin
, 등이 있는 모든 것입니다 admin
. setup.php
나는 이전에 grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
내 access.log와 같은 내용을 사용하여 404 오류를 생성하는 모든 것을 검토했습니다.
내 URL에 이러한 부분이 전혀 포함되어 있지 않은지 확인했습니다.
jail.local
그래서 설치 후 jail.conf
. 내 파일은 다음과 같습니다(10분 동안 IP를 차단하고 싶습니다).
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 600
destemail = myemail
banaction = iptables-multiport
action = %(action_mwl)s
[apache-script-bots]
enabled = true
port = http,https
filter = apache-script-bots
logpath = /var/log/apache2/access.log
maxretry = 1
나는 또한 내부에 다음과 같은 폴더만 만들었 apache-script-bots.conf
습니다 filter.d
.
[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =
Fail2ban을 다시 시작하면 모든 것이 정상이라는 메시지가 표시됩니다. 그러나 다음과 같이 실행하여 감옥이 작동하는지 테스트하려고 하면 mydomain/main.php
내가 감옥에 있지 않다는 것을 알 수 있습니다.
Fail2ban의 상태를 확인하면 내 감옥이 작동하고 있다는 메시지가 나타납니다.
fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, apache-script-bots
문제는 정규 표현식에 있다고 가정하지만 그 이유를 이해할 수 없습니다.
답변1
<HOST>
해당 호스트를 금지할 수 있도록 로그 항목에서 를 찾을 위치를 정규식을 통해 fall2ban에 알려야 합니다 . 줄의 시작 부분에 있는 일반 액세스 로그의 경우
<HOST> -.*(w00tw00t|main.php|setup.php)
작동하지만 로그 항목의 관련 트리거와 일치하므로 원하는 것을 정확하게 수행하지 못할 수도 있습니다.
다음과 같은 것을 시도해 볼 수도 있습니다.
<HOST> -.*(/w00tw00t|/main.php |setup.php )
문자열 중 일부를 보다 구체적인 위치에 묶어야 합니다.