MySQL: 特定のIPアドレスからのアクセスを許可する
MySQLサーバーへのリモートアクセスを許可する必要がある場合、良いセキュリティプラクティスは、特定の1つまたは複数のIPアドレスからのアクセスのみを許可することです。これにより、インターネット全体に対して攻撃ベクトルを無駄にさらすことがなくなります。
このチュートリアルでは、Linuxシステム上の特定のIPアドレスからMySQLサーバーにリモート接続を許可する手順を説明します。これらの手順は、使用しているLinuxディストリビューションに関係なく機能するはずです。
このチュートリアルでは、あなたは学びます:
- MySQLサーバーへのリモート接続を許可する方法
- 特定のIPからシステムファイアウォールを介してMySQLへのリモート接続を許可する方法
- 特定のIPからのリモート接続を許可するためにMySQLユーザーを作成または変更する方法
MySQL: 特定のIPアドレスからのアクセスを許可する手順
デフォルトでは、MySQLサービスは同じコンピュータからの接続のみを受け入れるように設定されています。言い換えれば、バインドアドレスはローカルループバックアドレス127.0.0.1に設定されています。他のIPアドレスからの接続を受け入れる前に、MySQLの設定ファイルでこの設定を変更する必要があります。
したがって、特定のIPアドレスからMySQLデータベースへのリモート接続を許可することは、3ステップのプロセスです。
まず、MySQL構成ファイルでパブリックバインドアドレスを設定することによって、リモートマシンからアクセス可能なMySQLサービスをセットアップする必要があります。
次に、システムファイアウォールを通じてリモートアクセスを許可する必要があります。デフォルトでは、MySQLはポート3306で動作しているため、このポートへの接続を許可する必要があります。また、指定したIPアドレスからの接続だけを許可することに問題はありません。
第三に、特定のIPアドレスからアクセスできるようにするために、新しいユーザーを作成するか、既存のユーザーを編集する必要があります。
MySQLのバインドアドレスを設定する
最初に、
/etc/mysql/mysql.cnfファイルを開きます。ルート権限で、これを nano またはお気に入りのテキストエディタで開いてください。sudo nano /etc/mysql/mysql.cnf[mysqld]セクションの下にあるbind-addressという設定を見つけてください。デフォルトでは、現在ループバックアドレス127.0.0.1に設定されています。そのアドレスを削除し、サーバーのパブリックIPアドレスをその場所に入れてください。この例では10.1.1.1を使用します。[mysqld] bind-address = 10.1.1.1もしよければ、代わりに
0.0.0.0をバインドアドレスとして使用することができます。これはワイルドカードであり、サービスをすべての到達可能なインターフェースにバインドします。これは推奨されませんが、後で問題が発生した場合のトラブルシューティングには良い場合があります。[mysqld] bind-address = 0.0.0.0その変更を行った後、ファイルに変更を保存して終了してください。次に、変更を反映させるためにMySQLサービスを再起動する必要があります。
sudo systemctl restart mysql一部のディストリビューションでは、サービスは代わりに
mysqldという名前で呼ばれることがあります:sudo systemctl restart mysqld
ファイアウォールを通じてリモートアクセスを許可する
MySQLサーバーにポート3306を使用していると仮定すると、システムのファイアウォールでこれを許可する必要があります。実行する必要のあるコマンドは、使用しているディストリビューションによって異なります。以下のリストを参照するか、必要に応じてコマンドを適応させて、自分のシステムのファイアウォール構文に従ってください。
以下の例では、IPアドレス10.150.1.1からのリモートアクセスを許可しています。リモートアクセスを許可したい自分のIPアドレスをこの場所に入力するだけです。
Ubuntuシステムおよびufw(単純なファイアウォール)を使用している他のシステムでは:
sudo ufw allow from 10.150.1.1 to any port 3306
Red Hat、CentOS、Fedora、およびfirewalldを使用する派生システムでは:
sudo firewall-cmd --zone=public --add-source=10.150.1.1 --permanent
sudo firewall-cmd --zone=public --add-service=mysql --permanent
sudo firewall-cmd --reload
そして、どのシステムでも動作するはずの古き良きiptablesコマンド:
sudo iptables -A INPUT -p tcp -s 10.150.1.1 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
特定のIPから特定のユーザーへのリモート接続を許可する
MySQLサービスが受信接続を受け入れられるようになり、ファイアウォールが特定のIPを通過させることができるので、そのIPからのリモート接続を受け入れるようにユーザーを設定するだけです。
まず、rootアカウントでMySQLを開いてください。
sudo mysqlあるいは、一部の構成では、次のコマンドを入力し、ルートパスワードを提供する必要があります:
mysql -u root -p既に作成したユーザーがあり、そのユーザーをリモートIPアドレスからアクセス可能にする必要がある場合、MySQLの
RENAME USERコマンドを使用できます。以下の例のコマンドでは、linuxconfigユーザーをIPアドレス10.150.1.1からアクセス可能にしますが、これは自分の設定に合わせて適応してください。mysql> RENAME USER 'linuxconfig'@'localhost' TO 'linuxconfig'@'10.150.1.1';あるいは、初めてこのユーザーを作成する場合は、
CREATE USERコマンドを使用します。以下のユーザー名、IPアドレス、およびパスワードは必ず自分のものに置き換えてください。mysql> CREATE USER 'linuxconfig'@'10.150.1.1' IDENTIFIED BY 'password_here';
それが全てです。ユーザーに一つ以上のデータベースへのアクセスを付与した後、指定したIPからリモートでデータベースにアクセスするためにアカウントの資格情報を使用できるようになります。
締めくくりの考え
このチュートリアルでは、特定のIPからLinuxシステムのMySQLサービスへのリモート接続を許可する方法を見ました。これは、サービスをアクセス可能にすること、ファイアウォールを介して特定のIPからの接続を許可すること、アクセス可能なMySQLアカウントを作成するという3つのプロセスから成ります。MySQLはすべてのディストリビューションで基本的に同じように機能するため、これらの手順は誰でも使用できるはずです。
