标签

Honeymoon - Thomas Ng

归档

近期文章

Debian上Postfix搭建一个 SMTP 服务器

要在 Debian 上搭建一个 SMTP 服务器并使用 smtp.owen.com 作为域名,可以按照以下步骤操作:

1. 安装 Postfix

Postfix 是一个流行的邮件传输代理(MTA),可以用于发送和接收电子邮件。

sudo apt update
sudo apt install postfix

在安装过程中,选择 “Internet Site” 选项并输入您的服务器的主机名(可以使用 smtp.owen.com)。

2. 配置 Postfix

编辑 Postfix 配置文件来设置域名和基本参数。

sudo nano /etc/postfix/main.cf

确保以下配置存在并正确设置:

myhostname = smtp.owen.com
mydomain = owen.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relayhost = 
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/

3. 配置 SSL/TLS 加密(可选,但强烈推荐)

如果你想使用加密的连接(推荐),需要为 Postfix 配置 SSL/TLS。首先,安装 postfix 的 SSL 支持:

sudo apt install postfix-cdb postfix-doc

生成 SSL 证书(如果你没有证书,可以使用 Let’s Encrypt):

sudo mkdir /etc/ssl/certs
sudo mkdir /etc/ssl/private
# 生成自签名证书(仅用于测试,生产环境推荐使用 Let's Encrypt 或其他 CA 证书)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/smtpd.key -out /etc/ssl/certs/smtpd.crt

然后,配置 Postfix 使用这些证书:

sudo vim /etc/postfix/main.cf

确保以下设置已启用:

smtpd_tls_wrappermode = yes
smtpd_tls_auth_only = yes
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/private/smtpd.key
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtpd_tls_security_level = may

smtpd.key对应private.pem smtpd.crt对应fullchain.crt ca-certificates.crt对应certificate.crt

4. 配置 SPF、DKIM 和 DMARC(确保邮件不被标记为垃圾邮件)

为了确保您的邮件不被当作垃圾邮件处理,您应该配置 SPF、DKIM 和 DMARC 记录。 在 Postfix 安装和配置过程中,SPF、DKIM 和 DMARC 记录通常不会在 Postfix 的配置界面中设置。它们是需要在您的 DNS 配置中手动添加的。

以下是如何在 DNS 配置中添加这些记录的步骤:

1. 添加 SPF 记录

SPF(Sender Policy Framework) 记录用来指定哪些服务器可以为您的域发送电子邮件。这有助于防止垃圾邮件和伪造邮件。

  • SPF 记录格式

    v=spf1 mx ~all

    解释:

    • v=spf1:表示 SPF 记录的版本。
    • mx:允许从您的域的 MX 服务器发送邮件。
    • ~all:表示“软失败”,即如果邮件来自没有在 SPF 记录中列出的服务器,则将其标记为可疑邮件。
  • 添加 SPF 记录

    1. 登录到您的域名提供商的 DNS 管理面板。
    2. 找到 DNS 配置DNS 设置 部分。
    3. 添加一个 TXT 记录,记录的名称为 @ 或留空(通常表示根域),值为上面的 SPF 记录:
    @  IN  TXT  "v=spf1 mx ~all"

2. 添加 DKIM 记录

DKIM(DomainKeys Identified Mail) 记录用于加密邮件的签名,确保邮件内容未被篡改。

  1. 安装并配置 DKIM(Postfix 上使用 OpenDKIM)

    • 您需要安装并配置 DKIM 服务(如 opendkim)来生成 DKIM 密钥对,然后将公钥发布到 DNS 中。
  2. 生成 DKIM 密钥: 使用 opendkim-genkey 命令生成 DKIM 密钥。假设您要为域 owen.com 生成密钥:

     sudo mkdir -p /etc/opendkim/keys/owen
     cd /etc/opendkim/keys/owen
    sudo opendkim-genkey -s default -d owen.com

    这会生成两个文件:

    • default.private(私钥)
    • default.txt(包含公钥的 DNS 记录)
  3. 将公钥添加到 DNS: 打开 default.txt 文件,它会包含类似以下内容:

    default._domainkey  IN  TXT  ("v=DKIM1; k=rsa; p=MIIBIjANBgkqh...")

    复制并将该内容作为 TXT 记录添加到您的 DNS 配置中,记录名称通常为 default._domainkey

    • 记录名称default._domainkey
    • 记录类型:TXT
    • 记录值v=DKIM1; k=rsa; p=MIIBIjAN...
  4. 配置 Postfix 使用 DKIM: 安装并配置 opendkim,让它与 Postfix 配合工作,确保您的邮件被签名。

