Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第十章 自建邮件服务器实践指南

自建邮件服务器可以完全掌控自己的邮件数据,避免第三方服务商的隐私风险,同时可以定制化功能。本章将从零开始,讲解自建邮件服务器的完整流程,包括服务器选型、基础配置、高级配置、监控维护、安全加固等内容。

7.1 自建邮件服务器的准备工作

7.1.1 自建邮件服务器的优缺点

优点

  • 数据完全自主可控,隐私性好
  • 可以自定义域名,提升企业形象
  • 无容量限制,无附件大小限制(自己可控)
  • 可以定制化功能和规则
  • 长期使用成本低

缺点

  • 需要一定的技术能力维护
  • 需要处理IP信誉、反垃圾等问题
  • 24小时运行,需要保证服务器稳定
  • 需要遵守相关法规,不能发送垃圾邮件

7.1.2 服务器选型

硬件配置

根据用户规模选择配置:

用户规模CPU内存硬盘带宽
1-10人1核1GB40GB SSD1Mbps
10-100人2核4GB100GB SSD2Mbps
100-1000人4核8GB500GB SSD5Mbps
1000人以上8核+16GB+1TB+ SSD10Mbps+

服务器位置选择

  • 优先选择国内主流云服务商(阿里云、腾讯云、华为云等)的国内节点,国内访问速度快
  • 如果需要发送国际邮件,选择香港或海外节点
  • 注意:很多云服务商默认封禁25端口,需要提前申请解封25端口

IP地址要求

  • 需要公网静态IP地址
  • 确保IP没有被列入垃圾邮件黑名单
  • 可以到https://www.spamhaus.org/lookup/ 查询IP信誉
  • 尽量使用新的、没有历史不良记录的IP

7.1.3 域名准备

  1. 注册一个自己的域名,比如example.com
  2. 确保域名可以正常解析,有管理权限
  3. 提前准备好域名解析配置:
    • A记录:mail.example.com → 服务器IP
    • MX记录:example.com → mail.example.com 优先级10
    • PTR记录(反向解析):服务器IP → mail.example.com(需要联系服务器提供商配置)

7.1.4 操作系统选择

推荐使用Linux操作系统:

  • CentOS 7/8/Stream(稳定、兼容性好、文档多)
  • Ubuntu 20.04/22.04 LTS(软件新、维护周期长)
  • Debian 11/12(稳定、轻量)
  • 最小化安装操作系统,安装后更新系统到最新版本

7.1.5 部署方案选择

部署方案特点适用场景
一键部署脚本(iRedMail、Mail-in-a-Box)简单快速,几分钟就能部署完成新手、快速部署、不想折腾
手动分步部署灵活可控,可自定义每个组件有一定技术能力、需要定制化
容器化部署(Docker)部署快、易于迁移、便于维护熟悉Docker的用户

7.2 使用iRedMail一键部署邮件服务器

iRedMail是最流行的开源邮件服务器一键部署脚本,集成了所有需要的组件,部署简单,功能完整,适合绝大多数场景。

7.2.1 部署前准备

  1. 服务器基本配置:
# 设置主机名
hostnamectl set-hostname mail.example.com

# 编辑/etc/hosts文件,添加主机名解析
echo "你的服务器IP mail.example.com mail" >> /etc/hosts

# 关闭SELinux(CentOS/RHEL)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 关闭防火墙或开放需要的端口
systemctl stop firewalld
systemctl disable firewalld
  1. 需要开放的端口: | 端口 | 服务 | 说明 | |——|——|——| | 25 | SMTP | 邮件传输 | | 587 | Submission | 客户端邮件提交(带认证) | | 465 | SMTPS | SMTP over TLS | | 143 | IMAP | 邮件接收 | | 993 | IMAPS | IMAP over TLS | | 110 | POP3 | 邮件接收 | | 995 | POP3S | POP3 over TLS | | 80 | HTTP | Webmail、管理面板(自动跳转HTTPS) | | 443 | HTTPS | Webmail、管理面板 |

  2. 下载iRedMail安装包:

