web-dev-qa-db-ja.com

MySQL:「bind-address」設定を非アクティブ化することはセキュリティリスクですか?

MySQLサーバーに適切に接続するWebアプリケーションに問題があり、それを解決するために、ファイルbind-addressの設定my.iniをコメント化しようとしました。

これで問題は解決したようですが、セキュリティの問題ではないかと思いました。もちろん、ユーザー/パスワードによってアクセスが制限されている本番環境に適切な設定ですか?また、コメント化してbind-address=0.0.0.0に設定することの違いは何ですか?

3
flixe

設定をコメント化することの影響は、bind-addressが以前に設定された値によって異なります。

設定をコメントアウトすることは、デフォルト値に設定することと同じです。マニュアルにはデフォルト値が表示されます: https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_bind-address

bind-address
デフォルト値:
*

マニュアルには、その設定の意味と、0.0.0.0を使用する場合との違いも説明されています。

アドレスが*の場合、サーバーはすべてのサーバーホストIPv4インターフェースでTCP/IP接続を受け入れ、サーバーホストがIPv6をサポートしている場合はすべてのIPv6インターフェースで受け入れます。 このアドレスを使用して、すべてのサーバーインターフェイスでIPv4とIPv6の両方の接続を許可します。この値がデフォルトです。オプションで複数の値のリストを指定する場合、この値は許可されません。

アドレスが0.0.0.0の場合、サーバーはすべてのサーバーのホストIPv4インターフェースでTCP/IP接続を受け入れます。オプションで複数の値のリストを指定する場合、この値は許可されません。

TCPポート3306(MySQLのデフォルトポート))へのアクセスを制限するファイアウォールでサーバーが保護されていない場合、*または0.0.0.0を使用すると、サーバーのすべてのIPv4アドレスで着信接続が受け入れられますTCPループバックアドレス127.0.0.1/8の接続と同様に構成され、さらにすべての着信IPv6トラフィックを許可します。

一般に、サービスの最小限のネットワークアクセスのみを構成することをお勧めします。
*と0.0.0.0の両方は、多くの状況でおそらく過度に許容されますが、たとえば、単一のインターフェース/ IPアドレス(つまり、192.0.2.1)でリモートMySQLアクセスを許可する必要があるシステムでは、効果的ではありませんbind-address = 192.0.2.1またはbind-address = 0.0.0.0またはbind-address = *のセキュリティの違い
MySQLへのリモートアクセスを許可する必要のないサーバー(通常のLAMPサーバー)では、bind-address = ::ffff:127.0.0.1をお勧めします。

4
HBruijn

セキュリティについて言えば、データを世界に公開することは決して良い選択ではありません。

MySQLをLinuxで実行していて、SSHアクセスが可能であれば、トンネルを構成でき、MySQLを世界に公開する必要はありません。

ここに例を示します:

ssh -v -N -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 \
-i ~/.ssh/yourkey.pem -o TCPKeepAlive=no -o ServerAliveInterval=60 \
-o ServerAliveCountMax=1 \
[email protected] -L 3306:127.0.0.1:3306

このようにして、GUIまたは接続する必要のあるすべてのAPPをIP 127.0.0.1ポート3306に接続します。

コマンドラインを使用したくない場合は、SSHトンネルを介してMySQLに接続するようにほとんどのGUIを設定できます

最後に、コメントアウトした場合bind-address=0.0.0.0 mysqlにlocalhost(127.0.0.1)だけでなく、すべてのIPアドレスを介して接続を待機させる

1
fromthestone