web-dev-qa-db-ja.com

アプリとデータベースサーバーを安全に接続する方法

(更新済み)まず、アプリとデータベースを別々のサーバーに置いています。データベースサーバーをセキュリティで保護する方法がわからない場合を除いて、簡単に接続できます。

これが私がすでに行ったことです:

  • ランmysql_secure_installation MySQLのインストール直後。したがって、これらすべてが処理されました。

    • 強力な64文字のrootパスワード
    • 匿名ユーザーなし
    • localhostでのみrootログイン
    • テストデータベースなし
  • サーバー間通信用の非パブリックネットワーク(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予期しない問題を回避します。

考慮されるオプション(ただし採用されていません):

  • SSHトンネル、SSL、OpenVPN、Tinc、IPsecなどの技術は、パフォーマンスコスト(リソース使用量)があるため、一般的には使用されないと言われています暗号化、遅延などによる)。

それで、私は何が必要ですか、それとも私は十分ですか?他にどのように他の人はそれをしますか?できる限り詳しく説明してください(チュートリアルへのリンクや、提案している何かが大いに役立つでしょう)。

6
its_me

VPNテクノロジーが一般的に使用されていないと言われた理由はわかりません。パフォーマンスコストがあることは正しいですが、それでもすべてがそうです!通常、アプリケーションサーバーとそのデータベースサーバーの間を移動するデータ量については、TLSのCPUオーバーヘッドは、特にデータベースサーバー上では無視できる程度です。そうでない場合は、SSLオフロードハードウェアの購入を検討してください。

私の好みは、アプリケーションサーバーの2つのネットワークカードです。それとデータベースサーバー間の接続は、クライアントトラフィックとは異なるネットワークを経由します。

別のネットワークが不可能な場合は、TLSとデータベースサーバーのファイアウォールの構成を組み合わせて、少数のコンピューター(アプリケーションサーバー(明らかに)、管理ワークステーション、運用管理サーバーなど)からの受信接続のみを許可するようにします。

3

MySQLは、Secure Sockets Layer(SSL)プロトコルを使用して、MySQLクライアントとサーバー間の安全な(暗号化された)接続をサポートします。あなたはこれに従うことができます:

http://www.mysqlperformanceblog.com/2013/06/22/setting-up-mysql-ssl-and-secure-connections/

詳細については、mysqlの公式サイトを参照してください。

http://dev.mysql.com/doc/refman/5.1/en/ssl-connections.html

3
MKT

Ssh-tunnelingを使用します。例えば:

$ ssh -f -N -L 3307:localhost:3306 db_Host

開いているポートを確認します。

$ nmap localhost -p 3307

これで、localhost:3307への暗号化接続を開くことができます。

2
Vladislav

最初に、何を保護するかを定義する必要があると思います。これまでのところ、データベースは不正なリモートログインから保護されています。推奨される安全な通信方法(sshトンネル、SSL接続など)は、アプリケーションサーバーとデータベースの間のトラフィックを誰かが盗聴するのを防ぐことができます。両方が内部ネットワーク上にある場合は、それほど大きな問題ではない可能性があります。

その他のセキュリティ面はそのままです。

  • アプリケーションまたはデータベースサーバーへの物理的またはリモートのルートアクセス権を持つユーザー。
  • データベースサーバーのディスクにアクセスできる人。
  • データベースバックアップのセキュリティ。
  • sQLインジェクションやその他のエクスプロイトなどの攻撃に対するアプリケーションのセキュリティ。
  • アプリケーションおよびデータベース管理者を信頼します。
  • 同じネットワーク上の他のマシンのセキュリティ。そこから追加の攻撃が開始される可能性があります。

等々。

最も可能性が高く有害な攻撃ベクトルを特定し、そこでセキュリティを適用します。

2
mustaccio

先ほど述べたように、コマンドラインにパスワード値を含めることは、セキュリティ上のリスクになる可能性があります。この問題を回避するには、次のパスワード値なしで--passwordまたは-pオプションを指定します。Shell> mysql --Host = localhost --user = myname --password mydb Shell> mysql -h localhost -u myname -p mydb Whenパスワードオプションにパスワード値がない場合、クライアントプログラムはプロンプトを出力し、パスワードの入力を待ちます。

1
Nagendra Singh