web-dev-qa-db-ja.com

ボットから一般的に要求されるURLをキャッシュするモジュール?

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キャッシュをクリアするまで)ヒットしないようにすることで、サイトのパフォーマンスを向上させるように思われますか?

6
kreynen

これを処理するために、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();のコメントを外します。 #を削除する

出典: https://docs.google.com/presentation/d/1AgnurTWsWdMAFjfFmSU7mk2zfJu8jG_KmVdZ7-o6Pok/edit#slide=id.g385c64257_0178

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
_
4
mikeytown2

サーバーの一番外側の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モジュールによって更新された「禁止されたU​​RL」のリストを読み取ることができるVMODを作成することは可能だと思います。

0
Taylor Taff