設定

設定

他の問題に対するシステムログの確認中に、リアルタイムで多くのSSH試行が発生していることがわかりました。特に質問があります。1日10,000回試みる

$ grep Disconnected /var/log/auth.log | wc -l #since March 6
46149

私はNATの後ろにいて、通常ログイン試行が0回だったので、これは私にとって驚くべきことでした。ログで何が起こっているのかについて明確なヒントを得ました。ログイン試みはすべてlocalhost

Mar 10 11:27:38 devbox sshd[11409]: Disconnected from invalid user mn 127.0.0.1 port 45822 [preauth]
Mar 10 11:27:46 devbox sshd[11426]: Disconnected from authenticating user root 127.0.0.1 port 45824 [preauth]

私が考えることができる唯一のことは、これらの接続が自宅で自分の会社のコンピュータにログインできるように、ジャンプホスト用に設定したリバースSSHトンネルから始まるということです。実はsudo systemctl stop reverse-tunnel全ての活動をする時はすぐに止めてください!だから私の設定に何か怪しいことがあります。これまで、私は私の設定でクライアントが接続の開始を許可するためにそのホストに有効な証明書を使用してジャンプホストにログインできる必要があると仮定していましたが、これは明らかに間違っています!

設定

顧客.ssh/config

Host jump
    HostName jumphost.somedomain.com
    User ubuntu
    IdentityFile ~/.ssh/jump

# local -> jump -> jump:30001 --> work
# reverse tunnel: work -> jump:22 sets up jump:30001 -> work
Host work
    ProxyJump jump
    User my-user
    IdentityFile ~/.ssh/work
    HostName jumphost.somedomain.com
    Port 30001

上記は、「クライアント」ビットのみを扱い、ローカルコンピュータに接続する方法を教えてくれるのでよさそうです。

リバーストンネルサービス

これは常に実行するように設定されたシステムサービスで、実際にジャンプホストからマイワークコンピュータへのインバウンド接続を可能にします。これが主な容疑者です。

# The SSH tunnel is configured mostly through options specified in the default ssh config file (such as private key)
# It needs to be copied to /etc/systemd/system/ to be picked up and then run
#    sudo systemctl daemon-reload
#    sudo systemctl enable tunnel
#    sudo systemctl start tunnel
# Original implementation: https://askubuntu.com/a/1316825/165026

[Unit]
Description=Maintain Reverse SSH Tunnel
After=network.target

[Service]
User=my-user
ExecStart=/usr/bin/autossh  -o ServerAliveInterval=30 -o "ServerAliveCountMax 3" -M 44444 -o ExitOnForwardFailure=yes -gnNT -R 30001:localhost:22 jump
RestartSec=15
Restart=always
KillMode=mixed

[Install]
WantedBy=multi-user.target

私はこれが犯人だと思います。-R 30001:localhost:22 jump

答え1

これはサーバー構成です。

明らかに、ポート30001はパブリックネットワークインターフェイスで一般に公開されているようです。これを確認するためにを使用してログインしようとしましたが、ssh -p 30001 clearly-wrong@jump実際に簡単にアクセスできる次のユーザー名がログに表示されます。

Mar 10 14:35:46 ACME sshd[22697]: Failed password for invalid user pt from 127.0.0.1 port 45854 ssh2
Mar 10 14:36:08 ACME sshd[22705]: Failed password for invalid user cluster from 127.0.0.1 port 45856 ssh2
Mar 10 14:36:37 ACME sshd[22736]: Failed password for invalid user clearly-wrong from 127.0.0.1 port 45858 ssh2

より簡単な方法はnetcatを使用することです。

$ nc jumphost.somedomain.com 30001
SSH-2.0-OpenSSH_8.4p1 Ubuntu-6ubuntu2.1

これは問題がより簡単であることを示します。

したがって、このポートを一般に正常に閉じると、セキュリティホールは閉じられます。netstatどのポートでリッスンしているかを見てみましょう。

$ sudo netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1984729/sshd: /usr/ 
tcp        0      0 0.0.0.0:30001           0.0.0.0:*               LISTEN      2950075/sshd: ubunt 

したがって、明らかにすべてのインターフェイスでリッスンしています。

それでは、私の作業コンピュータで実行されているこのコードを見てみましょう-R 30001:localhost:22 jump。これは、「ローカルホストのポート30001からポート22へのリバーストンネルを開きます」と言います。ここで欠落しているように見えるのは、ポート30001でリッスンする必要があるIPを指定することです。欠落している場合は、次のことを意味できます。すべてのインターフェースlocalhostそこにも制限しよう!だから私は接続を使用します

ssh -nNT -R 127.0.0.1:30001:localhost:22 jump

このように処理する必要がありますか?

$ sudo netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1984729/sshd: /usr/ 
tcp        0      0 0.0.0.0:30001           0.0.0.0:*               LISTEN      2950287/sshd: ubunt 

いいえ、何もしないことがわかりましたか?わかった、だからもっと読むsshd構成にGatewayPorts何か関連があることがわかりました(明らかに私はこの作業をずっと前に行ったことを忘れていました)。だからコメントを試してからssh設定を再ロードしてみました。チャジャン:

$ sudo service ssh reload
$ sudo netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1984729/sshd: /usr/ 
tcp        0      0 127.0.0.1:30001         0.0.0.0:*               LISTEN      2950497/sshd: ubunt 

実際、これは問題を解決しました。

$ nc -v jumphost.somedomain.com 30001
nc: connect to jumphost.somedomain.com (191.212.201.145) port 30001 (tcp) failed: Connection refused

ProxyJumpSSH別名が動作するために今する必要がある唯一の調整は、work公開ホスト名を 。HostNamelocalhost

問題:他のサービスに対してGatewayPortを有効にする必要があります...

これにより、SSHに簡単に接続できますが、時にはジャンプホストのジョブコンピュータで実行されているポートを公開する必要があります。通常、職場のコンピュータで一部のPHPサーバーが実行されていて、自宅でデバッグする必要がある場合です。有効化と無効化の間に中間オプションがあることがわかりました。clientspecified!あなたは読むことができます詳しくはこちらをクリック

関連情報