自建邮局 | 邮箱服务搭建教程
- LINUX后端笔记
- 26天前
- 57热度
- 0评论
Debian 12 /11/ 安装 Docker
使用官方源安装 Docker
apt update
apt upgrade -y
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates
配置Docker的GPG和APT
curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
安装 Docker CE
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
此时可以使用 docker version 命令检查是否安装成功:
docker version
如何擦看容器ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mailer
容器端口映射管理
如何删除这个容器的 80 和443 端口映射
查看当前容易有哪些端口映射
docker container port mailer
如何删除这个容器的 80 和443 端口映射
停止容器:
docker container stop mailer
删除已经停止的容器:
docker container rm mailer
重新运行容器时不指定要删除的端口:
docker run --name mailer -d \
--restart unless-stopped \
--hostname "mail.supeweus.com" \
--publish 25:25 \
--publish 110:110 \
--publish 143:143 \
--publish 465:465 \
--publish 587:587 \
--publish 993:993 \
--publish 995:995 \
--publish 4910:4910 \
--env "TZ=Asia/Shanghai" \
--env "DISABLE_CLAMAV=TRUE" \
--env "DISABLE_RSPAMD=FALSE" \
--env "DISABLE_ROUNDCUBE=FALSE" \
--volume ./mailer:/data \
analogic/poste.io
如何让 mailer 和 容器绑定
sudo sh -c 'echo "172.17.0.2 mailer" >> /etc/hosts'
debian 11 vim 中文粘贴乱码
export LC_ALL=C.UTF-8
echo ":set encoding=utf-8" >> ~/.vimrc
检查容器的服务状态
使用 docker ps 命令查看正在运行的容器列表
进入该容器的命令行界面,查看容器内部的运行状态
docker exec -it mailer bash
在容器内部,检查 Poste.io 服务的运行状态:
ps aux | grep postfix
ps aux | grep dovecot
感谢 u.sb/debian-install-docker/
邮局搭建主体
邮局特性
SMTP + IMAP + POP3 + 反垃圾邮件 + 防病毒 + Web 管理 + Web 电子邮件
SPF、DKIM、DMARC、SRS 的原生实现
邮局要求
有独立IP
支持25端口及邮件发
建议内存2Gb以上
dns配置
记录类型 TYPE | 主机记录HOSTNAME | 记录值ADDRESS / VALUE |
---|---|---|
MX | @或者your-domain.com | mail.your-domain.com |
A | mail.your-domain.com | 1.2.3.4 (your ip) |
CNAME | imap.your-domain.com | mail.your-domain.com |
CNAME | smtp.your-domain.com | mail.your-domain.com |
CNAME | pop.your-domain.com | mail.your-domain.com |
TXT | @或者your-domain.com | v=spf1 mx ~all |
TXT | _dmarc | v=DMARC1; p=none; pct=100; rua=mailto:mail@your-domain.com |
TXT | _s20240910378._domainkey.your-domain.com | k=rsa;p=MII......... |
最后还需要到 VPS 服务商处添加一个反向 DNS,也就是 rDNS 解析,把 IP 解析到 mail.your-domain.com 这个邮件域名就好了,这个为可选项,有些 VPS 商家不提供这种服务。
设置DKIM验证
在poste后台 - Virtual domains - 点击对应域名 - DKIM key - 创建key,并按照要求设置txt记录解析。
设置PTR反向解析
PTR记录,是电子邮件系统中的邮件交换记录的一种;另一种邮件交换记录是A记录(在IPv4协议中)或AAAA记录(在IPv6协议中)。PTR记录常被用于反向地址解析。
域名解析到IP被称为正向解析,而IP指向到域名,则被称为反向解析,
反向解析需要在主机服务商处进行操作
添加SPF/DKIM/PTR解析,可提高邮件可信度,从而降低邮件进入垃圾箱的几率,必不可少的关键步骤。
设置TLS SSL
假如您的邮件域名为mail.your-domain.com,需要对这个域名申请SSL证书,可参考《使用acme.sh申请ZeroSSL泛域名证书,Let’s Encrypt替代品》或者在其它服务商申请SSL证书。
获得SSL证书后,打开poste后台 - System settings - TLS Certificate - 选择证书文件进行上传,见截图。
参考 watch?v=1Jr8MTNt4yE
启动容器
docker run --name mailer -d \ # mailer 为容器的名字 -d: 指定容器以后台模式运行(即守护态)。
--restart unless-stopped \ # 设置容器的重启策略为除非显式停止,否则重启。
--hostname "mail.your-domain.com" \ # 设置容器的主机名为 "mail.your-domain.com"
--publish 80:80 \ # 使用nginx,前端反代,可以不要这两行
--publish 443:443 \ # 使用nginx,反代,可以不要这两行
--publish 25:25 \ # SMTP 外部 到 容器的端口映射
--publish 110:110 \ # POP3
--publish 143:143 \ # IMAP
--publish 465:465 \ # SMTPS
--publish 587:587 \ # SMTP STARTTLS
--publish 993:993 \ # IMAPS 服务端口
--publish 995:995 \ # POP3S 服务端口
--publish 4910:4910 \ # 远程筛子设置
--env "TZ=Asia/Shanghai" \ # 设置时区
--env "DISABLE_CLAMAV=TRUE" \ # 禁用ClamAV反病毒功能,可大幅减低内存CPU占用
--env "DISABLE_RSPAMD=FALSE" \ # 不要禁用Rspamd反垃圾邮件功能,可大幅减低内存CPU占用
--env "DISABLE_ROUNDCUBE=FALSE" \ # 不要禁用WEB收发功能,非必要不建议禁止
--volume /mailer:/data \ # 主机上的 /mailer 目录挂载到容器内的 /data 目录。这个选项允许在容器内持久化保存数据,例如邮箱数据、配置文件等。
analogic/poste.io # 指定容器的镜像为 "analogic/poste.io",这是一个预配置了邮件服务器的 Docker 镜像,用于快速搭建邮件服务。
进入系统系统配置
最重要输入 mail.your-domain.com
邮件所有端口都支持 SSL加密
system settings ---》 TLS certificate --》change certificate settings --》 enabled -
--> common name : mail.your-domain.com
--> Alternative names : imap.your-domain.com, smtp.your-domain.com,pop.your-domain.com
--> then , Save Change
配置邮件客户端
第三方客户端 SMTP/IMAP/POP3 配置
协议 | 服务器地址 | 端口 | SSL |
SMTP | mail.your-domain.com,smtp.your-domain.com | 25, 465, 587 | STARTTLS |
IMAP | mail.your-domain.com,imap.your-domain.com | 993, 143 | STARTTLS |
POP3 | mail.your-domain.com,pop.your-domain.com | 995, 110 | STARTTLS |
参考 www.nodeseek.com/post-20417-1
参考 cloud.tencent.com/developer/article/2072016
参考 www.xiaowangc.com/archives/bd4820af.html 来源: 尤妤
代理 web界面
这是完整的nginx代理配置,请注意你需要将mailer连接到web服务所在的容器,才能使用$scheme://mailer进行反向代理,否则请使用mailer容器的ip地址。
使用脚本时,请注意修改里面的域名和证书路径。文件必须保存为UTF-8编码。
server {
listen 80;
listen [::]:80;
listen 443 ssl ;
listen [::]:443 ssl ;
ssl_certificate certs/mail.pem;
ssl_certificate_key certs/mail.key;
server_name mail.your-domain.com;
location / {
proxy_pass https://172.17.0.2;
# proxy_pass $scheme://mailer;
proxy_set_header Host $host;
# real-ip
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;
# websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_read_timeout 86400;
## replace content ##
sub_filter_once off;
sub_filter '撰写新邮件' '写信';
sub_filter 'Dark mode' '深色';
sub_filter 'Light mode' '浅色';
sub_filter '[Administration]' '控制台';
sub_filter '>Administration<' '>控制台<';
sub_filter 'Trusted Senders' '可信发件人';
sub_filter 'Collected Recipients' '收件人集合';
sub_filter '</style>' '\n.pro,.brand,.nav-sidebar p.alert{display:none !important}\n</style>';
}
}
惊喜彩蛋
细心的小伙伴应该发现了,nginx代理配置中有一段sub_filter代码。这就是我要说的彩蛋:
隐藏付费的pro菜单,使界面更加清爽。
修改部分WEB收发界面的英文菜单或描述。
感谢 : www.rehiy.com/post/509/
root@i-049dfde96baf12919:~# nginx -V | grep quic
nginx version: nginx-n.wtf/1.25.4
built with OpenSSL 3.2.1 30 Jan 2024
TLS SNI support enabled
configure arguments:
--with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC'
--with-openssl=/build/nginx/../openssl
--prefix=/usr/share/nginx
--conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock
--pid-path=/run/nginx.pid
--modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--with-compat
--with-debug
--with-pcre-jit
--without-pcre2
--with-http_ssl_module
--with-http_stub_status_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_v2_module
--with-http_v3_module
--with-http_dav_module
--with-http_slice_module
--with-threads
--with-http_addition_module
--with-http_flv_module
--with-http_geoip_module=dynamic
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_image_filter_module=dynamic
--with-http_mp4_module
--with-http_perl_module=dynamic
--with-http_random_index_module
--with-http_secure_link_module
--with-http_sub_module
--with-http_xslt_module=dynamic
--with-mail=dynamic
--with-mail_ssl_module
--with-stream=dynamic
--with-stream_geoip_module=dynamic
--with-stream_ssl_module
--with-stream_ssl_preread_module
--add-module=/build/nginx/sb-modules/ngx_brotli
--add-dynamic-module=/build/nginx/debian/modules/http-headers-more-filter
--add-dynamic-module=/build/nginx/debian/modules/http-auth-pam
--add-dynamic-module=/build/nginx/debian/modules/http-cache-purge
--add-dynamic-module=/build/nginx/debian/modules/http-dav-ext
--add-dynamic-module=/build/nginx/debian/modules/http-ndk
--add-dynamic-module=/build/nginx/debian/modules/http-echo
--add-dynamic-module=/build/nginx/debian/modules/http-fancyindex
--add-dynamic-module=/build/nginx/debian/modules/http-geoip2
--add-dynamic-module=/build/nginx/sb-modules/ngx_http_ipdb_module
--add-dynamic-module=/build/nginx/debian/modules/nchan
--add-dynamic-module=/build/nginx/debian/modules/http-lua
--add-dynamic-module=/build/nginx/debian/modules/rtmp
--add-dynamic-module=/build/nginx/debian/modules/http-uploadprogress
--add-dynamic-module=/build/nginx/debian/modules/http-upstream-fair
--add-dynamic-module=/build/nginx/debian/modules/http-subs-filter
一些后缀
statement@vpass.ne.jp
statement@vpass.ne.jp
statement@vpass.ne.jp
statement@vpass.ne.jp
mail@contact.vpass.ne.jp
mail@contact.vpass.ne.jp
mail@contact.vpass.ne.jp
mail@contact.vpass.ne.jp
mail@contact.vpass.ne.jp
mail@contact.vpass.ne.jp
ol_entry@smbc-card.com
SMBC_service@dn.smbc.co.jp
noreply@np-reply-contact-239.co.jp
no-reply@robinkamalmd.com
no-reply@robinkamalmd.com