当前位置:首页|资讯

在Ubuntu22.04 LTS搭建Postal

作者:sha1盐发布时间:2024-10-06


我使用的是来自crunchbits的3C4.5G年兽一台,IP 38.175.\*.\*

域名借example.com做示例。抄作业记得改成自己的玉米


我以后再也不在Bilibili写专栏了,富文本编辑器难用还不支持markdown,写一次难受一次


注:Postal是一个邮件转发服务而不是邮局,它没有邮件列表或存储的功能,更没有POP3和IAMP。它只有SMTP,如果你想要使用Postal收信,你需要在里面配置转发到自己的外部邮箱,如qq邮箱。

为什么要用这个: 直接原因是在能有自己的收信域名的情况下,还可以拥有对往来信息的审计能力,以及转发到外部邮箱时,这些邮箱由一些企业提供,消息丢失的风险最小。

0. 硬性要求:

    1. 2C4G 的公网设备,25端口可访问(可进行PTR最好)

    2. 一个二级域名(可自定义DNS解析)

    3. 一定的Linux运维知识,因为此文章只是记录过程,不是手把手教


1. 前置安装

    运行mariadb容器

    

补充:如果有已经安装的数据库,也最好跑一个mariadb容器,因为postal貌似并不满足对自己数据库的现状,一心想创建其它数据库,那么需要弄一个专门的容器给它。


    添加域名记录

        原文档区分了非常复杂的三级域名解析,又是mx1 mx2 mx3 spf又是rp track的,一些是给ip池用的,但其实作为独立开发者,我们用不上这么多,我们只需要一个postal的子域作为管理面板入口,以及一个mail的子域作为收发信入口(还有一个psrp,这个是我后面发现Postal发信是用这个子域Bounce的,为了防止被拒收所以顺便加上)

按图片添加域名记录

如果要复制粘贴抄作业,这是markdown原文

| TYPE | NAME | CONTENT |

|------|------|---------|

|  A   |postal|38.175.\*.\*|

|  A   | mail |38.175.\*.\*|

|CMAME| psrp  |mail.example.com|

| MX | psrp | mail.example.com

| MX   |  @   |mail.example.com|

| TXT |psrp|v=spf1 a mx ip4:38.175.\*.\* ~all

| TXT  |  @   |v=spf1 a mx -all|

| TXT  |_dmarc|v=DMARC1;p=quarantine;rua=mailto:admin@example.com|

| TXT |default._domainkey|稍后获取|


2. 配置Postal

生成初始配置文件,这将会生成postal.yml signing.key Caddyfile三个文件。
使用任意文本编辑器编辑/opt/postal/config/postal.yml

配置其中的main_dbmessage_db为刚刚建立好的数据库和用户
配置域名:
web_hostname: postal.example.com
smtp_hostname: mail.example.com
mx_records:

    mail.example.com

spf_include: mail.example.com
return_path_domain: mail.example.com
route_domain: mail.example.com
track_domain: mail.example.com

在最下面找到smtp设置的host127.0.0.1改成域名、from_name改为adminfrom_address改为example.com
保存退出


(make-user创建的用户邮箱在最初并不重要,只是用来登录的;不过最好是指向一个可用的外部邮箱)


3. 初始化配置


在这里会初始化数据库和用户,如果遇到问题赶紧回去看数据库有没有配置错

最后使用postal start启动postal,postal将会运行在docker容器中


postal监听127.0.0.1的5000地址,为了外部访问和ssl,需要使用反代服务器。刚刚初始化的时候它已经生成了caddyfile可以直接用docker运行:


不过因为我的服务器上已经安装并运行了nginx和好几个站点,我选择使用nginx作反代服务器。

新建nginx站点:


systemctl restart nginx重启nginx服务器

完成之后打开浏览器访问postal.example.com,用刚刚创建的管理员账户登陆。
上来会问你创建组织之类的,随便创建一个,接着创建一个新的邮件服务器
在邮件服务器里面点Domains开始配置域名

因为刚刚设置了mail.example.com,所以这里输入example.com即可,进去点击检查域名,会显示DKIM Record有问题,因为刚刚并没有配置。
按照它的要求在域名解析添加 postal-xxxxxxx._domainKey的记录(记录值在下面)


再次检查即可全通过



开始使用

因为Postal并不是邮局,所以也不存在用户等配置。



若要收信:

在Routing中添加Address Endpoint Address Endpoint指向属于自己的一个外部邮箱,如qq、gmail、outlook,保存
保存后,回到Routes,新建一个转发Route:NAME设置一个自己想要用的,ENDPOINT选择刚刚添加好的Address Endpoint,其它不用管,点击保存生效。
这样就配置好了收信。当有人发送邮件到test@example.com,这封邮件就会被转发到你的外部邮箱。
你也可以添加多个Route(Endpoint可以只用一个),对应多个“用户”,这也是我觉得最有用的地方,“收信地址”和“收信邮箱”实际是独立的,并且可以配置为一对一、一对多、多对一


若要发信:

首先进入Credentials创建一个SMTP凭证(密码是随机生成的,不可修改)
这个随机生成的密码就是你的密码

然后用户名一般是 组织名/服务器名 (你可以在右上角的状态栏下面的tab的最右边找到一个help字样,点进去可以查看)
接着你可以找一个SMTP发信的图形界面程序,也可以用telnet。 我懒,用telnet演示
用telnet连接服务器的25端口

Exclusive章:使用Certbot+crontab为smtp配置tls加密

standalone模式要配置nginx站点……麻烦,用DNS质询


按照要求输入邮箱并同意ToS,然后看清楚下一个是问你订不订阅邮件,一般是不订阅的,选择N
接着再按照要求配置好_acme-challenge.mail的TXT记录(记录值在输出里面),添加后稍微等一两分钟,回车继续
等出现

说明成功签发
最后复制证书到/opt/postal/config下,因为docker无法直接访问/etc/letsencrypt的内容,即使chmod 777也不行

(可选)更新脚本+Crontab自动更新 往/root/renew_cert.sh写入


chmod +x /root/renew_cert.sh

crontab写入0 2 * * * /root/renew_cert.sh每日凌晨2点更新,更新的日志文件在/var/log/certbot-auto-renew.log

修改/opt/postal/config/postal.yml的配置文件,设置开启TLS。将smtl_server下追加一行


最后使用postal restart重启postal服务。

验证:telnet连接上服务器后,使用EHLO localhost会显示STARTTLS,使用STARTTLS后会显示220 Ready to start TLS
使用openssl s_client -starttls smtp -connect mail.example.com:25会有证书信息即成功开启TLS。



文章在CC-BY-SA 4.0下授权任意用途



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1