web-dev-qa-db-ja.com

mod_rewriteを使用してApacheのパターンでボットからのリクエストをブロックします。 mod_rewriteが機能しない

ボットからのリクエストをパターンでブロックしようとしていますglitter_calendarApacheで。

先史時代。私のサーバーはボットによって頻繁にアクセスされています。リクエストURIは... glitter_calendarです。wordpressは404を返します。サーバーも週に1回ダウンします。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>

同様の質問が見つかりました。リンク:

Modの書き換えが機能していないようです。 Apacheではなく、ワードプレス内でエラー404が見つかりませんを取得します。

モジュール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
Tomas Morgan
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*(wpdffcontent)|(glitter_calendar)|(mp4:).* [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>

これはbefore既存のWordPress mod_rewriteディレクティブを実行する必要があります。そうしないと、処理されません。(WordPress- フロントコントローラーディレクティブが実行される前に、すべてのリクエストを書き換えます。)ただし、ディレクティブは、代わりにワンライナーとして記述する必要があります。

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

<IfModule>ラッパーは必要ありません(実際、これは省略してください)。 RewriteEngine Onは、ファイル内(どこでも)に1回だけ発生する必要があります。 RewriteRulepatternのURLを確認する方が効率的です。ここで、追加のRewriteCondディレクティブは必要ありません。そして、すべてのcapturingグループは必要ありません(最初のディレクティブには4つのキャプチャグループがあり、リソースの不必要な浪費です)。また、Lフラグを使用する場合、Fは必要ありません(Lは事実上暗黙です)。

GliTTer_CALendarGLITTER_calendar、およびglitter_calendarなどを特にブロックする必要がある場合にのみ、NCフラグを含めます。すべての要求が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

論理的には、blockingディレクティブは、.htaccessファイルの最初のものである必要があります。正規/外部リダイレクトが続き、次に内部書き換え(元のWordPressディレクティブ))。ただし、サーバー構成(持っているように見える)にアクセスできる場合は、これらすべてを実行する必要があります。サーバーを構成し、.htaccess(つまり、AllowOverride None)を無効にします。

4
MrWhite