[server] 서버의 모든 사이트에서 사용자 에이전트를 어떻게 차단합니까?

나는 원래 webmasters.stackexchange.com에 게시 했지만 여기에서 더 나은 수신을 얻을 수 있다고 들었습니다.


지난 며칠 동안 (아마도 부주의 한) DDOS 공격으로 고통 받고 있습니다. 아파치가 사용 가능한 모든 메모리를 통해 먹는 “Mozilla / 4.0 (호환; ICS)”로 식별되는 에이전트로부터 요청이 너무 많습니다.

결과적으로이 사용자 에이전트와 함께 제공되는 모든 요청을 차단하고 싶습니다. httpd.conf에서이 작업을 시도했습니다.

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

그러나 아파치를 다시 시작하면 deny여기 사용에 대해 불평 합니다. location또는 directory블록 으로 묶지 않고 각 사이트에 새 블록을 추가해야한다는 것을 의미하므로 전체 서버에 대한 액세스를 거부 할 수있는 방법이 있습니까?


업데이트 : 내가 얻는 오류

  • /etc/apache2/httpd.conf의 라인 4에서 웹 서버 apache2 구문 재시작 오류 : 여기서 거부 할 수 없음 [실패]


답변

지금은 오래된 질문처럼 보이지만 위와 같은 신경에서 답을 찾고 싶었습니다. 그것은 아주 잘으로이 아니다 – 그것은되어야한다고 나에게 것 <Location "/">, 그리고는 SetEnvIf괄호가 인용 될 필요가 있으므로 정규 표현식을 필요로한다.

이것은 모든 vhost에서 액세스 제어를 적용하는 데 효과적이었습니다.

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

가상 호스트 정의 전에이를 포함 시키십시오.

a


답변

mod_rewrite는 문서에 따라 서버 수준에서 구성 할 수 있습니다.

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

에 정규식을 탈출하는 것을 잊지 마십시오 RewriteCond


답변

SetEnv 행의 구문이 올 바르면 다음과 같이 conf에이를 던질 수 있습니다.

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

2.2.24에서 테스트 된 모든 가상 호스트에서 작동하도록 매력적으로 작동했습니다.


답변


댓글 달기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다