![使用 sendmail 通过 Postfix 中继发送通知(Fail2Ban)](https://linux22.com/image/951883/%E4%BD%BF%E7%94%A8%20sendmail%20%E9%80%9A%E8%BF%87%20Postfix%20%E4%B8%AD%E7%BB%A7%E5%8F%91%E9%80%81%E9%80%9A%E7%9F%A5%EF%BC%88Fail2Ban%EF%BC%89.png)
总体而言,我对 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
。