nftables を使用した SSH 公開鍵接続試行のログ記録

nftables を使用した SSH 公開鍵接続試行のログ記録

質問

SSH 公開鍵認証と nftables を使用して SSH 試行のログ記録を設定する最適な方法は何ですか? また、これをテストする最適な方法は何ですか?

これは私にとって学習の練習なので、「ただ処理する」パッケージをインストールせずにこれを実行したいと思います。

説明

ネットワークの概念をテストして学習するために、かなり空白の新しいシステムをセットアップしました。システムは Arch Linux を実行しています。nftables が起動して実行されており、SSH 公開キー認証を使用してこのシステムにログインできます。テスト システムでは、sshd.socket も使用しています。

しかし、nftable ルールの 1 つが期待どおりにログアウトしていないようです。

log prefix "REJECTED" reject with icmpx type port-unreachable

このルールは nftables.conf の入力チェーンの一番下にあるため、拒否されたすべての入力トラフィックはこれに該当するはずです (と思います)。

おそらく私はこれを間違ってテストしているのでしょうが、実行時にjournalctl -k | grep "REJECTED"別のマシンからログインを試みた後、エントリが表示されません。ただし、正しいキーを持つ別のマシンが 1 分間に 2 回以上ログインを試みた場合は、エントリが表示されます。

また、この nftable ルール (上記の拒否ルールの上に配置) を使用すると、成功した SSH ログインを確認できることにも注目します。

tcp dport ssh limit rate 2/minute log prefix "SSH connection" accept

実行すると、journalctl -k | grep "SSH"これらの接続が期待どおりに表示されます。

答え1

ネットワーク層では、どの TCP 接続ログインがどの方法で失敗したかを判断することも (ログに記録することも) できません。SSH デーモンは、ログインが失敗したタイミングを判断してログに記録し、その後再試行を許可するか、接続を閉じます (通常は、一定回数の試行が失敗した後)。

失敗したログイン試行は auth log in に保存されます/var/log/auth.log。そこでは、失敗したログインと成功したログインの両方のログ エントリを見つけることができます。

ネットワーク層では、SSHデーモンへの新しい接続をログに記録できます。次の例はnftablesから直接引用したものです。ウィキドキュメント:

tcp dport 22 ct state new log prefix \"New SSH connection: \" accept

関連情報