有没有一种简单的方法可以不记录特定的 sshd 事件?

Pet*_*mit 7 freebsd logs sshd

我的主机的监控工具正在与端口 22 上的 ssh 建立定期连接,以查看或服务是否已启动。

这种消息使我的 /var/log/messages 变得混乱:

Dec 13 22:20:17  sshd[29487]: Did not receive identification string from 80.xx.xx.xx
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以使该特定 ip 的“没有收到来自”的消息静音?

Roy*_*ams 1

我认为没有办法轻松地做到这一点sshd

我怀疑这是作者(通常是 OpenBSD 人员)的设计选择,因为他们几乎总是在安全方面“犯错”——在这种情况下,不为我们提供一个可以抑制重要信息的旋钮。消息。

您确实说过“容易”,所以这可能就是您需要的全部答案。

但如果您可能正在考虑不太容易的选择,我的建议是:不要这样做,原因如下。

如果您像我一样,那么您提出这个问题的根本动机是让可操作的项目在日志中脱颖而出,并减少噪音。你不是一个人。:-)

实际上,消息的类型有很多种:

  • 知名,
  • 很难关闭,并且
  • 永远无法付诸行动

...你真正想要的是 过滤它。那就这样做吧。

例如,我编写了一个脚本,可以过滤掉前一天日志中的“无趣”项目,并向我发送每日报告。您必须非常小心地使用过滤器,但如果做得正确,它会真正节省时间,并且会使真正需要您注意的内容脱颖而出

当然,我偶尔会查看我的原始日志,并且有其他方法来捕获真正紧急的东西。但是,一天中没有足够的时间每天手动仔细检查日志,尤其是当您有多个箱子要放牧,但您的商店不够大,无法保证大规模日志处理时。

话虽这么说,以防万一您有一个真正令人信服的理由这样做(MaxMackie 的解决方案与您的用例不匹配,因此您确实需要使这些消息消失,before它们会进入系统日志),我认为您有两个选项:

.1. 修改源码。

也不要这样做。太多的开销和风险——在发布漏洞和升级能力之间有太多的延迟。

.2. 将sshd其输出发送到其他地方,然后自己将其发送到系统日志。

FreeBSD 允许您使用值指定sshd在启动时应传递给/etc/rc.conf或的参数。告诉使用选项(调试)和选项(记录到标准错误)运行:/etc/rc.conf.localsshd_flagssshd-d-e

sshd_flags="-d -e"
Run Code Online (Sandbox Code Playgroud)

然后,您可以将输出通过管道传输到 Perllogger或 Perl Sys::Syslog(使用包装器来清理任何奇怪的情况)。这并非易事,因为告诉守护进程非守护进程意味着您必须自己重新创建许多功能。如果需要,我可以提供更多详细信息。

但最好的选择是过滤。

  • 绝对不要修改源代码,因为这可能违反提供商的条款,并可能导致一些非常糟糕的事情(也许提供商的应用程序依赖于您尝试修改的功能)。另外,假设他处于典型的托管环境中,他可能对运行的服务没有太多控制权(我的托管提供商没有给予我足够的权限来修改系统配置文件或服务)。 (2认同)