使用 sendmail 通过 Postfix 中继发送通知(Fail2Ban)

使用 sendmail 通过 Postfix 中继发送通知(Fail2Ban)

总体而言,我对 Ubuntu/Linux 还是个新手,但我对通过 SMTP 发送邮件的一般工作原理很熟悉。因此,目前我在同一子网中运行了两台 Ubuntu 服务器 ( 10.XXX.XXX.XXX/26):

服务器1

Ubuntu 20.04.6 LTS
10.XXX.XXX.0

服务器2

Ubuntu 22.04.2 LTS
10.XXX.XXX.1

Postfix 邮件服务器(使用安装邮件系统) 安装在服务器1并且可通过 公开访问smtp.mydomain.dev。我的邮件客户端设置为使用此服务器发送/接收邮件,并且工作正常。我还可以webmail.mydomain.dev通过在同一服务器上运行的 Nginx 登录并从那里查看/发送邮件。

我刚刚开始设置服务器2我正在尝试配置失败禁止使用 Postfix 发送通知服务器1,但这些通知都没有到达我的收件箱。

在我多次尝试让它工作的过程中,我曾是能够通过命令行成功发送电子邮件到我的“工作”帐户服务器2

echo "Testing my sendmail relay" | mail -s 'Relay Test' [email protected]

不幸的是,我现在肯定把事情搞得更糟了,因为此时它甚至已经停止工作了。

我经历了两次配置更新服务器1服务器2。我现在看到的内容基本上如下:

服务器2

sendmail.mc


define(`SMART_HOST',`[smtp.mydomain.dev]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
# FEATURE(`authinfo', `hash -o /etc/mail/smtp-auth-creds.db')dnl
# define(`confAUTH_OPTIONS', `A p')dnl
# TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
# define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

并编译/重启

sudo make -C /etc/mail
sudo systemctl restart sendmail

我已经在 Postfix 中设置了一个“中继用户”服务器1[email protected]),所以我根据找到的一篇文章设置了 sendmail -如何配置 Sendmail 以使用 SMTP 中继- 使用身份验证凭据进行测试。这似乎也没什么用,这就是为什么最后四行目前被注释掉的原因。

/etc/mail/auth-creds


AuthInfo:smtp.mydomain.dev "U:[email protected]" "P:123456789nTx+5$wZa01IWMG@domDEV" "M:PLAIN"

并创建哈希

makemap hash smtp-auth-creds < smtp-auth-creds

至于Fail2Ban配置:

jail.conf


[DEFAULT]
ignoreip    = 127.0.0.1 127.0.0.0/8 24.XXX.XXX.XXX/27 10.XXX.XXX.XXX/26 192.168.155.0/24
findtime    = 3600
maxretry    = 3
bantime     = -1
mta         = sendmail
action      = %(action_mwl)s
destemail   = [email protected]
sender      = [email protected]

这些行是从另一个通过我的公司 Exchange 服务器(Microsoft 365)中继邮件的 Ubuntu 服务器获取并调整的,并且似乎运行正常。

服务器1

postfix/main.cf


# hostname
myhostname = smtp.mydomain.dev
myorigin = smtp.mydomain.dev
mydomain = smtp.mydomain.dev

# trusted SMTP clients which are allowed to relay mail through Postfix.
#
# Note: additional IP addresses/networks listed in mynetworks should be listed
#       in iRedAPD setting 'MYNETWORKS' (in `/opt/iredapd/settings.py`) too.
#       for example:
#
#       MYNETWORKS = ['xx.xx.xx.xx', 'xx.xx.xx.0/24', ...]
#
mynetworks = 127.0.0.1 24.XXX.XXX.XXX/27 10.XXX.XXX.XXX/26 192.168.155.0/24 [::1]

# Accepted local emails
mydestination = $myhostname, localhost, localhost.localdomain

我确保10.XXX.XXX.XXX/26在此处添加了网络。注意到上面的评论,我查看了iredapd/settings.py,但找不到该MYNETWORKS部分,所以我只是将其添加到末尾:

