Apacheで仮想ホストごとにBasic認証を設定する方法【手順解説】

Apacheで仮想ホストごとにBasic認証を設定することで、複数のウェブサイトを個別に保護することが可能になります。
例えば、社内向けのサイトだけをパスワードで保護したい場合や、開発中のサイトを一般公開せずに特定ユーザーのみにアクセスを許可したい場合などに役立ちます。
この記事では、Basic認証の概要から仮想ホスト設定の具体的な手順、動作確認方法までを詳しく解説します。
Apacheの設定に不慣れな方でも理解しやすいように、実際のコード例を交えて説明しますので、ぜひ参考にしてください。

目次

Basic認証とは何か


Basic認証は、ウェブサーバーが提供する最もシンプルなユーザー認証方式の一つです。
アクセスするユーザーに対して、IDとパスワードの入力を求めることで、不正なアクセスを防ぎます。
これはHTTPプロトコルの仕組みを利用しており、ブラウザが自動的にポップアップを表示し、認証情報を求める形式です。

Basic認証の仕組み


認証の流れは次の通りです:

  1. ユーザーが特定のURLにアクセスする
  2. サーバーが401 Unauthorizedの応答を返し、認証を要求
  3. ユーザーがIDとパスワードを入力して送信
  4. サーバーが入力情報を確認し、一致すればアクセスを許可、不一致の場合は再度認証を求める

Basic認証のメリット

  • 簡単に導入できる:設定が容易で、短時間でウェブサイトに保護をかけられる
  • 汎用性が高い:多くのブラウザやツールが対応しているため、特別なクライアントソフトを必要としない

Basic認証のデメリットと注意点

  • 平文で送信される:IDとパスワードがBase64でエンコードされるだけで、暗号化されない
  • セキュリティが脆弱:盗聴される可能性があるため、HTTPSを併用して通信を暗号化する必要がある
  • ユーザー管理が煩雑:多くのユーザーを管理するには適していない

Basic認証はシンプルであるがゆえに脆弱な面もありますが、適切に活用することで一定のセキュリティを確保できます。
次のセクションでは、Apacheで仮想ホストを使ってBasic認証を適用する具体的な手順について解説します。

Apacheで仮想ホストを設定する基本手順


仮想ホスト(Virtual Host)は、1台のApacheサーバーで複数のウェブサイトを運用するための仕組みです。
これにより、異なるドメインやサブドメインごとに個別の設定を行い、それぞれ独立したウェブサイトとして扱うことができます。

仮想ホストの概要


仮想ホストには以下の2種類があります。

  • IPベースの仮想ホスト:IPアドレスごとに異なるウェブサイトを提供する
  • 名前ベースの仮想ホスト:1つのIPアドレスで複数のドメインを運用する(一般的)

名前ベースの仮想ホストは、リソースの効率的な利用が可能で、多くのウェブサイトで採用されています。

仮想ホストの作成手順


仮想ホストの作成は、Apacheの設定ファイルにVirtualHostディレクティブを記述することで行います。以下の手順で基本的な仮想ホストを設定します。

1. 設定ファイルの準備


Apacheの仮想ホスト設定ファイルは/etc/httpd/conf.d/または/etc/apache2/sites-available/に配置します。
新しい仮想ホスト用の設定ファイルを作成します。例として、example.com.confを作成します。

sudo nano /etc/apache2/sites-available/example.com.conf

2. 仮想ホストの設定を記述


以下は基本的な仮想ホストの設定例です。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example
    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
  • ServerName:アクセスするドメイン名
  • DocumentRoot:ウェブサイトのルートディレクトリ
  • ErrorLog:エラーログの保存先
  • CustomLog:アクセスログの保存先

3. ドキュメントルートの作成


ウェブサイトのデータを保存するディレクトリを作成します。

sudo mkdir -p /var/www/example


初期ファイルを配置し、適切なアクセス権を設定します。

4. 設定を有効化してApacheを再起動


仮想ホスト設定を有効化し、Apacheを再起動します。

sudo a2ensite example.com.conf
sudo systemctl restart apache2

動作確認


ブラウザでhttp://example.comにアクセスし、仮想ホストが正しく動作しているか確認します。

次は、この仮想ホストにBasic認証を追加する方法について解説します。

Basic認証用のパスワードファイルを作成する方法


ApacheでBasic認証を設定する際、ユーザーのIDとパスワードを保存するためのパスワードファイルを作成する必要があります。
このファイルはhtpasswdコマンドを使用して簡単に作成できます。

パスワードファイルの作成手順


以下の手順で、Basic認証用のパスワードファイルを作成します。

