Bloqueie solicitações de bots por padrão no apache com mod_rewrite. mod_rewrite não está funcionando

2

Estou tentando bloquear solicitações de bots pelo padrão glitter_calendar no apache.

Pré-história. Meu servidor é strongmente acessado por bots. O URI de solicitação é ... glitter_calendar .. O wordpress retorna 404. O servidor também desce uma vez por semana. Eu tentei bloqueá-los com o Fail2ban. Sem sucesso. O carregamento do servidor não diminui e eu recebo novos hosts constantemente aparecendo na minha regra de bloqueio do iptables.

No meu .htaccess estou tentando adicionar uma regra de bloqueio pelo padrão 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>

Encontrou perguntas semelhantes. Links:

Minha reescrita de mod parece não funcionar. Eu recebo Error 404 Not Found dentro do wordpress, não por meio do apache.

O módulo mod_rewrite está ativado:

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

A configuração do host virtual é gerenciada com o virtualmin. Como faço para corrigir isso?

Parte de 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>
    
por Tomas Morgan 29.01.2017 / 12:47

1 resposta

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

Isso precisaria ser antes de suas diretivas mod_rewrite existentes do WordPress, caso contrário, ele nunca será processado. (O front controller do WordPress reescreve todas as solicitações antes que suas diretivas tenham a chance de ser executadas.) No entanto, suas diretivas devem ser escritas como um verso:

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

Não há necessidade do wrapper <IfModule> (na verdade, isso deve ser omitido). RewriteEngine On só precisa ocorrer uma vez no arquivo (em qualquer lugar). É mais eficiente verificar o URL no padrão RewriteRule , sem necessidade de uma diretiva RewriteCond adicional aqui. E não há necessidade de todos os grupos capturados (você tem 4 grupos de captura em suas diretivas iniciais que são apenas um desperdício desnecessário de recursos). E o L não é necessário ao usar o F flag ( L está efetivamente implied ).

Inclua apenas o sinal NC se você precisar especificamente bloquear GliTTer_CALendar e GLITTER_calendar , bem como glitter_calendar , etc. Se todas as solicitações forem para glitter_calendar (todas as letras minúsculas), isso é tudo precisa bloquear.

No entanto, acho que seria preferível usar uma combinação de mod_setenvif e mod_authz_host (Apache 2.2) para bloquear essas solicitações. (O bloco com mod_rewrite poderia ser substituído se você tivesse arquivos .htaccess adicionais usando mod_rewrite.)

Por exemplo:

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

Order Deny,Allow
Deny from env=blockit

Logicamente, qualquer diretiva bloqueio deve ser a primeira coisa no seu arquivo .htaccess . Seguido por redirecionamentos canônicos / externos e, em seguida, reescritos internos (as diretivas originais do WordPress). No entanto, se você tiver acesso à configuração do servidor (que parece ter), tudo isso deve estar na configuração do servidor e desabilitar .htaccess (ou seja, AllowOverride None ).

    
por 29.01.2017 / 13:12