MySQL/MariaDB へのリモート アクセスを安全に有効にするにはどうすればよいですか?
この最新版(2025年版)のガイドでは、MySQLおよびMariaDBサーバーへのリモートアクセスを実現するための実用的かつ安全な方法を解説します。サイト管理者、DevOpsチーム、データベースチーム、開発者がセキュリティを損なうことなく、許可されたユーザーとアプリケーションのみにアクセスを許可するための実用的なチェックリストを提供することを目指しています。.
一般的な手順とセキュリティ原則
手順の概要:
- 建築デザイン: 一度もない 必要な場合を除き、データベースをパブリックインターネットに直接配置しないでください。.
- プライベート ネットワーク (VPC/VLAN)、VPN、または SSH トンネリングを使用します。.
- IPアドレスに基づいてアクセスを制限し、 最低スコア.
- データベース トラフィックの TLS/SSL 暗号化と強力な認証 (*caching_sha2_password* / *X.509*) の使用。.
- ログ記録とレート制限を有効にし、ファイアウォールと侵入検知システム (IDS/IPS) を使用します。.
- パフォーマンスとレイテンシを確認し、アプリケーションに基づいて適切なデータセンターの場所を選択します。.
MySQL をインターネットに直接公開してはいけないのはなぜですか?
データベースは機密データや認証情報を含むため、ハッカーにとって魅力的な標的です。制限や暗号化なしにポート3306をインターネットに開放すると、データ漏洩、ブルートフォース攻撃、DDoS攻撃のリスクが高まります。.
ステップバイステップ: リモートアクセス用の MySQL の設定 (実践的な手順)
1) 設定ファイルを編集する
一般的な設定ファイル:
- MySQL (Debian/Ubuntu):
/etc/mysql/mysql.conf.d/mysqld.cnf - MariaDB:
/etc/mysql/mariadb.conf.d/50-server.cnf
デフォルトでは、この行は バインドアドレス に 127.0.0.1 設定されています。特定のIPまたはすべてのアドレスからの接続を許可するには:
推奨: 特定の IP を許可:
bind-address = 192.0.2.10プライベートネットワーク以外では推奨されません。
bind-address = 0.0.0.0変更後:
systemctl restart mysql
2) 制限付きの安全なユーザーを作成する
ユーザーからは決して 根 リモート接続には使用しないでください。コマンド例:
mysql -u root -p
CREATE USER 'appuser'@'203.0.113.45' IDENTIFIED WITH caching_sha2_password BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'203.0.113.45';
FLUSH PRIVILEGES;重要なポイント:
- 「%」の代わりに特定の IP アドレス (「203.0.113.45」) を使用する方がはるかに安全です。.
- 決定 最小限の権限 (最小権限)。.
- プライベート ネットワーク内からの接続にはプライベート アドレスを使用します (例: 10.xxx)。.
3) MySQLのSSL/TLSの有効化
OpenSSL を使用して CA と証明書を作成する簡単な例:
openssl genrsa 4096 -out ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MyDB-CA"
openssl genrsa 4096 -out server-key.pem
openssl req -new -key server-key.pem -out server-req.csr -subj "/CN=db.example.com"
openssl x509 -req -in server-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650
openssl genrsa 4096 -out client-key.pem
openssl req -new -key client-key.pem -out client-req.csr -subj "/CN=dbclient"
openssl x509 -req -in client-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650証明書の配置 マイ.cnf:
[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem再起動後、ユーザーに証明書の使用を要求する機能:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE X509;
-- یا فقط TLS بدون client cert:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE SSL;クライアントからの安全な接続:
mysql -u appuser -p -h db.example.com --ssl-mode=REQUIRED --ssl-ca=ca.pem
4) SSHトンネルの使用
管理者向け、およびTLSが利用できない場合のアクセス制限に適しています。クライアントマシン側:
ssh -fN -L 3306:127.0.0.1:3306 [email protected]この方法では、リモート サーバーにトンネリングされるローカル ポート 3306 に接続します。.
5) ファイアウォールの設定
ufw の例 (指定された IP のみ許可):
ufw allow from 203.0.113.45 to any port 3306 proto tcpfirewalld の場合:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port protocol="tcp" port="3306" accept'
firewall-cmd --reloadポートチェック:
ss -tlnp | grep 3306
telnet db.example.com 3306
さらなる保護 - 高度な推奨ソリューション(2025年)
プライベートネットワーク、VPC、VPNの使用
データベースポートをインターネットに開放する代わりに、アプリケーションとデータベース間のプライベートネットワークを使用してください。当社のサービスをご利用いただくと、プライベートネットワークとBGP/VRFを使用して安全な接続を実現できます。.
分散ユーザーの場合、データベース トラフィックが暗号化されたチャネル経由でのみ送信されるように、VPN または IPsec を使用することをお勧めします。.
バスティオンホストとゼロトラスト
二要素認証(MFA)と完全なセッションログ機能を備えたBastion Hostを導入することは、ポートを直接開くよりも安全なアプローチです。ゼロトラストモデルとは、すべての接続が認証され、特定のリソースのみが許可されることを意味します。.
認証とアルゴリズム
- MySQL 8: の使用
キャッシュSHA2パスワードの代わりにmysql_native_passwordより安全です。. - デリケートなケースでは、 X.509クライアント証明書 推奨。.
- パスワードをファイルやコードに保存するよりも、Secret Manager または Vault (HashiCorp Vault、AWS Secrets Manager など) を使用してパスワードを管理する方が適切です。.
攻撃や制限からの保護
- max_connect_errorsを低く保ち、
名前解決をスキップする有効にすると、DNS ベースの遅延を回避できます。. - 特別な mysql-auth フィルターと fail2ban を使用して悪意のある IP をブロックします。.
- 全体的な接続レート制限と適切な connection_timeout 設定。.
監視とログ記録
監査ログ、一般ログ、スロークエリ ログを有効にし、Prometheus + Grafana や Percona Monitoring などのツールを使用することは、悪意のあるパターンやパフォーマンスの問題を特定するのに不可欠です。.
アプリケーションに基づいてデータセンターの場所と構成を選択するための実用的なヒント
アプリケーションの種類に応じたガイダンス:
- 取引(外国為替/暗号通貨): 取引所/トレーダーサーバーへのRTTが最も低いことが重要です。取引所に近い場所を選択することをお勧めします。当社のサービスは85以上の場所でこれを実現しています。.
- ゲーム: ゲームデータベースには低いping値が求められます。最適化されたBGPルーティングと低遅延ネットワークが重要です。ゲーム用VPSサーバーとアンチDDoSサーバーが役立ちます。.
- AI/レンダリング: I/O とコンピューティング負荷が高い場合、GPU サーバーとデータベース サーバーを同じプライベート ネットワーク ゾーンに組み合わせると、レイテンシが短縮されます。.
- ウェブサイトとアプリケーション: プライベート ネットワーク内のデータベースとともに CDN とアプリケーション層キャッシュ (Redis/Memcached) を使用すると、速度とコストの最適なバランスが実現します。.
さまざまな用途に適した my.cnf 設定例
中負荷サーバー (Web/アプリケーション) の構成:
[mysqld]
bind-address = 10.0.1.5
max_connections = 200
innodb_buffer_pool_size = 2G
skip-name-resolve = 1
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem高負荷の専用 AI/レンダリング サーバーの場合:
innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000常に RAM、I/O、アプリケーションのニーズに基づいて設定を調整してください。.
リモート アクセスを有効にする前の最終セキュリティ チェックリスト
- データベーストラフィックにプライベートネットワークまたはVPNを使用する
- ファイアウォールで許可されるIPアドレスを制限する
- 最小限の権限を持つユーザーを作成し、安全なハッシュアルゴリズムを使用する
- TLS/SSL を有効にし、必要に応じてクライアント証明書も有効にします。
- リモート接続にルートを使用しない
- ログ記録を有効にし、ログを外部システムに送信する
- 接続制限の設定とfail2banの使用
- 異常なトラフィック増加やエラーが発生した場合の監視と警告
- 定期的なバックアップとリカバリテスト
結論と最終勧告
2025年にMySQLへのリモートアクセスを実現するには、高速かつ安全な環境が必要です。最適なアプローチは、まずプライベートネットワークまたはVPNを検討し、次にTLSとIP制限を追加して、アクセスを必要最低限に制限することです。.
Bastion Host、MFA、高度なログ機能を利用することで、セキュリティを強化できます。非常に安定したサーバー、低レイテンシのネットワーク、そしてセキュリティ機能が必要な場合は、世界85か所以上の拠点、GPUサーバー、コンピューティングサーバー、アンチDDoSサーバー、トレーディングおよびゲーミングVPS、CDN、BGPネットワークなど、すぐに利用可能なオプションとカスタマイズ可能なオプションをご用意しています。.









