Заблокировать скребок сайта в Haproxy
Я использую Haproxy. Я хочу заблокировать скребки с моего сайта. В haproxy.cfg я создал правило.
acl blockedagent hdr_sub(user-agent) -i -f /etc/haproxy/badbots.lst
http-request deny if blockedagent
Файл /etc/haproxy/badbots.lst
содержит пользовательский агент, который я хочу заблокировать,
^Lynx
^PHP
^Wget
^Nutch
^Java
^curl
^PEAR
^SEOstats
^Python\-urllib
^python\-requests
^HTTP_Request
^HTTP_Request2
В качестве примера следует заблокировать wget
попытка тоже. Но когда я использую wget mysite.com/example/discussion
, это дает мне выход. Кроме того, я попробовал с python scrapy
тоже. Но в обоих случаях он дает вывод, где он должен блокировать попытки. Я думаю, что черный список не работает. Какой должен быть рекомендуемый способ сделать это?
1 ответ
Решение
Использование hdr_reg
acl blockedagent hdr_reg(user-agent) -i -f /etc/haproxy/badbots.lst
Или удалить ^
от badbots.lst
====
$ cat conf
global
debug
defaults
mode http
frontend web
bind *:80
acl blockedagent hdr_reg(user-agent) -i -f badbots.lst1
http-request deny if blockedagent
default_backend asdf
backend asdf
server a 127.0.0.1:8000
$ cat badbots.lst1
^Wget
^curl
$ curl http://127.0.0.1
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
$ wget http://127.0.0.1
--2018-04-16 01:47:51-- http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2018-04-16 01:47:51 ERROR 403: Forbidden.
$ curl http://127.0.0.1 -A "asdf"
HELLO