Я хотел бы проанализировать файлы почтовых журналов, которые изначально выглядели так:
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 [user@domain.com] (invalid password)
для ключевых слов: "неверный пароль" или "ошибка аутентификации"
Цель состоит в том, чтобы отсортировать их либо по «OIP» (исходный IP-адрес), либо по учетной записи пользователя MAIL, чтобы увидеть в первом случае атакующий IP, а во втором случае, учетная запись пользователя подвергается атаке.
Это должны быть 2 командные строки (они будут включены в мой сценарий bash для упрощения администрирования почтовых серверов).
Я пришел к следующему:
cat /opt/zimbra/log/mailbox.log | grep "invalid password" | awk -F " " '{print $1 $2 $5 $11 }'
... но я застрял там. Я не знаю, как дважды разобрать IP-адрес атакующего из "oid =" и сделать некоторые "uniq" и "sort" по результатам. Я пытаюсь получить такие результаты:
Случай 1 - отображать атакующие IP-адреса, отсортированные по количеству неверных логинов:
37 1.2.3.4
16 3.4.5.6
8 6.7.8.9
Случай 2 - отображение атакованных почтовых аккаунтов, отсортированных по количеству неверных логинов:
128 info@domain.com
37 user@domain.com
6 user2@domain.com
Затем я запущу вручную однострочник (см. Выше) для более глубокого анализа, но для обзора не могли бы вы помочь мне с командами AWK, cut или sed, пожалуйста?
Использование пространства или точка с запятой в качестве разделителя полей, вы можете сделать
$ awk -F '[ ;]' '/authentication failed/ {print $7, $17}' file
oip=168.232.24.2 [user@domain.com]
Или perl
$ perl -lne '/authentication failed|invalid password/
and /oip=(.+?);.*for \[(.+?@.+?)\]/
and print "$1 $2"' file
168.232.24.2 user@domain.com
Используйте любой из них, затем sort | uniq -c
выход
$ 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 [user@domain.com] (invalid password)
$ cat $$ | egrep '(authentication failed|invalid password)' | egrep -o "[[a-z]*@[a-z]*\.[a-z]*]" | sort | uniq -c
1 [user@domain.com]
$ 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
$