나는 한 가지 예외를 제외하고 매우 잘 작동하는 호스트된 도메인에 대한 악의적인 요청을 감지하기 위해 Fail2ban을 사용합니다.
요청이 fqdn 또는 하위 도메인 대신 IP로 전송되면 IP 자체가 가상 호스트가 아니기 때문에 요청이 포착되어 other_vhosts_access.log에 기록됩니다.
예시 항목:
somedomain.de:80 20.37.96.167 - - [24/Jan/2020:15:47:04 +0100] "POST //4walls/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/ 1.1" 301 587"https://www.google.com/" "Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
따라서 Apache는 IP에 대한 역조회를 수행하고 처음에 호스트 이름을 적어 두는 것 같습니다.
이로 인해 Fail2ban은 요청자 IP 대신 서버 IP를 자체 금지합니다.
somedomain.de:80 항목을 어떻게 방지할 수 있나요?
답변1
Apache는 IP에 대한 역방향 조회를 수행하고 처음에 호스트 이름을 기록합니다.
필터가 올바르게 만들어진 경우(예: 포괄 기능 없이 고정된 정규식) 도메인과 외국 주소가 정확히 어디에 기록되는지는 중요하지 않습니다.
somedomain.de
귀하의 예제 로그 항목에서 이 항목은 귀하의 것이며 20.37.96.167
"침입자"의 주소라고 가정합니다 . 그러면 적절한 실패 정규식은 다음과 같습니다.
# ban everything (with code 300-599):
failregex = ^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+
앵커된 부분은 앵커로 인해 처음부터 문자열과 ^\S+\s+<ADDR>
일치 하고 검색합니다 . (결과 http-status에 관계없이) 모든 것을 금지해야 하는 경우 정규식으로도 충분합니다 .somedomain.de:80 20.37.96.167
^
other_vhosts_access.log
Fail2ban 버전 <= 0.9인 <HOST>
경우 대신 <ADDR>
.
fail2ban-regex
예를 들어, 일부 거짓 긍정을 포착할지 여부를 확인할 수도 있습니다 .
fail2ban-regex --raw -vv /path/to/log '^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+' \
| grep <your-IP-or-hostname>