# 下载最新版本,到官网https://www.iredmail.org/查看最新版本号
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.7.tar.gz
tar zxf 1.6.7.tar.gz
cd iRedMail-1.6.7/

7.2.2 开始安装

  1. 运行安装脚本:
bash iRedMail.sh
  1. 按照提示进行配置:

    • 选择存储邮件的目录,默认/var/vmail
    • 选择Web服务器,推荐Nginx
    • 选择数据库,推荐MariaDB或PostgreSQL
    • 设置数据库root密码
    • 设置第一个邮件域名,比如example.com
    • 设置域名管理员[email protected]的密码
    • 选择需要安装的组件:Roundcube Webmail、SOGo群件、iRedAdmin管理面板、Fail2ban等
    • 确认配置,开始安装
  2. 安装完成后,重启服务器:

reboot

7.2.3 安装后配置

1. DNS记录配置

安装完成后,根据提示配置DNS记录:

  • MX记录:example.com → mail.example.com 优先级10
  • A记录:mail.example.com → 服务器IP
  • SPF记录:example.com TXT “v=spf1 ip4:你的服务器IP ~all”
  • DKIM记录:在iRedMail安装完成提示中获取DKIM公钥,配置到DNS:
    dkim._domainkey.example.com TXT "v=DKIM1; k=rsa; p=公钥内容"
    
  • DMARC记录
    _dmarc.example.com TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
    
  • PTR反向解析:联系服务器提供商配置IP反向解析为mail.example.com

2. SSL证书配置

iRedMail默认使用自签名证书,需要替换为可信的SSL证书:

# 使用Let's Encrypt申请免费证书
certbot certonly --webroot -w /var/www/html -d mail.example.com

# 替换iRedMail的证书
cp /etc/letsencrypt/live/mail.example.com/fullchain.pem /etc/pki/tls/certs/iRedMail.crt
cp /etc/letsencrypt/live/mail.example.com/privkey.pem /etc/pki/tls/private/iRedMail.key

# 重启相关服务
systemctl restart nginx postfix dovecot

3. 访问服务

  • Webmail:https://mail.example.com/mail
  • 管理面板:https://mail.example.com/iredadmin
  • 登录账号:[email protected],密码是安装时设置的

7.2.4 基础功能测试

  1. 发送测试邮件:登录Webmail,给其他邮箱(比如163、Gmail)发送测试邮件,检查是否能正常收到
  2. 接收测试邮件:用其他邮箱给测试账号发邮件,检查是否能正常收到
  3. 客户端配置测试:用Outlook、手机邮箱等客户端配置IMAP/SMTP,测试收发邮件
  4. 邮件认证测试:到https://www.mail-tester.com/ 测试邮件评分,理想情况10分满分

7.3 手动部署邮件服务器(进阶)

对于需要定制化的用户,可以手动部署每个组件,下面以CentOS 8为例,讲解手动部署Postfix + Dovecot + Roundcube的过程。

7.3.1 安装和配置Postfix

# 安装Postfix
yum install postfix -y

# 编辑主配置文件/etc/postfix/main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
smtpd_tls_key_file = /etc/pki/tls/private/mail.key
smtpd_use_tls = yes

# 编辑master.cf启用submission端口
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o smtpd_tls_security_level=encrypt

# 启动Postfix
systemctl start postfix
systemctl enable postfix

7.3.2 安装和配置Dovecot

# 安装Dovecot
yum install dovecot -y

# 编辑主配置文件/etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *

# 编辑/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login

# 编辑/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

# 编辑/etc/dovecot/conf.d/10-master.conf
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

# 编辑/etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/pki/tls/certs/mail.crt
ssl_key = </etc/pki/tls/private/mail.key

# 启动Dovecot
systemctl start dovecot
systemctl enable dovecot

7.3.3 安装和配置Roundcube Webmail

# 安装Nginx、PHP、MariaDB
yum install nginx php php-fpm php-mysqlnd mariadb-server -y

# 下载Roundcube
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.0/roundcubemail-1.6.0-complete.tar.gz
tar zxf roundcubemail-1.6.0-complete.tar.gz
mv roundcubemail-1.6.0 /usr/share/nginx/html/roundcube
chown -R nginx:nginx /usr/share/nginx/html/roundcube

