问题
使用 SSH 公钥身份验证和 nftables 设置记录 SSH 尝试的最佳方法是什么?另外,测试这个的最佳方法是什么?
我想在不安装“只处理它”的包的情况下执行此操作,因为这对我来说是一个学习练习。
描述
我已经建立了一个相当空白的新系统来测试和学习网络概念。该系统运行Arch Linux。 nftables 已启动并正在运行,我可以使用 SSH 公钥身份验证登录到该系统。测试系统还使用 sshd.socket,因为它是有价值的。
但是,我注意到 nftable 规则之一似乎没有按预期注销:
log prefix "REJECTED" reject with icmpx type port-unreachable
该规则位于我的 nftables.conf 中输入链的底部,因此所有被拒绝的输入流量都应命中此规则(我认为)。
也许我的测试是错误的,但是当我运行时,journalctl -k | grep "REJECTED"
尝试通过另一台机器登录后我没有看到任何条目。但是,当具有正确密钥的另一台计算机在一分钟内尝试登录两次以上时,我确实会看到一个条目。
另外,我会注意到我可以使用此 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