SSHトンネルを介して2つのサーバー(現在VM)を接続するために、現在vagrant(仮想ボックス)を使用していくつかの構成をテストしています。目標は、私のWebアプリをデータベースに安全に接続することです。
問題は、SSHトンネルを介してデータベースにクエリを実行すると、トンネルを使用しない場合よりもクエリが5〜80倍遅くなることです。これが私が使っているコマンドです:
ssh -N -L 3306:127.0.0.1:3306 [email protected]
私が読んだことから、オーバーヘッドはそれほど多くないはずなので、転送を高速化するためにいくつかのことを試みました。 -N
オプションを削除すると、トンネルを使用しない場合と同じくらい高速にクエリが実行されますが、ターミナルに「sshuser」としてログインしている(そして&
コマンドの最後に奇妙なことをします...)。
それを知って、私はいくつかの質問があります:
-N
オプションを削除してもデータは暗号化されますか?
もしそうなら、コンソールに「sshuser」として記録されずにパフォーマンスを維持するにはどうすればよいですか?
暗号化を高速化するために使用できるオプションはありますか?
あなたの光を事前に感謝します。
SSHトンネルは、永続的な解決策としては本当に素晴らしいアイデアではありません。 SSHはTCPベースです。SSH内でトンネリングできるほとんどのものはTCPベース(mysqlを含む)です。トンネリング TCP over TCP できますシステムはバックオフなどを両方の接続で同時に処理しようとするためです。
同じネットワーク上の2つのホスト間の安全な永続的接続が必要な場合は、IPSECのセットアップに何が必要かを調査する方がはるかに良いでしょう。または、IPSECが機能しない場合は、TCPを介して転送しないVPN設定を使用します。
SSHトンネルのパフォーマンスについては、使用している暗号を見てみましょう。いくつかは他より速いです。多分あなたはより速い/より弱い暗号を受け入れることができます。ほとんどの場合、圧縮が無効になっていることを確認する必要があります。高速リンクを使用している場合は、実際に圧縮する値はありませんが、圧縮/解凍を実行するための待ち時間が追加される可能性があります。これらを変更してもまだ改善されない場合は、おそらくtcpdump/wiresharkを起動して、遅延の原因を確認できるかどうかを確認します。
-N
オプションは、SSHが暗号化ではなくリモートコマンドを実行するのを防ぎます。とにかくトンネルは暗号化されます。
-N
を使用する場合、sshはトンネルを作成するだけで、シェルや反対側のすべての環境変数は作成しません。それはずっと速いです。
セットアップにSSHトンネルを追加してもセキュリティが向上するとは思いません。大幅に低下する可能性もあります。
Webアプリケーションをデータベースに直接接続する場合、潜在的な攻撃者は、アプリケーションが使用する資格情報のみを取得します。トンネルを作成すると、攻撃者はトンネルを悪用してデータベースホストにアクセスし、そのサーバー上のすべてのデータを危険にさらす可能性があります。
セットアップでは、トンネルを手動で開始する必要があり、おそらくそれを自動化し、資格情報を何らかの方法で保存します。攻撃者は資格情報を見つけ、それを使用してデータベースサーバーにアクセスできます。
データベースサーバーとアプリケーションサーバーが同じサブネット上にある場合、暗号化されたSSHトンネルを使用してデータにアクセスすることによるセキュリティの向上は無視できます。既にネットワーク内にいる攻撃者から保護するだけです。この場合、彼がすべてにアクセスできるようになるのは時間の問題です。