Ubuntu 16.04 / phpMyAdmin / 特定のIPからのみアクセス可能にする方法

Apache 2.4でphpMyAdminにアクセスできるIPアドレスを制限するには、phpMyAdminディレクトリのアクセス設定でRequire ipを使用します。許可するアドレスを指定し、設定の文法を確認してからApacheをリロードします。そうすると、設定が適用されたパスで、指定されたアドレスのみがアクセス可能になります。

適用範囲と前提条件

この記事では、UbuntuにパッケージからインストールされたphpMyAdminを例に取り、Apache 2.4で直接提供され、/usr/share/phpmyadminディレクトリが設定で使用されている場合を説明します。インストール方法、バーチャルホスト、エイリアス、および設定ファイルの場所は環境によって異なります。Nginx、コンテナ、または別のプロキシを使用する設定には、この例をそのまま適用しないでください。

Ubuntu 16.04 LTSの標準セキュリティサポートは2021年4月、Ubuntu Proサポートは2026年5月に終了しました。追加のLegacyサポートの条件を確認し、サポート対象バージョンへの移行を計画してください。詳細なスケジュールはUbuntuセキュリティメンテナンススケジュールで確認できます。

設定を誤って適用すると、管理者であってもシステムにアクセスできなくなる場合があります。変更を行う前に、サーバーへのコンソールまたはSSHアクセスを確保し、アクセスを許可された管理者の実際のIPアドレスとphpMyAdminで使用されるパスを確認してください。インターネット経由でアクセスする場合、一般的には管理用PCのプライベートIPではなく、サーバーから見えるパブリックIPが必要です。サーバーから見えるアドレスは、VPN、プロキシ、NAT、IPv6の使用状況によって異なる場合があります。

現在のApache設定の確認とバックアップ

Apache のバージョンおよびアクティブな設定における phpMyAdmin のエイリアスとディレクトリ設定を確認してください。以下のファイルが存在しない場合は、インストール方法に従って実際の設定ファイルを探してください。以下の検索結果にはアクティブでない設定が含まれる場合があるため、アクティブな設定と仮想ホストも確認してください。

apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i phpmyadmin /etc/apache2/conf-enabled /etc/apache2/sites-enabled

/etc/apache2/conf-available/phpmyadmin.conf にパッケージ設定が存在し、その設定がアクティブである場合、変更を行う前にバックアップしてください。以下のバックアップファイルが既に存在する場合は、上書きしないように別の名前を付けてください。

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction

実際の設定ファイルをテキストエディタで開き、<Directory /usr/share/phpmyadmin> セクションを探します。例えば、次のコマンドで編集できます。

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

許可された IP アドレスの設定

既存の phpMyAdmin ディレクトリセクションのアクセス許可ルールを確認した後、そのセクションに適用される承認ルールを以下のように設定してください。以下のアドレスは説明用の例ですので、必ず管理者の実際のアドレスに置き換えてください。既存の PHP 処理やその他必要な設定は、元のセクションのままにしてください。

<Directory /usr/share/phpmyadmin>
    Require ip 192.0.2.10
</Directory>

上記のブロックはアクセス制御の部分を示す例です。既存のディレクトリセクション全体を削除してそのまま貼り付けないでください。Require all granted と Require ip を同じセクションに並べて配置すると、どちらか一方が許可されていればアクセスが許可される場合があるため、意図した制限が実際に適用されているかを確認するために既存の承認ルールを確認してください。その他の Directory や Location セクション、または認証設定も結果に影響を与える可能性があるため、設定全体を確認してください。

複数のアドレスがある場合は、スペースで区切ってリストすることができます。例えば、次のルールでは、2つのアドレスのいずれかに一致すればアクセスが許可されます。ネットワーク範囲を指定する場合は、その範囲全体が許可されるため、必要な範囲のみを指定してください。IPv6アドレスやCIDR表記もサポートされています。

Require ip 192.0.2.10 198.51.100.25

Order、Deny、および Allow ディレクティブは、Apache 2.4 での互換性をサポートするための旧構文です。古いルールと新しいルールを無秩序に混在させないようにしてください。現在の構文に移行する前に、既存の設定やその他の認証要件を確認してください。アドレス形式と範囲については、Apache の アクセス制御ガイド と Require ip ドキュメント を参照してください。

構文チェック、適用、および接続確認

  1. ファイルを保存した後、次のコマンドで Apache 設定全体の構文を確認します。Syntax OK が表示されない場合は、エラーのあるファイルと行を確認して修正してください。構文チェックでは、アクセスポリシーが意図した通りに動作することは保証されません。
sudo apache2ctl configtest
  1. 構文チェックが成功した場合、設定をリロードし、サービスの状態を確認してください。サービス名はディストリビューションによって異なる場合があります。
sudo systemctl reload apache2
sudo systemctl status apache2
  1. phpMyAdminには、許可されたネットワークから既存のアドレスを使用してアクセスしてください。アクセス制御を通過すると、ログイン画面が表示される場合がありますが、別途データベースログインが必要です。
  2. 許可リストに含まれていない別のネットワークから同じアドレスを確認してください。該当するApacheルールが適用され、他にエラーがなければ、一般的に403 Forbiddenが表示されます。許可されたアドレスがブロックされる、または許可されていないアドレスでページが開ける場合は、サーバーログ、該当設定セクション、プロキシ、IPアドレスを確認してください。

プロキシ環境と追加のセキュリティ

Apacheがリバースプロキシやロードバランサの背後にある場合、実際のユーザーではなくプロキシのIPを認識することがあります。この状態では、プロキシのアドレスを許可すると意図した以上のユーザーにアクセスを与えてしまう可能性があるため、注意が必要です。実際のクライアントアドレスを使用するには、信頼できるプロキシのみを設定する必要があります。任意のクライアントから送信されるヘッダーを無条件に信用してはいけません。 Apache mod_remoteip ドキュメントを確認した後 、ネットワークの設定に応じて設定してください。

IP制限はphpMyAdminのログインやデータベースの権限管理を代替するものではありません。HTTPSを使用し、アカウントの権限を必要な範囲に制限してください。環境内でパブリックIPが頻繁に変わる場合、単に広範なアドレス範囲を許可するのではなく、VPNなどのアクセス経路を検討してください。

接続の問題と設定の復元

アクセスがブロックされている場合は、管理者の現在のパブリックIP、IPv4およびIPv6ルート、設定ファイルが有効かどうか、他のゾーンからの承認ルールが適用されているかを確認してください。Apacheのエラーログの場所は設定によりますが、Ubuntuのデフォルト設定では/var/log/apache2/error.logで確認できます。ログには機密情報が含まれる場合があるため、共有する際は注意してください。

変更を元に戻す必要がある場合は、まずバックアップ以降に他の誰かがファイルを変更していないかを確認し、バックアップファイルを元のパスに復元してから、構文チェックを実行しリロードします。以前の設定に復元することで、以前に許可されていたアクセスが再び可能になる場合があるため、復元後にアクセス範囲を確認してください。

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction /etc/apache2/conf-available/phpmyadmin.conf
sudo apache2ctl configtest && sudo systemctl reload apache2

もし構文チェックでエラーが発生した場合は、リロードせずに設定を修正してください。また、許可された環境と許可されていない環境の両方で、意図したログインおよびアクセス制限が維持されていることを確認してください。