CentOS 7 搭建 Sendmail + Dovecot 邮件服务器:SMTP、POP3、IMAP 与 TLS

# CentOS 7 搭建 Sendmail + Dovecot 邮件服务器:SMTP、POP3、IMAP 与 TLS

1. 服务介绍

Sendmail 是经典邮件传输代理 MTA,负责通过 SMTP 接收、路由和投递邮件。Dovecot 提供 POP3、IMAP 和用户认证,使客户端能够读取服务器邮箱。

本实验在 CentOS 7 搭建适合教学和内网测试的邮件系统:Sendmail 负责 SMTP 与本地投递,Dovecot 负责 POP3/IMAP,TLS 保护客户端与服务器之间的连接。

2. 准备运行环境

• 服务端:CentOS 7.x,主机名 mail.example.com,地址 10.1.100.101

• 客户端:Linux 或 Windows,地址 10.1.100.102

• 邮件域:example.com

• 操作权限:root 或具备 sudo 权限的管理员账号。

• 网络要求:软件源可用,服务端和客户端互通。

• DNS 要求:实验环境至少配置 mail.example.com 的 A 记录和 example.com 的 MX 记录。

bash 复制代码
hostnamectl set-hostname mail.example.com
echo '10.1.100.101 mail.example.com mail' >> /etc/hosts
hostname -f
ip addr
ip route
yum repolist

示例 DNS 记录:

dns 复制代码
mail.example.com.    IN A     10.1.100.101
example.com.         IN MX 10 mail.example.com.

3. 相关知识

• Sendmail 是 MTA,负责 SMTP 收发和路由;Dovecot 是邮件访问服务,负责 POP3、IMAP 和认证。

• SMTP 常用 TCP 25;客户端提交常用 587;SMTPS 常用 465。IMAP 使用 143/993,POP3 使用 110/995。

• Sendmail 默认可能只监听回环地址。允许远程连接前必须检查 DAEMON_OPTIONS

• CentOS 7 常默认安装 Postfix。Sendmail 与 Postfix 不能同时占用 TCP 25,切换前应停止并禁用 Postfix。

/etc/mail/sendmail.mc 是主要模板;修改后用 make -C /etc/mail 生成 sendmail.cf,不要直接长期维护生成文件。

/etc/mail/access 控制允许、拒绝和中继来源。错误配置 RELAY 会形成开放中继,被滥用发送垃圾邮件。

• 本实验只允许回环和 10.1.100.0/24 内网中继,不向任意互联网地址开放转发。

• MX 记录决定域的收信服务器;A 记录解析邮件主机;PTR 反向解析、SPF、DKIM、DMARC 影响公网投递信誉。

• Sendmail 本地投递默认使用 mbox 邮箱。本文让 Dovecot 读取 /var/spool/mail/用户名

• TLS 只加密传输,不替代账号权限、中继限制和反垃圾策略。

4. 实验步骤

4.1 安装软件并处理 MTA 冲突

bash 复制代码
yum -y install sendmail sendmail-cf dovecot mailx openssl

systemctl disable --now postfix 2>/dev/null || true
ss -lntp | grep ':25 '

alternatives --set mta /usr/sbin/sendmail.sendmail
alternatives --display mta

确认 Sendmail 组件:

bash 复制代码
rpm -q sendmail sendmail-cf dovecot mailx
sendmail -d0.1 -bv root

4.2 创建邮件用户和邮箱

bash 复制代码
useradd alice
useradd bob
passwd alice
passwd bob

touch /var/spool/mail/alice /var/spool/mail/bob
chown alice:mail /var/spool/mail/alice
chown bob:mail /var/spool/mail/bob
chmod 660 /var/spool/mail/alice /var/spool/mail/bob

检查账号和邮箱:

bash 复制代码
id alice
id bob
ls -l /var/spool/mail/alice /var/spool/mail/bob

4.3 配置 Sendmail 基本参数

备份配置:

bash 复制代码
cp -a /etc/mail/sendmail.mc /etc/mail/sendmail.mc.bak.$(date +%F-%H%M%S)
cp -a /etc/mail/access /etc/mail/access.bak.$(date +%F-%H%M%S)

编辑 /etc/mail/sendmail.mc。找到仅监听 127.0.0.1 的行:

m4 复制代码
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

在行首加 dnl 注释,使 Sendmail 按系统网络配置监听 SMTP:

m4 复制代码
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

MAILER 定义之前加入本地域和主机名:

