Apache設定 · 2 min read · Dec 27, 2025

OpenID認証のためのApacheモジュールのインストールと設定

OpenID認証のためのApacheモジュール

OpenIDは、ウェブアプリケーションにおけるユーザー認証のために広く採用されている技術です。これは、ブログアプリケーションにおける分散ユーザー認証の概念に依存しています。この小さなクックブックでは、オープンソースのApacheモジュールmod_auth_oidをインストールし、設定する方法をステップバイステップで説明します。

このモジュールの目的は、Apacheベースのウェブアプリケーションやリソースへのアクセスを保護するために使用できるシンプルな依存パーティの実装を提供することです。このモジュールは、公式仕様で説明されているすべての機能を実装しているわけではありません。しかし、その機能はすでに成熟しており、アプリケーションとユーザーにとって快適なログインの使いやすさを提供します。

また、Apacheの設定を介してだけでなく、ローカルマッピングファイル(他のアプリケーションから既に存在する可能性があります)またはLdapを介して、useridをローカルユーザーにマッピングする機能を強化する2つの追加モジュールも含まれています。

セキュリティ警告: このモジュールはPAPEのようなプロトコル拡張をサポートしていません。したがって、医療や金銭取引のようなデータ保護の要求が高い環境での使用は推奨されません。

インストール

前提条件

このApacheモジュールをインストールするには、以下の要件を満たす必要があります:

  • mod_ssl、mod_proxy、mod_include、ヘッダーファイル、およびapxs/apxs2を含むApache 2.2(通常はapache2およびapache2-develパッケージと呼ばれます)。
  • パラメータ解析のためのApacheモジュールmod_parp。ここから入手できます。インストールは簡単です:sudoを使用するか、rootとしてログインします:
    $ tar xvBzf mod_parp-0.10-src.tar.gz  
    $ cd mod_parp-0.10 $ sudo apxs2 -i -c apache2/mod_parp.c  
    $ sudo chmod 755 /usr/lib64/apache2/mod_parp.so

メインモジュール

ソースコードをここからダウンロードして解凍します。

$ tar xvBzf mod_auth_oid-2.0-src.tar.gz  
$ cd mod_auth_oid-2.0  
$ sudo apxs2 -i -c -I . -D AOID_MOD_EXT_HOOKS apache2/mod_auth_oid.c -lcrypto -lparp

*オプション: ソースコードには追加のモジュールも含まれています。推奨される追加モジュールmod_auth_oid_file.cまたはmod_auth_oid_ldap.cを使用したい場合は、以下のコマンドのいずれかでそれらもコンパイルしてインストールしてください。*

$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_file.c  
$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_ldap.c

設定

サーバーセクション

以下のApache標準モジュールが必要です:

  • mod_ssl(mod_auth_oidで使用される暗号化ルーチンを提供)
  • mod_proxy(OpenIDプロバイダーにリクエストを送信するためにmod_auth_oidに機能を提供)
  • mod_include(shtmlページのレンダリングを提供)

Apacheのグローバル設定セクションでモジュールを有効にします。ファイルの場所はファイルシステムのレイアウトに応じて調整してください。また、mod_sslの後にモジュールが読み込まれることが重要です。したがって、これらの行をApacheのLoadModuleブロックの最後に配置します。使用する予定のマッピングモジュールの最後の2行のコメントを解除してください。ディストリビューションにモジュールの読み込みに関する個別のスタイルがある場合は、その指示に従ってください(例:特定のディレクトリにある場合に自動的に含まれるファイルに以下の行を配置します)。

  LoadModule parp_module                    /usr/lib64/apache2/mod_parp.so
  LoadModule auth_oid_module                /usr/lib64/apache2/mod_auth_oid.so
  # LoadModule auth_oid_file_module           /usr/lib64/apache2/mod_auth_oid_file.so
  # LoadModule auth_oid_ldap_module           /usr/lib64/apache2/mod_auth_oid_ldap.so

サーバーを再起動してみてください。モジュールが正しく読み込まれていれば、サーバーのerror.logに報告されるはずです:

