Syslog-ng 使用递归日志填满磁盘

Syslog-ng 使用递归日志填满磁盘

我对 syslog-ng 有一些问题,我配置了一个从不同远程设备接收日志的服务器。

我的 syslog-ng 守护进程配置为在基于文件的管道中交换日志,不同的进程将刷新该管道(在 mysql 服务器中插入数据)。

有时(每周或每月随机一次) syslog-ng 会发疯并递归记录,不到一分钟就填满我的磁盘。

日志: 正常日志:

    INSERT INTO db.table (data,time,msg)   VALUES ('2011-12-05','09:27','administrator logged in');

当 syslog-ng 出现问题时:

    INSERT INTO db.table (data,time,msg) VALUES ('2011-12-05','09:27','INSERT like INSERT INTO db.table (data,time,msg) VALUES ('2011-12-05','09:27','...');');

并且它继续以递归方式发送相同的日志,并将查询发布在 msg 字段中。

Syslog-ng 套接字绑定在由 RSA 证书锁定的 VPN 网络上,并且远程服务器也将其日志发送到另一台服务器,这没有任何问题(所以我认为不太可能发生恶意攻击或疯狂的远程服务器向 syslog-ng 发送垃圾邮件日志)。

我的服务器上运行的是 CentOS 5.6 和 syslog-ng v2.1.4

我的 syslog-ng 目标规则:

destination file_sql {file("/var/syslog-ng-pipe" template("INSERT INTO logs (host, date, time, msg) VALUES ( '$HOST', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$MSG');\n")suppress(2));

答案1

我相信你已经写过一篇SQL注入漏洞进入你的日志。

$MSG如果您的包含一个,会发生什么情况'$MSG将会过早终止,并且剩下的任何内容几乎肯定会严重混淆您的管道接收器或数据库服务器。

syslog-ng 声称它可以使用指令插入 SQL 数据库sql()。我建议改用这种方法,因为 syslog-ng 可以轻松使用不受 SQL 注入攻击影响的参数化 SQL 查询。(我很想粘贴文档的 URL,但 Balabit 网站是可怕。我放弃了。我更熟悉 rsyslog,而且他们的文档明显更好-- 如果可以更改 syslog 守护进程,请考虑更改为 rsyslog。拥有可容忍的文档很重要...)

相关内容