第 2 章 部署和配置 Postfix SMTP 服务器
作为系统管理员,您可以使用邮件传输代理(MTA) (如 Postfix)来配置电子邮件基础架构,以使用 SMTP 协议在主机之间传输电子邮件消息。Postfix 是用于路由和发送邮件的服务器端应用程序。您可以使用 Postfix 建立本地邮件服务器、创建 null-client 邮件转发、使用 Postfix 服务器作为多个域的目的地,或者选择 LDAP 目录而不是文件进行查找。
postfix
软件包在 /etc/postfix/
目录中提供多个配置文件。
要配置电子邮件基础架构,请使用以下配置文件:
-
main.cf
: 包含 Postfix 的全局配置。 -
master.cf
: 指定 Postfix 与各种进程的交互以完成邮件发送。 -
access
:指定访问规则,例如允许连接到 Postfix 的主机。 -
传输
:将电子邮件地址映射到中继主机。 -
别名
:包含邮件协议所需的可配置列表,用于描述用户 ID 别名。请注意,您可以在/etc/
目录中找到此文件。
Postfix 的主要功能:
- 防止常见电子邮件相关威胁的安全功能
- 自定义选项,包括支持虚拟域和别名的选项
2.1. 安装和配置 Postfix SMTP 服务器
您可以将 Postfix SMTP 服务器配置为接收、存储和发送电子邮件消息。如果在系统安装期间没有选择邮件服务器软件包,则 Postfix 默认不可用。执行以下步骤来安装 Postfix:
先决条件
- 您有 root 访问权限。
- 注册您的系统
流程
删除 Sendmail 工具:
dnf remove sendmail
# dnf remove sendmail
Copy to Clipboard Copied! 安装 Postfix:
dnf install postfix
# dnf install postfix
Copy to Clipboard Copied! 要配置 Postfix,请编辑
/etc/postfix/main.cf
文件,并进行以下更改:默认情况下,Postfix 仅在
loopback
接口上接收电子邮件。要将 Postfix 配置为侦听特定的接口,请将inet_interfaces
参数更新为这些接口的 IP 地址:inet_interfaces = 127.0.0.1/32, [::1]/128, 192.0.2.1, [2001:db8:1::1]
inet_interfaces = 127.0.0.1/32, [::1]/128, 192.0.2.1, [2001:db8:1::1]
Copy to Clipboard Copied! 要将 Postfix 配置为侦听所有接口,请设置:
inet_interfaces = all
inet_interfaces = all
Copy to Clipboard Copied! 如果您希望 Postfix 使用与
gethostname()
函数返回的完全限定域名(FQDN)不同的主机名,请添加myhostname
参数:myhostname = smtp.example.com
myhostname = smtp.example.com
Copy to Clipboard Copied! 例如,Postfix 将此主机名添加到它处理的电子邮件的标头中。
如果域名与
myhostname
参数中的不同,请添加mydomain
参数:mydomain = example.com
mydomain = example.com
Copy to Clipboard Copied! 添加
myorigin
参数,并将其设置为mydomain
的值:myorigin = $mydomain
myorigin = $mydomain
Copy to Clipboard Copied! 使用这个设置时,Postfix 使用域名而不是主机名作为本地发送的邮件的源。
添加
mynetworks
参数,并定义允许发送邮件的可信网络的 IP 范围:mynetworks = 127.0.0.1/32, [::1]/128, 192.0.2.1/24, [2001:db8:1::1]/64
mynetworks = 127.0.0.1/32, [::1]/128, 192.0.2.1/24, [2001:db8:1::1]/64
Copy to Clipboard Copied! 如果来自于不受信任的网络(如互联网)的客户端应能够通过这个服务器发送邮件,则必须在后续步骤中配置中继限制。
验证
main.cf
文件中的 Postfix 配置是否正确:postfix check
# postfix check
Copy to Clipboard Copied! 在引导时启用
postfix
服务,并启动它:systemctl enable --now postfix
# systemctl enable --now postfix
Copy to Clipboard Copied! 允许 SMTP 流量通过防火墙并重新载入防火墙规则:
firewall-cmd --permanent --add-service smtp firewall-cmd --reload
# firewall-cmd --permanent --add-service smtp # firewall-cmd --reload
Copy to Clipboard Copied!
验证
验证
postfix
服务是否正在运行:systemctl status postfix
# systemctl status postfix
Copy to Clipboard Copied! 可选:如果输出处于停止、等待或服务没有运行,请重启
postfix
服务:systemctl restart postfix
# systemctl restart postfix
Copy to Clipboard Copied! 可选:在更改
/etc/postfix/
目录中配置文件中的任何选项后,请重新载入postfix
服务以应用这些更改:systemctl reload postfix
# systemctl reload postfix
Copy to Clipboard Copied!
验证系统上本地用户之间的电子邮件通信:
echo "This is a test message" | mail -s <subject> <user@mydomain.com>
# echo "This is a test message" | mail -s <subject> <user@mydomain.com>
Copy to Clipboard Copied! 要验证您的邮件服务器是否没有将来自外部 IP 范围的电子邮件中继到外域,请按照以下提到的流程操作:
-
登录到不在
mynetworks
中定义的子网内的客户端。 - 将客户端配置为使用您的邮件服务器。
-
尝试发送电子邮件到不在您邮件服务器的
mydomain
中指定的域下的电子邮件地址。例如,尝试向non-existing-user@redhat.com
发送电子邮件。 检查
/var/log/maillog
文件:554 Relay access denied - the server is not going to relay. 250 OK or similar - the server is going to relay.
554 Relay access denied - the server is not going to relay. 250 OK or similar - the server is going to relay.
Copy to Clipboard Copied!
-
登录到不在
故障排除
-
如果出现错误,请检查
/var/log/maillog
文件。