我想要的是:每次有人成功登录我的 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.html和http://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 目标实现该功能)