GNU/Linux >> Linux の 問題 >  >> Linux

Bastion サーバー:TCP 転送を使用する VS サーバーに秘密鍵を配置する

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 について話しましょう .

ちょっと待って! サーバーをハッキングする方法を書きます エージェント転送を使用すると、違いが理解しやすくなります。

ハックしましょう!

基本的な手順:ここで私の投稿を読むことができます

基本的な手順は次のとおりです:

<オール>
  • 踏み台ユーザーの作成
  • root ログインを無効にする
  • ハッキングの試みをブロック
  • ポートを変更
  • ファイアウォールを構成する
  • SELinux を構成する
  • 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 エージェント にあります あなたのラップトップで。
    • エージェントを通じて認証され、要塞にログインします。
    • そこから目的のホストにログインし、認証要求をラップトップに送り返す .

    利点:悪用される可能性のある鍵が踏み台に保存されていません。

    お役に立てば幸いです:)


    Linux
    1. その他のクラウドサーバーの使用シナリオ

    2. API呼び出しを使用してクラウドサーバーを停止します

    3. スケジューラーヒントを使用してサーバーを作成する

    1. openssh秘密鍵をSsh2秘密鍵に変換しますか?

    2. マシン間で秘密鍵を共有しますか?

    3. Ubuntu で ssh-copy-id を使用する方法

    1. 専用サーバーを使用する場合

    2. サーバーの ECDSA キー フィンガープリントを確認するには、どのコマンドを使用すればよいですか?

    3. /dev/tcp を使用するために < または > が必要な理由