Рейтинг:0

Использовать значение из регулярного выражения fail2ban

флаг es

Я пытаюсь отправить электронное письмо мне и пользователю о том, что кто-то пытался войти в свой ssh ​​и потерпел неудачу - IP-адрес был забанен. Но я не понимаю, как я могу использовать переменную в электронном письме, которое я пытаюсь отправить.

Sendmail настроен правильно, так как электронные письма отправляются без проблем.

Вот моя конфигурация jail.local

[сшд]
порт = ssh
путь к журналу = %(sshd_log)s
бэкенд = %(sshd_backend)s
action = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="% (цепочка) с"]
             %(mta)s-whois-lines-ssh[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain= "%(цепочка)s"]

А вот мой action.d/sendmail-whois-lines-ssh.conf

[ВКЛЮЧАЕТ В СЕБЯ]

до = sendmail-common.conf
         helpers-common.conf

[Определение]

невосстановлен = 1
actionban = ( printf %%b "Subject: [Fail2Ban] <name>: забанен <ip> с <fq-hostname>
            Дата: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
            От: <имя отправителя> <<отправитель>>
            Кому: <назначение>, <F-USER>@mydomain.cz\n
            Привет,\n
            IP <ip> был только что забанен Fail2Ban после
            <сбои> попыток против <имя>.\n\n
            Вот дополнительная информация о <ip> :\n
            `/usr/bin/whois <ip> || эхо отсутствующей программы whois`\n\n
            Строки, содержащие ошибки <ip>\n";
            %(_grep_logs)s;
            printf %%b "\n
            С уважением,\n
            Fail2Ban") | /usr/sbin/sendmail -f <отправитель>.mydomain.cz <назначение> <F-USER>@mydomain.cz

[В этом]
имя = по умолчанию
путь к журналу = /dev/null

Электронное письмо, отправленное мне, в порядке, потому что оно правильно взято из конфигурации, но <F-USER> не имеет значения, поэтому оно отправляется на @mydomain.cz

Как я могу получить значение, чтобы я мог отправить электронное письмо пользователю?

РЕДАКТИРОВАТЬ Регулярное выражение, попадающее в SSH, таково:

^pam_unix\(sshd:auth\):\s+ошибка аутентификации;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s *ruser=<F-USER>\S*</F-USER>\s*rhost=<HOST>\s.*%(__suff)s$
флаг es
В данном контексте это не имеет значения, на самом деле пусто, поэтому, если электронное письмо не отправляется в любом случае
Рейтинг:1
флаг il

Я пытаюсь отправить электронное письмо мне и пользователю, что кто-то пытался войти в систему по ssh и не смог

У меня мало сомнений, связанных с этим подходом, например, из-за определенной «уязвимости», которая может быть вызвана этим - RE <F-USER>\S*</F-USER> будет соответствовать чему-либо до первого пробела, поэтому, например, если совпало «имя пользователя», будет кто-то@example.com, тест ваша почта также будет отправлена ​​на кто-то@example.com, который может быть не пользователем вашего домена. Я также мог бы представить другие сценарии, поскольку вы пытаетесь использовать сторонний ввод (из журнала) в почтовом действии, поэтому лучше убедитесь, что на это не влияет какая-либо возможность внедрения (также обратите внимание GHSA-m985-3f3v-cwmm Например).

Регулярное выражение, попадающее в SSH, - это...

failregex также должен содержать <F-USER>...</F-USER> чтобы зафиксировать значение, которое будет сохранено как имя пользователя, и оно должно соответствовать чему-то.

Здесь пример того, как это выглядит в текущей версии (обратите внимание, что это не сбой RE из-за <F-NOFAIL> тег, это просто помощник для поиска IP для сообщений без IP, см. вопросы/3189#issuecomment-999571654 для подробностей).

Тем самым <F-ALT_USER> является альтернативным именем пользователя и будет хранить его в F-ПОЛЬЗОВАТЕЛЬ захваченная группа в билете, если часть <F-USER>...</F-USER> будет соответствовать пустому значению.

Возможно (как в issue/3189 выше) у вас также неправильный бэкенд, поэтому переключитесь на системад поможет вам сопоставить его с помощью другого sshd-regex.

Что касается вашего регулярного выражения, его можно изменить, как здесь (обратно перенесено из текущего sshd-фильтра):

- ^pam_unix\(sshd:auth\):\s+ошибка аутентификации;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\ s*ruser=<F-USER>\S*</F-USER>\s*rhost=<HOST>\s.*%(__suff)s$
+ ^pam_unix\(sshd:auth\):\s+ошибка аутентификации;(?:\s+(?:(?:logname|e?uid|tty)=\S*)){0,4}\s+ ruser=<F-ALT_USER>\S*</F-ALT_USER>\s+rhost=<HOST>(?:\s+user=<F-USER>\S*</F-USER>)?%( __suff)s$

Но это скорее РЭ pam-универсальный фильтр/тюрьма, как уже было сказано в выпуски/3189, так что не совсем правильно использовать это для sshd jail (обычно вы увидите разные сообщения в журнале или auth.log).

В любом случае для более глубокого изучения нужен пример сообщения (а лучше выдержка из лога со всеми сообщениями sshd-сессии, вызвавшими бан).

флаг es
Большое спасибо за исчерпывающий ответ!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.