这个问题出现在 pop-before-smtp / Postfix / Dovecot 的上下文中,但是如果我知道 Perl 字符串解析,我可以自己想出一个答案。但是,我很迷茫,我什至不知道确切的问题。以机智:
我们已经使用 Postfix 很长时间了,并且有点迷上了它。现在我们需要“进入现代时代”,让人们从我们的 SMTP 服务器发送电子邮件,即使他们在我们的网络之外。因此,在完成这项工作的任务中,我找到了 pop-before-smtp。
你可以在这里找到它。
所以,我已经配置好了,但测试失败了。我使用此处的说明对其进行了故障排除,并确定尝试解析日志的 Perl 似乎不正确。我们使用 Dovecot 作为我们的 IMAP / POP 服务器,并且在配置文件中给出了三个选项。这是配置文件的摘录,显示了三个集合:
# For Dovecot POP3/IMAP when using syslog.
#$pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
# 'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
#$out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
# 'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
# For Dovecot POP3/IMAP when it does its own logging.
##$logtime_pat = '(\d\d\d\d-\d+-\d+ \d+:\d+:\d+)';
#$pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
# 'Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
#$out_pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
# 'Disconnected.*? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
# For older Dovecot POP3/IMAP when it does its own logging.
#$pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
# 'Login: \S+ \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';
#$out_pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
# 'Disconnected.*? \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';
应该取消注释适用的那些,但是,它们都不起作用。
我推测“pat”是登录模式,out-pat 是注销或以其他方式断开连接的模式。
实际的日志记录格式明显不同于这三种中的任何一种,但它们很接近。以下是一对示例:
Mar 11 17:53:55 imap-login: Info: Login: user=<username>, method=PLAIN, rip=208.54.4.205, lip=192.168.1.1, TLS
Mar 11 17:59:10 IMAP(username): Info: Disconnected: Logged out bytes=352/43743
使用 POP 时,'imap-login' 被 'pop-login' 替换,而在注销时,'POP' 替换 'IMAP' - 为什么我不能说大小写的变化!
重要数据是:时间戳、用户名以及登录时的“远程”ip(“rip”)。
如果有足够的时间,我也许能够拼凑出一些可行的东西,但由于我实际上并不了解 Perl,所以这有点困难。请帮助我编写新规则来解析与我们的 Dovecot 包一起使用的日志记录输出。