ProxyCommand または ProxyJump を使用する
04
を使用することをお勧めします (またはさらに良い 14
構文は簡単ですが、openssh 7.3+ がクライアント側で必要だと思います)、Bastion に秘密鍵をデプロイする必要がないため、すべてがローカルのままです。
ProxyJump の例
クライアント コンピューターで、28
の下にファイルを書き込みます。 怒鳴るのと同様の内容:
Host bastion
HostName bastion.example.com
User bastion-user
Port 22
IdentityFile ~/.ssh/id_bastion
Host srvC
HostName srvC.local
User server-user
IdentityFile ~/.ssh/id_protected_lan
ProxyJump bastion
次に 32
を実行します エージェント転送や要塞への秘密鍵のデプロイを行わずに、B (要塞) 経由で C に接続します。
上記の例では、「bastion」は Bastion ホストのエイリアスであり、srvC はサーバー C のエイリアスです。 ホストの IP または実際の完全修飾ドメイン名を入力する必要があります。ユーザーの場合は、58
を更新する必要があります Bastion とサーバーの正しいログイン名 C. 最後に 68
ローカル エージェント (KeeAgent や ssh-agent など) を使用する場合はオプションですが、実行されていない場合も機能し、各キー パスフレーズを要求します。
公開鍵の導入
もちろん、public をデプロイする必要があります bastion と srvC の両方のキー。以下を使用できます ($ 記号はプロンプトを示すためのものであり、入力しないでください):
$ ssh-copy-id -i ~/.ssh/id_bastion.pub \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
bastion
$ ssh-copy-id -i ~/.ssh/id_protected_lan.pub \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
srvC
注:上記は、パスワード認証がまだ許可されている場合にのみ機能します。上記の展開を行い、すべてが意図したとおりに機能することを確認したら、2 つのサーバーでパスワード認証を無効にする必要があります。
ProxyJump の代わりに ProxyCommand を使用した例
70
をサポートしていない古いバージョンの OpenSSH を使用している場合 (クライアント側で)、次に置き換えます:
ProxyJump bastion
ProxyCommand ssh -q -W %h:%p bastion
私が理解している限り、これは似ています。
ProxyJump に関する回答を見ました。 ProxyCommand について話しましょう .
ちょっと待って! サーバーをハッキングする方法を書きます エージェント転送を使用すると、違いが理解しやすくなります。
ハックしましょう!
基本的な手順:ここで私の投稿を読むことができます
基本的な手順は次のとおりです:
<オール>AgentForwarding の使用方法
- ~/.ssh/config に設定を作成
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-認証キーを ssh-agent に追加
ssh-add ~/.ssh/name_rsa
-要塞ホストに接続
ssh bast
-要塞からアプリケーションサーバーに接続
ssh [email protected] -p PORT
ハッキング!
私に質問してください:
-
サーバーは安全ですか?答えはとても簡単です:
- いいえ!
-
なぜですか?
- SSH エージェント転送を使用しているからです!
-
では、どこに問題があるのでしょうか?
- エージェントによる転送は危険であり、有害であると見なされているため
-
なぜですか?
- すべてを裏返しに説明しましょう:踏み台ホストに接続すると、素晴らしい ssh-agent が転送されます。これは、誰かがこのソケット データを使用してサーバーにアクセスできるようにソケットが設定されることを意味します。踏み台サーバーが危険にさらされていると想像してください。誰かが Linux サーバーに十分な権限を持っている場合、その人はあなたのソケット情報を使用するだけです。その結果、すべてのサーバーにアクセスできます。踏み台ホストに接続している時間に依存するため、セキュリティ侵害のウィンドウが非常に小さいことはわかっています。しかし、ProxyCommand のような他のオプションがある場合、本当にリスクを冒したいですか?したがって、ProxyCommand を使用してください!
踏み台ホストを侵害した場合にサーバーをハッキングする方法
ターゲットを追跡
/tmp ディレクトリでは、次のような内容が表示される場合があります:
[[email protected] tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
一時ファイルを開きましょう
[[email protected] tmp]# cd ssh-mKX88v0Vlo/
[[email protected] ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
つながりを見てみましょう このプロセス ID に。
netstat -nxp | grep 10507
結果:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
そしてつながっているのは誰?
lsof -i -a -p 10507
結果:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
ソケット ファイルも表示されます:
cd /proc/10507/fd/
ls
結果:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
そしてどうなるか クライアントが接続されるとき リモートサーバーへ?見てみましょう:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
netstat を使用して、ソケット ファイルが使用されているかどうかも確認できます。
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
ソケット情報と IP アドレスを盗む
ここで、踏み台ホストのセッションが開いている間にソケット情報を盗む必要があります . 宛先サーバーの IP も必要です ですので、netstat を使用してください:
netstat -tn
最後のステップ 転送されたソケット ファイルを使用するには
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
鍵が読み込まれているかどうかを確認する .
ssh-add -l
結果はそのようなものになるはずです :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
サーバーがハッキングされました。セキュリティの問題を解決するにはどうすればよいですか?
プロキシ コマンド
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
基本的な操作:サーバー経由でファイルを転送する方法 (クライアントからサーバー、サーバーからクライアント) については、こちらの投稿を参照してください
結論
- 踏み台ホストを使用する場合は、AgentForwarding を使用せず、ProxyCommand を使用してください
- 認証には常に root 以外のユーザーを使用してください
- ファイアウォールを使用して、不要な接続をすべてブロックします。
- SELinux を使用する (一般的に)
- 間違った資格情報で何度もログインしようとする IP アドレスをブロックする
- 必要がない場合は、ユーザーに sudo 権限を与えないでください
- サーバーを監視する
- サーバーを更新してセキュリティ パッチを適用する
詳細については、私のブログを参照してください。さらに、いくつかのスクリーン ショットがあるので、参考になるかもしれません。
SSH エージェント転送を使用するだけです
- 鍵は ssh エージェント にあります あなたのラップトップで。
- エージェントを通じて認証され、要塞にログインします。
- そこから目的のホストにログインし、認証要求をラップトップに送り返す .
利点:悪用される可能性のある鍵が踏み台に保存されていません。
お役に立てば幸いです:)