前言

如果你非常注重个人隐私和安全,不想用大厂的邮件服务,那么自己搭建一个邮件服务器是一个不错的选择; 而且用自己的域名作为邮箱的后缀是非常有意思的,也好看;
iRedMail是一套成熟稳定的邮件服务器系统,它免费,开源且拥有优秀的性能,全面实用的功能
Github地址 官网

准备工作

  • 确保你的服务器开启了25端口
    测试方法:

    telnet smtp.google.com 25 #谷歌邮箱地址
    或者
    telnet smtp.qq.com 25 #腾讯qq邮箱

没有屏蔽显示如下:

1
2
3
4
5
root@mail:~# telnet smtp.qq.com 25
Trying 43.129.255.54...
Connected to smtp.qq.com.
Escape character is '^]'.
220 newxmesmtplogicsvrsza9.qq.com XMail Esmtp QQ Mail Server.

屏蔽显示如下,一直在连接:

1
2
root@mail:~$ telnet smtp.qq.com 25
Trying 203.205.232.7...

很多云服务器基本都屏蔽了25端口,当你发现你的25端口被屏蔽了,可以试试发工单申请解封25端口

  • 一台干净的VPS(云服务器),内存最好在2GB左右,iRedMail支持多种系统,我将用Debian 11演示
  • VPS最好支持 PTR Records(反向DNS),这是一个加分项,不支持也没事
  • 一个域名(我将用自己的域名sitao.org演示)并托管到cloudflare;如果你没有域名,或是不会注册、不会托管到 cloudflare,请自行去找教程
  • 确定邮件服务器的域名,我的是mail.sitao.org, 在cloudflare把该域名解析成VPS的IP地址(A记录)

安装iRedMail

更新系统软件包

1
2
apt update
apt upgrade -y

设置主机名

我的域名为sitao.org,规划mail.sitao.org为邮箱域名

1
vim /etc/hostname

删除原来的主机名,写入mail,然后:wq保存退出
然后重启

1
reboot

重新ssh连接,修改**/etc/hosts**文件

1
vim /etc/hosts

找到127.0.0.1那行,改成以下内容(自行替换你自己的域名)

1
127.0.0.1 mail.sitao.org mail localhost

获取iRedMail

去官网下载页复制STABLE版本的下载链接:https://iredmail.com/download.html

1
2
3
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.4.tar.gz
tar -xzvf 1.6.4.tar.gz
cd iRedMail-1.6.4

开始安装

1
bash iRedMail.sh

接下来会进入图形化的安装界面
2023-09-09T07:53:57.png
回车确认
2023-09-09T07:55:01.png
输入安装目录,可以使用默认的/var/vmail,这里我自定义成/iredmail

2023-09-09T07:56:36.png
选择nginx作为web服务器

2023-09-09T07:57:24.png
(空格)选上MariaDB数据库

2023-09-09T07:58:42.png
设置数据库密码

2023-09-09T07:59:31.png
设置域,不可与 hostname 相同

2023-09-09T08:00:26.png
设置iredmail后台管理员密码

2023-09-09T08:01:11.png
选择需要安装的组件,这里直接回车就好

2023-09-09T08:01:55.png
输入y回车确认

然后它就会自己开始安装了,稍等片刻
即将结束安装的时候,它会问你是否使用使用iredmail防火墙规则什么的,选n就行
2023-09-16T08:16:04.png
安装完成后,它会提示你重启服务器
2023-09-16T08:16:14.png
reboot
至此,iRedMail邮件服务器搭建完毕

申请并配置SSL证书

使用ACME脚本申请证书
自行设置存放证书的目录,我放在/usr/里面

1
2
3
4
5
6
7
apt install socat cron -y
curl https://get.acme.sh | sh
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
source ~/.bashrc
acme.sh --set-default-ca --server letsencrypt
acme.sh --issue -d mail.sitao.org --standalone -k ec-256 --force
acme.sh --install-cert -d mail.sitao.org --fullchain-file /usr/iRedMail.crt --key-file /usr/iRedMail.key

配置SSL证书

1
vim /etc/nginx/sites-enabled/00-default-ssl.conf

写入ssl_certificate /usr/iRedMail.crt;和ssl_certificate_key /usr/iRedMail.key;
像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;

root /var/www/html;
index index.php index.html;

include /etc/nginx/templates/misc.tmpl;
include /etc/nginx/templates/ssl.tmpl;
include /etc/nginx/templates/iredadmin.tmpl;
include /etc/nginx/templates/roundcube.tmpl;
include /etc/nginx/templates/sogo.tmpl;
include /etc/nginx/templates/netdata.tmpl;
include /etc/nginx/templates/php-catchall.tmpl;
include /etc/nginx/templates/stub_status.tmpl;

ssl_certificate /usr/iRedMail.crt;
ssl_certificate_key /usr/iRedMail.key;
}

重新加载服务

1
2
3
service nginx reload
service postfix reload
service dovecot reload

禁用 iRedMail 灰名单

修改/opt/iredapd/settings.py文件

1
2
chmod +w /opt/iredapd/settings.py
vim /opt/iredapd/settings.py

