VPSでSSHを使用してMySQLレプリケーションを保護する方法
red のすべてのコマンドは、ご使用の環境で使用されている実際の値に置き換える必要があります。
プレリュード
MySQLレプリケーションを構成すると、ポート3306がインターネットに開かれたままになり、レプリケーションサーバー間のデータは暗号化されません。 SSHトンネリングを使用するMySQLレプリケーションデータは、SSH接続を介して転送できます。 この方法では、ファイアウォールで開く追加のポートは必要ありません。 この記事の場合:
- マスターIPは1.1.1.1です
- スレーブIPは2.2.2.2です。
マスターに入力するコマンドには(マスター)、スレーブに入力するコマンドには(スレーブ)のマークが付いています。
MySQLレプリケーションに関するこの記事を読んだことを前提としています。
ステップ1:SSHトンネリングを設定する
ユーザーを作成し、パスワードを割り当てます。 このユーザーは、SSHトンネルの作成に使用されます:(master)
root@mysql-master:~# useradd -d /home/tunneluser -m tunneluser root@mysql-master:~# passwd tunneluser
tunneluser は、スレーブサーバーからの接続のみを許可する必要があるため、許可されたユーザーとして / etc / ssh /sshd_configファイルに入力する必要があります。 (マスター)
root@mysql-master:~# nano /etc/ssh/sshd_config
許可されたユーザーが定義されているため、このリストにないユーザーはアクセスを拒否されます。そのため、SSHを使用してこのVPSにログインする管理ユーザーを追加してください。 (マスター)
AllowUsers root alice bob [email protected]
SSHサーバーを再起動します:(master)
root@mysql-master:~# service ssh restart
SSHキーを生成する手順は、この記事に記載されていますが、ここでコマンドを繰り返します。 (スレーブ)
[root@mysql-slave ~]# ssh-keygen
サンプル出力:
[root@mysql-slave ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 5d:db:9c:50:e8:b2:88:18:de:78:5f:ed:83:14:47:d7 root@mysql-slave The key's randomart image is: +--[ RSA 2048]----+ | ... | | o.. E| | oo. | | . .o.o= . | | . = .S..*. + | | + + . + . | | . . o o | | . . o | | . | +-----------------+
パスフレーズを入力しないでください。このキーはSSHトンネルを自動的に確立するために使用されますが、パスフレーズが含まれている場合は不可能です。 公開鍵をマスターサーバーにコピーします。 (スレーブ)
[root@mysql-slave ~]# ssh-copy-id tunneluser@1.1.1.1
サンプル出力:
[root@mysql-slave ~]# ssh-copy-id [email protected] The authenticity of host '1.1.1.1 (1.1.1.1)' can't be established. RSA key fingerprint is 3f:33:0c:73:bd:da:51:b9:45:2e:d7:2e:00:47:33:17. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '1.1.1.1' (RSA) to the list of known hosts. [email protected]'s password: Now try logging into the machine, with "ssh '[email protected]'", and check in: ~/.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
tunneluser ユーザーはトンネリングにのみ使用され、管理には使用されないため、シェルを nologin に変更し、パスワードを削除してください。 (マスター)
usermod -s /sbin/nologin tunneluser passwd -d tunneluser
DebianおよびUbuntuユーザーは、 / sbin /nologinを/usr / sbin /nologinに置き換えます。
次のコマンドを使用してSSHトンネルを作成します。 (スレーブ)
ssh -L 33061:localhost:3306 tunneluser@1.1.1.1 -f -N
トンネルが作成されたため、ローカルホストのポート33061にアクセスすると、SSH経由でスレーブがマスターに接続されます。 -f パラメーターはこのコマンドをバックグラウンドで実行し、 -N パラメーターは、tunneluserが nologin シェルを持っているため、「コマンドを実行しない」ことを意味します。
ステップ2:MySQL構成の変更
このセクションでは、MySQLレプリケーションに関するこの記事で概説されている手順の変更についてのみ説明します。変更されるすべての事項は、オレンジで説明されています。 my.cnf ファイルがパブリックIPアドレスをリッスンするように編集されている場合は、ローカルホストに戻します。
root@mysql-master:~# nano /etc/mysql/my.cnf
次の行:
bind-address = 1.1.1.1
ローカルホストのIPアドレスに変更されます:
bind-address = 127.0.0.1
slave_user の権限を変更して、ローカルホストからのみログインします。 (マスター)
root@mysql-master:~# mysql -u root -p mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'localhost' IDENTIFIED BY 'password';
以前に入力されたCHANGEMASTER クエリは、マスターサーバーのパブリックIPアドレスを指し、ポート番号を指定していませんでした。 次のクエリはそれを変更します。 (スレーブ)
root@mysql-slave:~# mysql -u root -p mysql>STOP SLAVE; mysql>CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_PORT=33061, MASTER_LOG_FILE='mysql-bin. 000001', MASTER_LOG_POS=107; mysql>START SLAVE;
次のコマンドを使用して、スレーブから接続をテストできます。(slave)
mysql -h 127.0.0.1 -u slave_user -P 33061 -p
MySQLはデフォルトのポート番号でローカルにログインするため、localhostを-hパラメーターと一緒に使用しないでください。