3. 添加 DMARC 记录

DMARC(Domain-based Message Authentication, Reporting & Conformance) 记录定义了域的邮件处理策略,以防止垃圾邮件和邮件伪造。

  • DMARC 记录格式

    v=DMARC1; p=none; rua=mailto:dmarc-reports@owen.com; ruf=mailto:dmarc-reports@owen.com; sp=none; aspf=r;

    解释:

    • v=DMARC1:表示 DMARC 记录的版本。
    • p=none:表示没有执行任何具体的邮件处理策略,只是监控。
    • rua:邮件报告发送到的邮箱地址。
    • ruf:失败报告发送到的邮箱地址。
    • sp=none:为子域设置相同的策略。
    • aspf=r:表示宽松的对齐模式。
  • 添加 DMARC 记录

    1. 登录到您的 DNS 提供商的控制面板。
    2. 找到 DNS 设置
    3. 添加一个新的 TXT 记录,记录的名称为 _dmarc,值为上述的 DMARC 记录:
    _dmarc.owen.com  IN  TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@owen.com; ruf=mailto:dmarc-reports@owen.com; sp=none; aspf=r;"

4. 验证记录是否生效

配置好 SPF、DKIM 和 DMARC 记录后,您可以使用以下工具验证它们是否正确设置:

通过这些工具,您可以检查您的 DNS 记录是否已成功添加并生效。


5. 配置防火墙

确保您的服务器的防火墙允许 SMTP 流量,尤其是端口 25、465 和 587:

sudo ufw allow 25,465,587/tcp

6. 重启 Postfix 服务

完成配置后,重启 Postfix 服务使更改生效:

sudo systemctl enable postfix
sudo systemctl status postfix
sudo systemctl start postfix
sudo systemctl restart postfix
sudo systemctl stop postfix

7. 配置客户端

在邮件客户端(如 Outlook、Thunderbird 等)中配置 SMTP 服务器,使用以下设置:

  • SMTP 服务器:smtp.owen.com
  • 端口:25(未加密)、465(SSL 推荐)、587(TLS)
  • 认证方式:登录
  • 用户名:邮箱地址(如 test@owen.com
  • 密码:邮箱密码

添加用户test

sudo adduser test
```bash
然后输入密码
确认密码就可以了

### 8. 测试 SMTP 服务器
可以使用 `telnet` 或 `nc` 命令来测试 SMTP 服务器是否正常工作:

```bash
telnet smtp.owen.com 25

成功连接到 smtp.owen.com 的 25 端口,表示您的 SMTP 服务器已经启动并正常运行。现在您可以使用 telnet 与 SMTP 服务器进行通信,测试发送邮件等功能。

  1. HELO:向服务器问候,并确定您的身份。
HELO smtp.owen.com

服务器应该返回类似以下内容:

250 smtp.owen.com
  1. MAIL FROM:指定发送邮件的发件人地址。
MAIL FROM:

如果成功,服务器会返回:

250 2.1.0 Ok
  1. RCPT TO:指定收件人的地址。
RCPT TO:

如果成功,服务器会返回:

250 2.1.5 Ok
  1. DATA:表示开始输入邮件内容。
DATA

服务器应该返回:

354 End data with .
  1. 输入邮件内容:可以输入简单的邮件内容,例如:
Subject: Test Email

This is a test email from smtp.owen.com.
.

邮件内容输入完成后,使用一个 句点 (.) 来结束邮件内容。服务器应该返回:

250 2.0.0 Ok: queued as ...
  1. QUIT:关闭连接。
QUIT

服务器会返回:

221 2.0.0 Bye
Previous Article