要使用第三方客户端如网易邮箱大师、Thunderbird等等,我们需要在postfix中启用submission服务,要在第三方客户端接受邮件,我们需要安装一个开源IMAP服务器(Dovecot),同时为了加密通信,我们需要一个TLS证书
在防火墙上打开端口
Ubuntu 默认不开启防火墙,如果你已经开启了UFW防火墙,那么你需要运行以下命令去打开跟email有关的端口
sudo ufw allow 80,443,587,465,143,993/tcp
使用 TLS 证书保护电子邮件服务器流量
当我们配置桌面电子邮件客户端时,应启用 TLS 加密以防止黑客窥探我们的电子邮件。我们可以很容易地从 Let's Encrypt 获得免费的 TLS 证书。从默认软件存储库在 Ubuntu 服务器上安装 Let's Encrypt 客户端(certbot),请发出以下命令。
sudo apt update
sudo apt dist-upgrade
sudo apt install certbot
如果你使用Nginx 服务器, 安装Nginx 插件(如果你没有安装,下面的命令会安装Nginx服务器)
sudo apt install python3-certbot-nginx
在Nginx服务器上获取TLS证书
在安装TLS证书之前你需要创建一个Nginx虚拟主机 mail.your-domain.com
sudo vi /etc/nginx/conf.d/mail.your-domain.com.conf
粘贴下面的内容到配置文件中。
server {
listen 80;
listen [::]:80;
server_name mail.your-domain.com;
root /usr/share/nginx/html/;
location ~ /.well-known/acme-challenge {
allow all;
}
}
保存并关闭。
重新加载Nginx以使配置生效
sudo systemctl reload nginx
现在你就可以通过Nginx 插件获取TLS证书,运行下面命令:
sudo certbot certonly -a nginx --agree-tos --no-eff-email --staple-ocsp --email [email protected] -d mail.your-domain.com
参数解释:
- -a nginx: 使用Nginx 插件进行权限验证
- --agree-tos: 同意服务条款
- --no-eff-email: 不接收来自 EFF基金的邮件
- --staple-ocsp: 启用 OCSP 装订
- --email: 可以输入你的个人邮箱地址,它会将一个些重要信息的通知给你
- -d: 你邮件服务器的主机名
在Postfix 上启用 Submission 服务
在第三方邮件客户端(网易邮箱大师,thunderbird等等)发送邮件时,我们需要在Postfix上启用submission服务,编辑 master.cf 文件
sudo vi /etc/postfix/master.cf
默认submission 部分已经被注释掉了,你可以直接复制下面的内容
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_tls_wrappermode=no
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
添加上面的配置信息后,我们就可以在电子邮件客户端通过TLS加密方式提交,submission 守护进程 监听的是TCP 587 端口。STARTTLS 用于加密电子邮件客户端与提交守护进程之间的通信。
现在我们需要在postfix 配置文件中指定TLS证书和私钥的位置。
sudo vi /etc/postfix/main.cf
编辑下面TLS参数部分,将 mail.your-domain.com替换为你主机名
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#Enable TLS Encryption when Postfix sends outgoing emails
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
#Enforce TLSv1.3 or TLSv1.2
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
你的 Let’s Encrypt 证书和私钥保存在/etc/letsencrypt/live/mail.your-domain.com/目录下。
保存并关闭后,需要再次重启Postfix。
sudo systemctl restart postfix
安装Dovecot IMAP 服务
在 Ubuntu 服务器上安装 Dovecot 核心软件包和 IMAP 守护进程软件包,执行以下命令
sudo apt install dovecot-core dovecot-imapd
开启 IMAP 协议
编辑配置文件
sudo vi /etc/dovecot/dovecot.conf
添加下面的配置
protocols = imap
保存并关闭。
配置邮箱位置
默认Postfix 和 Dovecot 使用mbox 格式保存邮件,每个用户的邮件会保存在 /var/mail/username。但是现在绝大部分都是使用Maildir 格式保存邮件。所以我们需要修改配置文件 /etc/dovecot/conf.d/10-mail.conf
sudo vi /etc/dovecot/conf.d/10-mail.conf
默认的配置是使用mbox 格式
mail_location = mbox:~/mail:INBOX=/var/mail/%u
现在我们需要修改它为 Maildir
mail_location = maildir:~/Maildir
同时我们需要在文件中添加以下行。(在 Ubuntu 18.04 和 20.04 中,这一行已经在文件中。)
mail_privileged_group = mail
保存并关闭。然后添加 dovecot 到mail 组中,这样可以使Dovecot读取收件箱
sudo adduser dovecot mail
虽然我们配置了Dovecot 使用Maildir格式保存邮件,但是默认Postfix使用内置的本地投递代理(LDA)来移动入站邮件并将邮件保存到收件箱,发件箱,等等,最后它将会保存为mbox格式。
所以我们需要配置 Postfix,将传入的电子邮件传递给 Dovecot。通过 LMTP 协议(它是 SMTP 的简化版本),因此传入的电子邮件将由 Dovecot 以Maildir格式保存。LMTP(本地邮件传输协议)允许构建一个高度可扩展且可靠的邮件系统。它还允许我们使用sieve插件将入站消息过滤到不同的文件夹。
安装 Dovecot LMTP 服务
sudo apt install dovecot-lmtpd
编辑 Dovecot 配置文件
sudo vi /etc/dovecot/dovecot.conf
添加lmtp 协议
protocols = imap lmtp
然后编辑Dovecot 10-master.conf 文件
sudo vi /etc/dovecot/conf.d/10-master.conf
改变 lmtp 服务定义
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
然后编辑Postfix 的配置文件
sudo vi /etc/postfix/main.cf
添加下面两行,第一行是告诉Postfix 入站邮件是通过 dovecot-lmtp服务,第二行禁用 smtputf8,因为Dovecot-lmtp 不支持
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no
最后保存并关闭。
配置身份验证机制
编辑验证配置文件
sudo vi /etc/dovecot/conf.d/10-auth.conf
取消下面的注释以使用SSL/TLS 加密
disable_plaintext_auth = yes
然后找到下面这行
#auth_username_format = %Lu
取消注释并更改它。默认情况下,当 Dovecot 尝试为用户查找或发送邮件时,它会使用完整的电子邮件地址。由于在这一部分中,我们仅设置了规范的邮箱用户(使用 OS 用户作为邮箱用户),因此 Dovecot 无法找到完整域格式([email protected] )的邮箱用户,因此我们需要设置auth_username_format = %n为删除域部分,然后 Dovecot 应该能够找到邮箱用户。这也使我们能够使用完整的电子邮件地址([email protected] )进行登录。
auth_username_format = %n
然后找到下面这行
auth_mechanisms = plain
增加LOGIN 身份验证机制,以支持较旧的电子邮件客户端。
auth_mechanisms = plain login
保存并关闭。
配置 SSL/TLS 加密
编辑 SSL/TLS 配置文件
sudo vi /etc/dovecot/conf.d/10-ssl.conf
将ssl=yes 改为ssl=required
sl = required
然后找到下面这两行
ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.key
将它改为你Let's Encrypt TLS 证书和密钥保存的地方。
ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem
添加下面配置,为了禁用不安全的协议SSLv3, TLSv1 and TLSv1.1
ssl_min_protocol = TLSv1.2
如果您正在使用 Dovecot 版本2.2.x(如在 Ubuntu 18.04 中),您应该添加以下行来禁用不安全的 TLS。
ssl_protocols = !SSLv3 !TLSv1 !TLSv1.1
保存并关闭。
在 Ubuntu 22.04 上禁用 OpenSSL 中的 FIPS 提供程序
Ubuntu 22.04附带 OpenSSL 3.0,它具有 FIPS 提供程序。但是,它无法与 Dovecot 配合使用。我们需要禁用 FIPS 提供程序。
sudo vi /etc/ssl/openssl.cnf
找到下面行
providers = provider_sect
给它添加注释
#providers = provider_sect
保存并关闭。
配置 SASL身份验证
编辑下面文件
sudo vi /etc/dovecot/conf.d/10-master.conf
将service auth中的部分更改为以下内容,以便 Postfix 可以找到 Dovecot 身份验证服务器。请注意语法。每个左括号都应以右括号结尾。
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
保存并关闭。最后重启Postfix 和Dovecot。
sudo systemctl restart postfix dovecot
Dovecot 将监听端口 143 (IMAP) 和 993 (IMAPS),你可以运行下面命令进行查看
sudo ss -lnpt | grep dovecot
现在你们就能使用SMTP在第三方客户端上进行登录了(账号密码是你们服务器的账号密码,不要用root账号,因为Dovecot不允许)。
【SMTP】
host: mail.your-domain.com
username: [email protected]
Password: your-password
SSL: STARTTLS
Authentication: Normal password
port: 587
【IMAP】
host: mail.your-domain.com
username: [email protected]
Password: your-password
SSL: STARTTLS
Authentication: Normal password
port: 143
评论