メインコンテンツへスキップ
  1. ノート/

Apacheのmod_includeを使ったシンプルな「自分のIPアドレス確認」スクリプト

·2 分
Ixonae
著者
Ixonae

注意: この記事はLLMによって英語から翻訳されたものです。正確性については保証いたしかねますので、あらかじめご了承ください。英語の原文はこちら

Network Watcherの開発にあたり、https://ifconfig.me/ipのようなものを、新しいソフトウェアのインストールや設定なしにセルフホストしたいと考えた。

Apacheサーバーをプロキシサーバーとして稼働させていたので、利用可能なオプションを調べることにした。

RHELシステムではhttpdにmod_includeがコンパイル済みであることがわかった(ただし、デフォルトでは有効ではなく、動作させるには明示的な設定が必要)。

そのため、.shtmlスクリプトはたった1行で済んだ:

<!--#echo var="REMOTE_ADDR" -->

これだけでは動作しないため、Apacheのvhostファイルにいくつかの設定が必要だった:

  DocumentRoot /path/to/dir
  <Directory /path/to/dir>
    # SSIのexec機能を使用できないようにし、現在の設定を
    #  上書きできないようにする
    Options IncludesNOEXEC
    AllowOverride None

    # Apacheに.shtmlファイルをMIMEタイプtext/htmlとして配信するよう指示し、
    #   ページがダウンロードされずに表示されるようにする
    AddType text/html .shtml

    # Apacheに.shtmlファイルをSSIプロセッサで解析するよう指示する
    AddOutputFilter INCLUDES .shtml

    DirectoryIndex index.shtml
    Require all granted
  </Directory>

  RewriteEngine On

  # 無効なトークンを拒否
  RewriteCond %{HTTP:Authorization} !^Bearer\ dummy-password$
  RewriteRule .* - [F]

  # / 以外のリクエストを拒否
  RewriteCond %{REQUEST_URI} !^/$
  RewriteCond %{REQUEST_URI} !^/index\.shtml$
  RewriteRule .* - [F]

RewriteCond %{HTTP:Authorization}の行にハードコードされたパスワードがあることに気づくかもしれない。複雑なことをせずにシンプルなBearer認証を実装したかった(また、それが可能かどうかも気になっていた)。ハードコードされたパスワードは少し見栄えが悪いが(ApacheのIncludeディレクティブを使って別ファイルに移すこともできる)、たとえ誰かがページにアクセスできたとしてもリスクはほぼないので、これで十分だと考えている。

追加リソース