[Sun Nov 06 12:10:59 2011] [notice] Apache/2.2.17 (Linux/SUSE) mod_ssl/2.2.17 OpenSSL/1.0.0c mod_auth_oid/2.0 configured -- resuming normal operations

VirtualHostセクション

次に、アプリケーションを保護するための特定の設定を準備する時が来ました。VirtualHost設定を編集します。もちろん、ここではセキュリティに関わるため、https VirtualHostである必要があります。そして、私のOpenID YOURNAMEをあなた自身のOpenIDに置き換えてください。さもなければ、YOURNAMEがあなたの貴重な宝物を盗むことになるかもしれません。 ;) GoogleをOpenIDプロバイダーとして使用したい場合は、少し異なる方法でAOID_UserPatternを追加する必要があります。なぜなら、Googleはサイトごとに不透明なOpenIDを使用する指向されたアイデンティティアプローチを採用しているからです。このハウツーの最後の章「好みのOpenIDプロバイダーの名前空間を狭める」では、Googleの例を用いて設定ディレクティブが説明されています。

保護したいリソースが/privateの場所であり、認証ハンドラーが/aoidにあると仮定します。以下のセクションには、あなたが何をすべきかを示すコメントがあります。

       # 利用可能なすべての設定オプションの完全なリファレンス
       # は次のURLで入手できます:http://auth-openid.sourceforge.net/
       # 注意:信頼できるCAによって有効にするには、それらをcacertsに配置します
       # Apacheのドキュメントに記載されているように、ハッシュ名にリンクします
       # http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslproxycacertificatepath
       SSLProxyEngine            on
       SSLProxyCACertificatePath /etc/ssl/cacerts

       # セッションクッキーへのXSS攻撃を防ぐhttponlyフラグを使用
       BrowserMatch              "Mozilla.*Firefox/(3|4)" HttpOnlyCookie
       BrowserMatch              "MSIE [6789]"            HttpOnlyCookie
       BrowserMatch              "Opera/(10|9\.[56789])"  HttpOnlyCookie
       BrowserMatch              Secure SecureCookie

       # mod_auth_oidの基本設定
       AOID_Realm                /
       AOID_StartPage            /private/index.html
       AOID_LogLevel             info
       AOID_LoginPath            /aoid/login
       AOID_LoginSuffix          .shtml
       AOID_Timeout              300
       AOID_CookieName           AJESSIONID

       # OpenIDユーザーマッピング。追加の可能性は
       # Howtoforgeページの「ローカルファイルマッピング」章で説明されています
       # 許可された/既知のユーザーはあなたのOpenIDで置き換えます
       AOID_User http://YOURNAME.myopenid.com/ YOURNAME

       # 次の場所のmod_auth_oidユーザー認証を強制
       
         AuthType OpenID
         Require valid-user
       

       # mod_auth_oidログインページ
       # ログインページのSSIを有効にします(mod_includeが必要)
       
          Options            Includes
          AddType            text/html .shtml
          AddOutputFilter    INCLUDES .shtml
       

ファイル

次に、VirtualHostのDocumentRootにprivateという名前のディレクトリを作成し、保護したいコンテンツを含めます。例として、「Yeahh!! mod_auth_oid rocks and I hacked 127.0.0.1!」と書かれたindex.htmlファイルを追加します。

さらに、DocumentRoot内のaoidディレクトリにもログインページが必要です。最初に、tarballのhtdocsディレクトリからサンプルSHTMLページを使用できます。それをhtdocsにコピーしてください。新しく作成したファイルの権限がウェブサーバーの設定に合っているか確認してください。

これで、もう一度Apacheを再起動できます。すべてが正常であることを確認するためにerror.logをチェックしてください。

インストールのテスト

ブラウザを開きます。すべてが正しく行われ、Apacheも正しく動作している場合、次のURLにブラウザをポイントするとログインページが表示されるはずです:https://YOURHOST/private/index.html

