AWK,cut 或 ced...双重解析邮件日志以获取身份验证失败

AWK,cut 或 ced...双重解析邮件日志以获取身份验证失败

我想解析邮件日志文件,它原来是这样的:

2018-10-23 23:27:51,026 INFO  [ImapServer-4] [ip=10.10.11.50;oip=168.232.24.2;via=10.10.11.50(nginx/1.7.1);ua=Zimbra/8.8.7_GA_1964;cid=127325;] imap - authentication failed for [[email protected]] (invalid password)

对于关键字,可以是:“密码无效”或“验证失败”

目标是按“OIP”(原始 IP)或用户 MAIL 帐户对它们进行排序,以便在第一种情况下查看攻击 IP,在第二种情况下查看哪个用户帐户受到攻击。

这些应该是 2 个命令行(将它们合并到我的 bash 脚本中,以便更轻松地管理邮件服务器)。

我得到的结果是这样的:

cat /opt/zimbra/log/mailbox.log | grep "invalid password" | awk -F " " '{print $1 $2 $5 $11 }'

...但我被困在那里。我不知道如何从“oid=”双重解析攻击者 IP,并对结果进行一些“uniq”和“sort”。我试图得到这样的结果:

案例 1 - 显示攻击 IP,按无效登录次数排序:

37    1.2.3.4
16    3.4.5.6
 8    6.7.8.9

案例 2 - 显示受到攻击的 MAIL 帐户,按无效登录次数排序:

128   [email protected]
 37   [email protected]
  6   [email protected]

然后,我将手动运行我的(上面)单行代码以进行更深入的分析,但为了进行概述,您能否帮助我使用 AWK 或 cut 或 sed 命令?

答案1

$ cat $$ 
2018-10-23 23:27:51,026 INFO  [ImapServer-4] [ip=10.10.11.50;oip=168.232.24.2;via=10.10.11.50(nginx/1.7.1);ua=Zimbra/8.8.7_GA_1964;cid=127325;] imap - authentication failed for [[email protected]] (invalid password)
$ cat $$ | egrep '(authentication failed|invalid password)' | egrep -o "[[a-z]*@[a-z]*\.[a-z]*]" | sort | uniq -c
      1 [[email protected]]
$ cat $$ | egrep '(authentication failed|invalid password)' | egrep -o "oip=[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | sort | uniq -c
      1 oip=168.232.24.2
$

答案2

利用空间或者使用分号作为字段分隔符,你可以这样做

$ awk -F '[ ;]' '/authentication failed/ {print $7, $17}' file
oip=168.232.24.2 [[email protected]]

或者 perl

$ perl -lne '/authentication failed|invalid password/ 
         and /oip=(.+?);.*for \[(.+?@.+?)\]/ 
         and print "$1 $2"' file
168.232.24.2 [email protected]

使用其中任何一个,然后sort | uniq -c输出

相关内容