Meu servidor está sendo duramente atingido por bots, etc., procurando por vários arquivos em /cgi-bin/
, like search.cgi, YaBB.pl, gitweb.perl, perl, gitweb.pl, htsearch,
e assim por diante.
Quero negar todo o acesso (enviar um cabeçalho 403 Forbidden) para todos os nomes e extensões de arquivos possíveis em /cgi-bin
/ . (Este é um servidor compartilhado, então só tenho acesso ao .htaccess, não ao vhosts
ou httpd
).
Em um .htaccess cgi-bin
eu tentei
deny from all
assim como
<FilesMatch "\.cgi?$">
Order Allow,Deny
Allow from All
</FilesMatch>
apenas para .cgi
extensões, sem sorte para nenhuma delas.
Como posso negar acesso a tudo em /cgi-bin/
?
Preciso listar todos os nomes e extensões de arquivos em uma <FilesMatch
diretiva?
Responder1
Você conhece o ip ou user-agent que causa alto tráfego?
<Directory /cgi-bin>
order deny,allow
deny from all
</Directory>
Alt,
RewriteRule "cgi(.*)" "go_away"
Responder2
Há muitas maneiras de conseguir isso:
Usando o Directory (versão Apache 2.2):
<Directory /var/www/cgi-bin/> order deny,allow deny from all </Directory>
Usando condição de reescrita:
RewriteCond %{REQUEST_URI} ^/cgi-bin RewriteRule .* - [END,R=406]
você pode alterar 406 por qualquer código que desejar como 403 para proibido, você pode encontrar aqui a lista de códigos de status:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
E você pode até estender a condição de reescrita para cobrir mais bots:
RewriteCond %{HTTP_USER_AGENT} ^-? [OR]
RewriteCond %{REQUEST_URI} ^/cgi [OR,NC]
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ [OR]
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [END,R=406]
Essas regras evitam useragent vazio, solicitação iniciada por /cgi, método limite para GET/HEAD/POST, solicitação não iniciada por /
- Usando a maneira mais lógica:
Basta mover ou remover o cgi-bin da sua pasta web se você não os usar.