プロバイダーを選択して送信します。モジュールはあなたをプロバイダーにリダイレクトし、ログインします。成功した場合は、あなたのプライベートアプリケーションに戻されます。Googleを選択した場合は、提案されたOP識別子を送信してください。他の2つのケースでは、強調表示された部分にあなたのOpenIDを入力してください。後のハウツーでは、見栄えの良いログインページのための便利な解決策が説明されています。

何かがうまくいかなかった場合のデバッグ

予期せぬことが起こった場合、Apacheサーバーのerror.logには何が間違っているかのいくつかの手がかりがあります。ログメッセージは、何が失敗しているかを示すはずです。可能なエラーコードの詳細なリストと、より高いログレベルを有効にする方法は、mod_auth_oidページにあります。

追加のオプション

ファンシーログインページ

あなたも私のように、ブラウザで最初に見たいものの1つは、見栄えの良いログインページだと思います。これのようなものはあなたの好みに十分にクールに見えますか。

ファンシーログインページ

このプロフェッショナルな見た目のログインページは、ユーザーがOpenIDを選択するためのユーザーフレンドリーな方法であるオープンソースプロジェクトopenid-selectorを使用して作成されました。

ログインページを生成した後、mod_auth_oidからのshtmlインクルードの内容で強化する必要があります。私は、元のログインページからのエラーレンダリング部分をopenid-selectorから生成されたhtmlページに追加しました。カスタマイズされたページの例はここからダウンロードできます。

ローカルユーザーIDマッピング

mod_auth_oid_fileモジュールもコンパイルした場合、Apache設定ファイルにすべてを追加するのではなく、ローカルファイル内でユーザーIDレコードをマッピングすることもできます。詳細な手順はここにあります。

次の章を読んで、ローカルファイルマッピングでユーザー自己登録を一度に追加します。

OpenIDからローカルユーザーIDへのユーザー自己管理

すでにApacheの.htpasswdファイルに基づくユーザー管理があると仮定すると、次の設定スニペットを使用して、ユーザーがローカルアカウントにOpenIDアカウントを登録できるように強化できます。tarballからfile_mapper.htmlファイルをhtdocsにコピーします。

  # Virtual Hostセクション
  AOID_File_DB              /etc/apache2/mapdb
  AOID_File_AdminPage       /usr/local/apache2/htdocs/file_mapper.html

  # プロファイル管理の場所
  # 既存の.htpasswdファイルに応じてファイルパスを調整
  
    AuthUserFile            /srv/data/.htpasswd
    AuthName                'ログイン名を入力してください:お持ちでない場合は登録をキャンセルしてください。'
    AuthType                Basic
    Require                 valid-user
    SetEnvIf                Request_Method POST parp
    SetEnvIf                Request_Method GET parp
    SetHandler              auth-oid-file
    AOID_File_UserOnly      on
  

これで、mod_auth_oid_fileはOpenIDアカウントとローカル.htpasswdアカウントの関係を保存するmapdbファイルを作成します。

セキュリティに関する考慮事項

依存パーティ発見ドキュメント

OpenIDは、OpenIDプロバイダーのための適切なreturn_toアドレスを示す依存パーティ発見ドキュメントをホストすることを推奨します。Yahooは、そのようなドキュメントを提供しない場合、あなたのサイトを信頼できないと見なします。詳細情報はここにあります。

サイトのDocumentRootにopenid.xrdという名前のドキュメントを保存します。内容は以下の例に似たものに調整してください。



    
        
            http://specs.openid.net/auth/2.0/return_to
            https://YOUR_HOST_HERE/aoid/login
        
    

このドキュメントは、特別に作成されたヘッダーをHTTPレスポンスごとに送信するか、サイトのトップレベルドキュメントに含めることで参照される必要があります。

バリアント1:ヘッダーを介して発表(推奨)

    LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
    # .......
Header set X-XRDS-Location https://YOUR_HOST_HERE/openid.xrd

バリアント2:トップレベルHTMLドキュメントのheadセクションに発表

  ....
  
  
  ....

DoSおよびその他の攻撃からの保護