ALLOWED_LOGIN_MISMATCH_LIST_MEMBER = True
ALLOWED_LOGIN_MISMATCH_SENDERS = ['[email protected]']
MYNETWORKS = ['24.XXX.XXX.XXX/27', '10.XXX.XXX.XXX/26', '192.168.155.0/24']

我一直在研究这些配置设置,试图找出我遗漏或搞砸了什么,但我现在完全不知所措。Fail2Ban 通知从未通过,但当我曾是能够从命令行发送邮件,无论我尝试server2.mydomain.local哪种变体,它总是附加计算机的主机名()而不是域名:mail

mail -s 'Testing' -r 'SERVER2 <[email protected]>' [email protected]
mail -s 'Testing' -a "From: [email protected]" [email protected]
mail -aFrom:[email protected] -s 'Testing' [email protected]

所以,我现在完全迷茫了,希望能得到正确的指导。我该如何服务器2通过 Postfix 转发其通知邮件消息服务器1? 我绝对肯定我也希望能够对其他服务执行此操作,因此我真的需要找到这个。如果需要更多信息来帮助诊断问题,我会尽力找到并分享。


更新

sendmail.mc因此,我通过将配置切换回使用端口 25 来重新通过命令行发送(我本来想使用端口 587 来保证“安全”,但我以后再考虑这个问题)。我还重新添加了中继身份验证位,因此现在我的sendmail.mc配置如下所示:

dnl # Default Mailer setup
define(`SMART_HOST',`[smtp.mydomain.dev]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 25')dnl
FEATURE(`authinfo', `hash -o /etc/mail/smtp-auth-creds.db')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl

然后重新编译并重新启动:

sudo make -C /etc/mail
sudo systemctl restart sendmail

我测试了向我的工作邮箱 ( [email protected])、我的个人 Gmail 帐户 ( [email protected]) 以及[email protected]我希望接收 Fail2Ban 通知的地址发送邮件。所有邮件都成功发送,尽管 Gmail 将其标记为垃圾邮件,因为发件人仍然显示为[email protected]。从命令行来看,这是有道理的,所以我不会深入研究这一点。

因此,现在要尝试让 Fail2Ban 通知通过。我手动输入了另一台服务器上被禁止的 IP 地址的禁令,并mail.log使用tail。我看到邮件进来了,但显然被拒绝了,所以我仍然不知道某物...

May  5 10:10:45 smtp postfix/postscreen[13274]: CONNECT from [10.XXX.XXX.253]:57996 to [10.XXX.XXX.0]:25
May  5 10:10:45 smtp postfix/postscreen[13274]: WHITELISTED [10.XXX.XXX.253]:57996
May  5 10:10:45 smtp postfix/smtpd[13275]: connect from _gateway[10.XXX.XXX.253]
May  5 10:10:45 smtp postfix/smtpd[13275]: Anonymous TLS connection established from _gateway[10.XXX.XXX.253]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
May  5 10:10:45 smtp postfix/smtpd[13275]: NOQUEUE: reject: RCPT from _gateway[10.XXX.XXX.253]: 554 5.7.1 <[email protected]>: Recipient address rejected: SMTP AUTH is required for users under this sender domain; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<server2.mydomain.local>
May  5 10:10:45 smtp postfix/smtpd[13275]: NOQUEUE: reject: RCPT from _gateway[10.XXX.XXX.253]: 550 5.1.1 <[email protected]>: Recipient address rejected: User unknown; from=<> to=<[email protected]> proto=ESMTP helo=<server2.mydomain.local>
May  5 10:10:46 smtp postfix/smtpd[13275]: disconnect from _gateway[10.XXX.XXX.253] ehlo=2 starttls=1 mail=2 rcpt=0/2 data=0/2 rset=3 quit=1 commands=9/13

我不喜欢假设,但它看起来并没有使用我在中设置的身份验证凭据smtp-auth-creds

相关内容