На мой сервер активно нападают боты и т. п., которые ищут различные файлы в формате /cgi-bin/
, например, search.cgi, YaBB.pl, gitweb.perl, perl, gitweb.pl, htsearch,
и так далее.
Я хочу запретить любой доступ (отправить заголовок 403 Forbidden) для всех возможных имен файлов и расширений в /cgi-bin
/ . (Это общий сервер, поэтому у меня есть доступ только к .htaccess, а не vhosts
к или httpd
).
В .htaccess cgi-bin
я пробовал
deny from all
а также
<FilesMatch "\.cgi?$">
Order Allow,Deny
Allow from All
</FilesMatch>
только для .cgi
продлений, безуспешно ни в том, ни в другом случае.
Как мне запретить доступ ко всему в /cgi-bin/
?
Нужно ли перечислять все имена файлов и расширения в <FilesMatch
директиве?
решение1
Знаете ли вы IP-адрес или user-agent, который является причиной высокого трафика?
<Directory /cgi-bin>
order deny,allow
deny from all
</Directory>
Альт,
RewriteRule "cgi(.*)" "go_away"
решение2
Есть много способов добиться этого:
Использование каталога (версия Apache 2.2):
<Directory /var/www/cgi-bin/> order deny,allow deny from all </Directory>
Используя условие перезаписи:
RewriteCond %{REQUEST_URI} ^/cgi-bin RewriteRule .* - [END,R=406]
Вы можете изменить 406 на любой код, который вам нужен, например 403 (запрещено), список кодов статуса можно найти здесь:https://en.wikipedia.org/wiki/Список_кодов_статуса_HTTP
И вы даже можете расширить условие перезаписи, чтобы охватить больше ботов:
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]
Эти правила предотвращают пустой useragent, запрос, начинающийся с /cgi, ограничивают метод до GET/HEAD/POST, запрос, не начинающийся с /
- Используя более логичный способ:
Просто переместите или удалите cgi-bin из вашей веб-папки, если вы им не пользуетесь.