[PR] 本記事にはプロモーションが含まれています。

phpMyAdmin|AlmaLinux 9にインストールして、Cloudflareで自宅以外からのアクセスを止める設定

自宅サーバー構築
➔ 自宅サーバー構築メモの目次はこちら

【2026年6月28日時点の情報です】

phpMyAdminは、MariaDBやMySQLのデータベースをブラウザの画面で操作できるツールです。テーブルの中身を見たり、バックアップを取ったりするのが、コマンドを覚えなくてもできるようになります。

ただし、データベースを丸ごと操作できる管理画面なので、インターネットにそのまま公開すると攻撃の的になります。この記事では、自宅サーバーのAlmaLinux 9にphpMyAdminを入れて、Cloudflareのルールで自宅以外からは入れないようにした手順をまとめます。作業はすべてrootで行っています。

前提と、アクセスを止める場所

この記事は、次の状態から始めています。

Cloudflare Tunnelで公開していると、外からのアクセスはすべてCloudflareを通ってきます。そこでこのサーバーでは、「誰がphpMyAdminを開けるか」をCloudflareのカスタムルールで決めています。自宅のIPアドレス以外からのアクセスは、サーバーに届く前にCloudflareで止める形です。
Apache側でも、家のLANからしか開けないようにしています(2.で説明します)。

1. パッケージのインストール

phpMyAdminはAlmaLinux 9の標準リポジトリにないので、EPELとREMIのリポジトリを追加してインストールします。REMIは追加しても普段は無効なので、--enablerepo=remi でこのときだけ使うように指定します。

Bash
# 1. EPELとREMIのリポジトリを追加
[root@almalinux ~]# dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
[root@almalinux ~]# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

# 2. REMIリポジトリを指定してphpMyAdminをインストール
[root@almalinux ~]# dnf --enablerepo=remi install -y phpMyAdmin

依存関係の php-fedora-autoloader が見つからずにエラーになる場合は、先にそれだけREMIから入れてから、もう一度phpMyAdminをインストールします。バージョン番号入りのURLで直接入れると、パッケージが更新されたときにURLがなくなるので、リポジトリを指定して入れるほうが確実です。

Bash
[root@almalinux ~]# dnf --enablerepo=remi install -y php-fedora-autoloader ※ エラーが出たときだけ

2. Apacheの設定

phpMyAdminをインストールすると、Apache用の設定ファイル /etc/httpd/conf.d/phpMyAdmin.conf も作られます。最初は Require local で、サーバー自身からしか開けない設定になっています。

このサーバーではmod_remoteipで訪問者のIPアドレスを復元しているので、Require local のままだと、Cloudflare Tunnel経由の自宅からのアクセスも拒否されます。そこで最初は、Apache側を Require all granted(すべて許可)にして、絞り込みは次のCloudflareのルールだけで行っていました。

ただ、この形だと、Cloudflareのルールを書き間違えたり、うっかり無効にしたりしたときに、phpMyAdminがそのまま外から開ける状態になります。データベースを丸ごと操作できる画面なので、2026年10月に見直したときに、Apache側でも家のLANとサーバー自身からしか開けないように変えました(コマンドはbash、設定はApacheの設定ファイル)。

Bash
[root@almalinux ~]# vi /etc/httpd/conf.d/phpMyAdmin.conf ※ phpMyAdminのApache設定ファイル編集
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   Require ip 127.0.0.1 ::1 192.168.10.0/24 ← サーバー自身と家のLANからだけ許可
</Directory>

[root@almalinux ~]# httpd -t ※ 設定ファイルの文法チェック
Syntax OK
[root@almalinux ~]# systemctl restart httpd ※ 設定を反映

192.168.0.0/24 は家のLANの範囲の例です。自分の家のLANに合わせて変えてください。

