【问题标题】:Syslog-ng forward raw log onlySyslog-ng 仅转发原始日志
【发布时间】:2015-05-04 05:17:35
【问题描述】:

我一直在尝试使用 syslog-ng 将日志从防火墙转发到 SIEM,但问题是我只想转发原始原始日志,而没有 syslog-ng 添加的附加标头。我有以下 syslog-ng conf 文件。

@version: 5.2
#Default configuration file for syslog-ng.
#
# For a description of syslog-ng configuration file directives, please read
# the syslog-ng Administrator's guide at:
#
# http://www.balabit.com/sites/default/files/documents/syslog-ng-pe-5.2-       guides/en/syslog-ng-pe-v5.2-guide-admin/html-single/index.html
#
@include "scl.conf"

options {
};

######
# sources
source s_local {
# message generated by Syslog-NG
internal();
};

source s_udp {
udp(ip(X.X.X.X)
flags(no-parse)
port(514));
};

######
#templates

template no_header {
template($MSG); template_escape(no);
};

######
#destinations

destination d_siem {x
syslog("X.X.X.X" port(514) template(no_header));
};

log { source(s_udp); destination(d_siem);};

通过以上内容,我已经设法删除了大部分 syslog-ng 的标头,但我无法删除以下粗体字

**531 <13>1 2015-03-03T17:35:12+04:00 X.X.X.X - - - -** <189>date=2015-03-03 time=05:27:43 devname=XXX-X-X device_id=XXXX log_id=XXXX type=XXX subtype=XXX pri=notice vd= src=X.X.X.X src_port=X src_int="XXX" dst=X.X.X.X dst_port=XXX dst_int="XXX" SN=XXXXX status=XXX policyid=X dst_country="XXXX" src_country="XXXX" dir_disp=XXX tran_disp=XXX tran_sip=X.X.X.X tran_sport=XXX service=XXX proto=X duration=XXX sent=XXX rcvd=XXX sent_pkt=XXX rcvd_pkt=XXX

Syslog-ng 的文档指出:

($MSGHDR$MSG 部分是一起写的,因为$MSGHDR 宏包含一个尾随空格。)

如果在我的 conf 中我将模板从 $MSG 更改为 $MSGHDR,我在 SIEM 中收到的唯一内容如下:

531 <13>1 2015-03-03T17:35:12+04:00 X.X.X.X - - - -

但如果我再次使用$MSG 或$MSGONLY 或$MESSAGE,我会再次得到:

**531 <13>1 2015-03-03T17:35:12+04:00 X.X.X.X - - - -** <189>date=2015-03-03 time=05:27:43 devname=XXX-X-X device_id=XXXX log_id=XXXX type=XXX subtype=XXX pri=notice vd= src=X.X.X.X src_port=X src_int="XXX" dst=X.X.X.X dst_port=XXX dst_int="XXX" SN=XXXXX status=XXX policyid=X dst_country="XXXX" src_country="XXXX" dir_disp=XXX tran_disp=XXX tran_sip=X.X.X.X tran_sport=XXX service=XXX proto=X duration=XXX sent=XXX rcvd=XXX sent_pkt=XXX rcvd_pkt=XXX

我只希望 syslog-ng 转发的是:

<189>date=2015-03-03 time=05:27:43 devname=XXX-X-X device_id=XXXX log_id=XXXX type=XXX subtype=XXX pri=notice vd= src=X.X.X.X src_port=X src_int="XXX" dst=X.X.X.X dst_port=XXX dst_int="XXX" SN=XXXXX status=XXX policyid=X dst_country="XXXX" src_country="XXXX" dir_disp=XXX tran_disp=XXX tran_sip=X.X.X.X tran_sport=XXX service=XXX proto=X duration=XXX sent=XXX rcvd=XXX sent_pkt=XXX rcvd_pkt=XXX

我已经用尽了以下选项:

 options {
 #keep-hostname(yes);
 #chain-hostnames(no);
 #use_fqdn(no);
 #create_dirs(no);
 #long_hostnames(off);
 #flush_lines(0);
 #use-dns(no);
 #keep_timestamp(yes);
 #flags(store-legacy-msghdr);
 };

以上都没有影响。

我在另一个论坛上读到,可以使用重写和设置将锁定(不可更改)变量的值放入其他变量,然后 使用 PCRE 等编辑新变量的值,以仅包含所需的数据,但我不确定如何实现这一点。

有人可以帮帮忙吗?

【问题讨论】:

    标签: logging syslog-ng


    【解决方案1】:

    您应该使用tcp() 目标而不是syslog():

    destination d_siem {
    tcp("X.X.X.X" port(514) template(no_header));
    };
    

    syslog() 用于 RFC5424 系统日志,tcp 用于旧版。

    【讨论】:

    • 您好,感谢您的回答。使用 tcp 它在一开始的消息中省略了一点,但它与 udp 完美配合!这可能是因为防火墙使用 udp 发送日志。非常感谢您提供了很多帮助。
    • 实际上tcp() 现在已经过时,取而代之的是network()。见:balabit.com/sites/default/files/documents/…
    【解决方案2】:

    no_header 对我不起作用

    配置

    syslog-ng 3.7 
    Centos 6.4 
    

    以下对我有用,我用过

    tcp("*.*.*.*" port(5140) template("$MSG"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多