(更新済み)まず、アプリとデータベースを別々のサーバーに置いています。データベースサーバーをセキュリティで保護する方法がわからない場合を除いて、簡単に接続できます。
これが私がすでに行ったことです:
ランmysql_secure_installation
MySQLのインストール直後。したがって、これらすべてが処理されました。
サーバー間通信用の非パブリックネットワーク(my.cnfには、次のようなものがあります:bind-address = 10.128.2.18
、ここで10.128.2.18はMySQLデータベースサーバーのプライベートネットワークIPアドレスです)。
データベースの個別のユーザー、推測できないユーザー名、それに伴う64文字の強力なパスワード。また、ユーザーアカウントのIPアドレスは、アプリサーバーのプライベートIPアドレスに設定されます。私はこのようなコマンドでユーザーを作成しました:
GRANT ALL ON `app_db`.* TO 'db_user'@'10.128.2.9' IDENTIFIED BY 'password';
アプリはワードプレスなので、GRANT ALL ON
予期しない問題を回避します。
考慮されるオプション(ただし採用されていません):
それで、私は何が必要ですか、それとも私は十分ですか?他にどのように他の人はそれをしますか?できる限り詳しく説明してください(チュートリアルへのリンクや、提案している何かが大いに役立つでしょう)。
VPNテクノロジーが一般的に使用されていないと言われた理由はわかりません。パフォーマンスコストがあることは正しいですが、それでもすべてがそうです!通常、アプリケーションサーバーとそのデータベースサーバーの間を移動するデータ量については、TLSのCPUオーバーヘッドは、特にデータベースサーバー上では無視できる程度です。そうでない場合は、SSLオフロードハードウェアの購入を検討してください。
私の好みは、アプリケーションサーバーの2つのネットワークカードです。それとデータベースサーバー間の接続は、クライアントトラフィックとは異なるネットワークを経由します。
別のネットワークが不可能な場合は、TLSとデータベースサーバーのファイアウォールの構成を組み合わせて、少数のコンピューター(アプリケーションサーバー(明らかに)、管理ワークステーション、運用管理サーバーなど)からの受信接続のみを許可するようにします。
MySQLは、Secure Sockets Layer(SSL)プロトコルを使用して、MySQLクライアントとサーバー間の安全な(暗号化された)接続をサポートします。あなたはこれに従うことができます:
http://www.mysqlperformanceblog.com/2013/06/22/setting-up-mysql-ssl-and-secure-connections/
詳細については、mysqlの公式サイトを参照してください。
Ssh-tunnelingを使用します。例えば:
$ ssh -f -N -L 3307:localhost:3306 db_Host
開いているポートを確認します。
$ nmap localhost -p 3307
これで、localhost:3307
への暗号化接続を開くことができます。
最初に、何を保護するかを定義する必要があると思います。これまでのところ、データベースは不正なリモートログインから保護されています。推奨される安全な通信方法(sshトンネル、SSL接続など)は、アプリケーションサーバーとデータベースの間のトラフィックを誰かが盗聴するのを防ぐことができます。両方が内部ネットワーク上にある場合は、それほど大きな問題ではない可能性があります。
その他のセキュリティ面はそのままです。
等々。
最も可能性が高く有害な攻撃ベクトルを特定し、そこでセキュリティを適用します。
先ほど述べたように、コマンドラインにパスワード値を含めることは、セキュリティ上のリスクになる可能性があります。この問題を回避するには、次のパスワード値なしで--passwordまたは-pオプションを指定します。Shell> mysql --Host = localhost --user = myname --password mydb Shell> mysql -h localhost -u myname -p mydb Whenパスワードオプションにパスワード値がない場合、クライアントプログラムはプロンプトを出力し、パスワードの入力を待ちます。