この設定にすると、自宅からでも、ドメイン(https://自分のドメイン/phpmyadmin/)で開くと「403 Forbidden」になります。ドメインで開くとCloudflare Tunnelを通るので、Apacheからは自宅の回線の外向きのアドレスに見え、家のLANの範囲に入らないためです。自宅で使うときは、http://[サーバーのIPアドレス]/phpMyAdmin/ のように、サーバーのLANのIPアドレスで開きます。

なお、設定ファイルの先頭の2行(Alias)のとおり、phpMyAdminは /phpmyadmin/ と、大文字の入った /phpMyAdmin/ のどちらのURLでも開けます。Cloudflareのルールでは、この2つを両方止める必要があります。

3. Cloudflareのカスタムルール

Cloudflareのダッシュボードでサイトを選び、「セキュリティ」→「セキュリティルール」からカスタムルールを作ります。自宅のIPアドレス以外からphpMyAdminのURLへ来たアクセスを、ブロックするルールです。

項目設定
ルール名phpMyAdmin管理画面への「アクセス制限」
条件下の式(「式を編集」で入力)
アクションブロック
Plaintext
(lower(http.request.uri.path) eq "/phpmyadmin" or starts_with(lower(http.request.uri.path), "/phpmyadmin/")) and not ip.src in {2001:db8:1234:5678::/64}

2001:db8:1234:5678::/64 の部分は例のアドレスなので、ご自宅のIPv6のプレフィックス(/64)に置き換えてください。IPv4でアクセスすることがある場合は、IPv4のアドレスも { } の中に空白区切りで足します。

式のポイントは2つです。

  1. lower() でURLを小文字にそろえてから比べています。Cloudflareの比較は大文字と小文字を区別するので、これがないと /phpMyAdmin/ のほうから入れてしまいます。
  2. /phpmyadmin ちょうどか、/phpmyadmin/ で始まるURLだけを対象にしています。

アクションを「マネージドチャレンジ」にすると、ロボットは止まりますが、確認画面を通れる人はログイン画面まで来られます。自宅以外から使うことがないなら、「ブロック」にしておくほうが安心です。

phpMyAdmin:Cloudflareのカスタムルール

失敗:この記事自体が確認画面になっていた

最初は、条件を「URIパスが /phpmyadmin で始まる」にしていました。ところが、この記事のURLは /phpmyadmin-inst/ なので、同じ条件に当てはまっていました。そのため、自宅以外からこの記事を開いた人には、確認画面が出ていました。

気づいたのは、Cloudflareの「セキュリティ」→「分析」の「イベント」を見たときです。この記事へのアクセスが、phpMyAdmin用のルールで何件もチャレンジされていて、その中にはほかの記事のブログカードを作ろうとするWordPress自身のアクセスもありました。

「次で始まる」でパスを指定するときは、上の式のように最後の / まで含めて書くか、同じ名前で始まる記事やページがないかを確かめておくと安心です。ルールを作ったあとは、一度イベントを見て、関係のないページが止められていないか確認するのがおすすめです。

4. アクセス確認

自宅と自宅以外の両方から開いて、ルールどおりに動いているかを確かめます。

確認すること開く場所結果
phpMyAdminが使える自宅のPCで http://[サーバーのIPアドレス]/phpMyAdmin/ログイン画面が出る
外から入れないスマホのWi-Fiを切って、モバイル回線で同じURLCloudflareのブロック画面が出る
大文字のURLも止まるモバイル回線で /phpMyAdmin/Cloudflareのブロック画面が出る
記事が止まっていないモバイル回線でこの記事確認画面なしで記事が表示される

サーバーで次のコマンドを実行すると、ドメイン経由(Cloudflareを通る経路)で開けないことも確かめられます(コマンドはbash)。403 が返れば、Apache側の制限が効いています。

Bash
[root@almalinux ~]# curl -s -o /dev/null -w "%{http_code}\n" https://自分のドメイン/phpMyAdmin/
403

ログイン画面では、MariaDBのユーザー名とパスワード(rootなら、MariaDBの初期設定で決めたパスワード)を入力します。ログインすると、次のような画面が表示されます。右側の「データベースサーバ」で、サーバの文字セットがutf8mb4になっていることも確認できます。

phpMyAdmin:アクセス確認

まとめ

phpMyAdminは、REMIリポジトリから入れてApacheの設定を少し変えれば、すぐに使えるようになります。大事なのはアクセスの制限で、このサーバーでは、Apache側で家のLANからだけに絞り、さらにCloudflareのカスタムルールでも自宅以外からのアクセスを止める、二重の形にしています。

ルールを作るときは、大文字のURLも止めることと、関係のないページまで止めないことの2つに気をつけてください。私は後者で、この記事自体を止めていました。

次は、このサーバーにWordPressを入れます。「WordPressインストール」へどうぞ。

コメント