在带有 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,但我不想要这个解决方案。
答案1
不幸的是,这个 VNC 日志记录的日志格式并不适合fail2ban - 失败的消息不包含 IP 地址,并且带有 IP 的条目和失败的尝试不包含一些标识符,以便能够按此 ID 对它们进行分组。
基本上fail2ban可以通过两种处理方式来处理这种多行日志(一行包含IP,另一行包含失败):
- 监狱/过滤器
maxlines
>= 2 滚动日志,消息窗口包含多于 1 条消息; - 新的多行处理使用
<F-MLFID>...</F-MLFID>
标签来捕获每行中与会话相关的 ID,以便考虑 2 条消息来自同一客户端。
这两种方法在这里都不太合适。
很快,如果合法尝试与失败尝试同时发生,您将无法区分它们,例如:
Got connection from client 192.0.2.111
Got connection from client 192.0.2.222
Too many authentication failures - client rejected
Client successfully connected ~artificial log-entry (I don't know ~
这里我们看到 2 个客户端已连接,但一个失败,另一个成功。哪一个成功了,哪一个没有?
在被拒绝的消息之后仍然隐含地存在一个日志条目(带有 IP 和gone
),因此,如果您认为客户端在成功连接后不太可能直接消失,您可以说我们会将附近的消息视为来自client rejected
和gone
的消息同一个客户(这有点“危险”,特别是如果在某个时刻成功和稍后消失之间没有进一步的消息,但是......)。
然后可以使用以下配置:
# increasing the value of `maxlines` would make that the filter works more precise (can consider failures also in case of some flood in log between `client rejected` and `gone`),
# but it would make it more unsafe at the same time (because it can cause false positives on `gone` messages from legitimate clients occurring after `client rejected` logged from evildoers):
maxlines = 2
failregex = ^\s*Too many authentication failures - client rejected<SKIPLINES>\s*Client <ADDR> gone
(如果您的fail2ban版本早于0.10,则替换<ADDR>
为)<HOST>
但无论如何,最好在 VNC 站点上修复它 - 例如,直接在client rejected
消息中添加 IP 地址或引入一些与会话相关的 ID 明确地识别客户端。