내 웹사이트가 Google 스파이더의 DoS 공격을 받고 있습니다. Google은 내 사이트를 색인화하는 것을 환영하지만 때로는 내 웹 서버가 결과를 생성할 수 있는 것보다 더 빠르게 내 사이트의 태그 클라우드를 쿼리하여 내 웹 서버가 리소스를 소진하게 만듭니다.
일반 방문자가 영향을 받지 않도록 웹 서버에 대한 액세스를 어떻게 제한합니까?
robots.txt는 전체 사이트의 색인이 생성되는 것을 방지하므로 옵션이 아닙니다.
iptables -m recent
일부 페이지에는 많은 이미지나 기타 데이터 파일이 있고 해당 페이지에 "최근" 트리거(일반적으로 이미지와 피드를 로드하는 RSS 수집기)도 있기 때문에 이는 까다롭습니다.
iptables -m limit
동일한 단점이 있으며 가장 중요한 것은 각 IP 소스 주소를 선택할 수 없다는 것입니다.
과도한 서버 부하를 유발하는 방문자를 제한하는 방법은 무엇입니까?
VirtualBox VM의 Ubuntu 서버에서 apache2를 실행하고 있습니다.
답변1
시도 해봐mod_qos아파치 모듈. 현재 버전에는 다음과 같은 제어 메커니즘이 있습니다.
- 위치/리소스(URL) 또는 가상 호스트에 대한 최대 동시 요청 수입니다.
- 초당 허용되는 최대 URL 요청 수 또는 초당 다운로드되는 최대/최소 킬로바이트와 같은 대역폭 제한.
- 초당 요청 이벤트 수를 제한합니다(특별 요청 조건). 또한 웹 서버에 대한 액세스가 제한되지 않거나 덜 제한된 VIP(Very 중요한 사람)를 "탐지"할 수도 있습니다.
- 승인되지 않은 작업을 거부하는 일반 요청 라인 및 헤더 필터입니다.
- 본문 데이터 제한 및 필터링을 요청합니다(mod_parp 필요).
- 단일 IP 소스 주소에서 허용되는 최대 연결 수 또는 동적 연결 유지 제어와 같은 TCP 연결 수준 제한.
- 서버에 사용 가능한 TCP 연결이 부족하면 잘 알려진 IP 주소가 선호됩니다.
문서에 있는 이 예제 조건부 규칙을 사용하면 올바른 방향으로 나아갈 수 있습니다.
# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch "slurp" QS_Cond=spider
BrowserMatch "googlebot" QS_Cond=spider
# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch "^(/app/b/|/app/c/).*$" 300
QS_CondLocRequestLimitMatch "^(/app/b/|/app/c/).*$" 10 spider