質問
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