【AWS】LightSailへのWebアクセスをCloudFrontリクエスト以外を無効化する

2024年01月21日
 
2024年01月21日

こんにちは。ゆーろんです。

最近このWEBサイトへのアクセスログを見ると、CloudFront経由ではなく直接HTTPリクエストを送って見られることが多いです。
ログを見るとKali付属のツールを使ってスキャニングを行いセキュリティホールを探すようなリクエストばかりでした。
特に海外からのスキャニングが多い…。

セキュリティ強度を上げるため、HTTP/HTTPSリクエストはCloudFrontのみから受け付けるようにすることにしました。
というわけでその方法をメモしていきます。

CloudFrontのみのアクセスにする仕組み

仕組みとしては以下の通りです。

  1. CloudFrontからオリジンへリクエストを送る際に秘密の独自HTTPヘッダを付与
  2. オリジン側では独自HTTPヘッダが付いていればCloudFrontからのリクエストと判断し、もし付いていなければ403を返してアクセス拒否する

結構、仕組みはシンプルです。

CloudFrontの機能で「カスタムヘッダーの追加」という設定項目で自由にヘッダーを付けることができるので使用します。

環境

環境は以下の通りです。

  • CDN: CloudFront
  • Webサーバ: Apache

Apache以外も大体似た感じに設定できると思うので適宜読み替えてください。

実装手順

CloudFrontの設定

CroudFrontのすでに展開しているディストリビューションを編集し以下画像のように任意のヘッダと任意の文字列を追加します。
なお文字列は推測されにくい文字列を設定することをお勧めします。

CloudFront設定

これで設定を反映したらステータスがDeployedになるまで待ちます。

Webサーバの設定

Lightsailの場合は/etc/apache2/apache2.confがApacheの設定ファイルになります。
設定ファイルに以下のように追加(<と>はとってください)。


<Directory /opt/bitnami/wordpress>
    Require all granted
    AllowOverride All

    SetEnvIf <任意のヘッダ名> \"^<任意の文字列>\" CDNValid
    Order deny,allow
    Deny from all
    Allow from env=CDNValid
</Directory>

動作確認

curlコマンドでオリジンへ直接アクセスし以下のようにレスポンスがあれば成功。

curl <オリジンのIPアドレス>/wordpress
<!DOCTYPE HTML>
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don\'t have permission to access this resource.</p>
</body></html>

これでHTTPリクエストでオリジンへ直接アクセスすることを禁止にできました。

よろしければシェアしてくださいね!
タグ: AWSApache

関連記事