1. Apacheユーティリティのインストール確認


htpasswdコマンドが使用可能か確認します。インストールされていない場合は以下のコマンドでインストールします。
Debian/Ubuntu系

sudo apt install apache2-utils


CentOS/RHEL系

sudo yum install httpd-tools

2. パスワードファイルの作成


以下のコマンドで、認証用のパスワードファイルを作成します。

sudo htpasswd -c /etc/apache2/.htpasswd exampleuser
  • -cオプションは新規作成を意味します。すでにファイルが存在する場合は-cを省略します。
  • exampleuserはユーザー名です。必要に応じて変更してください。

実行例

New password: ********
Re-type new password: ********
Adding password for user exampleuser

3. 既存のパスワードファイルにユーザーを追加


すでにパスワードファイルが存在し、新たにユーザーを追加する場合は以下のようにします。

sudo htpasswd /etc/apache2/.htpasswd newuser

4. パスワードファイルの確認


作成したパスワードファイルを確認します。

cat /etc/apache2/.htpasswd


出力例:

exampleuser:$apr1$9HwM1/aH$KTrgOabmJPcYZ0vjXJQds/
newuser:$apr1$7dG8w9uX$N/ZKkQhDl9FfPyG06Wu1N.

パスワードファイルの保存場所


パスワードファイルは通常/etc/apache2//etc/httpd/配下に配置しますが、ドキュメントルート(/var/wwwなど)の外に保存することでセキュリティを強化します。

sudo mv /etc/apache2/.htpasswd /etc/apache2/secure/.htpasswd

次は、作成したパスワードファイルを仮想ホストの設定に反映し、Basic認証を適用する方法を解説します。

仮想ホスト設定ファイルでBasic認証を有効化する方法


作成したパスワードファイルを利用して、Apacheの仮想ホストごとにBasic認証を設定します。
これにより、特定の仮想ホストやディレクトリに対してアクセス制限を設けることができます。

仮想ホスト設定へのBasic認証追加手順

1. 仮想ホスト設定ファイルを開く


既存の仮想ホスト設定ファイルを編集します。

sudo nano /etc/apache2/sites-available/example.com.conf

2. Basic認証の設定を追加


<Directory>ディレクティブ内にBasic認証の設定を記述します。
以下は、/var/www/example全体にBasic認証を適用する例です。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example

    <Directory /var/www/example>
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile /etc/apache2/secure/.htpasswd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

設定の詳細

  • AuthType Basic:Basic認証を使用することを指定します。
  • AuthName:認証プロンプトに表示されるメッセージを設定します。
  • AuthUserFile:作成したパスワードファイルへのパスを指定します。
  • Require valid-user:パスワードファイルに登録されているすべてのユーザーにアクセスを許可します。

3. 設定ファイルの有効化とApacheの再起動


仮想ホスト設定を有効化し、Apacheを再起動します。

sudo a2ensite example.com.conf
sudo systemctl restart apache2

4. Basic認証の動作確認


ブラウザでhttp://example.comにアクセスすると、以下のような認証ダイアログが表示されます。
正しいユーザー名とパスワードを入力すると、ウェブサイトにアクセスできます。

注意点

  • パスワードファイルのパスが正しいか確認してください。
  • 認証ファイルがDocumentRoot内にある場合、外部から直接アクセスされないようにしてください。
  • セキュリティを強化するため、HTTPS環境でBasic認証を使用することを推奨します。

次は、特定のディレクトリにのみBasic認証を適用する方法について解説します。

特定のディレクトリだけにBasic認証を適用する方法


ウェブサイト全体ではなく、特定のディレクトリに対してのみBasic認証を適用することが可能です。
これにより、重要な管理画面や特定のリソースだけを保護できます。

特定ディレクトリにBasic認証を設定する手順

1. 仮想ホスト設定ファイルを開く


仮想ホストの設定ファイルを開きます。

sudo nano /etc/apache2/sites-available/example.com.conf

2. 認証を適用するディレクトリの設定を追加


例えば、/var/www/example/adminディレクトリにのみBasic認証を設定する場合は、以下のように記述します。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example

    <Directory /var/www/example/admin>
        AuthType Basic
        AuthName "Admin Area"
        AuthUserFile /etc/apache2/secure/.htpasswd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

設定のポイント

  • <Directory /var/www/example/admin>adminディレクトリにのみ認証を適用します。
  • AuthName:認証ダイアログに表示される名前を設定します。
  • AuthUserFile:パスワードファイルへのパスを指定します。
  • Require valid-user:有効なユーザーだけがアクセスできるようにします。

3. ディレクトリの作成とファイル配置


