📖 背景介绍
Poste.io 是一个基于 Docker 的全功能邮件服务器解决方案,集成了 SMTP、IMAP、POP3、Webmail、反垃圾邮件(Rspamd)、病毒扫描(ClamAV)等功能。通过 Docker 部署,可以快速搭建并管理自己的邮件服务器,即装即用,非常适合个人和小型企业部署。
一:前期准备 🧰
✅ 系统要求
- 操作系统:Ubuntu / Debian / 其他 Linux 系统均可
- 权限:具有 root 权限或 sudo 权限的用户。
- 公网 IP:确保 VPS 拥有公网 IP。
- 域名:已注册的域名,并可管理其 DNS 设置。
✅ 安装 Docker 和 Docker Compose 此处默认大家都有 Docker 环境,没有的话可以使用官方提供的一键脚本自行安装。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
二:配置防火墙和端口 🔒
✅ 检查并开放必要端口 poste.io 需要以下端口:
-
SMTP:25, 465, 587
-
IMAP/POP3:110, 143, 993, 995
-
Web 管理界面:80, 443
这里有个很关键的点在于,你需要确认你的 VPS 提供商开放 25 端口,像我了解到的 RN、Netcup 都是开放的。(这里博主是购买的 Netcup-RS1000 机器)
25 端口开放测试:
telnet smtp.aol.com 25
留坑:
一般来说,这里通过 Docker 安装,会自动对 iptables 防火墙进行相关端口设置,所以只要确认 25 端口开放,其他端口可以暂时不用管。
当然,如果安装后发现端口防火墙设置有问题,可以使用 UFW 来进行防火墙端口管理。
sudo ufw allow 25,80,110,143,443,465,587,993,995,4190/tcp
sudo ufw enable
✅ 设置 RDNS(反向 DNS) RDNS 是邮件服务器信誉的重要因素,强烈建议开启。
rDNS(反向域名解析)在网络管理和安全方面具有重要意义。以下是一些关键点:
- 验证身份:rDNS 可以帮助验证连接到服务器或网络的主机的身份。通过将 IP 地址解析回域名,网络管理员可以确认连接请求是否来自预期的来源。
- 邮件服务器的信誉:许多电子邮件服务器使用 rDNS 来验证发件服务器的身份。如果发件服务器的 IP 地址没有有效的 rDNS 记录,收件服务器可能会将其标记为垃圾邮件源,从而拒绝接受邮件。
- 日志分析:在分析网络日志时,rDNS 可以将 IP 地址转换为更易于理解的域名,帮助管理员更轻松地识别和追踪网络活动来源。
- 安全性:通过 rDNS,管理员可以检测潜在的恶意行为。例如,如果一个 IP 地址声称来自某个可信域,但其 rDNS 记录却显示不同的信息,这可能表明存在欺诈行为。
- 合规性:一些合规标准和法规要求实施 rDNS 以确保网络通信的透明度和可追溯性。 总之,rDNS 有助于增强网络安全,改善邮件交付率,并提供更好的网络管理和分析工具。
以 Netcup 服务商为例,可以在 ccp 里进行管理。填上自己想要解析的域名就好。RN 服务器的话可以自行发工单咨询客服解决。
三:配置 DNS 记录 🌐
在你的域名 DNS 管理面板中添加以下记录:
-
A 记录:将 mail.yourdomain.com 指向你的 VPS 公网 IP。
-
MX 记录:指向 mail.yourdomain.com,优先级设为 10。
-
SPF 记录(TXT):
v=spf1 ip4:你的服务器 IP 地址 ~all
-
_dmarc 记录: 处理验证失败的邮件
映射关系可以按照下表填写:
名称(主机记录) | 记录类型 | 记录值 | 优先级 / 说明 |
---|---|---|---|
@ | MX | mail.yourdomain.com | 优先级 10,邮件服务器域名 |
A | 你的服务器 IP 地址 | 邮件服务器 IP 地址 | |
@ | TXT | v=spf1 ip4:你的服务器 IP 地址 ~all | SPF 记录,指定允许发送邮件的服务器 |
_dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@mail.yourdomain.com | DMARC 记录,处理验证失败的邮件 |
可以参考我的 DNS 配置,如下图所示:
四:使用 Docker Compose 部署 poste.io 📦
✅ 1. 创建对应docker
目录和数据目录
mkdir -p ~/posteio && cd ~/posteio
mkdir -p ./data
✅ 2. 创建docker-compose.yml
文件:
version: "3"
services:
poste:
image: analogic/poste.io
container_name: poste
restart: always
ports:
# 邮件相关端口
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "995:995"
# 管理界面端口(将被Nginx反代)
- "127.0.0.1:8443:443"
environment:
- TZ=Asia/Shanghai # 设置时区
- HTTPS=ON # 启用HTTPS
- HTTPS_PORT=443 # HTTPS端口
- DISABLE_CLAMAV=FALSE # 启用ClamAV防病毒
- DISABLE_RSPAMD=FALSE # 启用Rspamd反垃圾邮件
- WEBMAIL_LITE=TRUE # 使用轻量级Webmail
- REPORT_ADMIN_EMAIL=admin@xxx.de # 管理员邮箱
- OVERRIDE_HOSTNAME=mail.xxx.de # 主机名
volumes:
- ./data:/data # 数据持久化
cap_add:
- NET_ADMIN # 允许网络管理权限
ulimits: # 设置资源限制
nofile:
soft: 65536
hard: 65536
logging: # 日志配置
driver: "json-file"
options:
max-size: "100m"
max-file: "5"
networks:
default:
driver: bridge
✅ 3. 启动容器
docker compose up -d
五:使用 Nginx 进行反代 🪜
✅ 编辑nginx
配置文件
nano /etc/nginx/sites-available/mail
以我的 nginx 配置为例,可根据需求自定义修改
server {
listen 80;
server_name mail.xxx.de;
# 将HTTP请求重定向到HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name mail.thehogwarts.de;
# SSL配置(稍后会通过Let's Encrypt获取证书)
ssl_certificate /etc/letsencrypt/live/xxx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# 启用HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 反向代理到Poste.io管理界面
location / {
proxy_pass https://127.0.0.1:8443;
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 X-Forwarded-Proto $scheme;
# WebSocket支持(用于实时通知)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
Ctrl + X
保存配置。
✅ 链接到 enable 文件,并重启nginx
使配置生效。
ln -s /etc/nginx/sites-available/mail /etc/nginx/sites-enabled/mail
nginx -t && nginx -s reload
六: 使用并配置 DKIM 记录 🎈
-
首先,进入 Virtual Domains 生成 DKIM 记录,并添加进 DNS 解析。
-
在 Email Account 中添加邮箱账户,务必保存好每个邮箱账户的账户密码。(建议生成 30 位复杂密码)
-
点击 webmail 访问邮箱服务,至此你可以愉快地使用这个自建邮局进行玩耍啦~
七:问题排错 & 邮局检查 🛠️
当然,每个人环境不一样,搭建可能出现问题,可以使用mail-test进行邮局自检,然后在 poste.io 内部也有基础的邮局检测能力。
可以根据检测情况进行排错及修改,有问题欢迎私聊/邮件交流~
贴一张邮局检测全检图:
...