找到这行plugins = [“reject_null_sender”, “wblist_rdns”, “reject_sender_login_mismatch”, “greylisting”, “throttle”, “amavisd_wblist”, “sql_alias_access_policy”]
将其中的 ”greylisting ” 这项删去

1
plugins = ["reject_null_sender", "wblist_rdns", "reject_sender_login_mismatch", "throttle", "amavisd_wblist", "sql_alias_access_policy", "sql_ml_access_policy"]

重启 iredapd

1
service iredapd restart

Cloudflare配置并解析域名

A记录

将 mail.sitao.org的A 记录指向你VPS的ip
2023-09-09T08:22:03.png
IPv4 address (required)那里填你VPS的ip

MX 记录

2023-09-09T08:24:09.png
邮件的解析记录,这是一条非常重要的记录
配置根域名的 MX 记录为自己的邮件域名地址,优先级为10

SPF 记录

2023-09-09T08:26:45.png
类型是TXT,名称sitao.org,内容v=spf1 mx ~all

DKIM记录

1
cat /root/iRedMail-1.6.4/iRedMail.tips

找到这一行
2023-09-09T08:29:04.png
将()里的内容全部复制出来,去除其中所有引号以及空格使文本内容相连
像这样:

v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2AaOpZZu+Ur0vBHJXB7msA65BcqBdFcfyoxt9zLOlrWMP5EAqOb7oGWRAYsYrMumodsLPZypqkjyKlm3IpZvVmVz2FawS21p8E/qaTaxtsiIfGgMlBGv7JiqgCNauhhE5vubLbqVqzM9X38W/fNFK9Zg1noK9ko8Pv+jmF3yAc2s9dGopa+SAcM9AHp68gihOCzlupIyjUfK0Mt1MCgvPHlSjBnWN9r2WDcK2oCGjUHrQV0rmXXqhNJGNIkvCVzO9lJ5rQTRtPzV4zBpQwwjZxWHO7Wh4+hR3O+OmtyoR/KIMmRHHrMd4nPRZ81ztJRsgIaWZbWVpwUxpz5qlZyYWQIDAQAA

添加一条名称为dkim._domainkey 的 TXT 解析
2023-09-09T08:31:36.png

DMARC 记录

增加一条 _dmarc的TXT 解析,内容为v=DMARC1; p=none; pct=100; rua=mailto:dmarc@sitao.org(改成你自己的域名)
2023-09-09T08:32:59.png

至此,域名解析工作已完成
访问

https://你的域名/mail        ——邮件登录地址
https://你的域名/netdata     ——服务器状态监控
https://你的域名/iredadmin   ——邮件服务器后台管理
管理员账号:postmaster@你的域  例如 postmaster@sitao.org

例如:
访问https://你的域名/mail/
使用你的管理员账号postmaster@你的域和你之前设置的管理员密码登录
2023-09-09T08:38:22.png
可以看到我们收到了三封邮件

添加用户及使用

访问https://你的域名/iredadmin,使用你的管理员账号postmaster@你的域和你之前设置的管理员密码登录
选择中文更加友好
2023-09-09T08:42:19.png

点击添加用户
2023-09-09T08:43:27.png

填入信息,点击下方的添加
2023-09-09T08:44:14.png

然后可以看到成功填加了用户

接下来可以验证新用户是否能正常使用:
访问https://你的域名/mail,使用新用户的账号密码登录,如果登录成功,说明可以正常使用
然后你就可以开始个性化设置了

最后,关于iredmail的备份和迁移可以查阅官方文档

https://docs.iredmail.org/backup.restore.html
https://docs.iredmail.org/migrate.to.new.iredmail.server.html
不过,你可能会被官方的文档弄得晕头转向,我介绍一种比较简单方便的迁移方法:
(适用场景:迁移邮件服务器;旧服务器和新服务器需安装相同版本的iRedMail)

旧服务器需要进行的操作:

备份数据库

1
mysqldump -uroot  -P3306 --databases vmail > vmail.sql

备份邮件数据

1
tar -czvf iredmail.tar.gz -c /iredmail(你设置的iredmail安装目录,我的是/iredmail)

保存好域名证书

我的是/usr/iRedMail.crt和/usr/iRedMail.key

接着,将vmail.sql、iredmail.tar.gz上传到新服务器root目录里,把iRedMail.crt和iRedMail.key放到新服务器的/usr目录里(旧服务器放在哪你就放在哪)

新服务器需要进行的操作:
按照上面的教程重新安装好iredmail,安装好后删除安装目录

1
rm -rf /iredmail

导入数据库

1
2
3
mysql -uroot
use vmail
source ~/vmail.sql

然后退出

解压压缩包

1
tar -xzvf iredmail.tar.gz -C /

设置证书

1
vim /etc/nginx/sites-enabled/00-default-ssl.conf

写入ssl_certificate /usr/iRedMail.crt;和ssl_certificate_key /usr/iRedMail.key;(跟上面教程一样)
重新加载服务

1
nginx -s reload

然后,在Cloudflare把邮件域名解析到新服务器的ip(A记录)
稍等片刻,等解析生效后就可以登录使用了