凌峰创科服务平台

Linux邮件服务器sendmail如何配置与维护?

目录

  1. Sendmail 简介
  2. 核心概念
    • MTA (Mail Transfer Agent)
    • Sendmail 的主要配置文件
    • 工作流程
  3. 安装 Sendmail
  4. 基础配置
    • 生成 Sendmail 配置文件 (m4)
    • 配置主机名和域名
    • 设置允许中继的主机
    • 启动并启用 Sendmail
  5. 安全加固 (非常重要)
    • 配置 SMTP 认证
    • 配置 TLS/SSL 加密
    • 防止垃圾邮件
  6. 测试邮件服务器
    • 使用 sendmail 命令行测试
    • 使用 telnet/nc 手动测试 SMTP
    • 使用在线工具测试
  7. 常见问题与故障排查
    • 查看日志
    • 常见错误代码
  8. 现代替代品

Sendmail 简介

Sendmail 是一个开源的邮件传输代理,负责在邮件服务器之间发送和接收电子邮件,它通常被称为“邮件服务器的引擎”,因为它处理邮件的路由、排队和投递。

Linux邮件服务器sendmail如何配置与维护?-图1
(图片来源网络,侵删)
  • 优点:
    • 功能极其强大和灵活。
    • 高度可定制,支持各种复杂的路由规则。
    • 几乎在所有 Linux/Unix 系统上都可用。
  • 缺点:
    • 配置非常复杂,学习曲线陡峭。
    • 默认配置安全性不高,容易被滥发垃圾邮件。
    • 相比现代 MTA(如 Postfix),其配置文件格式(m4)对新手不友好。

重要提示: 对于新部署,很多人会选择 Postfix 作为 Sendmail 的替代品,因为它更易于配置、更安全,并且性能相当,但如果你需要维护遗留系统或使用特定于 Sendmail 的功能,了解 Sendmail 仍然很有必要。


核心概念

MTA (Mail Transfer Agent)

邮件传输代理是邮件系统的核心,它监听 25 端口,接收来自其他 MTA 或本地邮件用户代理(如 mail, mutt, Thunderbird)的邮件,并根据收件人地址决定将邮件发送到哪里。

Sendmail 的主要配置文件

  • /etc/mail/sendmail.cf: 核心配置文件,这是 Sendmail 启动时读取的主配置文件。强烈建议不要直接编辑此文件,因为它是通过 m4 宏处理器从其他文件生成的。
  • /etc/mail/: 配置目录,这里存放了用于生成 sendmail.cf 的源文件。
    • sendmail.mc: 主配置模板文件,这是你应该编辑的文件,它使用 m4 宏语言来定义服务器的行为。
    • access: 访问控制列表,用于控制哪些主机或 IP 地址可以中继(发送邮件)通过你的服务器。
    • local-host-names: 定义哪些域名或主机名是你的服务器负责接收邮件的本地域名。
    • virtusertable: 虚拟用户映射,用于将虚拟邮箱地址(如 webmaster@yourdomain.com)映射到本地系统用户。
  • /var/log/maillog/var/log/mail.log: 邮件日志文件,排查问题时最重要的文件。

工作流程

  1. 一封邮件需要发送到 user@example.com
  2. Sendmail 查询 DNS 的 MX (Mail Exchange) 记录,找到 example.com 的邮件服务器 IP 地址。
  3. Sendmail 连接到目标邮件服务器的 25 端口。
  4. 通过 SMTP 协议将邮件递交给目标服务器。
  5. 目标服务器将邮件投递到 user 的邮箱中。

安装 Sendmail

在基于 Red Hat/CentOS 的系统上:

# 更新软件包列表
sudo yum update -y
# 安装 sendmail 及相关组件
sudo yum install -y sendmail sendmail-cf

在基于 Debian/Ubuntu 的系统上:

Linux邮件服务器sendmail如何配置与维护?-图2
(图片来源网络,侵删)
# 更新软件包列表
sudo apt update
# 安装 sendmail
sudo apt install -y sendmail

安装完成后,Sendmail 通常是停止状态。


基础配置

步骤 1: 生成 Sendmail 配置文件

我们通过修改 sendmail.mc 模板文件,然后使用 m4 工具来生成最终的 sendmail.cf

# 切换到配置目录
cd /etc/mail
# 编辑主配置模板文件
sudo vi sendmail.mc

步骤 2: 配置主机名和域名

确保你的服务器主机名和域名设置正确,这通常在 /etc/hostname/etc/hosts 文件中配置。

# 查看当前主机名
hostname
# 设置主机名 ( mail.yourdomain.com)
sudo hostnamectl set-hostname mail.yourdomain.com
# 编辑 /etc/hosts 文件,确保有如下行
sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain
127.0.1.1   mail.yourdomain.com mail
# 你的服务器公网IP
203.0.113.10   mail.yourdomain.com mail

sendmail.mc 文件中,dnl 表示注释,找到类似 DOMAIN(generic) 的行,并根据你的域名进行修改,但通常,sendmail 会自动从系统主机名中获取这些信息。

Linux邮件服务器sendmail如何配置与维护?-图3
(图片来源网络,侵删)

步骤 3: 设置允许中继的主机

这是防止你的邮件服务器被“开放中继”(Spam Relay)的关键一步,默认情况下,Sendmail 只允许从本机发送邮件。

方法 A:允许特定 IP 发送邮件

编辑 /etc/mail/access 文件:

sudo vi /etc/mail/access

添加以下规则,允许来自特定 IP 或网段的邮件中继:

# 允许来自本地网络 192.168.1.0/24 的所有主机
192.168.1.      RELAY
# 允许来自特定 IP 203.0.113.20 的主机
203.0.113.20        RELAY
# 允许来自本机
localhost           RELAY
127.0.0.1           RELAY

保存后,需要将 access 文件编译为 access.db 数据库:

sudo makemap hash access.db < access

方法 B:启用 SMTP 认证(推荐) 更安全的方法是只允许经过认证的用户发送邮件,我们将在“安全加固”部分详细介绍。

步骤 4: 生成 sendmail.cf 并启动服务

  1. 生成配置文件: 在 /etc/mail 目录下运行:

    # 生成 sendmail.cf
    sudo make

    这个命令会读取 sendmail.mc 和其他 .mc 文件,并生成 sendmail.cf

  2. 启动并启用 Sendmail:

    # 启动 Sendmail 服务
    sudo systemctl start sendmail
    # 设置开机自启
    sudo systemctl enable sendmail
  3. 检查服务状态:

    sudo systemctl status sendmail

安全加固

A. 配置 SMTP 认证

这要求用户在发送邮件前提供用户名和密码,是防止滥用的核心措施。

  1. 安装 Cyrus SASL 库:

    # CentOS/RHEL
    sudo yum install -y cyrus-sasl cyrus-sasl-plain
    # Debian/Ubuntu
    sudo apt install -y sasl2-bin libsasl2-modules
  2. 编辑 sendmail.mc: 取消注释或添加以下行,以启用 SASL 认证:

    sudo vi /etc/mail/sendmail.mc

    找到并确保以下行存在且没有被注释掉(dnl):

    dnl TRUST_AUTH_MECH(`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

    修改为:

    TRUST_AUTH_MECH(`EXTERNAL GSSAPI LOGIN PLAIN')dnl
    define(`confAUTH_ME
分享:
扫描分享到社交APP
上一篇
下一篇