Ubuntu 22.04にEndlessh Tarpitをセットアップする方法

著者は、無料かつオープンソース基金を、寄付のための書くプログラムの一環として受け取ることを選択しました。

紹介

認証ログを見ると、さまざまなIPアドレスからのいくつかの失敗したログイン試行が表示される場合があります。これらの失敗したログイン試行は、デフォルトの資格情報を使用して脆弱なサーバーをスキャンするボットネット上のノードから頻繁に発生します。ほとんどの人々がセキュリティの強固なパスワードやSSHキーを持っており、攻撃者がサーバーにログインできないようにしていますが、一部のサーバーはこのスキャンに対して脆弱です。これらの攻撃を止めることはできないかもしれませんが、ターピットを使用して攻撃を遅らせることができます。

このチュートリアルでは、ログインを試みるユーザーに対して無限に長いバナーを送信するターピットであるEndlesshをインストールして設定します。また、SSHサービスを異なるポートで実行するように設定します。これにより、認証ログがより読みやすくなります。

このチュートリアルを完了すると、非標準のポートでサーバーに接続できるようになります。一方、サーバーをスキャンするボットは、開かれない扉をノックすることで時間を無駄にすることになります。

前提条件

このチュートリアルを完了するには、以下が必要です:

ステップ1 – SSHを非標準ポートに移動する

このステップでは、SSHを非標準ポートに移動してEndlesshのためにポートを解放します。ボットネットには無限のリソースがないため、通常、デフォルトのSSHポート(22)のみをスキャンします。SSHを非標準ポートに移動することで、ボットをEndlesshのターピットに閉じ込めることができます。

まず、サーバーからSSH設定ファイルのバックアップを作成します。

  1. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

これは、何かがうまくいかない場合やSSHをデフォルトポートに戻すことを決定した場合に、元の設定を復元するために使用できます。

/etc/ssh/sshd_configをnanoまたはお気に入りのテキストエディターで開きます:

  1. sudo nano /etc/ssh/sshd_config

#Port 22を探します。この行の#を削除してコメントを解除し、その後、サーバーで未使用のポートにポートを変更します:

/etc/ssh/sshd_config
...
Port 2222
...

通常未使用のポートの例は2222です。再発するSSH接続に使用するポートを任意に選択できます。ファイルを保存して閉じます。

サーバーがufwなどのファイアウォールを使用している場合、新しいポートへのトラフィックを許可する必要があります:

  1. sudo ufw allow 2222/tcp

次に、SSHサービスを再起動します:

  1. sudo systemctl restart sshd

別のターミナルセッションで、新しいポートを使用してサーバーに接続しようとしてください:

  1. ssh sammy@your_server_ip -p 2222

警告:新しいポートでSSHに接続できることを確認するまで、アクティブなSSHセッションを閉じないでください。新しいポートを介して接続できない場合、セッションを閉じることでサーバーへのアクセスを失う可能性があります。別のターミナルセッションでサーバーに接続できない場合は、次のコマンドを実行して元のSSH設定を復元できます:

  1. sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
  2. sudo systemctl restart sshd

さらに問題が発生した場合は、sshdが正常に再起動したことを確認し、ポート2222がtcpトラフィックを受け入れるようにファイアウォール設定を確認してください。

ポート2222への新しい接続を確認したら、元のターミナルを安全に閉じることができます。将来サーバーに接続する際には、常に次のように新しいポートを指定する必要があります:

  1. ssh sammy@your_server_ip -p 2222

SSHを標準ポート以外に正常に移動できたので、Endlesshを設定する時間です。

ステップ2 – Endlesshのインストール

Endlesshには公式のパッケージがないため、リポジトリを手動でビルドする必要があります。リポジトリをクローンするためにGitを使用し、プロジェクトをコンパイルするためにbuild-essentialパッケージ、libc6-devパッケージを使用します。

aptパッケージマネージャを使用して必要なパッケージをインストールします:

  1. sudo apt install build-essential libc6-dev

プロンプトが表示されたら、yを入力してインストールを確認します。

次に、EndlesshリポジトリをGitHubからホームディレクトリにクローンします:

  1. git clone https://github.com/do-community/endlessh

プロジェクトディレクトリに移動し、makeコマンドを使用してEndlesshをコンパイルします:

  1. cd endlessh
  2. make

以下のコマンドを使用してEndlesshを起動できます:

  1. sudo ./endlessh -v -p 22

Endlesshが動作しているかどうかをテストするには、エンドレスのバナーが送信されるのを示す-vの詳細フラグを使用して、ポート22にSSH接続を試みることができます。新しいターミナルウィンドウで、次のいずれかのコマンドを使用してポート22にSSH接続を行います:

  1. ssh sammy@your_server_ip -v
  1. ssh sammy@your_server_ip -p 22 -v

新しいSSHセッションがポート22に接続しようとすると、セッションが終了するまで10秒ごとにランダムな文字列が接続ターミナルに表示されます。以下は、出力例です:

Output
debug1: 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ディレクトリに移動します:

  1. sudo mv ./endlessh /usr/local/bin/

パスワードを求められたら入力します。

プロジェクトからサービスファイルを/etc/systemd/systemディレクトリにコピーします:

  1. sudo cp util/endlessh.service /etc/systemd/system/

サービスファイルを開いて、Endlesshを1024未満のポートで実行するようにします。お好みのテキストエディタでサービスファイルを開きます:

  1. sudo nano /etc/systemd/system/endlessh.service

Endlesshを1024未満のポートで実行するセクションを見つけます。

/etc/systemd/system/endlessh.service
...

 


AmbientCapabilities=CAP_NET_BIND_SERVICE
#PrivateUsers=true
...

ファイルを保存して終了します。

次に、Endlesshを1024よりも低いポートで実行できるようにします。これはインターネットドメイン特権ポートとも呼ばれます。Endlesshバイナリにこの機能を設定するために、setcapコマンドを使用します:

  1. sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

Endlesshがどのポートを使用するかを指定するために、Endlessh用の設定ファイルを定義する必要があります。名前を/etc/endlessh/configとして設定ファイルを作成し、開きます:

  1. sudo mkdir /etc/endlessh
  2. sudo nano /etc/endlessh/config

設定ファイルで使用するポートを22と定義します:

/etc/endlessh/config
Port 22

ファイルを保存して閉じます。

これでEndlesshサービスを持続的に開始できます:

  1. sudo systemctl --now enable endlessh

--now enableを含めると、サービスがサーバーを再起動しても持続します。

サービスが正常に開始されたかどうかを確認するために、systemctl statusコマンドを使用できます:

  1. sudo systemctl status endlessh

正常に開始された場合、次のような出力が表示されます:

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に接続を試みることができます:

  1. ssh sammy@your_server_ip

ターピットが実行されているため、新しいターミナルセッションは接続できず、接続しているターミナルでCtrl+Cを使用して手動で停止するまで永遠に実行されます。

サービスを停止したい場合は、次のコマンドを使用できます:

  1. sudo systemctl --now disable endlessh

サービスを停止した後は、ステップ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