Mi servidor está siendo muy afectado por bots, etc., que buscan varios archivos en /cgi-bin/
, me gusta search.cgi, YaBB.pl, gitweb.perl, perl, gitweb.pl, htsearch,
y así sucesivamente.
Quiero denegar todo acceso (enviar un encabezado 403 Prohibido) para todos los nombres y extensiones de archivos posibles en /cgi-bin
/ . (Este es un servidor compartido, por lo que solo tengo acceso a .htaccess, no a vhosts
o httpd
).
En un .htaccess lo cgi-bin
he probado
deny from all
así como
<FilesMatch "\.cgi?$">
Order Allow,Deny
Allow from All
</FilesMatch>
solo para .cgi
extensiones, sin suerte para ninguna de las dos.
¿Cómo puedo negar el acceso a todo lo que hay en /cgi-bin/
?
¿Necesito enumerar todos los nombres y extensiones de archivos en una <FilesMatch
directiva?
Respuesta1
¿Conoce la IP o el agente de usuario que causa el alto tráfico?
<Directory /cgi-bin>
order deny,allow
deny from all
</Directory>
Alt,
RewriteRule "cgi(.*)" "go_away"
Respuesta2
Hay muchas maneras de lograr esto:
Usando Directorio (versión Apache 2.2):
<Directory /var/www/cgi-bin/> order deny,allow deny from all </Directory>
Usando la condición de reescritura:
RewriteCond %{REQUEST_URI} ^/cgi-bin RewriteRule .* - [END,R=406]
Puede cambiar 406 por cualquier código que desee como 403 para prohibido, puede encontrar aquí la lista de códigos de estado:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
E incluso puedes extender la condición de reescritura para cubrir más bot:
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]
Esas reglas evitan que el agente de usuario esté vacío, la solicitud comienza con /cgi, limita el método a GET/HEAD/POST, la solicitud no comienza con /
- Usando la forma más lógica:
Simplemente mueva o elimine cgi-bin de su carpeta web si no los usa.