著者は、無料かつオープンソース基金を、寄付のための書くプログラムの一環として受け取ることを選択しました。
紹介
認証ログを見ると、さまざまなIPアドレスからのいくつかの失敗したログイン試行が表示される場合があります。これらの失敗したログイン試行は、デフォルトの資格情報を使用して脆弱なサーバーをスキャンするボットネット上のノードから頻繁に発生します。ほとんどの人々がセキュリティの強固なパスワードやSSHキーを持っており、攻撃者がサーバーにログインできないようにしていますが、一部のサーバーはこのスキャンに対して脆弱です。これらの攻撃を止めることはできないかもしれませんが、ターピットを使用して攻撃を遅らせることができます。
このチュートリアルでは、ログインを試みるユーザーに対して無限に長いバナーを送信するターピットであるEndlesshをインストールして設定します。また、SSHサービスを異なるポートで実行するように設定します。これにより、認証ログがより読みやすくなります。
このチュートリアルを完了すると、非標準のポートでサーバーに接続できるようになります。一方、サーバーをスキャンするボットは、開かれない扉をノックすることで時間を無駄にすることになります。
前提条件
このチュートリアルを完了するには、以下が必要です:
- sudo非ルートユーザーを持つUbuntuサーバー、ファイアウォール、および少なくとも1GBのRAM。これは、Ubuntu 22.04の初期サーバーセットアップに従って設定できます。
- サーバーにインストールされたGit。これは、Gitインストールチュートリアルで完了できます。
ステップ1 – SSHを非標準ポートに移動する
このステップでは、SSHを非標準ポートに移動してEndlesshのためにポートを解放します。ボットネットには無限のリソースがないため、通常、デフォルトのSSHポート(22
)のみをスキャンします。SSHを非標準ポートに移動することで、ボットをEndlesshのターピットに閉じ込めることができます。
まず、サーバーからSSH設定ファイルのバックアップを作成します。
これは、何かがうまくいかない場合やSSHをデフォルトポートに戻すことを決定した場合に、元の設定を復元するために使用できます。
/etc/ssh/sshd_config
をnanoまたはお気に入りのテキストエディターで開きます:
行#Port 22
を探します。この行の#
を削除してコメントを解除し、その後、サーバーで未使用のポートにポートを変更します:
...
Port 2222
...
通常未使用のポートの例は2222
です。再発するSSH接続に使用するポートを任意に選択できます。ファイルを保存して閉じます。
サーバーがufw
などのファイアウォールを使用している場合、新しいポートへのトラフィックを許可する必要があります:
次に、SSHサービスを再起動します:
別のターミナルセッションで、新しいポートを使用してサーバーに接続しようとしてください:
警告:新しいポートでSSHに接続できることを確認するまで、アクティブなSSHセッションを閉じないでください。新しいポートを介して接続できない場合、セッションを閉じることでサーバーへのアクセスを失う可能性があります。別のターミナルセッションでサーバーに接続できない場合は、次のコマンドを実行して元のSSH設定を復元できます:
さらに問題が発生した場合は、sshd
が正常に再起動したことを確認し、ポート2222
がtcpトラフィックを受け入れるようにファイアウォール設定を確認してください。
ポート2222
への新しい接続を確認したら、元のターミナルを安全に閉じることができます。将来サーバーに接続する際には、常に次のように新しいポートを指定する必要があります:
SSHを標準ポート以外に正常に移動できたので、Endlesshを設定する時間です。
ステップ2 – Endlesshのインストール
Endlesshには公式のパッケージがないため、リポジトリを手動でビルドする必要があります。リポジトリをクローンするためにGitを使用し、プロジェクトをコンパイルするためにbuild-essential
パッケージ、libc6-dev
パッケージを使用します。
aptパッケージマネージャを使用して必要なパッケージをインストールします:
プロンプトが表示されたら、y
を入力してインストールを確認します。
次に、EndlesshリポジトリをGitHubからホームディレクトリにクローンします:
プロジェクトディレクトリに移動し、make
コマンドを使用してEndlesshをコンパイルします:
以下のコマンドを使用してEndlesshを起動できます:
Endlesshが動作しているかどうかをテストするには、エンドレスのバナーが送信されるのを示す-v
の詳細フラグを使用して、ポート22
にSSH接続を試みることができます。新しいターミナルウィンドウで、次のいずれかのコマンドを使用してポート22
にSSH接続を行います:
新しいSSHセッションがポート22
に接続しようとすると、セッションが終了するまで10秒ごとにランダムな文字列が接続ターミナルに表示されます。以下は、出力例です:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
新しいセッションで接続を試みることで正常に動作していることを確認したら、新しいターミナルを閉じ、元のターミナルセッションでCtrl+C
を使用してEndlesshを停止します。
このステップでは、Endlesshをソースからダウンロードしてビルドしました。次に、それを設定してサービスとしてデプロイし、サーバーをログアウトして再起動しても永続化します。
ステップ3 – Endlesshの設定
このステップでは、Endlesshをセッションの終了後やシステムの再起動後も永続的に維持するサービスとして設定します。
コンパイルされたバイナリを/usr/local/bin
ディレクトリに移動します:
パスワードを求められたら入力します。
プロジェクトからサービスファイルを/etc/systemd/system
ディレクトリにコピーします:
サービスファイルを開いて、Endlesshを1024
未満のポートで実行するようにします。お好みのテキストエディタでサービスファイルを開きます:
Endlesshを1024
未満のポートで実行するセクションを見つけます。
...
AmbientCapabilities=CAP_NET_BIND_SERVICE
#PrivateUsers=true
...
ファイルを保存して終了します。
次に、Endlesshを1024
よりも低いポートで実行できるようにします。これはインターネットドメイン特権ポートとも呼ばれます。Endlesshバイナリにこの機能を設定するために、setcap
コマンドを使用します:
Endlesshがどのポートを使用するかを指定するために、Endlessh用の設定ファイルを定義する必要があります。名前を/etc/endlessh/config
として設定ファイルを作成し、開きます:
設定ファイルで使用するポートを22
と定義します:
Port 22
ファイルを保存して閉じます。
これでEndlesshサービスを持続的に開始できます:
--now enable
を含めると、サービスがサーバーを再起動しても持続します。
サービスが正常に開始されたかどうかを確認するために、systemctl status
コマンドを使用できます:
正常に開始された場合、次のような出力が表示されます:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
実行中であれば、新しいターミナルセッションでポート22
に接続を試みることができます:
ターピットが実行されているため、新しいターミナルセッションは接続できず、接続しているターミナルでCtrl+C
を使用して手動で停止するまで永遠に実行されます。
サービスを停止したい場合は、次のコマンドを使用できます:
サービスを停止した後は、ステップ1の警告でSSHの復元手順を使用して元のサーバー構成を復元できます。サービスを再度有効にするには、sudo systemctl --now enable endlessh
を使用してサービスを再度有効にしますが、これを行うときはSSHがポート22
で実行されていないことを確認してください。
結論
Endlesshを正常にインストールして設定し、認証ログをクリアし、ランダムなSSHボットの時間を無駄にするのに役立ちました。
Endlesshターピットを設定した後は、他のサーバーを保護するための推奨セキュリティ対策を確認してください。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04