我正在尝试向我和用户发送电子邮件,有人试图登录他们的 ssh 并失败 - IP 被禁止。但我不明白如何在我尝试发送的电子邮件中使用该变量。
Sendmail 设置正确,因为电子邮件发送没有问题。
这是我的 jail.local 配置
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-lines-ssh[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
这是我的 action.d/sendmail-whois-lines-ssh.conf
[INCLUDES]
before = sendmail-common.conf
helpers-common.conf
[Definition]
norestored = 1
actionban = ( printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from <fq-hostname>
Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
From: <sendername> <<sender>>
To: <dest>, <F-USER>@mydomain.cz\n
Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n\n
Here is more information about <ip> :\n
`/usr/bin/whois <ip> || echo missing whois program`\n\n
Lines containing failures of <ip>\n";
%(_grep_logs)s;
printf %%b "\n
Regards,\n
Fail2Ban" ) | /usr/sbin/sendmail -f <sender>.mydomain.cz <dest> <F-USER>@mydomain.cz
[Init]
name = default
logpath = /dev/null
发送给我的电子邮件很好,因为从配置中正确获取,但 <F-USER> 没有价值,因此它被发送到@mydomain.cz
我怎样才能获得价值,以便能够将电子邮件发送给用户?
编辑 在 SSH 上受到打击的正则表达式是这个:
^pam_unix\(sshd:auth\):\s+authentication failure;\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$
我对这种方法几乎没有疑问,例如可能由此引入的某些“漏洞” - RE
<F-USER>\S*</F-USER>
将匹配任何内容,直到第一个空格,因此例如,如果匹配的“用户名”将是[email protected],test
您的邮件也将被发送到[email protected]
,这可能是不是您域的用户。我还可以想象另一种情况,因为您尝试在邮件操作中使用外部输入(来自日志) - 所以最好确保这不受某些注入可能性的影响(例如,还要注意GHSA-m985-3f3v-cwmm)。failregex 还必须包含
<F-USER>...</F-USER>
以捕获将存储为用户名的值,并且它必须匹配某些内容。这是它在当前版本中的外观示例(请注意,它不是由于
<F-NOFAIL>
标签而导致的失败 RE,它只是为没有 IP 的消息查找 IP 的助手,有关详细信息,请参阅问题/3189#issuecomment-999571654)。因此,如果部分匹配空值,则
<F-ALT_USER>
有一个替代用户名并将其存储到F-USER
票证中捕获的组中。<F-USER>...</F-USER>
也许(就像上面的问题/3189)你也有错误的后端,所以切换到
systemd
可以帮助你使用另一个 sshd-regex 匹配它。与您的正则表达式相关,它可以像这里一样更改(从当前的 sshd-filter 向后移植):
但这更像是
pam-generic
过滤器/监狱的 RE,正如在issues/3189中已经说过的,因此将其用于 sshd 监狱并不完全正确(通常您会在日志或 auth.log 中看到不同的消息)。无论如何,要深入调查,需要消息示例(或者更好的日志摘录,其中包含导致禁令的所有 sshd-session 消息)。