【2026年6月28日時点の情報です】
phpMyAdminは、MariaDBやMySQLのデータベースをブラウザの画面で操作できるツールです。テーブルの中身を見たり、バックアップを取ったりするのが、コマンドを覚えなくてもできるようになります。
ただし、データベースを丸ごと操作できる管理画面なので、インターネットにそのまま公開すると攻撃の的になります。この記事では、自宅サーバーのAlmaLinux 9にphpMyAdminを入れて、Cloudflareのルールで自宅以外からは入れないようにした手順をまとめます。作業はすべてrootで行っています。
前提と、アクセスを止める場所
この記事は、次の状態から始めています。
- WebサーバーのApacheとPHPを入れている(Apache 2(Webサーバー))
- データベースのMariaDBを入れている(MariaDB(データベース))
- ブログを Cloudflare Tunnel で公開していて、Apacheはmod_remoteipで訪問者のIPアドレスを復元している
Cloudflare Tunnelで公開していると、外からのアクセスはすべてCloudflareを通ってきます。そこでこのサーバーでは、「誰がphpMyAdminを開けるか」をCloudflareのカスタムルールで決めています。自宅のIPアドレス以外からのアクセスは、サーバーに届く前にCloudflareで止める形です。
Apache側でも、家のLANからしか開けないようにしています(2.で説明します)。
1. パッケージのインストール
phpMyAdminはAlmaLinux 9の標準リポジトリにないので、EPELとREMIのリポジトリを追加してインストールします。REMIは追加しても普段は無効なので、--enablerepo=remi でこのときだけ使うように指定します。
# 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がなくなるので、リポジトリを指定して入れるほうが確実です。
[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の設定ファイル)。
[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管理画面への「アクセス制限」 |
| 条件 | 下の式(「式を編集」で入力) |
| アクション | ブロック |
(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つです。
lower()でURLを小文字にそろえてから比べています。Cloudflareの比較は大文字と小文字を区別するので、これがないと/phpMyAdmin/のほうから入れてしまいます。/phpmyadminちょうどか、/phpmyadmin/で始まるURLだけを対象にしています。
アクションを「マネージドチャレンジ」にすると、ロボットは止まりますが、確認画面を通れる人はログイン画面まで来られます。自宅以外から使うことがないなら、「ブロック」にしておくほうが安心です。

失敗:この記事自体が確認画面になっていた
最初は、条件を「URIパスが /phpmyadmin で始まる」にしていました。ところが、この記事のURLは /phpmyadmin-inst/ なので、同じ条件に当てはまっていました。そのため、自宅以外からこの記事を開いた人には、確認画面が出ていました。
気づいたのは、Cloudflareの「セキュリティ」→「分析」の「イベント」を見たときです。この記事へのアクセスが、phpMyAdmin用のルールで何件もチャレンジされていて、その中にはほかの記事のブログカードを作ろうとするWordPress自身のアクセスもありました。
「次で始まる」でパスを指定するときは、上の式のように最後の / まで含めて書くか、同じ名前で始まる記事やページがないかを確かめておくと安心です。ルールを作ったあとは、一度イベントを見て、関係のないページが止められていないか確認するのがおすすめです。
4. アクセス確認
自宅と自宅以外の両方から開いて、ルールどおりに動いているかを確かめます。
| 確認すること | 開く場所 | 結果 |
|---|---|---|
| phpMyAdminが使える | 自宅のPCで http://[サーバーのIPアドレス]/phpMyAdmin/ | ログイン画面が出る |
| 外から入れない | スマホのWi-Fiを切って、モバイル回線で同じURL | Cloudflareのブロック画面が出る |
| 大文字のURLも止まる | モバイル回線で /phpMyAdmin/ | Cloudflareのブロック画面が出る |
| 記事が止まっていない | モバイル回線でこの記事 | 確認画面なしで記事が表示される |
サーバーで次のコマンドを実行すると、ドメイン経由(Cloudflareを通る経路)で開けないことも確かめられます(コマンドはbash)。403 が返れば、Apache側の制限が効いています。
[root@almalinux ~]# curl -s -o /dev/null -w "%{http_code}\n" https://自分のドメイン/phpMyAdmin/
403ログイン画面では、MariaDBのユーザー名とパスワード(rootなら、MariaDBの初期設定で決めたパスワード)を入力します。ログインすると、次のような画面が表示されます。右側の「データベースサーバ」で、サーバの文字セットがutf8mb4になっていることも確認できます。

まとめ
phpMyAdminは、REMIリポジトリから入れてApacheの設定を少し変えれば、すぐに使えるようになります。大事なのはアクセスの制限で、このサーバーでは、Apache側で家のLANからだけに絞り、さらにCloudflareのカスタムルールでも自宅以外からのアクセスを止める、二重の形にしています。
ルールを作るときは、大文字のURLも止めることと、関係のないページまで止めないことの2つに気をつけてください。私は後者で、この記事自体を止めていました。
次は、このサーバーにWordPressを入れます。「WordPressインストール」へどうぞ。



コメント