DoS攻撃やクロスサイトリクエストフォージェリは、今日の大きな問題です。mod_qosという別のオープンソースモジュールを使用して、DoS攻撃からサイトを効果的に保護できます。このモジュールは、さまざまな種類の攻撃からサーバーを保護するためのスイスアーミーナイフです。このモジュールは、他のApacheモジュールと同様に簡単にインストールできます。以下の設定例は、自己管理ページでのDoS攻撃およびクロスサイトリクエストフォージェリからサイトを保護する基本的な構成を示しています。

    # サーバーセクション
    LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

    # 最大100000の異なるIPからの接続を処理
    QS_ClientEntries 100000

    # IPごとに50接続のみを許可
    QS_SrvMaxConnPerIP 50

    # 最大アクティブTCP接続数は256に制限
    MaxClients              256 

    # TCP接続の70%が占有されている場合、keep-aliveを無効にします:
    QS_SrvMaxConnClose      180

    # 最小リクエスト/レスポンス速度(サーバーをブロックする遅いクライアントを拒否、つまり、リクエストなしで接続を開いたままにするslowloris):
    QS_SrvMinDataRate       120 1500 400

    # リクエストヘッダーとボディを制限(注意、これによりアップロードやポストリクエストも制限されます):
    QS_SrvMaxConnClose      70%
    LimitRequestFields      30
    QS_LimitRequestBody     102400

    QS_ClientEventBlockCount 20 300
    QS_SetEnvIfStatus        400               QS_Block
    QS_SetEnvIfStatus        401               QS_Block
    QS_SetEnvIfStatus        403               QS_Block
    QS_SetEnvIfStatus        404               QS_Block
    QS_SetEnvIfStatus        405               QS_Block
    QS_SetEnvIfStatus        406               QS_Block
    QS_SetEnvIfStatus        408               QS_Block
    QS_SetEnvIfStatus        411               QS_Block
    QS_SetEnvIfStatus        413               QS_Block
    QS_SetEnvIfStatus        414               QS_Block
    QS_SetEnvIfStatus        417               QS_Block
    QS_SetEnvIfStatus        500               QS_Block
    QS_SetEnvIfStatus        503               QS_Block
    QS_SetEnvIfStatus        505               QS_Block
    QS_SetEnvIfStatus        QS_SrvMinDataRate QS_Block
    QS_SetEnvIfStatus        NullConnection    QS_Block

    QS_SrvMaxConnExcludeIP 127.0.0.1

    # プロファイル管理の自己登録フォームのCSRF保護
    QS_MileStone          deny       "^GET /OpenIdLogin"
    QS_MileStone          deny       "^GET /OpenIDRegistration"
    QS_MileStone          deny       "^GET /profile"
    QS_MileStone          deny       "^POST /profile"

好みのOpenIDプロバイダーの名前空間を狭める

認証のために受け入れるOpenIDプロバイダーを制限するには、設定ディレクティブAOID_UserPatternを使用します。以下の2つの例は、その目的のために正規表現を構築する方法の大まかなアイデアを提供します。

  # VirtualHostセクション
  
  # Google OpenIDのみを許可
  AOID_UserPattern          "^(https://www\.google\.com/accounts/o8/id\?id=.*)$" "$1"

  # my.company.comのOpenIDのみを許可し、それをローカルユーザーにマッピングするための一部のみを使用
  AOID_UserPattern          "^https://my\.company\.com/([a-z]{1})[a-z]+\.([a-z]{2})[a-z]+$" "$1$2"

最後の言葉

このチュートリアルを読んでいただきありがとうございます。あなたのインストールが順調に進んだことを願っています。このモジュールから多くのユーザーが利益を得ることを願っており、インストールが楽しかったことを願っています。このモジュールに関する最新情報を受け取りたい場合は、mod_auth_oidのFacebookページをフォローできます。

クレジット: このApacheモジュールを改善し、identifier_selectメソッドで強化するために指導してくれたPascal Buchbinderに感謝します。彼はmod_qos、mod_sslcrl、mod_parpなどのいくつかのApacheモジュールの著者です。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。