如何在自家的路由器器上部署一个自己的邮箱服务
背景
- 注册线上的邮箱,对个人信息的绑定越来越多。国内很多邮箱,没有手机号注册不了。公司业务一般需要十几二十多个邮箱用于注册线上账号,这就需要几十个手机号。长年备用。
- 且现在注册邮箱时密码安全等级要求高。密码维护繁琐,一个没记录好。下次登录就很麻烦。
- 邮箱附带更多的广告、平台方各种植入自己的产品。
自建邮箱服务,就成了很好的选择。但搭建邮箱服务过去很困难。配置非常繁杂!
好在时过境迁,如果我们有了Docker,专治繁杂的配置!如今,可以在自己家路由器上,部署一个自己的邮箱服务了。
环境
- 路由器系统:OpenWrt 21.02.3
- Docker管理包:luci-app-dockerman(20.10.17-1)、docker-compose(1.28.2-1)
- 邮件服务镜像:docker-mailserver(v11.2.0)
- Let’s Encrypt 自动签发工具:acme.sh
docker-mailserver
包下了一套完整的邮件系列服务。其中重点的服务有:
服务名 | 简介 |
---|---|
Postfix | 不错的MTA服务 |
Dovecot | 提供IMAP、POP3协议的收邮件服务 |
Amavis | 高性能内容过滤器 |
SpamAssassin | 垃圾邮件过滤服务 |
ClamAV | 邮件杀毒服务 |
OpenDKIM | DKIM签名服务 |
Fail2ban | 防暴力破解服务 |
部署
域名设置
几点说明:
- 家用动态ADSL,设置不了rDNS。所以略过。
- DNS的SPF记录:将域名标记为发邮件服务。
- DNS的DMARC记录:将域名标记为已受SPF/KDIM等保护。
设置 | 记录类型 | 记录名 | 记录值 |
---|---|---|---|
邮件服务 | MX | home.my.domain.name | home.ddns.domain |
SPF标记 | TXT | home.my.domain.name | v=spf1 mx ~all |
DMARC标记 | TXT | _dmarc.home.my.domain.name | v=DMARC1; p=quarantine; rua=mailto:postmaster@home.my.domain.cn; ruf=mailto:postmaster@home.my.domain.cn; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine |
自动签发证书
虽然docker-mailserver
自己带了letsencrypt
功能,只要配置好,自动签!但家用宽带没有80端口。只能自己搞定。
采用acme.sh
自动签发。操作参考acme说明书
1 | curl https://get.acme.sh | sh -s email=your@email.com |
将acme.sh
安装到/root/.acme.sh/
下。
先获取到手动验证DNS的challenge值:
1 | /root/.acme.sh/acme.sh --issue --dns -d home.my.domain.name --yes-I-know-dns-manual-mode-enough-go-ahead-please |
获取到值后,把challenge值设置到DNS中。如:
设置 | 记录类型 | 记录名 | 记录值 |
---|---|---|---|
手动验证 | TXT | _acme-challenge.home.my.domain.name | challenge值 |
然后通过renew
生成证书,注意:一定要带上--server letsencrypt
这个参数。不然默认连接acme.zerossl.com
要么超时,要么503:
1 | /root/.acme.sh/acme.sh --renew -d home.my.domain.namen --yes-I-know-dns-manual-mode-enough-go-ahead-please --server letsencrypt |
最后,通过crontab
让证书续期自动化
1 | crontab -e |
准备环境
将 docker-mailserver 项目中的 setup.sh
、docker-compose.yml
、mailserver.env
下载到本地目录中。通过shell进入目录。
配置docker-compose.yml
- hostname: home
- domainname: my.domain.name
- volumes中添加: - /root/.acme.sh/home.my.domain.name/:/tmp/cert/
配置mailserver.env
- POSTMASTER_ADDRESS=postmaster@home.my.domain.name
- SSL_TYPE=manual
- SSL_CERT_PATH=/tmp/cert/home.my.domain.name.cer
- SSL_KEY_PATH=/tmp/cert/home.my.domain.name.key
生成DKIM
签名
1 | ./setup.sh config dkim keysize 2048 |
这一般是设置在主域上的。我在这里设置在二级域上,不知道是否有效。不过能确定不太影响功能。
设置DNS:
设置 | 记录类型 | 记录名 | 记录值 |
---|---|---|---|
DKIM | TXT | mail._domainkey.home.my.domain.name | v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8Tr2JFyWXLMKcxY9j/1IjR6me2EjdyI4K97wAGoPUWK9ZmFewpSZ8DAEKphWV79k+w61BwLTLdpDLR6HpqsVOV7tGDGdK8sUG7tqfWQhN4Vudy9VUmQ1WOrcUE3o5nUfeh8jwjiO5/exWBiTmAJ78p54hSkzMalmCOQCXWcCbJbUN+jrmV8WUEHx+6M7MP0Z7KQSJY3bW6ujm93O1yOnzMgJy1VBJvLSbyDrjtxXJGrPbTCRaig09I5WFxZXwROispL1xiTNgUGv9/1fDeUqoIPPXCw6z4l6x20aRl+Sog+WH2qLLyY+PdIFaTfJ8MBysrZF6yhJ5rx4THZmu8CtUQIDAQAB |
验证TLS
前往:checktls 测试一下TLS的支持情况。
添加用户
1 | ./setup.sh email add postmaster@home.domain.name "password type here" |
启动
1 | docker-compose up -d # 启动 |
开放端口
进入openwrt后台,在[网络]->[防火墙]->[端口转发]中添加993、645两个端口映射到路由器IP上。
参考文档
- 本文标题:如何在自家的路由器器上部署一个自己的邮箱服务
- 本文作者:jf wang
- 创建时间:2022-11-27 22:38:06
- 本文链接:https://www.wangjunfeng.com.cn/2022/11/27/mail-server-on-openwrt-docker/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!