必要に応じて、adminディレクトリを作成し、保護したいファイルを配置します。

sudo mkdir /var/www/example/admin
echo "Protected Content" | sudo tee /var/www/example/admin/index.html

4. 設定を有効化してApacheを再起動


仮想ホスト設定を反映させるため、Apacheを再起動します。

sudo systemctl restart apache2

5. 動作確認


ブラウザでhttp://example.com/adminにアクセスします。
認証ダイアログが表示され、正しいユーザー名とパスワードを入力するとindex.htmlの内容が表示されます。

ディレクトリ単位の設定が必要なケース

  • 管理画面の保護:CMSや管理用インターフェースを守る場合
  • 特定のコンテンツ制限:ダウンロードページや内部向け資料を保護する場合
  • テスト環境の制御:開発中のテスト環境や一部のステージング環境を保護

次は、Basic認証設定後の動作確認方法と、トラブルが発生した場合の対処法について解説します。

Basic認証設定の動作確認とトラブルシューティング


Basic認証を設定した後は、正しく動作しているかを確認し、必要に応じてトラブルシューティングを行います。
ここでは、設定の確認方法と、よくあるエラーへの対処法を解説します。

Basic認証の動作確認方法

1. ブラウザで対象ディレクトリにアクセス


ブラウザを開き、Basic認証を設定した仮想ホストのディレクトリにアクセスします。

http://example.com/admin


認証ダイアログが表示されるはずです。

2. 正しいユーザー名とパスワードを入力


作成したパスワードファイルのユーザー名とパスワードを入力し、アクセスを試みます。
成功すれば、ディレクトリ内のページが表示されます。

認証が通らない場合のトラブルシューティング

1. Apacheのエラーログを確認


認証が失敗した場合は、Apacheのエラーログを確認します。

sudo tail /var/log/apache2/error.log


エラーメッセージの例:

(13)Permission denied: AH01620: Could not open password file: /etc/apache2/secure/.htpasswd


対処法

  • パスワードファイルのパスが正しいか確認する
  • chmodを使い、ファイルの権限を修正する
sudo chmod 640 /etc/apache2/secure/.htpasswd

2. 認証が無視される場合の確認


認証ダイアログが表示されない場合は、設定ファイルに記述ミスがある可能性があります。
特に以下を確認してください。

  • <Directory>ディレクティブのパスが正しいか
  • AuthUserFileのパスが間違っていないか

3. `.htpasswd`のユーザーを確認


ユーザーが正しく登録されているか確認します。

cat /etc/apache2/secure/.htpasswd


ユーザーが存在しない場合は、再度htpasswdコマンドでユーザーを追加します。

sudo htpasswd /etc/apache2/secure/.htpasswd exampleuser

設定反映後の再起動忘れに注意


設定を変更した後は、必ずApacheを再起動して反映させてください。

sudo systemctl restart apache2

動作確認後の最終チェック

  • 認証ダイアログが表示され、正しい情報でログインできるか
  • 不正なユーザー名・パスワードを入力した際にアクセスが拒否されるか
  • パスワードファイルが外部から直接アクセスできないか
http://example.com/.htpasswd


403 Forbiddenが表示されれば問題ありません。

次は、複数の仮想ホストで異なる認証設定を行う方法について解説します。

複数の仮想ホストで異なる認証設定を行う方法


Apacheでは、仮想ホストごとに異なるBasic認証の設定を行うことが可能です。これにより、異なるサイトやディレクトリに対して個別のアクセス制限を設けることができます。
複数のドメインやサブドメインを運用している場合、それぞれに異なるユーザーリストを使用することで、セキュリティを強化できます。

仮想ホストごとの認証設定手順

1. パスワードファイルを仮想ホストごとに作成


仮想ホストごとに異なるパスワードファイルを作成します。

sudo htpasswd -c /etc/apache2/secure/site1.htpasswd user1
sudo htpasswd -c /etc/apache2/secure/site2.htpasswd admin1
  • site1.htpasswdsite2.htpasswdは仮想ホストごとに別々の認証用ファイルです。
  • ユーザーを追加する場合は-cを外してhtpasswdコマンドを実行します。

2. 仮想ホスト設定ファイルを編集


それぞれの仮想ホストに対して、異なるAuthUserFileを設定します。

# 仮想ホスト1の設定
<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /var/www/site1

    <Directory /var/www/site1/secure>
        AuthType Basic
        AuthName "Site 1 Restricted Area"
        AuthUserFile /etc/apache2/secure/site1.htpasswd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

