用自家电脑搭建邮箱服务器--poste.io邮局并进行内网穿透

zsanjin 发布于 2024-04-13 157 次阅读


AI 摘要

通过使用自家电脑和公网VPS,搭建poste.io 邮局并进行内网穿透的方法着实方便实用。宝塔的邮局虽然简便,却时常出现稳定性问题,而弱小的VPS不支持docker,这时利用闲置电脑当服务器搭建邮局成为不错选择。通过创建docker-compose.yml文件,并使用frp进行端口穿透,可以轻松地将各种邮局相关端口映射到公网服务器上,确保邮局的顺畅运行。

宝塔的邮局虽然方便简单,但是不稳定,用几天就会出现各种奇怪的问题比如某某日志目录不见了就无法正常运行,影响业务邮件。但是对于弱鸡vps又跑不动docker也装不起poste.io等一键搭建的邮局,所以用自己的闲置电脑当服务器搭建邮局还是很有用的。

 

准备工作:自家电脑、域名、能使用25等邮局相关端口公网ipv4的vps(推荐vultr 申请开放端口很快很容易 https://www.vultr.com

 

1、首先要检查你的服务器能不能使用25端口(推荐vultr 申请开放端口很快很容易 https://www.vultr.com):

telnet smtp.qq.com 25

提示`Trying 43.129.255.54... telnet: connect to address 43.129.255.54: Connection timed out` 则代表未开放25端口。

2、配置域名,如果是cloudflare亦可启用小云朵

记录类型 主机名
A mail 你的IP地址
CNAME smtp mail.zsanjin.de
CNAME pop mail.zsanjin.de
CNAME imap mail.zsanjin.de
MX @ mail.zsanjin.de
TXT @ "v=spf1 mx ~all"

 

3、建议使用宝塔面板,这里默认你已经安装了docker。

创建文件:docker-compose.yml

version: '3'

services:
  mailserver:
    image: analogic/poste.io
    ports:
      - "880:80"
      - "6443:443"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "995:995"
      - "4190:4190"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/mail-data:/data
    hostname: mail.your-domain.com
    restart: always

 

4、然后在该文件所在目录中启动服务:

docker-compose up -d

 

5、现在需要用frp把25、110、143、465、587、993、995、4190穿透到公网服务器上。可以参考之前的介绍:内网穿透:新版frp_0.53.2_配置

在frpc.toml配置文件中添加以下 :

[[proxies]]
name = "mailserver-smtp"
type = "tcp"
localIP = "127.0.0.1" 
localPort = 25
remotePort = 25

[[proxies]]
name = "mailserver-pop3"
type = "tcp"
localIP = "127.0.0.1"
localPort = 110 
remotePort = 110

[[proxies]]
name = "mailserver-imap"
type = "tcp"
localIP = "127.0.0.1"
localPort = 143
remotePort = 143

[[proxies]]
name = "mailserver-smtps"
type = "tcp" 
localIP = "127.0.0.1"
localPort = 465
remotePort = 465

[[proxies]]
name = "mailserver-submission"
type = "tcp"
localIP = "127.0.0.1"
localPort = 587
remotePort = 587

[[proxies]]
name = "mailserver-imaps"
type = "tcp"
localIP = "127.0.0.1" 
localPort = 993
remotePort = 993

[[proxies]]
name = "mailserver-pop3s"
type = "tcp"
localIP = "127.0.0.1"
localPort = 995
remotePort = 995
#by zsanjin.de
[[proxies]]
name = "mailserver-sieve"
type = "tcp"
localIP = "127.0.0.1"
localPort = 4190
remotePort = 4190

 

6、先别急着去登录6443端口,因为登录控制面板的端口有自签名https协议,直接用frp穿透配置稍微复杂了点,最简单的解决方式是在本地用nginx反代自签名https端口,然后再用frp进行穿透,最后再公网IP下反代frp的端口即可,具体如下:

以宝塔面板为例,会手搓nginx的应该也能明白,配置一个网址如mail.zsanjin.de方便日后查阅调整,再添加一个本地8443端口来反代6443端口

 

在反代设置中,需要写为https://127.0.0.1:6443  ,并且要在反代配置文件中增加一句: proxy_ssl_server_name on;

配置文件如下:

#PROXY-START/
location ^~ / {
    proxy_pass https://127.0.0.1:6443;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    # proxy_hide_header Upgrade;
    proxy_ssl_server_name on;
    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache
    set $static_filea7p1nWEH 0;
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" ) {
        set $static_filea7p1nWEH 1;
        expires 1m;
    }
    if ( $static_filea7p1nWEH = 0 ) {
        add_header Cache-Control no-cache;
    }
}
#PROXY-END

 

7、最后再给frpc增加穿透条目:

[[proxies]]
name = "mailserver-https"
type = "tcp" 
localIP = "127.0.0.1"
localPort = 8443
remotePort = 8443

 

8、注意要重启frpc才能使目前更改的配置生效。

现在访问公网IP:8443端口即可抵达邮局控制面板,可以在公网服务器用nginx反代这个8443端口即可通过域名如mail.zsanjin.de直接访问,首次访问会让你设置管理员账户密码

设置好DKIM,Virtual domains - 点击对应域名 - DKIM key - 创建key,最后在dns托管商创建相应 的txt解析。

 

9、可访问这个网址,给它发送测试邮件给邮局进行打分测试https://www.mail-tester.com/

10、将常用发件IP设置为白名单,可设置为为IP段:

 

至此就可以愉快无限地收发邮件了,注意不要滥用和违法,如果本文对你有帮助的话可以点击下方图片进行捐赠哦

感谢请我吃辣条
感谢请我吃泡面
感谢请我喝奶茶