如果这听起来可能让您感到困惑,我很抱歉。
我弟弟让我帮他搭建一个网络服务器,因为他想自己托管自己的网站,不再使用托管服务。问题出在 ISP。除了动态 IP 方案外,他们还阻止端口 25 上的传出 TCP 连接,而是提供不需要身份验证的外部服务器。
对于 Web 服务器设置,我选择了 FreeBSD,因为我更喜欢 jails 而不是虚拟机或直接在主机上运行服务。它使备份和安全管理变得容易得多(至少对我来说)。
目前我已经完全禁用了 sendmail,但我希望再次启用它,以便用户可以在必要时使用恢复密码功能。我的问题是,如何配置 sendmail 以使用外部 SMTP 而无需用户或密码验证?
预先感谢您的帮助!
答案1
您的帖子中的两条评论都是正确的。以下是更全面的回复。
(TL;DR 见底部)
以 root 身份开始对您的目录进行安全复制/etc/mail
:
# cd /etc
# cp -Rp mail mail.safety
为了便于说明,我假设您没有对电子邮件配置进行任何自定义,事实上,我们将首先“清零”您现有的 sendmail 文件,以确保我们从头开始。如果您确实进行了自定义,不用担心,我们首先备份了这些文件。您可以稍后重新应用您的自定义。
首先进入mail
目录并删除现有*.cf
文件:
# cd mail
# rm *.cf
在 FreeBSD 系统中,除了随操作系统分发的库存和文件外,还通常有一个$(hostname).mc
文件和一个 文件。以下是具有简单主机名的系统上的输出:$(hostname).submit.mc
freebsd.mc
freebsd.submit.mc
ls
test
# ls *.mc
freebsd.mc freebsd.submit.mc test.mc test.submit.mc
您可能会看到类似的文件,但引用的是您自己的机器的主机名。其背后的原因是这些freebsd*.mc
文件代表了 sendmail 配置的基本起点。这些$(hostname)*.mc
文件(可能)是特定于您的系统的自定义文件。虽然操作系统升级可能会覆盖这些freebsd*.mc
文件,但它不会触及您的主机特定文件,因此您精心定制的配置不会被操作系统升级覆盖。您需要做的就是将更改限制在文件上$(hostname)*.mc
,而不要freebsd*.mc
触及参考文件。
在本教程的其余部分中,我将使用字符串test
来表示您应该将机器的主机名作为文件名的一部分看到的位置。
了解了这些背景知识后,我们继续吧。
删除您的$(hostname)*.mc
文件,以便Makefile
从已知良好的freebsd*.mc
文件中克隆您的配置。
# rm -v $(hostname)*.mc
test.mc
test.submit.mc
现在我们已经删除了旧的配置文件,让我们根据操作系统提供的文件来make
创建新的配置文件:freebsd.mc
freebsd.submit.mc
# make
cp -f freebsd.mc test.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 test.mc > test.cf
cp -f freebsd.submit.mc test.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 test.submit.mc > test.submit.cf
这实际上比我们需要的要多一点,但没关系。重要的是复制Makefile
到freebsd.mc
和$(hostname).mc
复制
freebsd.submit.mc
到$(hostname).submit.mc
。
现在,让我们检查一下该$(hostname).mc
文件。在第 89 行或附近(我正在查看的 FreeBSD 12 的文件)是SMART_HOST
前面的作者提到的指令:
# grep SMART_HOST $(hostname).mc
dnl define(`SMART_HOST', `your.isp.mail.server')
行首的“dnl”表示该行已被注释掉。DNL 可以理解为“丢弃(或忽略)直到换行符”。
编辑您的.mc
文件:
# vi $(hostname).mc
并将该行改为:
define(`SMART_HOST', `smtp.example.com')
您的 ISP 告诉您使用的服务器的 DNS 名称在哪里smtp.example.com
。请确保也删除“dnl”。保存文件并退出。
现在运行make
重新生成 $(hostname)*.cf 文件:
# make
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 test.mc > test.cf
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 test.submit.mc > test.submit.cf
运行make install
以将文件复制$(hostname)*.cf
到 sendmail 期望的标准名称(sendmail.cf
和submit.cf
):
# make install
install -m 444 test.cf /etc/mail/sendmail.cf
install -m 444 test.submit.cf /etc/mail/submit.cf
重新启动sendmail:
# make restart
最后检查/var/log/maillog
确保没有错误。
总结
# cd /etc
# cp -Rp mail mail.safety
# cd mail
# rm *.cf
# rm -v $(hostname)*.mc
# make
# vi $(hostname).mc
将该行改为SMART_HOST
:
define(`SMART_HOST', `smtp.example.com')
并继续:
# make
# make install
# make restart