実際のシステムアカウントの資格情報を使用しても、すべてのログインを拒否する仮想SSHサーバーを探しています。検索をしてハニーポットを発見しましたが、ハッカーたちがゲームをしているという事実を悟らせたくありませんでした。 「実際の」SSHサーバーが別のポートで実行されていても、彼らが実際のサーバーを見つけたと思うことを願っています。
これを行うことができるソフトウェアを教えてください。
より良いアプローチはFail2banを統合することによって本物彼らが実際のサーバーに接続していると思います!
編集:違いがある場合はDebian Linuxを実行しています。
答え1
/etc/ssh/sshd_config を使用します。
# Fake std port, blocked:
Port 22
# non-std port for real service:
Port 222
[....]
Match LocalPort 22
DenyUsers *
一般的なログファイルで試行/拒否を確認し、Fail2banなどのツールを引き続き使用できます。
答え2
すべてのSSHサーバーがこれを実行できますが、ログインを許可しないように慎重に構成する必要があります。 OpenSSHまたはログ検索ソフトウェアの正しいログメッセージをエクスポートする方法を使用してください。ただし、これによりホスト設定が複雑になる可能性があります。たとえば、1日26時間勤務するシステム管理者は、偽のサーバーを物理サーバーと混同して正当なユーザーをブロックしたり、実際の認証を許可するように偽のサーバーを誤って構成したりする可能性があります。文書化(より多くの作業!)は、これらの問題を制限するのに役立ちます。
巧妙な攻撃者は、ポートがインターネットに直接公開されていると仮定して他のポートでSSHを見つけることになるため、この方法は特に他のソースから実際のログイン資格情報を取得した場合には適していない可能性があります。あまりにも多くのボットがすべてのポートでパスワードを推測し、SSHログインバナーを表示した後にタイムアウトしたり、何かで十分な単純なスクリプトには気にしませんが、単にTCP / 22をブロックして実際のポートで実行するだけで十分です。 SSHサーバーポートを移動すると、より多くのCPUといくつかのネットワーク帯域幅が浪費されます(やはりVPNや他の層の背後ではなく直接使用できると仮定)。単純なサーバーにはセキュリティホールがないことが望ましく、CPUを無駄にしすぎたり、ソケットを消費しすぎたりしないでください。それは次のように見えるかもしれません
#!/usr/bin/env expect
# fakesshd - present a banner and not much else (we hope)
set listenport 2222
set message SSH-2.0-OpenSSH_9.0
set close_milliseconds 9999
# if on OpenBSD, https://github.com/thrig/tcl-pledge
#package require pledge
#pledge {dns inet stdio} NULL
proc banner {socket clientaddr clientport} {
global close_milliseconds message
puts $socket $message
flush $socket
after $close_milliseconds close $socket
}
socket -server banner $listenport
vwait the_heat_death_of_the_universe
しかし、通常のユーザまたは監視システムが間違ったSSHポートに接続され、そのIPアドレスがブラックリストまたはIPレピュテーションシステムに含まれる可能性があります。おそらく良い結果ではないでしょう。過度のシステム管理者は、間違ったポートに接続し、実際に処理する必要がある他のものに加えて、エラーの原因をデバッグするのに時間を浪費する可能性があります。
したがって、愚かなボットは気にせず(ちょうど消えますか?)、スマートな攻撃者は実際のポートを見つけたり(ポートを動かしたり、VPNの後ろに配置したりするためにもっと作業を行う必要があります)、または気にしません。ポート。セキュリティの別の抜け穴(「こんにちは、私はIT部門のBobです。SSHの設定を教えていただけますか?レビュー中です」)により、システム管理者はもちろん、ユーザーの生活はさらに困難になります。ここでは利点はあまり見えません。