デフォルトでは、セキュリティのためにMariaDBデータベースサービスへのリモートアクセスは無効になっています。本ガイドでは、IPアドレスを使用したデータベースへのリモートアクセスの設定方法を説明します。
仮に、2つのサーバーがあるとします。1つにはシステム(ウェブサイトやCRM)があり、もう1つにはデータベースが保存され、ログイン名、パスワード、サーバーのIPアドレスを指定してデータを取得する構成とします。
1. 設定準備
1.1 設定ファイルを確認
接続オプションがコメントアウトされていないことを確認し、以下のように設定します。
nano /etc/mysql/mariadb.conf.d/50-server.cnf
...
bind-address = 0.0.0.0
...
設定を適用するためにサービスを再起動します。
systemctl restart mariadb
1.2 ポートの確認
netstat -ant | grep 3306
2. 設定
mysql -u aroot -p
2.1 データベースとユーザーの作成
CREATE DATABASE base1;
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';
2.2 接続を許可するサーバーのIPアドレスを指定
GRANT ALL ON base1.* TO 'user1'@'xx.ip.xx.ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
以下の資格情報を使用して接続が可能です:
- base1 - データベース名
- user1 - ユーザー名
- password - パスワード
- xx.ip.xx.ip - 接続元のサーバーのIPアドレス
2.3 その他の例
2.3.1 指定されたIPからすべてのデータベースへのアクセスを許可
GRANT ALL ON *.* TO 'user1'@'xx.ip.xx.ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
2.3.2 任意のIPアドレスからbase1データベースへの接続を許可
GRANT ALL ON base1.* TO 'user1'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
2.3.3 特定のサブネットからbase1データベースへの接続を許可
GRANT ALL ON base1.* TO 'user1'@'xx.ip.xx.%' IDENTIFIED BY 'password' WITH GRANT OPTION;
3. iptablesファイアウォールの設定
3.1 特定のIPアドレスのみ許可
iptables -A INPUT -p tcp -s xx.ip.xx.ip --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
3.2 全てのIPアドレスを許可
iptables -A INPUT -p tcp -m tcp --dport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
3.3 特定のサブネットを許可
iptables -A INPUT -p tcp -s xx.ip.xx.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
4. サーバー1からの接続確認
4.1 mariadbクライアントをインストール
apt install mariadb-client
4.2 設定したサーバーへの接続
mysql -u wpuser -h ip.xx.ip.xx -p
これで完了です。
No Comments Yet