Letmein は、シンプルで安全な認証メカニズムを備えたシンプルなポートノッカーです。これを使用すると、SSH、VPN、IMAP などのサービスに対する事前認証攻撃に対する防御を強化できます。
Letmein は、サービスの攻撃対象領域を減らすために、サーバー上のサービスをノック認証バリアの背後に隠します。ノック認証が成功しない限り、サービスにアクセスできません。ノックが成功した場合、letmeind サーバーは、ノックを実行したクライアント IP アドレスのノックされたポートのみを開きます。異なる IP アドレスを持つマシンは、引き続き保護されたサービスにアクセスできません。
ノック シーケンスを正常に認証できないマシンは、保護されたサービスにアクセスできません。提供されたサンプルnftables.conf
使用して、保護されたサービス ポートで ICMP reject
受信します。 (代わりに、 nftables.conf
でパケットをdrop
ことを決定することもできます)。
Letmein にはnftables
ベースのファイアウォールが必要です。 iptables
では動作しません。 iptables
ベースのファイアウォールを使用している場合は、letmein をインストールする前にnftables
に変換してください。インターネット上にはその方法が記載されています。それは思っているほど難しくも大変な作業でもありません。 :)
letmein 制御通信自体はデフォルトで TCP ポート 5800 に設定されていますが、任意の TCP または UDP ポートに構成できます。 UDP ポートを制御ポートとして選択し、control-error-policy=basic-auth を設定すると、letmein サービス自体はステルス モードで動作し、認証されていない受信メッセージには応答しません。
ホームページ
Gitリポジトリ
Githubリポジトリ
サーバーに letmein サーバー ソフトウェアをインストールします (以下のセクションを参照)。
クライアントに letmein クライアント ソフトウェアをインストールします (以下のセクションを参照)。
このプロジェクトに付属している nftables.conf サンプル構成ファイルをお読みください。 letmein 固有の入力チェーンを既存のnftables
構成に追加する必要があります。それに応じてnftables.conf
変更します。
次のクライアント コマンドを使用して、サーバーとクライアントにインストールする共有秘密キーとユーザー識別子を生成します。
letmein gen-key -u 00000000
gen-key コマンドは、生成されたキー文字列をコンソールに出力します。デフォルトでは、これによりユーザー識別子00000000
の安全なランダムキーが生成されます。必要に応じて、ユーザー ID を手動で編集することも、そのままにし続けることもできます。
生成された文字列 (ユーザー識別子と共有シークレット) を/opt/letmein/etc/letmeind.conf
のサーバー構成に追加します。生成されたキー文字列をユーザー識別子とともに構成ファイルの[KEYS]
セクションに配置します。
生成された同じ文字列 (ユーザー識別子と共有秘密) を/opt/letmein/etc/letmein.conf
のクライアント構成に追加します。生成されたキー文字列をユーザー識別子とともに構成ファイルの[KEYS]
セクションに配置します。
開くことができるsshd
ポートを記述するresource
サーバーに作成します。サーバー構成ファイル/opt/letmein/etc/letmeind.conf
の[RESOURCES]
セクションで、開くことができるすべてのポートを指定する必要があります。リソースは、次のようなリソース識別子とその後に続くポート識別子で構成されます。
[RESOURCES]
00000022 = port: 22
リソース識別子は 8 桁の 16 進数です。この例では 22(16 進数) ですが、任意の数値にすることができます。サーバーとクライアントで同じ番号である必要があります。 port:
ノックオープン可能なポート番号(10進数)を指定します。
同じリソース識別子と同じポート番号を持つ同じリソースを/opt/letmein/etc/letmein.conf
のクライアント構成に追加します。
letmein サーバーを再起動します。
systemctl restart letmeind.service
次に、静的sshd
ポート (22) accept
nftables.conf
ファイアウォール構成から削除します。 Letmein は、ノック認証が成功した後、そのようなルールを letmein 入力チェーンに動的にインストールします。次に、nftables を再起動します。
systemctl restart nftables.service
終わり!これで、サーバー上のsshd
ポートをノックオープンできるようになります。
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
SSH で接続する前にポートを自動的にノックするには、 Match exec
ルールを~/.ssh/config
ファイルに追加します。
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
letmein のビルドおよびインストール方法の詳細については、インストール手順を参照してください。
システムから letmein を完全に削除したい場合は、アンインストール手順を参照してください。
クライアント アプリケーションletmein
は移植性があり、すべての主要なプラットフォームで実行できます。テストされたプラットフォームは次のとおりです。
サーバー アプリケーションletmeind
、ファイアウォール バックエンドとしてnftables
のみをサポートするため、Linux 専用です。
letmein サーバーとクライアントの構成方法の詳細については、構成ドキュメントを参照してください。
設定ファイルのユーザー識別子とリソース識別子は、暗号化されずにクリア テキストでネットワーク上に送信されることに注意してください。
ユーザー識別子とリソース識別子に個人情報が含まれていないことを確認してください。
これらの識別子は、さまざまなletmein
キー、インストール、セットアップを管理するための抽象的な識別を目的としているだけです。
letmein の主な設計目標は次のとおりです。
-4
および-6
を使用して調整できます。セキュリティと脆弱性の報告の詳細については、letmein のセキュリティに関するドキュメントを参照してください。
Copyright (c) 2024 Michael Büsch [email protected]
オプションで、Apache License バージョン 2.0 または MIT ライセンスに基づいてライセンスが付与されます。