HTTP_HOSTがIP(セキュリティ)の場合の.htaccessブロックアクセス

May 31 2018

サーバーに対して多くの攻撃がありました。ほとんどは脆弱性スキャンで始まり、POSTリクエストの波が続きます。

私はまもなくCloudflare(WAFおよびDDos)を実装する予定です。これは、私のドメインでのDNSルックアップでは、サーバーではなくCloudflareのIPアドレスが表示されることを意味します。したがって、私のサーバーのIPアドレスはその点で隠されます。

ただし、攻撃は、世界中で考えられるすべてのIPを1つずつ通過することで発生する可能性があります。サーバーログを見ると、これが非常に多く発生していることがわかります。(1台のサーバーに3つのIPが関連付けられており、XXX.XXX.XXX.XX1、XXX.XXX.XXX.XX2、XXX.XXX.XXX.XX3の順にまったく同じ攻撃が発生します)

私のトップレベルの.htaccessは次のようになります。

# deny all POST requests
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} POST
    RewriteRule .* - [F,L]
</IfModule>


# deny unused request types
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
    RewriteRule .* - [F,L]
</IfModule>


# 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

質問:

  1. [HTTP_HOST = XXX.XXX.XXX.XX1またはHTTP_HOST = XXX.XXX.XXX.XX2またはHTTP_HOST = XXX.XXX.XXX.XX3]の場合、トラフィックがすぐにブロックされるようにするには、何を追加する必要がありますか?

  2. この新しいコードを.htaccessの先頭に配置できますか?それは現在そこにあるものを壊しますか?

回答

1 MrWhite May 31 2018 at 18:49

Host特定のIPのヘッダーを確認する必要はありませんHost。数字で始まるものを確認するだけです。たとえば、.htaccessファイルの先頭:

RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]

Lフラグは必要ありませんF-それは暗示されています。

また、追加の<IfModule mod_rewrite.c>ラッパーは必要ありません。WordPressをそのままにしておきます。(それも厳密には必須ではありませんが。)

ただし、これらのタイプのブロックは、ではなく、サーバー/仮想ホストレベルで実行するのが理想的.htaccessです。<VirtualHost>これらの望ましくないIP要求をトラップするデフォルトを構成します。

たとえば、名前ベースのVirtualHostのみを使用していると仮定すると、次の形式のデフォルトのVirtualHost(他のすべてのVirtualHostの前に発生する必要あります)を構成できます。

# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
  ServerName default.example.com
  <Location />
  Require all denied
  </Location>
</VirtualHost>

これにより、他の「名前付き」仮想ホストにマップされないすべてのリクエストがキャッチされます。_default_は単にのエイリアスです*。上述したように、この<VirtualHost>コンテナはしなければならない他のすべての前に発生し<VirtualHost>、サーバーの設定でコンテナ。それが最初に定義されているという事実が、それを「デフォルト」にしているのです。

ServerNameディレクティブは、実際の以外のように定義する必要があり、サーバー名、システム上。省略できますが、サーバーはそれを計算しようとするだけであり、信頼性が低いことが判明する可能性があります。

これにより、実際の仮想ホスト(Webサイトにサービスを提供する)がこれらの他の要求を処理する必要がなくなります。


# deny all POST requests

それは少し極端に思えます!あなたのサイトがまだ機能していることに驚いていますか?