Еще несколько вариантов:
Perl
$ bt-device --list | perl -lne 'print $ 1 if /Mouse.*\((.*)\)/' file
34: 88: 5D: 3F: 1B: 88
Во многих инструментах, При работе с регулярными выражениями круглые скобки ( ()
) используются для захвата совпадающего шаблона таким образом, чтобы его можно было использовать позже. В Perl первый такой захваченный шаблон - $ 1
, второй $ 2
и т. Д. Здесь мы ищем строку, которая соответствует Mouse
, а затем строку в круглые скобки. Содержимое круглых скобок сохраняется как $ 1
и печатается, если соответствие было успешным.
grep + cut + tr
$ bt-device --list grep Mouse | cut -d '(' -f2 | tr -d ')'
34: 88: 5D: 3F: 1B: 88
Здесь мы используем grep
чтобы найти соответствующую строку (строки), вырезать
, чтобы напечатать второе (
-определенное поле ( 34: 88: 5D: 3F: 1B: 88)
) и tr
для удаления завершающего )
.
Ради удовольствия, вот решение с join
:
$ join -1 1 -2 2 -o 2.4 <(echo "Mouse (") <(bt-device --list) 2> / dev / null | tr -d '()'
34: 88: 5D: 3F: 1B: 88
Я использую fail2ban. Вы можете отредактировать /etc/fail2ban/filter.d/postfix.conf, чтобы отловить все дальнейшие попытки. Я слежу за файлами /var/log/mail.log в поисках подозрительного поведения и при необходимости вношу изменения в postfix.conf. Вот мой postfix.conf, который отлавливает строку, о которой вы упомянули выше.
[INCLUDES]
before = common.conf
[Definition]
_daemon = postfix/smtpd
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
^%(__prefix_line)sNOQUEUE: reject: VRFY from \S+\[<HOST>\]: 550 5\.1\.1 .*$
^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 454 4\.7\.1 :*$
reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
reject: RCPT from unknown\[<HOST>\]: 454 4.7.1
connect from unknown\[<HOST>\]
ignoreregex =
Вы также можете добавить
warning: non-SMTP command from unknown\[<HOST>\]:: GET / HTTP/1.0
если вышеупомянутое не поймает все.
Если вы хотите запретить исторические IP-адреса вручную, используйте IP-таблицы.
С уважением и удачи,
Matt
Нет необходимости блокировать "команду". Если вы обнаружите, что кто-то выполняет массу недопустимых команд, заблокируйте этот IP-адрес. Недопустимая команда ничего не повредит и в некоторых случаях практична (например, поддерживает клиентов с ошибками).