linux搭建邮件服务器 - postifx + SSL + 465端口配置
整体参考:https://www.cnblogs.com/chris-cp/p/4843407.html
建议先看上文,照着配置完再看本文。关于25端口被封无法发邮件的解决办法在本文后半部分。
做几点补充:
/etc/dovecot/conf.d/10-ssl.conf
中把ssl = required
改成ssl = no
注意设置
/etc/postfix/main.cf
中的mynetworks
时,注意本地子网的IP格式,比如172.21.0.1/28就是错的,要写成172.21.0.0/28。网段计算器
安全组开放25,110,143端口
常用命令:
查看邮件队列
1 |
|
查看日志:
1 |
|
如果你只图能收邮件,不需要往外发邮件的话,到这里已经可以结束了。
解决云服务器封了25端口导致的不能发送邮件的问题
网上说开放465端口,用SSL,我照着postfix+dovecot+SSL 搭建邮件服务器做了,但是发送邮件一直还是用25端口。
最后看了半天官方的文档,升级到了postfix3,按照官方给的说明捣鼓了半天终于是解决了。接下来是正文。
本文提供两种方法,一种是设置transport_maps,对特定地址的邮件指定端口,另一种是用iptables把25端口NAT到465端口。第一种方法测试后不太现实,推荐第二种方法。
1. 安装postfix3
1 |
|
注意,我是Centos 7,如果你是Centos8,请使用如下命令:
1 |
|
如果有版本更新,上面链接失效了,自己去网站看下最新版链接。
2. 配置postfix client tls
这里科普一点小知识,postfix分为client和server,client是往外发邮件的,server是接收邮件的。我们发邮件要用465,所以设置的是client,配置项以
smtp_
开头。smtpd_
是服务器配置。
先跟着上文中提到的postfix+dovecot+SSL 搭建邮件服务器生成SSL证书和key,并配置好smtp-server端。
上述操作后部分配置如下:
1 |
|
到这里,在邮件客户端开启SSL收件应该已经不成问题,但是还无法发邮件。
然后参看官网的指导:
http://www.postfix.org/TLS_README.html#quick-client
http://www.postfix.org/TLS_README.html#client_smtps
先来自动生成tls client端的配置项。只有tls配置是默认时此命令才有效,否则不会更改配置文件。
1 |
|
执行结束后/etc/postfix/main.cf
中应当添加了
1 |
|
3. 方法一、设置transport_maps 走465端口
根据官网的说明:
Postfix ≥ 3.0: Sending all remote mail to an SMTPS server
The first example will send all remote mail over SMTPS through a provider's server called "mail.example.com":
1
2
3
4
5
6
7
8
9
10
11
12
13
/etc/postfix/main.cf:
# Client-side SMTPS requires "encrypt" or stronger.
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
# The [] suppress MX lookups.
relayhost = [mail.example.com]:465
Use
postfix reload
to make the change effective.
See SOHO_README for additional information about SASL authentication.
Postfix ≥ 3.0: Sending only mail for a specific destination via SMTPS
The second example will send only mail for "example.com" via SMTPS. This time, Postfix uses a transport map to deliver only mail for "example.com" via SMTPS:
1
2
3
4
5
/etc/postfix/main.cf:
transport_maps = hash:/etc/postfix/transport
1
2
3
4
5
/etc/postfix/transport:
example.com relay-smtps:example.com:465
1
2
3
4
5
6
7
8
9
10
11
/etc/postfix/master.cf:
relay-smtps unix - - n - - smtp
# Client-side SMTPS requires "encrypt" or stronger.
-o smtp_tls_security_level=encrypt
-o smtp_tls_wrappermode=yes
Use "postmap hash:/etc/postfix/transport" and "postfix reload" to make the change effective.
See SOHO_README for additional information about SASL authentication.
提供了两种方法:
所有的外发邮件全部发送到一个特定的smtps服务器
根据不同的邮件地址转发到不同的smtps服务器
我使用了我校校园邮箱(网易的企业邮箱)进行测试,(很遗憾QQ似乎没有开465端口)。经过测试,发现方法一会被当成垃圾邮件,而且显然不适用我们现在的情况(毕竟你不可能拿网易的服务器给别的邮箱做中转),方法二正常发送。
PS. 建议先用telnet看下你的目的邮箱服务器开了哪个端口,别压根没开465...
获取邮箱的交换服务器域名,即MX记录。
假定我的校园邮箱是abcabcabc@xyz.edu.cn
,查询MX记录
1 |
|
1 |
|
随便记下来一个,比如hzmx01.mxmail.netease.com
。
按如下配置
1 |
|
1 |
|
1 |
|
配置完后执行
1 |
|
生成transport.db
重载配置
1 |
|
向xyz.edu.cn邮箱发送邮件,成功。
这样配置后,想给哪个邮箱发邮件都得添加transport才行,很麻烦,但是别的办法暂时没找到可行的.......
按理说可以强制全走465端口的...
慢慢再找别的方法吧,现在先凑合着用吧...
3. 方法二 465端口最新配置方法(iptables)
按之前操作成功可以发邮件,但是总不能把所有的邮箱域名都写到transport中,看了官方的transport文档,transport的配置规则是domain transport:nexthop
,nexthop要么不写,让它自动去查DNS同时使用25端口;要么就指定域名和端口,无法在指定端口的同时使用DNS查询MX记录。
我想了想,ssl加密和465端口似乎没必然的联系,因为开了加密不指定端口的话还一直用25端口。那只能是在25端口上进行TLS/SMTPS通信。所以,我大胆操作,将25出端口直接映射到465端口,让所有的都按默认走25端口(实际会被转发到465),成功。具体操作如下:
/etc/poostfix/transport
修改:
1 |
|
更新postfix配置文件:
1 |
|
设置端口映射,将出的25端口映射到465,我是centos7,以iptables为例。
安装iptables.services,不然systemctl无法启动iptables。
1 |
|
配置端口映射
1 |
|
启动iptables
1 |
|
注意:启动iptables后一定不要断开ssh连接,先开另一个终端测试一下能否ssh连到服务器,因为iptables可能有预定义规则拦截,导致连不上新的ssh终端,不要问我为什么知道!如果发现无法登录新的ssh终端,请立刻systemctl stop iptables,把里面的规则删了再重来。
查看所有的iptables规则
1 |
|
删除所有规则
1 |
|
这样配置后,只要是在465端口开了SSL的邮箱就都能发,很多企业邮箱都开了,但是遭天谴的QQ邮箱只开了25端口...这就很遗憾,不能给QQ邮箱发邮件了。transport文件也可以灵活配置,对于有的不使用465端口的,可以手动添加到transport中走自己的端口。
方法二补充
时隔一年,又配了一次postfix,发现方法二完全不需要设置transport_maps和relay-smtps ,只要修改master.cf中的
1 |
|
这是默认的发邮件服务,在这行下面启用tls即可,如下
1 |
|
然后同上设置iptables
番外篇
添加DNS记录,让邮件客户端自动配置邮件服务器。主要是配置一些SRV记录,在RFC6186中对这些记录做出了规定,主要可以配置以下几个:
1 |
|
除了这些,也可以添加常见的子域名A记录解析,如smtp./mail./pop3./imap./..... ,虽然邮件客户端不一定去查,但是有些会去查,可以添加上。
更多关于自动配置的可参考
关于windows 10 mail APP无法登录dovecot pop3邮箱的解决办法:
假如你的邮箱地址是apple@goodmail.com,在windows 10 邮件app添加账户时有个“用户名”,这里只写apple,而不能带@goodmail.com。
可以使用openssl测试能否登录:
1 |
|
密码是明文密码。