
ローカルサブネット上のユーザーが MySQL サーバーにログインできるようにしようとしています。
サーバーはUbuntu 23.10とMySqlバージョン0.0.35-0ubuntu0.213.10.1を実行しています
クライアントは、macOS Sonoma 14.2.1 を搭載した 2 台の iMac と、Windows 11 PC です。
Ubuntuサーバーはローカルサブネット(192.168.1.0)にありますが、パブリック固定IPアドレス経由でも利用できます。すべてのクライアントはMYSQL Workbench 8.0を使用しています。
ファイアウォール経由でサーバーへのパブリック アクセス (HTTP 以外) をブロックしました。しかし、問題はローカル クライアントに MySQL サーバーへのアクセスを許可することです。
修正しましたディレクトリそして、bind-address = 127.00.0.1 to 0.0.0.0
Mysqld が任意のサブネットで listen するように変更しました。しかし、これは非常に安全に思えますが、機能します。
使用してみましたbind-address = 192.168.1.xxx, 192.168.1.yyy, 192.1658.1.zzz
が、MySQL サービスを再起動しようとするとエラー メッセージが表示されます。
**Job for mysql.service failed because the control process exited with error code.**
**See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details** With an exit code of 1.
私も試してみましたbind-address = 192.168.1.0
が、同じエラーメッセージが表示されます。バインドアドレスをローカルサブネットだけ、または3つのクライアントだけに制限する方法についてのアドバイスをいただければ幸いです。
答え1
Bind は思った通りには動作しません。
それは言うどれのバインドするネットワーク インターフェイス。マシン上で構成されているネットワーク インターフェイスである必要があります。
0.0.0.0は特別なケースであり、本質的には全て利用可能なインターフェース。
トラフィックは一切制限されず、リッスンしているインターフェース上で任意の IP が接続できます。トラフィックを制限する場合は、ファイアウォールを使用します。
したがって、あなたのシナリオでは 0.0.0.0 にバインドしても問題ありません。特定のインターフェースが 1 つしかない場合にそのインターフェースにバインドするのと変わりません。
答え2
私も同様の状況に陥っており、HAproxy「バッファ」を追加しました。これがあなたにとってうまくいくかどうかは分かりませんが、うまくいくはずです。
mysqldと同じホストにHAproxyを追加し、ポート33061(デフォルトの3306ではなく)のHAproxyにリスナーを作成しました。
ss -antlp;
#LISTEN 0 128 <PUBLIC_IP>:33061 0.0.0.0:* users:(("haproxy",pid=32645,fd=12))
設定はこんな感じです…
listen mysql
bind <PUBLIC_IP>:33061
mode tcp
option tcplog
acl mysql_ip_OK src -f /etc/haproxy/whitelist.IPs
tcp-request connection reject if !mysql_ip_OK
server mysql1 127.0.0.1:3306
そして「フィルター」はこんな感じです...
cat <<EOF> /etc/haproxy/whitelist.IPs`
192.168.1.xxx
192.168.1.yyy
192.168.1.zzz
EOF
理論的には、/etc/haproxy/whitelist.IPsに明示的にリストされていない場合、すべての接続試行はブロックされます。クライアントは<PUBLIC_IP>:3306ではなく<PUBLIC_IP>:33061に接続し、追加のセキュリティが得られます。