우선, 다른 사람이 내 웹사이트의 콘텐츠를 크롤링하는 것에 반대하지 않습니다. 다른 사람의 크롤링을 반드시 엄격하게 제한할 필요는 없지만 어떤 사람들의 크롤링에는 수익이 전혀 없습니다. 그들은 하나의 스크립트 또는 여러 스크립트를 사용하여 크롤링합니다. 특정 웹사이트를 동시에 접속하는 서버의 내용은 DDoS와 다르지 않습니다.
현재 제 서버가 이런 상황을 겪고 있습니다. 무단으로 악성 크롤링을 하여 로그 분석에 심각한 영향을 미치고 있으며, 서버의 부하도 증가시켰습니다.
이러한 행동을 방지하는 방법은 무엇입니까? 저는 nginx 서버를 사용합니다. 제가 아는 한 특정 IP만 사용할 수 있지만 거부는 앞으로도 로그에 계속 표시되지만 403이 됩니다. 게다가 수동 거부는 너무 수동적입니다. 특정 IP에 대한 방문 횟수가 급격히 증가했음을 지능적으로 판단하여 차단할 수 있습니까? deny
某草草2017-05-16 17:32:17
1.ngx_http_limit_conn_module을 사용하면 단일 IP에 대한 연결 수를 제한할 수 있습니다
http://nginx.org/en/docs/http/ngx_htt...
2.ngx_http_limit_req_module을 사용하면 단일 IP에 대한 초당 요청 수를 제한할 수 있습니다
http://nginx.org/en/docs/http/ngx_htt...
3. nginx_limit_speed_module을 사용하여 IP 속도를 제한할 수 있습니다
https://github.com/yaoweibin/nginx_li...
世界只因有你2017-05-16 17:32:17
fail2ban(http://www.fail2ban.org/)을 중심으로 솔루션도 제공하겠습니다. fall2ban은 로그를 스캔하여 iptable 사용 금지 여부를 비동기식으로 결정하므로 원래 시스템에 미치는 영향이 상대적으로 적고 nginx 재구성이 필요하지 않습니다. 하지만 방문 횟수가 너무 많을지는 모르겠습니다.
먼저 /etc/fail2ban/jail.conf
에 /etc/fail2ban/jail.conf
里加入
[http-get-dos] enabled = true port = http,https filter = nginx-bansniffer logpath = /usr/local/nginx/logs/segmentfault.log maxretry = 120 findtime = 120 bantime = 3600 action = iptables[name=HTTP, port=http, protocol=tcp]
然后找到/etc/fail2ban/filter.d/nginx-bansniffer.conf
,把里面针对404的判断改成
[Definition] failregex = <HOST> -.*- .*HTTP/1.* .* .*$ ignoreregex =
最后重启fail2ban
를 추가하세요.
으아아아
/etc/fail2ban/filter.d/nginx-bansniffer.conf
를 찾아 404에 대한 판단을 🎜로 변경하세요.
으아아아
🎜마지막으로 fail2ban
서비스를 다시 시작합니다. 위 구성에서는 120초마다 120회 이상의 방문이 있는 IP 주소를 1시간 동안 차단합니다. 🎜高洛峰2017-05-16 17:32:17
1. User-Agent 기반의 스파이더 크롤링 방지
으아아아2. 운영 체제 방화벽에 규칙을 만들어 동일한 IP에 대한 동시 연결 수를 제한하세요
Linux에서 iptables를 예로 들면 다음 구성은 1분에 동일한 IP에 대해 최대 15개의 연결 설정을 제한합니다. 초과 연결은 iptables에 의해 삭제되고 nginx
3. 각 IP의 액세스 빈도를 계산하는 bash 스크립트를 작성하고, 빈도가 설정한 상한을 초과하는 IP를 자동으로 블랙리스트에 추가합니다
블랙리스트에 있는 IP의 경우 스크립트를 사용하여 iptables 또는 nginx.conf에 자동으로 기록하거나 몇 분 동안 차단하거나 허용된 액세스 빈도를 줄이세요
저는 Yahoo에 있을 때 YDoD(Yahoo! Department of Defense)라는 아파치 모듈을 사용했는데, 웹 서비스의 외부 남용을 방지하기 위해 규칙을 사용자 정의할 수 있었습니다. Taobao에 온 후 이름을 tdod로 바꿨습니다. 검색해봐도 오픈소스를 찾을 수 없었습니다. 하지만 원리는 위에서 말한 것과 비슷합니다.