Блокировать запросы от ботов по шаблону в apache с помощью mod_rewrite. mod_rewrite не работает

I ' m пытается заблокировать запросы от ботов по шаблону glitter_calendar на apache.

Prehistory. К моему серверу часто обращаются боты. URI запроса ... glitter_calendar .. Wordpress возвращает 404. Сервер даже отключается раз в неделю. Я пробовал заблокировать их с помощью Fail2ban. Безуспешно. Нагрузка на сервер не снижается, и я постоянно получаю новые хосты, появляющиеся в моем блочном правиле iptables.

В моем .htaccess я пытаюсь добавить правило блокировки по шаблону glitter_calendar :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*(wpdffcontent)|(glitter_calendar)|(mp4:).* [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

Обнаружил похожие вопросы. Ссылки:

Мой мод переписан, похоже, не работает. Я получаю Ошибка 404 Not Found внутри wordpress, а не с помощью apache.

Модуль mod_rewrite включен:

# httpd -M
...
Loaded Modules:
...
rewrite_module (shared)
...

Конфигурация виртуального хоста управляется с помощью virtualmin. Как мне это исправить?

Часть httpd.conf :

...
LoadModule rewrite_module modules/mod_rewrite.so
...

<VirtualHost x.x.x.x]:80>
SuexecUserGroup "#505" "#504"
ServerName example.com
ServerAlias www.example.com
ServerAlias webmail.example.com
ServerAlias admin.example.com
ServerAlias autoconfig.example.com
ServerAlias autodiscover.example.com
DocumentRoot /home/example/public_html
ErrorLog /var/log/virtualmin/example.com_error_log
CustomLog /var/log/virtualmin/example.com_access_log combined
ScriptAlias /cgi-bin/ /home/example/cgi-bin/
ScriptAlias /awstats/ /home/example/cgi-bin/
ScriptAlias /AutoDiscover/AutoDiscover.xml /home/example/cgi-bin/autoconfig.cgi
ScriptAlias /Autodiscover/Autodiscover.xml /home/example/cgi-bin/autoconfig.cgi
ScriptAlias /autodiscover/autodiscover.xml /home/example/cgi-bin/autoconfig.cgi
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/example/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AddType application/x-httpd-php .php
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php5
</Directory>
<Directory /home/example/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =webmail.example.com
RewriteRule ^(.*) https://example.com:20000/ [R]
RewriteCond %{HTTP_HOST} =admin.example.com
RewriteRule ^(.*) https://example.com:10000/ [R]
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
FcgidMaxRequestLen 1073741824
Alias /dav /home/example/public_html
Alias /pipermail /var/lib/mailman/archives/public
<Location /dav>
DAV on
AuthType Basic
AuthName "example.com"
AuthUserFile /home/example/etc/dav.digest.passwd
Require valid-user
ForceType text/plain
Satisfy All
RemoveHandler .php
RemoveHandler .php5
RewriteEngine off
</Location>
<Files awstats.pl>
AuthName "example.com statistics"
AuthType Basic
AuthUserFile /home/example/.awstats-htpasswd
require valid-user
</Files>
RedirectMatch /cgi-bin/mailman/([^/\.]*)(.cgi)?(.*) https://example.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3
RedirectMatch /mailman/([^/\.]*)(.cgi)?(.*) https://example.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3
php_value memory_limit 32M
IPCCommTimeout 41
Redirect /mail/config-v1.1.xml /cgi-bin/autoconfig.cgi
Redirect /.well-known/autoconfig/mail/config-v1.1.xml /cgi-bin/autoconfig.cgi
</VirtualHost>
2
задан 23 May 2017 в 14:33
1 ответ
 
RewriteEngine On
RewriteCond% {THE_REQUEST} ^. * (Wpdffcontent) | (glitter_calendar) | (mp4:). * [NC]
RewriteRule ^ (. *) $ - [F, L]
 
 

Это должно быть перед вашими существующими директивами WordPress mod_rewrite, иначе они никогда не будут обработаны. (Передний контроллер WordPress перезаписывает каждый запрос до того, как ваши директивы получат возможность работать.) Однако вместо этого ваши директивы должны быть записаны как однострочные:

RewriteRule (?:wpdffcontent|glitter_calendar|mp4:) - [F]

Нет необходимости в обертка (на самом деле, ее следует опустить). RewriteEngine On необходимо только один раз встретить в файле (где угодно). Более эффективно проверять URL-адрес в шаблоне RewriteRule , здесь нет необходимости в дополнительной директиве RewriteCond . И нет необходимости во всех захватывающих группах (у вас есть 4 группы захвата в ваших начальных директивах, которые являются просто ненужной тратой ресурсов). И L не требуется при использовании флага F ( L фактически подразумевается ).

Включите только ] NC , если вам нужно специально заблокировать GliTTer_CALendar и GLITTER_calendar , а также glitter_calendar и т. Д. Если все запросы предназначены для glitter_calendar (все строчные буквы), то это все, что вам нужно заблокировать.


Однако я думаю, что было бы предпочтительнее использовать комбинацию mod_setenvif и mod_authz_host (Apache 2.2) для блокировки этих запросов. (Блок с mod_rewrite можно было бы переопределить, если бы у вас были дополнительные файлы .htaccess с использованием mod_rewrite.)

Например:

SetEnvIf Request_URI "(?:wpdffcontent|glitter_calendar|mp4:)" blockit

Order Deny,Allow
Deny from env=blockit

По логике, любые блокирующие директивы должны быть в первую очередь в вашем файле .htaccess . Затем следуют канонические / внешние перенаправления, а затем внутренние переписывания (исходные директивы WordPress). Однако, если у вас есть доступ к конфигурации сервера (который, похоже, у вас есть), тогда все они должны войти в конфигурацию вашего сервера и отключить .htaccess (т.е. AllowOverride None ).

4
ответ дан 3 December 2019 в 09:58

Теги

Похожие вопросы