# 配置Nginx虚拟主机,指向Roundcube目录
# 配置数据库,创建roundcube数据库和用户
# 访问https://mail.example.com/roundcube/installer 完成安装

7.4 邮件服务器的日常运维

7.4.1 日常监控

  1. 服务状态监控
    # 检查服务状态
    systemctl status postfix dovecot nginx mariadb fail2ban
    
    # 查看邮件队列
    postqueue -p
    
    # 查看日志
    tail -f /var/log/maillog
    
  2. 监控指标
    • 服务是否正常运行
    • 邮件队列是否有积压
    • 磁盘使用率
    • CPU、内存使用率
    • 垃圾邮件拦截率
    • 退信率

7.4.2 常见问题排查

1. 邮件发不出去

  • 检查25端口是否被云服务商封禁
  • 检查IP是否被列入垃圾邮件黑名单
  • 检查SPF、DKIM、DMARC配置是否正确
  • 查看maillog日志,看具体错误信息
  • 测试telnet对方25端口是否能连通

2. 邮件收不到

  • 检查MX记录配置是否正确
  • 检查防火墙是否开放25端口
  • 检查邮件是否被拦截到垃圾邮件文件夹
  • 查看maillog日志,看是否有接收记录

3. 邮件被标记为垃圾邮件

  • 检查SPF、DKIM、DMARC配置是否正确
  • 检查PTR反向解析是否配置
  • 检查IP是否在黑名单中
  • 邮件内容不要包含敏感词、广告内容
  • 不要大量发送类似内容的邮件

7.4.3 安全维护

  1. 定期更新系统和软件
    yum update -y  # CentOS
    apt update && apt upgrade -y  # Ubuntu/Debian
    
  2. 定期备份
    • 备份邮件数据:/var/vmail目录
    • 备份数据库:用户账号、配置信息
    • 备份配置文件:/etc/postfix、/etc/dovecot等目录
    • 备份到异地存储,定期测试恢复
  3. 安全加固
    • 禁用密码登录,使用SSH密钥登录
    • 启用Fail2ban,防止暴力破解
    • 定期修改密码,使用强密码
    • 定期扫描安全漏洞

7.5 邮件服务器性能优化

7.5.1 系统层面优化

  1. 调整文件描述符限制:
    # /etc/security/limits.conf
    * soft nofile 65535
    * hard nofile 65535
    
  2. 调整内核参数:
    # /etc/sysctl.conf
    net.core.somaxconn = 1024
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_fin_timeout = 30
    fs.file-max = 65535
    
  3. 使用SSD硬盘,提高IO性能
  4. 加大内存,提高文件系统缓存

7.5.2 应用层面优化

  1. Postfix优化:
    • 调整进程数,根据CPU核心数配置
    • 调整队列参数,提高吞吐量
    • 启用缓存,减少重复查询
  2. Dovecot优化:
    • 启用索引缓存,提高搜索速度
    • 调整IMAP进程数,支持更多并发连接
    • 使用dbox格式代替Maildir,提高性能
  3. 反垃圾邮件优化:
    • 启用缓存,减少重复扫描
    • 调整规则,提高识别率,降低误判率

7.6 自建邮件服务器的注意事项

  1. 不要发送垃圾邮件:否则IP会被列入黑名单,所有邮件都会被拦截
  2. 遵守法规:符合《网络安全法》、《个人信息保护法》等相关法规
  3. IP信誉维护:保持良好的发送行为,维护IP信誉
  4. 做好备份:一定要定期备份数据,防止数据丢失
  5. 及时更新:及时更新安全补丁,防止被黑客入侵
  6. 监控告警:配置监控告警,出现问题及时处理

本章小结

本章详细讲解了自建邮件服务器的完整流程,从准备工作、一键部署、手动部署,到日常运维、性能优化、常见问题排查。自建邮件服务器需要一定的技术能力,但是可以获得完全的控制权和隐私性,适合对数据安全和隐私要求高的用户和企业。

在下一章中,我们将讲解邮件系统的高级主题,包括系统集成、API、自动化、AI应用等内容。