如何使用Postfix MTA配置AWS SES
如何配置带有Postfix邮件服务器的Amazon SES在CentOS/RHEL/Fedora/Ubuntu/Debian Linux服务器下发送电子邮件?
Amazon Simple Email Service(SES)是一项托管电子邮件服务,可让您使用您的电子邮件地址和域发送和接收电子邮件。
通常,SES用于在不托管MTA的情况下发送批量电子邮件或路由电子邮件。
我们可以使用Perl/Python/PHP API通过SES发送电子邮件。
另一种选择是将运行Postfix的Linux或Unix机器配置为通过SES路由所有外发电子邮件。
使用Postfix配置AWS SES的过程
在开始使用Amazon SES和Postfix之前,您需要注册AWS,包括SES。
您需要验证您的电子邮件地址和其他设置。
确保您还创建了一个用于SES访问的用户并下载了凭据。
步骤1卸载Sendmail(如果已安装)
如果已安装sendmail,请将其删除。
Debian/Ubuntu Linux用户执行以下apt命令/apt-get命令:
$ sudo apt --purge remove sendmail
CentOS/RHEL用户在Fedora/CentOS/RHEL 8.x上执行以下yum命令或dnf命令:
$ sudo yum remove sendmail $ sudo dnf remove sendmail
CentOS 8服务器的示例输出:
Dependencies resolved. =============================================================================== Package Architecture Version Repository Size =============================================================================== Removing: sendmail x86_64 8.15.2-32.el8 @AppStream 2.4 M Removing unused dependencies: cyrus-sasl x86_64 2.1.27-1.el8 @BaseOS 160 k procmail x86_64 3.22-47.el8 @AppStream 369 k Transaction Summary =============================================================================== Remove 3 Packages Freed space: 2.9 M Is this ok [y/N]: y
步骤2安装后缀
在CentOS/RHEL/Fedora Linux上安装Postfix的过程如下:
$ sudo dnf install postfix # < -- RHEL/CentOS 8.x or latest Fedora $ sudo yum install postfix # < -- RHEL/CentOS v7.x/6.x
Last metadata expiration check: 0:42:33 ago on Sat May 30 16:13:57 2020. Dependencies resolved. =============================================================================== Package Architecture Version Repository Size =============================================================================== Installing: postfix x86_64 2:3.3.1-9.el8 BaseOS 1.5 M Transaction Summary =============================================================================== Install 1 Package Total download size: 1.5 M Installed size: 5.4 M Is this ok [y/N]:
如果您使用的是Debian或Ubuntu Linux,请运行:
$ sudo apt install postfix
确保在apt提示时选择无配置
{零散}
步骤3 SASL身份验证包
SASL表示简单身份验证和安全层。
它是一种为基于连接的协议添加身份验证和安全支持的方法。
换句话说,安装SASL身份验证包。
例如,如果您使用的是CentOS/RHEL/Fedora Linux,则应安装cyrus-sasl-plain
软件包:
$ sudo dnf install cyrus-sasl-plain # < -- RHEL/CentOS 8.x or latest Fedora $ sudo yum install cyrus-sasl-plain # < -- RHEL/CentOS v7.x/6.x
Last metadata expiration check: 0:57:13 ago on Sat May 30 16:13:57 2020. Dependencies resolved. =============================================================================== Package Architecture Version Repository Size =============================================================================== Installing: cyrus-sasl-plain x86_64 2.1.27-1.el8 BaseOS 47 k Transaction Summary =============================================================================== Install 1 Package Total download size: 47 k Installed size: 46 k Is this ok [y/N]: y
如果您使用基于Debian或Ubuntu的Linux系统,则应按照以下步骤安装libsasl2-modules
软件包:
$ sudo apt install libsasl2-modules
步骤4为Amazon SES配置后缀
让我们看看如何使用基于Amazon SES的smarthost将Postfix配置为传出MTA。
首先,设置SES区域:
# I am using US West (Oregon) # Feel free to replace MTA as per your AWS region SES_MTA="email-smtp.us-west-2.amazonaws.com"
Debian/Ubuntu Linux用户执行以下cp命令为您的MTA创建一个新的默认配置文件:
$ sudo cp -v -i /etc/postfix/main.cf{.proto,} `'/etc/postfix/main.cf.proto' -> '/etc/postfix/main.cf'`
接下来运行postconf命令以使用Amazon SES配置Postfix:
sudo postconf -e "relayhost = [${SES_MTA}]:587" \ "smtp_sasl_auth_enable = yes" \ "smtp_sasl_security_options = noanonymous" \ "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \ "smtp_use_tls = yes" \ "smtp_tls_security_level = encrypt" \ "smtp_tls_note_starttls_offer = yes"
为MTA设置Amazon SES USERNAME和PASSWORD
使用文本编辑器(例如NA命令/vim命令)编辑/etc/postfix/sasl_passwd,执行:
$ sudo vim /etc/postfix/sasl_passwd ## or ## $ sudo nano /etc/postfix/sasl_passwd
追加(替换AWS IMA/SES提供的SMTP_USER和SMTP_PASSWORD):
[email-smtp.us-west-2.amazonaws.com]:587 SMTP_USER:SMTP_PASSWORD
保存并关闭文件。
首先使用chmod命令保护文件安全,然后创建一个新数据库:
$ sudo chmod -v 0600 /etc/postfix/sasl_passwd `mode of '/etc/postfix/sasl_passwd' changed from 0644 (rw-r--r--) to 0600 (rw-------)`
在Linux/Unix Shell提示符下,执行以下postmap命令以创建用于MTA凭据的哈希表数据库:
$ sudo postmap -v hash:/etc/postfix/sasl_passwd
处理setgid_group =错误
您可能会收到如下错误:
postmap: fatal: bad string length 0 < 1: setgid_group =
确保在/etc/postfix/main.cf中注释掉以下行:
#setgid_group =
再试一次:
$ sudo postmap hash:/etc/postfix/sasl_passwd
保护文件
使用chown命令和chmod命令,如下所示:
$ sudo chown -v root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db $ sudo chmod -v 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
配置CA证书路径以进行验证
Postfix服务器需要找到CA证书。
因此,要验证Amazon SES服务器证书,请根据您的Linux发行版运行以下命令之一:
## CentOS/RHEL/Fedora Linux user ## $ sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt' ## Debian/Ubuntu Linux ## $ sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
步骤5-使用Linux/Unix CLI测试配置
现在,我们已配置Postfix以将Amazon SES用作智能主机。
现在该启动Postfix服务器了。
首先启用该服务,运行以下systemctl命令:
$ sudo systemctl enable postfix
启动或重新启动Postfix:
$ sudo systemctl start postfix
或者
$ sudo systemctl restart postfix
验证我们的Postfix MTA是否已正确启动:
$ sudo systemctl status postfix
● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2020-05-30 17:53:37 UTC; 2s ago Process: 2758073 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2758073 (code=exited, status=0/SUCCESS) May 30 17:53:37 ncbz01 systemd[1]: Starting Postfix Mail Transport Agent... May 30 17:53:37 ncbz01 systemd[1]: Finished Postfix Mail Transport Agent.
测试Amazon SES与Postfix的集成
使用sendmail命令,如下所示:
sendmail -f [email protected] [email protected] From: <[email protected]> Subject: Postfix email server integration with Amazon SES This message was sent using Amazon SES on my Ubuntu Linux server .
我们还可以安装bsd-mailx软件包并按以下方式对其进行测试:
$ sudo apt install bsd-mailx $ echo "This is a test email." \ | mail -r [email protected] -s 'AWS SES test' [email protected]
处理后置消息
您可能会在屏幕上看到以下消息:
postdrop: warning: unable to look up public/pickup: No such file or directory
要修复此消息,请运行:
$ sudo mkfifo /var/spool/postfix/public/pickup $ sudo systemctl restart posfix
查看Postfix电子邮件日志
运行以下tail命令或grep命令:
$ sudo tail -f /var/log/mail.log $ sudo grep '[email protected]' /var/log/mail.log $ sudo grep '[email protected]' /var/log/maillog ## centos/rhel ##
指示消息已从Ubuntu Linux服务器上运行的本地Postfix使用Amzaon SES发送的示例输出:
May 30 18:10:49 ncbz01 postfix/pickup[2770085]: 4F5B2A41631: uid=1000 from=<[email protected]> May 30 18:10:49 ncbz01 postfix/cleanup[2777956]: 4F5B2A41631: message-id=<[email protected]> May 30 18:10:49 ncbz01 postfix/qmgr[2770086]: 4F5B2A41631: from=<[email protected]>, size=419, nrcpt=1 (queue active) May 30 18:10:50 ncbz01 postfix/smtp[2777958]: 4F5B2A41631: to=<[email protected]>, relay=email-smtp.us-west-2.amazonaws.com[34.216.173.41]:587, delay=7.7, delays=6.5/0.01/0.74/0.46, dsn=2.0.0, status=sent (250 Ok 0101017266c78163-2701b997-ab08-4fa1-ab16-e782a9262962-000000) May 30 18:10:50 ncbz01 postfix/qmgr[2770086]: 4F5B2A41631: removed
这是收件人在其邮箱中看到的内容:
带有Postfix标头的AWS SES
原始信息
Message ID <0101017266c78163-2701b997-ab08-4fa1-ab16-e782a9262962-000000@us-west-2.amazonses.com> Created at: Sat, May 30, 2020 at 11:40 PM (Delivered after 1 second) From: <[email protected]> To: Webmaster <[email protected]> Subject: Postfix email server integration with Amazon SES SPF: PASS with IP 54.240.27.192 Learn more DKIM: 'PASS' with domain theitroad.local Learn more DMARC: 'PASS' Learn more
确保设置正确的SPF,DKIM和DMARC。
关于系统生成的电子邮件的说明
通常,从以下地址发送的系统生成的电子邮件将被AWS SES拒绝,因为它们来自未经身份验证的域/电子邮件地址:
root@your-hostname root@your-hostname-domain-dot-com
要解决此问题,请参阅我的页面"伪装或更改传出SMTP电子邮件或邮件地址的后缀",以获取更多信息。