# 仮想ホスト2の設定
<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot /var/www/site2

    <Directory /var/www/site2/admin>
        AuthType Basic
        AuthName "Admin Access - Site 2"
        AuthUserFile /etc/apache2/secure/site2.htpasswd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

3. 仮想ホストのドキュメントルート作成


仮想ホストのルートディレクトリを作成し、対象のディレクトリを作成します。

sudo mkdir -p /var/www/site1/secure
sudo mkdir -p /var/www/site2/admin


仮のHTMLファイルを配置して動作確認を行います。

echo "Protected Area - Site 1" | sudo tee /var/www/site1/secure/index.html
echo "Admin Section - Site 2" | sudo tee /var/www/site2/admin/index.html

4. 設定を有効化してApacheを再起動


仮想ホスト設定を反映させ、Apacheを再起動します。

sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
sudo systemctl restart apache2

5. 動作確認


それぞれのサイトにアクセスし、認証ダイアログが表示されるか確認します。

  • http://site1.com/secure にアクセスして、user1で認証を試みます。
  • http://site2.com/admin ではadmin1を使います。

異なる仮想ホストで個別の認証を行うメリット

  • サイトごとのセキュリティ強化:サイトごとに異なるパスワードを設定することで、セキュリティが向上します。
  • アクセス管理の柔軟性:特定のサイトは管理者専用、他のサイトは一般ユーザー向けなど、柔軟な設定が可能です。
  • メンテナンスの効率化:仮想ホストごとにパスワードファイルを分けることで、ユーザー管理が簡単になります。

次は、IPアドレスで特定のユーザーがBasic認証を回避する方法について解説します。

応用例:特定IPアドレスのみ認証を回避する設定


Basic認証は強力なアクセス制御手段ですが、特定のIPアドレスからのアクセスについては認証を回避したいケースがあります。
例えば、社内ネットワークからのアクセスは認証不要にし、外部からのアクセスのみBasic認証を求めるといった設定が可能です。

IPアドレスによる認証回避の設定方法

1. 仮想ホスト設定ファイルを開く


仮想ホストの設定ファイルを編集します。

sudo nano /etc/apache2/sites-available/example.com.conf

2. 認証の条件付き設定を追加


以下のように、Satisfyディレクティブを使用して特定のIPアドレスを認証の対象外に設定します。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example

    <Directory /var/www/example/admin>
        AuthType Basic
        AuthName "Admin Area"
        AuthUserFile /etc/apache2/secure/.htpasswd
        Require valid-user
        Order allow,deny
        Allow from 192.168.1.0/24
        Satisfy any
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

設定の詳細

  • Order allow,deny:アクセス制御の順番を指定します。まず許可リストを確認し、その後拒否します。
  • Allow from 192.168.1.0/24:社内ネットワーク(例:192.168.1.0/24)からのアクセスを許可します。
  • Satisfy any:IPアドレスによるアクセス許可またはBasic認証のどちらかを満たせばアクセスを許可します。

3. 設定を有効化してApacheを再起動

sudo systemctl restart apache2

動作確認

  • 社内ネットワーク(192.168.1.x)からhttp://example.com/adminにアクセスすると、認証なしでページが表示されます。
  • 外部IPからアクセスすると、Basic認証のダイアログが表示されます。

複数のIPアドレスを許可する場合


複数のIPアドレス範囲を許可する場合は、Allow fromを複数指定します。

Allow from 192.168.1.0/24
Allow from 10.0.0.0/8

セキュリティのポイント

  • 管理画面や機密情報のディレクトリに対しては、IPアドレスによるアクセス制御を併用することでセキュリティが向上します。
  • 必ず適切なネットワーク範囲を指定し、誤ってすべてのIPアドレスを許可しないよう注意してください。

次は、今回のApache仮想ホストにおけるBasic認証設定のまとめを行います。

まとめ


本記事では、Apacheで仮想ホストごとにBasic認証を設定する方法を詳しく解説しました。
仮想ホストの基本設定から、パスワードファイルの作成、特定ディレクトリへの認証適用、さらには特定IPアドレスを使った認証回避の方法まで網羅しています。

適切にBasic認証を導入することで、重要なコンテンツや管理画面を保護し、不正アクセスを防ぐことが可能になります。
特に、仮想ホストごとに異なる認証設定を行うことや、IPアドレスによる柔軟なアクセス制御は、セキュリティ強化に大きく貢献します。

最後に、Basic認証を設定する際は、必ずHTTPS環境で運用することを推奨します。
これにより、通信内容の盗聴を防ぎ、より安全にサイトを運営できます。

今後のサイト運営で必要に応じてBasic認証を活用し、セキュリティレベルを高めていきましょう。

コメント

コメントする

目次