这个问题出现在pop-before-smtp / Postfix / Dovecot的上下文中,但是如果我知道Perl字符串解析,我可以自己想出答案。但是,我迷路了,我甚至不知道确切的问题。即:
我们一直在使用Postfix很长一段时间,并且有点迷上它。现在我们需要“进入现代时代”并让人们发送来自我们的SMTP服务器的电子邮件,即使它们在我们的网络之外。因此,在完成这项工作的任务中,我发现了pop-before-smtp。
你可以找到它here。
所以,我已经完成所有配置但是测试失败了。我使用方向here来解决问题,并确定试图解析日志的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软件包使用的日志输出。
答案 0 :(得分:1)
Perl正则表达式的(:?..
部分要求集群,但不是捕获;这允许整个组作为组匹配或忽略,而不影响捕获组编号;所有行都准确捕获一个字段,允许IP。 (这有点奇怪,我可能已经预期用户名和IP,但从长远来看这可能会更容易。)
# For Dovecot POP3/IMAP when using syslog.
$pat = '^[LOGTIME] \S+ (?:imap|pop3)-login: Info: ' .
'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
# not necessary? see comment header START OF PATTERNS
# $out_pat = '^[LOGTIME] \S+ (?:IMAP|POP3)\(\S+\): Info: ' .
# 'Disconnected.*';
我删除了dovecot
件,因为它们不在你的输入中。我在这两行添加了Info:
。我已将$out_pat
修改为使用IMAP(username)
而不是原来的imap-login
。 (如果用户名有空格,\S+
的使用将会中断。由于这个假设是在文件的其他地方进行的,我希望它没问题。)
由于不再需要为注销行捕获任何IP地址,因此最好不定义$out_pat
- START OF PATTERNS
注释块包含短语如果您选择的条目也提供$out_pat
,您还应该取消注释该变量,这样我们就可以跟踪仍然连接到服务器的用户(例如,Thunderbird缓存打开的IMAP连接)。 / em>的
我没有对此进行过测试,但我对它有很好的感受。