在带有 Xtightvnc 的 Debian 11 服务器上,我收到很多“身份验证失败太多”的消息。我想使用fail2ban 来阻止未经授权的用户尝试通过VNC 登录我的服务器。但我找不到有效的规则。我发现的规则很旧,不适用于日志。
14/10/21 20:37:43 Got connection from client 209.141.49.123
14/10/21 20:37:43 Using protocol version 3.3
14/10/21 20:37:43 Too many authentication failures - client rejected
14/10/21 20:37:43 Client 209.141.49.123 gone
14/10/21 20:37:43 Statistics:
14/10/21 20:37:43 framebuffer updates 0, rectangles 0, bytes 0
我正在使用 iptables 仅发布我的访问 ip,但我不想要这个解决方案。
不幸的是,这个 VNC 日志记录的日志格式并不适合 fail2ban - 失败的消息不包含 IP 地址,并且带有 IP 的条目和失败的尝试不包含一些标识符,以便能够按此 ID 对它们进行分组。
基本上fail2ban可以处理这样的多行日志(一行包含IP,另一行包含失败)有两种处理方法:
maxlines
>= 2 滚动日志,消息窗口包含超过 1 条消息;<F-MLFID>...</F-MLFID>
标签在每一行中捕获与会话相关的 ID,以便考虑 2 条消息来自同一个客户端。这两种方法在这里都不太合适。
很快,如果它们同时发生,您将无法区分合法尝试和失败尝试,例如:
在这里,我们看到 2 个客户端已连接,但一个失败,另一个成功。哪个成功,哪个不成功?
在被拒绝的消息之后仍然有一个日志条目(带有 IP 和
gone
),所以如果您说客户端在成功连接后不太可能直接离开,您可以说我们将考虑附近的消息client rejected
和gone
作为来自的消息同一个客户端(这有点“危险”,特别是如果在某个时间点成功和稍后消失之间没有进一步的消息,但是......)。然后可以使用以下配置:
(如果您的 fail2ban 版本早于 0.10 ,请替换
<ADDR>
为)<HOST>
但无论如何,最好在 VNC 站点上修复它 - 例如直接在
client rejected
消息中添加 IP 地址或引入一些与会话相关的 ID 明确识别客户端。