Syslog-ng用recursion日志填满磁盘

我有一些syslog-ng的问题,我已经configuration了一个服务器,从不同的远程设备recive日志。

我的syslog-ng恶魔configuration为基于文件的pipe道中的交换日志,不同的进程将刷新此pipe道(将数据插入到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','...');'); 

并继续recursion地发送相同的日志,在msg字段中发布查询。

Syslog-ng套接字绑定在一个由RSA证书locking的VPNnetworking上,而远程将日志发送到另一台服务器也没有问题(所以我认为不太可能的是马勒斯攻击或一个疯狂的远程极端垃圾邮件login到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)); 

我相信你已经在你的日志中写入了一个SQL注入漏洞 。

如果你的$MSG包含一个'$MSG将被提前终止,无论内容是什么,几乎肯定会严重混淆你的pipe道接收器或数据库服务器。

syslog-ng声称它可以使用sql()指令插入到SQL数据库中。 我build议使用这种方法,因为syslog-ng可以轻松使用对SQL注入攻击免疫的参数化SQL查询。 (我很喜欢把URL粘贴到文档中,但是Balabit网站太糟糕了 ,我放弃了,我更熟悉rsyslog, 他们的文档更好 – 如果改变syslog守护进程是可以接受的,考虑更改为rsyslog。具有可以容忍的文档很重要…)