syslog-ng 3.5 flush_lines 无法与 smtp 配合使用

syslog-ng 3.5 flush_lines 无法与 smtp 配合使用

我想要的是:每次有人成功登录我的 Ubuntu 14.04 LTS 服务器时都会自动发送电子邮件。每次我登录时,/var/log/auth.log 都会写入 2 行。示例:

Jul 22 13:55:49 server sshd[1234]: Accepted publickey for me from 12.34.56.78 port 12345 ssh2: RSA <<key signature elided>>
Jul 22 13:55:49 server sshd[1234]: pam_unix(sshd:session): session opened for user me by (uid=0)

我希望收到 1 封详细介绍此活动的电子邮件,而不是目前收到的 2 封。

我已经安装了

[me@server ~]$ dpkg -l | grep syslog
ii  syslog-ng                             3.5.3-1          
ii  syslog-ng-core                        3.5.3-1
ii  syslog-ng-mod-geoip                   3.5.3-1
ii  syslog-ng-mod-json                    3.5.3-1
ii  syslog-ng-mod-mongodb                 3.5.3-1
ii  syslog-ng-mod-smtp                    3.5.3-1
ii  syslog-ng-mod-sql                     3.5.3-1
[me@server ~]$ dpkg -l | grep exim
ii  exim4                                 4.82-3ubuntu2
ii  exim4-base                            4.82-3ubuntu2
ii  exim4-config                          4.82-3ubuntu2
ii  exim4-daemon-light                    4.82-3ubuntu2

我添加的内容

[me@server ~]$ cat /etc/syslog-ng/conf.d/smtp_for_ssh.conf 
filter f_ssh_login {
    host("server") and filter(f_auth) and not filter(f_cron);
};

destination d_smtp {
    smtp(
        host("localhost")
        port(25)
        from("Syslog-NG Alert Service" "[email protected]")
        to("Me" "[email protected]")
        subject("[ALERT] Important log message of $LEVEL condition received from $HOST/$PROGRAM!")
        body("Hi!\nThe syslog-ng alerting service detected the following important log message:\n $MSG\n-- \nSyslog-NG\n")
        log_fifo_size(5)
    );
};

log {
    source(s_src);
    filter(f_ssh_login);
    destination(d_smtp);
};

这是从阅读中拼凑起来的http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.4-guides/en/syslog-ng-ose-v3.4-guide-admin/html/configuring-destinations-smtp.htmlhttp://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.4-guides/en/syslog-ng-ose-v3.4-guide-admin/html/reference-destination-smtp.html

我还做了哪些改变

[me@server syslog-ng]$ cat syslog-ng.conf 
@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"

# Syslog-ng configuration file, compatible with default Debian syslogd
# installation.

# First, set some global options.
options { chain_hostnames(off); flush_lines(5); use_dns(no); use_fqdn(no);
      owner("root"); group("adm"); perm(0640); stats_freq(0);
      bad_hostname("^gconfd$");
};

与默认 syslog-ng.conf 文件相比,我将其更改为,flush_lines(0);flush_lines(5)尝试将一些信息批量处理在一起。这可能无法用于普通日志记录(我还没有验证 syslog-ng 是否每次向基于磁盘的日志文件写入 5 行),但它确实不是向我发送电子邮件时正常工作。

每次进行上述更改后,syslog-ng 都已重新启动。

第二个链接中的文档似乎暗示log_fifo_size(5)destination d_smtp将收集 5 行日志消息到一封电子邮件中。因此,当我使用 SSH 登录并将上面的 2 行记录到 时/var/log/auth.log,我应该收到 1 封电子邮件。但实际上我收到了 2 封。

有什么神奇的咒语可以让 syslog-ng 每次登录只发送一封电子邮件?

答案1

我将添加一个过滤器session opened for user(使用match()),将其限制到特定的日志行,并且 ssh 不会触发电子邮件。

flush-lines()syslog-ng 中未针对 SMTP 目标实现该功能)

相关内容