1ダースのDrupalサイトのログを開くと、404応答を受信したhttpリクエストに非Drupalパッケージのパターンがいくつか表示されます。 /postnuke/article.php、/exchange/logon.asp、/awstats.pl、/wp-content/、/mailman/、/phpBB/page_header.phpなどのリクエスト.
これらのほぼ100%がエクスプロイトをスキャンするボットです。 IP、httpヘッダー、その他の重要なデータに基づいてこれらのリクエストをブロックするモジュールがいくつかあることは知っています。
私はこれに異なるアプローチをするモジュールを書くという考えを検討してきました。
リクエストをブロックする代わりに、レスポンスをキャッシュするだけです。 Varnishのようなリバースプロキシレイヤーキャッシュを使用しているサイトの場合、max-ageを非常に長い時間(1年)に設定します。モジュールは、Drupalサイトがインストールする可能性が非常に低い一般的なパッケージのメニューエントリを生成するだけです。特定のパッケージを除外するオプションを含めるので、DrupalとphpBBを同じWebルートで本当に実行したい場合は、...をインストールする必要があります https: //www.drupal.org/project/bad_judgement それを行うには:)
このタイプの構成は.htaccessレベルでも実行できることを理解していますが、ボットが悪用しようとしているすべてのパッケージについてそれを維持することは、多くの人々のスキルセットを超えています。
このようなものはすでに存在していますか?
これが機能しない明らかな理由が欠けていますか?これは、2年目のリクエストがphp/mysqlレベルにもう1年間(またはVarnishキャッシュをクリアするまで)ヒットしないようにすることで、サイトのパフォーマンスを向上させるように思われますか?
これを処理するために、setting.php内のfast404コードを変更できます。 _*.asp
_&_*.pl
_;を処理します。正規表現を変更して、次のようなパスを処理する
_/postnuke/article.php
/wp-content/
/mailman/
/phpBB/page_header.php
_
これを交換して行うことができます
_$conf['404_fast_paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
_
これとともに
_$conf['404_fast_paths'] = '/^(postnuke|wp-content|mailman|phpBB)|\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
_
私がしたことは、最初の_/
_の直後の^(postnuke|wp-content|mailman|phpBB)|
を文字列の先頭に追加することだけでした。つまり、パスがこれらの文字列のいずれかで始まる場合、起動をスキップしますdrupalおよび404ここでサーバーリソースをほとんど使用しません。
Fast404を有効にするには
Sites/defaultディレクトリに移動します。 setting.phpファイルまで開きます。 500行目あたりで、このdrupal_fast_404();のコメントを外します。 #を削除する
Dblogを有効にしている場合、このクエリを実行して、最悪の違反者のパスを見つけることができます
_SELECT
COUNT(*) AS count,
watchdog.*
FROM watchdog AS watchdog
WHERE type = 'page not found'
AND message NOT LIKE 'sites/all/%'
AND message NOT LIKE 'sites/default/%'
AND message NOT LIKE '%/styles/%'
GROUP BY message
ORDER BY
count DESC,
wid ASC
_
サーバーの一番外側のVarnishでこれらのリクエストをキャッチすることをお勧めします。次のような行をVCLに追加します。
if (req.url ~ "/wp-admin/" || req.url ~ "/fckeditor*" || req.url ~ "/wp-login.php" || req.url ~ "/pma/scripts/" || req.url ~ "/myadmin/scripts/" || req.url ~ "/MyAdmin/scripts/" || req.url ~ "/wp-content/plugins/" || req.url ~ "/blog/wp-i*") {
return (synth(403, "Forbidden"));
}
厄介なリクエストをキャッチして、それを使ってやりたいことを実行し、禁止されたアクセスまたはリダイレクトを他の場所に与えます。
[...] Drupalモジュールによって更新された「禁止されたURL」のリストを読み取ることができるVMODを作成することは可能だと思います。