m4 复制代码
define(`confDOMAIN_NAME', `mail.example.com')dnl
LOCAL_DOMAIN(`example.com')dnl
MASQUERADE_AS(`example.com')dnl
FEATURE(`masquerade_envelope')dnl

把本地域写入 /etc/mail/local-host-names

text 复制代码
example.com
mail.example.com

4.4 配置中继范围

编辑 /etc/mail/access

text 复制代码
Connect:127.0.0.1        RELAY
Connect:10.1.100          RELAY

生成 access 数据库:

bash 复制代码
makemap hash /etc/mail/access.db < /etc/mail/access

Connect:10.1.100 只适用于本实验网段。生产环境应缩小到实际客户端网段,或使用经过认证的 587 提交服务,禁止配置 Connect:0 RELAY

4.5 生成 TLS 证书

实验环境生成自签名证书:

bash 复制代码
mkdir -p /etc/pki/mail/private
openssl req -new -x509 -nodes -days 3650 -newkey rsa:2048 \
  -keyout /etc/pki/mail/private/mail.key \
  -out /etc/pki/mail/mail.crt \
  -subj '/C=CN/ST=Lab/L=Lab/O=Example/OU=IT/CN=mail.example.com'

chmod 600 /etc/pki/mail/private/mail.key
chmod 644 /etc/pki/mail/mail.crt

sendmail.mcMAILER 定义前加入:

m4 复制代码
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/mail/mail.crt')dnl
define(`confSERVER_KEY', `/etc/pki/mail/private/mail.key')dnl

生成配置并检查:

bash 复制代码
make -C /etc/mail
sendmail -C /etc/mail/sendmail.cf -bt -d0.4 </dev/null

4.6 配置 Dovecot

备份配置目录:

bash 复制代码
cp -a /etc/dovecot /etc/dovecot.bak.$(date +%F-%H%M%S)

编辑 /etc/dovecot/dovecot.conf

conf 复制代码
protocols = imap pop3
listen = *

编辑 /etc/dovecot/conf.d/10-mail.conf

conf 复制代码
mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u

编辑 /etc/dovecot/conf.d/10-auth.conf

conf 复制代码
disable_plaintext_auth = yes
auth_mechanisms = plain login

编辑 /etc/dovecot/conf.d/10-ssl.conf

conf 复制代码
ssl = required
ssl_cert = </etc/pki/mail/mail.crt
ssl_key = </etc/pki/mail/private/mail.key

检查 Dovecot 最终配置:

bash 复制代码
doveconf -n
doveconf -n | egrep 'protocols|listen|mail_location|ssl|auth_mechanisms'

4.7 配置防火墙并启动服务

bash 复制代码
firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-service=imap
firewall-cmd --permanent --add-service=imaps
firewall-cmd --permanent --add-service=pop3
firewall-cmd --permanent --add-service=pop3s
firewall-cmd --reload

systemctl enable --now sendmail dovecot
systemctl restart sendmail dovecot

不要关闭 SELinux。Sendmail 和 Dovecot 使用系统默认路径时,发行版策略通常已包含所需权限。出现拒绝时先检查 AVC 日志。

4.8 本机发送测试邮件

bash 复制代码
echo 'Sendmail local delivery test' | mail -s 'local test' alice
sleep 2
mail -u alice

也可以直接调用 Sendmail:

bash 复制代码
sendmail -v alice@example.com <<'EOF'
From: root@example.com
To: alice@example.com
Subject: Sendmail SMTP test

This is a Sendmail test message.
EOF

5. 验证结果

5.1 验证服务和端口

bash 复制代码
systemctl --no-pager --full status sendmail dovecot
ss -lntp | egrep ':25|:110|:143|:993|:995'
firewall-cmd --list-services

预期 Sendmail 监听 TCP 25,Dovecot 监听 110、143、993、995;若配置 ssl = required,明文端口会要求升级到 TLS。

5.2 验证 DNS

bash 复制代码
dig +short A mail.example.com
dig +short MX example.com
dig +short -x 10.1.100.101

内网实验没有反向 DNS 时,PTR 可能为空;公网邮件服务器应由地址提供商配置正确 PTR。

5.3 验证 Sendmail 路由、队列和日志

bash 复制代码
sendmail -bv alice@example.com
mailq
mailstats
grep -E 'sendmail|dovecot' /var/log/maillog | tail -n 100
journalctl -u sendmail -u dovecot -n 100 --no-pager

查看邮箱是否收到邮件:

bash 复制代码
ls -lh /var/spool/mail/alice
tail -n 40 /var/spool/mail/alice

5.4 验证 SMTP 与 TLS

bash 复制代码
openssl s_client -starttls smtp -connect mail.example.com:25 -servername mail.example.com

连接后应看到 Sendmail SMTP 欢迎信息和证书信息。输入 EHLO client.example.com 可查看服务能力。

5.5 验证 Dovecot 认证和收信协议

bash 复制代码
doveadm auth test alice
openssl s_client -connect mail.example.com:993 -servername mail.example.com
openssl s_client -connect mail.example.com:995 -servername mail.example.com

Windows 或其他邮件客户端参数:

• 收件服务器:mail.example.com,IMAPS 端口 993,或 POP3S 端口 995。

• 发件服务器:mail.example.com,SMTP 端口 25,仅限实验网段。

• 用户名:alice;密码:Linux 用户密码。

• 自签名证书会触发信任提示,生产环境应更换受信任证书。

服务状态正常、端口监听正确、本地邮件进入 /var/spool/mail/alice、Dovecot 认证成功、TLS 握手正常,说明 Sendmail 与 Dovecot 邮件系统配置生效。

相关推荐
明日清晨1 小时前
printf(“%p\n“,&((struct A *)NULL)->m_float)的原理
linux·服务器·前端
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_context_add_spa_lib调用流程与实战(二十九)
linux·运维·服务器·音频进阶·pipewire音频进阶
Dovis(誓平步青云)3 小时前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
草莓熊Lotso3 小时前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
byte轻骑兵3 小时前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
纪伊路上盛名在3 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥3 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
AndyHeee4 小时前
Linux 内核底层机制:设备树(Device Tree)的数据结构与内存组织
linux·前端·数据结构
XH华4 小时前
Linux系统第二章:常见的Linux指令(上)
linux·运维·服务器