web-dev-qa-db-ja.com

MySQLに安全に接続する-MySQLのSSLとstunnelとSSHトンネリング

MySQLサーバーに接続するPHPアプリケーションがあり、Webサーバーとアプリケーションサーバーとデータベース間の接続を保護したいと考えています。

ピーク時には、Webサーバーはデータベースに対して何百もの同時接続を行い、多数の小さな読み取りと書き込みを実行します。これは最適ではないことを認識しており、これと並行してデータベース接続の数を減らすよう取り組んでいます。

現在オンになっているデータベースへの永続的な接続はありません。将来的にはこれとは別にこれを実装したいと考えています。

ハードウェアに関して-MySQLサーバーはWebサーバーと同様にかなり分厚い(16コア)です。それらは専用サーバーです。

次に、データベースサーバーへの接続を保護および暗号化する最もパフォーマンスの高い方法について質問します。

これまでの私の調査では、主なパフォーマンスオーバーヘッドはSSL接続のセットアップにあることが示唆されています。SSLが接続されると、パフォーマンスの低下はほとんどありません。そして、これが接続を保護する各方法について私が持っているものです:

  1. MySQL SSL証明書-通常のSSLと同じように機能します。クライアント証明書を使用して、不正な接続を防止できます。既存のセットアップとの永続的な接続はありません。ファイアウォールの開いているポートでMySQLをリッスンする必要があります。
  2. トンネル。ポートとポートのSSLトンネルを設定します。 MySQLを再構成する必要はありません。悪意のあるMySQL接続の試行を防ぐために、通常のMySQLリスニングポートを閉じることができます。永続的な接続はサポートしていません。不明なパフォーマンスヒット。
  3. SSHトンネリング。クライアントとサーバーの間にSSHトンネルを作成します。 MySQLを再構成する必要はありません。悪意のあるMySQL接続の試行を防ぐために、通常のMySQLリスニングポートを閉じることができます。永続的な接続をサポートしますが、これらは時々削除されます。不明なパフォーマンスヒット。

これは私が得ることができた限りです。私はベンチマークの制限を認識しています-それらを実行した私の経験では、実際のトラフィックをシミュレートすることは非常に困難です。 MySQLのセキュリティ保護に関する自分の経験に基づいて誰かがアドバイスをしてくれることを望んでいましたか?

ありがとう

15
dastra

私はssh-tunnelを使い、autosshではなくsshでそれを行います。パフォーマンスについて言えば、SSHプロトコルは高度にカスタマイズ可能であり、必要に応じて接続を微調整できます。

しかし、接続がセットアップされた後、私は顕著なオーバーヘッドを期待しません。

5
ansi_lumen

この 記事 (MySQL Performance Blog)のベンチマークを確認することで、MySQLのネイティブSSL機能を実際に回避する必要があります。

3
Nicolas BADIA