龙空技术网

Ubuntu搭建强健的邮箱服务器(二)

码蚁 234

前言:

此时姐妹们对“ubuntu安装mail命令”大体比较重视,看官们都需要剖析一些“ubuntu安装mail命令”的相关知识。那么小编同时在网摘上网罗了一些对于“ubuntu安装mail命令””的相关知识,希望你们能喜欢,看官们快快来了解一下吧!

上次Ubuntu搭建强健的邮箱服务器(一)中讲了基本的理念及初步的postfix的安装方法。今天我们来讲相关配置的“外在”配置。所谓外在配置是指协助我们邮箱服务器的工作的一些外在条件。正是由于它们我们的邮箱服务器才能被更多的服务商认可、更安全可靠。这一节内容很多很重要,请认真学习。

DNS配置

dns不必多说,我们的邮箱服务器基本的依赖条件之一,也是极为重要的一环。在本节教程中的所有环节都与之密切相关,一定要仔细认真的学习。

首先,在你的域名服务商提供的解析面板中,添加以下基本的域名解析服务,请按以下要求逐条添加:

Type: MX

Name: @

Value: example.com

Priority: 10

Type: A

Name: mail

Value: 192.168.3.7

Priority: 10

Type: A

Name: imap

Value: 192.168.3.7

Priority: 10

Type: A

Name: smtp

Value: 192.168.3.7

Priority: 10

Type: A

Name: pop3

Value: 192.168.3.7

Priority: 10

Type: A

Name: www

Value: 192.168.3.7

Priority: 10

Type: A

Name: @

Value: 192.168.3.7

Priority: 10

释义:

type为解析类型,Name为解析名称,value为解析值,Priority为优先级,保持默认10就好了。另外将上面的192.168.3.7 换成你自己的IP地址、example.com换成你自己的域名。好了,现在你就有了对应的下面的解析域名了:imap.example.com、smtp.example.com、pop3.example.com、example.com、及mail.example.com这些基本的域名了。或许你会问,一个邮件服务用得着这么多的域名解析吗,回答是:要滴。当然,当你熟悉了相关技术和流程后,可以精简一些,但是我是强烈不赞成这样做的。这只是一部分,后面我们根据相关技术及安全的要求还要增加。一句话,有我在,跟着我走就行了。

SASL服务

SASLauthd(SASL authentication daemon)是一个独立的服务,通常不是与 Postfix 一同安装的。SASLauthd 负责处理基于 SASL 的身份验证,并且可以与多个应用程序一起使用,而不仅仅是 Postfix。当然我后面可以用另外的SASL服务组件,不用Postfix的。

安装

sudo apt-get updatesudo apt-get install libsasl2-modules sasl2-bin

确保 saslauthd 服务已经启动。你可以使用以下命令来启动和检查服务状态:

## 启动服务sudo systemctl start saslauthd## 添加到开机自启服务列表sudo systemctl enable saslauthd## 查看服务的运行状态。sudo systemctl status saslauthd## 显示类似如下信息就表示运行正常:...Active: active (running) since Fri 2024-01-05 15:17:45 CST; 1 week 0 days ago...

验证 SASLauthd 是否正在监听 saslauthd 的默认套接字

sudo netstat -ln | grep saslauthd

安装完成后,你需要配置和启动 SASLauthd 服务。

SASL认证数据库

如果你启用了SMTP身份验证,你需要配置SASL以使用适当的认证数据库。在 /etc/postfix/sasl/smtpd.conf 文件中添加以下内容:

pwcheck_method: saslauthdmech_list: plain login

此配置使用saslauthd作为密码验证方法,并指定支持的身份验证机制。

SASL认证用户源

配置SASL以指定认证用户的来源。在 /etc/default/saslauthd 文件中添加以下行:

MECHANISMS="pam"

上述配置使用PAM(Pluggable Authentication Modules)来提供SASL认证。

配置/etc/postfix/master.cf

smtp      inet  n       -       y       -       -       smtpd  -o smtpd_sasl_auth_enable=yes  -o smtpd_sasl_type=cyrus  -o smtpd_sasl_path=smtpd  -o smtpd_tls_security_level=may

这里,smtpd_sasl_auth_enable 启用 SASL 身份验证,smtpd_sasl_type 和 smtpd_sasl_path 配置了 Cyrus SASL。smtpd_tls_security_level 设置为 may,以允许启用 TLS 包装模式,但不要求客户端使用 TLS。这是通常的设置,适用于保护身份验证信息的同时仍然允许非加密通信。

注意:/etc/postfix/master.cf这个文件对格式(空格)要求很严格的。不要随意删减空格。

SMTP身份验证

配置SMTP身份验证可以防止未经授权的用户使用邮件服务器来发送邮件。你可以启用SMTP身份验证以要求用户在发送邮件之前提供用户名和密码。也就是说当你用第三方邮件终端连接到我们的服务器的时候会需要严格的身份验证的。

在postfix的 main.cf 配置文件中添加或确认以下参数:位置在 /etc/postfix/main.cf, 相关参数我都作了说明,应该一看就懂。

## 这个参数启用了 SMTP 身份验证。smtpd_sasl_auth_enable = yes## 设置 SASL 库的类型。在这里,它被设置为 cyrus,表示使用 Cyrus SASL。smtpd_sasl_type = cyrus## 指定了 Cyrus SASL 库的路径,这里设置为 smtpd。smtpd_sasl_path = smtpd## 指定 Postfix 服务器的本地域smtpd_sasl_local_domain = $myhostname## 设置 SASL 的安全选项,这里禁用了匿名登录,即 noanonymous。smtpd_sasl_security_options = noanonymous## 该参数启用了对于一些不太规范的 SASL 客户端的兼容性处理。broken_sasl_auth_clients = yes## 限制每个客户端在60秒内只能发送30封邮件smtpd_client_message_rate_limit = 30## 该设置指定了用于验证对方SMTP服务器证书的证书颁发机构(CA)路径。在这里,## 它指定了系统SSL证书存储的路径。smtp_tls_CApath=/etc/ssl/certs## 该设置指定了用于外部SMTP服务器连接的TLS加密级别。may 表示Postfix将尝试使用TLS,##但如果连接失败或对方服务器不支持TLS,仍然允许未加密的连接。smtp_tls_security_level = may## 该设置指定了Postfix用于缓存SMTP会话状态的数据库文件。这有助于提高性能,## 避免在TLS握手过程中进行重复的计算。这里使用了BDB(Berkeley Database)格式的数据库。smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache:smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination:## 该设置定义了允许邮件中继的规则。具体地说:## permit_mynetworks 允许来自Postfix服务器的内部网络的邮件中继。## permit_sasl_authenticated 允许经过SMTP身份验证的用户进行邮件中继。## defer_unauth_destination 会推迟对于未认证目标域的邮件中继,直到后续的规则进一步处理。这是一种常见的配置,以防止未授权的邮件中继。

上述配置使用Cyrus SASL(Simple Authentication and Security Layer)来处理SMTP身份验证。

TLS/SSL加密

启用TLS/SSL加密可以确保邮件传输过程中的数据安全性。确保你的Postfix服务器支持TLS/SSL并在 main.cf 中添加以下参数:

smtpd_tls_cert_file=/etc/ssl/certs/postfix.pemsmtpd_tls_key_file=/etc/ssl/private/postfix.keysmtpd_use_tls = yessmtpd_tls_auth_only = yes

上述配置中,smtpd_tls_cert_file 和 smtpd_tls_key_file 分别指定TLS证书和私钥的文件路径。

关于SSL证书的获取我们有两种方法,一个是我们自己签名的证书,当然自签发的证书有个被认可的问题。现在申请免费的证书也很简单,相关方法我会在我的别一篇文章关于搭建Lnmp的环境文件中说明,先在此略过。

重启服务

sudo systemctl restart postfixsudo systemctl restart saslauthd

在上述配置中,SASLauthd(SASL authentication daemon)是一个独立的服务,负责验证用户的身份。PAM 提供了一种灵活的方法来与系统的身份验证机制进行集成。

这些配置一起工作,使得 Postfix 能够通过 Cyrus SASL 进行 SMTP 身份验证,并使用 saslauthd 作为密码验证的后端,同时允许明文(plain)和 LOGIN 两种身份验证机制。通过这种方式,邮件服务器可以强化安全性,要求用户在发送邮件时提供有效的用户名和密码。

日志

日志是相当重要的,当我们配置中出现任务异常我们都可以通过日志找到问题所在。

Postfix 的日志配置是通过 /etc/postfix/main.cf 文件中的参数来完成的。以下是一些常见的 Postfix 日志相关的配置参数, 配置文件没有的就在尾部添加:

1. 指定日志文件路径:

通过 maillog_file 参数可以指定主日志文件的路径。

maillog_file = /var/log/mail.log

这里的路径可以根据你的系统和偏好进行调整。

2. 指定详细程度:

debug_peer_list 和 debug_peer_level 参数可以用于详细记录与指定主机的通信的信息。这对于调试特定连接问题很有用。

debug_peer_list = example.comdebug_peer_level = 2

在上面的例子中,只有与 example.com 的通信会被详细记录,并且详细程度为 2。

3. 启用详细日志:这一步可以省略

通过 debug_peer_list 和 debug_peer_level 以及 debug_peer_level,你可以启用更详细的日志。

debug_peer_list =debug_peer_level = 2

这将对所有邮件服务器启用详细的调试日志。

4. 启用 SMTP 会话日志:

通过启用 smtpd 进程的 smtpd_protocol_logging 参数,你可以记录 SMTP 会话的详细信息。

smtpd_protocol_logging = yes

这对于检查 SMTP 会话中的问题非常有帮助。

5. 配置日志级别:

maillog_file 用于指定主日志文件的路径,而 mail_verbose 用于配置邮件日志记录的详细级别。

maillog_file = /var/log/mail.logmail_verbose = yes

这样可以在日志中记录更详细的信息。

6. 启用调试模式:

在测试或调试期间,可以通过启用 debug_peer_list 并设置 debug_peer_level 为 3 来启用调试模式。

debug_peer_list =debug_peer_level = 3

这将记录所有连接的详细信息。

7. 启用额外的日志记录:

debug_peer_list 和 debug_peer_level 也可以用于启用额外的日志记录,以及对特定主机进行详细记录。

debug_peer_list = example.comdebug_peer_level = 2

这将详细记录与 example.com 之间的通信。

确保在更改日志配置之前,备份 main.cf 文件,并在修改后重新加载或重启 Postfix 以应用更改。适当的日志配置可以帮助你追踪问题、调试配置,并确保 Postfix 正常运行。

8. 查看实时日志

tail -f /var/log/mail.log## 通过Ctrl + C 来中断显示
时区调整

查看当前日期时间

date

调整时区为中文时区:

sudo dpkg-reconfigure tzdata
配置SPF

增加SPF记录到DNS

添加 SPF 记录可以帮助验证发件人的身份,防止伪造邮件。SPF 记录是一种 DNS 记录,它指定了哪些邮件服务器可以发送来自您的域名的电子邮件。当您的电子邮件服务器发送电子邮件时,接收方的电子邮件服务器会检查 SPF 记录以验证发件人的身份。如果发件人的 IP 地址与 SPF 记录中的 IP 地址不匹配,则接收方的电子邮件服务器可能会将电子邮件标记为垃圾邮件或拒绝接受电子邮件

TXT  @   v=spf1 mx ~all
TXT 表示这是 TXT 记录。在名称字段中输入 @。v=spf1 表示这是 SPF 记录,SPF 记录版本为 SPF1。mx 表示 MX 记录中列出的所有主机都可以为您的网域发送电子邮件,而不允许所有其他主机发送电子邮件。~all 表示来自您网域的电子邮件只能来自 SPF 记录中指定的主机。来自其他主机的电子邮件将被标记为不可信。可能的替代项是 +all、-all、?all,但它们很少使用。

-all意味着从不允许的主机发送的电子邮件应被拒绝,拒绝放入收件人的收件箱或垃圾邮件文件夹,但我们通常不需要如此严格的政策。

有些人可能会认为这会更好,因为它会拒绝来自不受信任的主机的电子邮件。好吧,在你的SPF策略中使用可能会导致你自己的电子邮件被拒绝,当收件人有两个SMTP服务器并且主SMTP服务器离线时,你的电子邮件将被暂时存储在备份SMTP服务器上。当主 SMTP 服务器重新联机时,电子邮件将从备份 SMTP 服务器中继到主 SMTP 服务器。由于您没有在 SPF 策略中列出收件人的备份 SMTP 服务器,因此收件人的主 SMTP 服务器将拒绝该电子邮件。因此,您应该在 SPF 策略中使用。-all~all

例如:

记录值为:v=spf1 include:example.com ~all 或 v=spf1 ip4:192.168.1.37 ~all如果有多个记录值 :如果您已有SPF记录值v=spf1 include:spf1.dm.aliyun.com ~all,记录值应改为v=spf1 include:spf.qiye.aliyun.com include:spf1.dm.aliyun.com ~all,如没有请忽略本备注。保存您的更改并等待 DNS 记录生效。检查SPF记录

安装工具:

sudo apt install bind9-dnsutils

输入命令:

dig mail.example.com txt
配置SPF策略代理

SPF 用于指定哪些邮件服务器被允许发送来自特定域名的电子邮件。俗称 白名单

安装

sudo apt-get install spf-tools-perl

打开 /etc/default/spf-policyd 文件以编辑:

sudo nano /etc/default/spf-policyd## 输入以下内容HELO_DOMAIN=example.comDEF_POLICY_NXDOMAIN=yes
HELO_DOMAIN 应该是你的域名。DEF_POLICY_NXDOMAIN 设置为 yes 表示如果 SPF 记录不存在时,默认行为是拒绝。

我们还需要告诉我们的Postfix SMTP服务器检查传入电子邮件的SPF记录。这无助于确保传出电子邮件的传递,但有助于检测伪造的传入电子邮件。

首先,安装所需的软件包:

sudo apt install postfix-policyd-spf-python

然后编辑 Postfix 主进程配置文件。

sudo nano /etc/postfix/master.cf

在文件末尾添加以下行,告诉 Postfix 在启动 SPF 策略守护程序时启动它。

policyd-spf  unix  -       n       n       -       0       spawn    user=policyd-spf argv=/usr/bin/policyd-spf

保存并关闭文件。接下来,编辑 Postfix 主配置文件。

sudo nano /etc/postfix/main.cf

在文件末尾追加以下行。第一行指定 Postfix 策略代理超时设置。以下几行将通过拒绝未经授权的电子邮件和检查 SPF 记录来限制传入的电子邮件。

policyd-spf_time_limit = 3600smtpd_recipient_restrictions =   permit_mynetworks,   permit_sasl_authenticated,   reject_unauth_destination,   check_policy_service unix:private/policyd-spf

保存并关闭文件。然后重新启动 Postfix。

sudo systemctl restart postfix

下次,当您收到来自具有 SPF 记录的域的电子邮件时,您可以在原始电子邮件标题中看到 SPF 检查结果。以下标头指示发件人从授权主机发送电子邮件。

Received-SPF: Pass (sender SPF authorized).
配置PTR记录

PTR记录也叫做pointer记录,它将IP地址转换成主机名,与A记录刚好相反。这种解析被称为反向DNS解析(rDNS)。

在 IPv4 中:

DNS A 记录存储在给定的域名下,而 DNS PTR 记录存储在 IP 地址下进行了反转,且添加了“.in-addr.arpa”。例如,IP 地址 192.0.2.255 的 PTR 记录将存储在“255.2.0.192.in-addr.arpa”下。

必须添加“in-addr.arpa”,因为 PTR 记录存储在 DNS 的 .arpa 顶级域中。.arpa 是一个主要用于管理网络基础设施的域,是为互联网定义的第一个顶级域名。(“arpa”这个名字可以追溯到互联网的早期:它的名字来源于高级研究计划署 (ARPA),它创建了互联网的重要前身 ARPANET。)

in-addr.arpa 是 .arpa 中的命名空间,用于在 IPv4 中进行反向 DNS 查找。

在 IPv6 中:

IPv6 地址的构造不同于 IPv4 地址,并且 IPv6 PTR 记录存在于 .arpa 内的不同命名空间中。 IPv6 PTR 记录存储在 IPv6 地址下,反转并转换为 4 位部分(与 IPv4 中的 8 位部分相反),加上“.ip6.arpa”。

PTR记录可以帮助我们过滤垃圾邮件。很多SMTP服务器会查找对方SMTP服务器的PTR记录,得到一个主机名,然后与对方SMTP声称的主机名作比较,如果两者一致,就接收邮件,反之不接收邮件或放进垃圾箱。为了不让你的邮件被拒收或放进垃圾箱,你应该为你的服务器IP设置PTR记录。

查找一个IP地址的PTR记录的命令为:

dig -x <IP> +short## 或host <IP>

特别注意:因为你是从主机商获得服务器的IP,所以你得在主机商那里设置PTR记录(反向DNS解析),而不是在域名注册商那里设置,就是说,找电信公司的技术人员设置这条记录。

设置DKIM

域名密钥识别邮件 (DKIM) 是一种电子邮件验证方法,有助于防止垃圾邮件发送者和其他恶意方冒充合法域名。

所有电子邮件地址都有一个 域名 ,即地址中“@”符号之后的部分。垃圾邮件发送者和攻击者在发送电子邮件时可能试图冒充域名,以进行网络钓鱼攻击或其他骗局。

假设 Chuck 想欺骗为 工作的 Alice,让她给他发送公司的机密信息。他可以给她发送一封看似来自“bob@example.com”的电子邮件,以骗取她的信任,让她以为他也在为 工作。

DKIM 与发送方策略框架 (SPF) 和基于域的消息身份验证、报告和一致性 (DMARC) 一起,使得攻击者以这种方式冒充域名的难度大大增加。没有通过 DKIM 和 SPF 的电子邮件会被标记为“垃圾邮件”,或者不被电子邮件服务器投递。如果 example.com 为其域名设置了 DKIM、SPF 和 DMARC,那么 Alice 甚至可能永远不会看到 Chuck 的恶意电子邮件,因为它要么进入了她的垃圾邮件文件夹,要么被电子邮件服务器完全拒绝。

安装:

sudo apt-get install opendkim opendkim-tools ## 将 postfix 用户添加到 opendkim 组sudo usermod -G opendkim postfix## 或sudo gpasswd -a postfix opendkim

生成密钥对:

## 创建密钥目录sudo mkdir -p /etc/opendkim/keys/mail.example.com## 命令格式如下:# sudo opendkim-genkey -D /etc/opendkim/keys/mail.speedxcn.com/ -d <domainName> -s <keyName>## -d (domain)-D (directory)defaultselector (-s)default.privatedefault.txt## 用下面这条命令生成密钥:sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/mail.example.com -s default -v## <domainName>是合法的域名,如:example.com; ## <keyName>是生成后的密钥的文件名称,也是Selector的名称## 生成密钥后,需要对私钥文件设置适当的权限:sudo chown opendkim:opendkim /etc/opendkim/keys## 更改权限,以便只有用户才能对文件进行读写访问。opendkimsudo chmod 600 /etc/opendkim/keys/example.com/default.private

opendkim-genkey 命令用于生成 DKIM 密钥对,其中包括一个私钥和一个公钥。下面是对该命令各个选项的详细说明:

-D: 指定存储生成的密钥对的目录。在这个例子中,/etc/opendkim/keys/mail.example.com/ 目录用于存储生成的密钥文件。-d: 指定你的域名。在这里,mail.example.com 是你的域名。-s: 指定选择器(Selector)。选择器是一个字符串,用于在 DNS 中标识使用哪个密钥对进行 DKIM 签名。在这个例子中,选择器被设置为 default。强烈建议您设置为default, 这会省去你很多麻烦。

在运行命令时,opendkim-genkey 会在指定的目录中生成两个文件:

default.private: 这个文件包含 DKIM 密钥对中的私钥。私钥用于在邮件服务器上对邮件进行签名。default.txt: 这个文件包含 DKIM TXT 记录,其中包含公钥的信息。你需要将这个 TXT 记录添加到 DNS 中,以便接收邮件的服务器可以验证邮件的来源。

这两个文件的内容是由 opendkim-genkey 自动生成的,并且在你的邮件服务器配置中使用。密钥对的生成是为了在邮件传输过程中提供一种验证机制,确保发件人的身份是真实可信的。

将 DKIM TXT记录添加到DNS

default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNA···vz9n8lLpQIDAQAB"

default._domainkey中的default为<keyName>的名称,即Selector的名称。下同。

关于这个密钥的格式:我们在default.txt文件中看到的可能是这样的格式:

default._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; "	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAO...PBw4sjmCmXzhsZ4+9sI7PgofBBFVXm8OQIqHEfjpbP10Jj"	  "LrueuvlXgIy6a4Sz05Ibviv4...kAhA0D9AS1DO7L8QFADFwIDAQAB" )  ; ----- DKIM key default for example.com

我们只要把括号里的引号、换行、空格去掉拼接成一行就可以了。括号外的去掉。

配置OpenDKIM

修改 OpenDKIM 的配置文件以指向生成的私钥。

打开 /etc/opendkim.conf 文件,并确保以下行的设置:

# This is a basic configuration for signing and verifying. It can easily be# adapted to suit a basic installation. See opendkim.conf(5) and# /usr/share/doc/opendkim/examples/opendkim.conf.sample for complete# documentation of available configuration parameters.Syslog                  yesSyslogSuccess           yes#LogWhy                 noLogWhy                  yes# Common signing and verification parameters. In Debian, the "From" header is# oversigned, because it is often the identity key used by reputation systems# and thus somewhat security sensitive.Canonicalization        relaxed/simpleMode                    svSubDomains              noOversignHeaders         From# Signing domain, selector, and key (required). For example, perform signing# for domain "example.com" with selector "2020" (2020._domainkey.example.com),# using the private key stored in /etc/dkimkeys/example.private. More granular# setup options can be found in /usr/share/doc/opendkim/README.opendkim.## 确保 Domain 匹配你的域名,KeyFile 指向你生成的私钥文件。Domain                  example.comKeyFile                 /etc/opendkim/keys/mail.example.com/default.privateSelector                default# In Debian, opendkim runs as user "opendkim". A umask of 007 is required when# using a local socket with MTAs that access the socket as a non-privileged# user (for example, Postfix). You may need to add user "postfix" to group# "opendkim" in that case.## 接下来,确保将 UserID 设置为 opendkim# Remember to add user postfix to group opendkimUserID             opendkimUMask                   007# Socket for the MTA connection (required). If the MTA is inside a chroot jail,# it must be ensured that the socket is accessible. In Debian, Postfix runs in# a chroot in /var/spool/postfix, therefore a Unix socket would have to be# configured as shown on the last line below.#Socket                 local:/run/opendkim/opendkim.sock#Socket                 inet:8891@localhost#Socket                 inet:8891Socket                  local:/var/spool/postfix/opendkim/opendkim.sockPidFile                 /run/opendkim/opendkim.pid# Hosts for which to sign rather than verify, default is 127.0.0.1. See the# OPERATION section of opendkim(8) for more information.#InternalHosts          192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12# The trust anchor enables DNSSEC. In Debian, the trust anchor file is provided# by the package dns-root-data.TrustAnchorFile         /usr/share/dns/root.key#Nameservers            127.0.0.1AutoRestart                     yesAutoRestartRate                 10/1MBackground                      yesDNSTimeout                      5SignatureAlgorithm              rsa-sha256## 配置签名表、密钥表、受信主机文件## 现在,将以下条目追加到文件末尾KeyTable            refile:/etc/opendkim/KeyTableSigningTable        refile:/etc/opendkim/SigningTableExternalIgnoreList  refile:/etc/opendkim/TrustedHostsInternalHosts       refile:/etc/opendkim/TrustedHosts
创建签名表、密钥表、受信主机文件

将所有者从 root 更改为 opendkim,并确保只有用户才能读取和写入密钥目录。root

sudo chown -R opendkim:opendkim /etc/opendkimsudo chmod go-rw /etc/opendkim/keys

创建签 名表SigningTable

sudo nano /etc/opendkim/SigningTable

将以下两行添加到文件中。这告诉OpenDKIM,如果服务器上的发件人使用地址,则应使用由标识的私钥对其进行签名。第二行表明您的子域也将由私钥签名。

*@example.com    default._domainkey.example.com*@*.example.com    default._domainkey.example.com

保存并关闭文件。

然后创建键表KeyTable。

sudo nano /etc/opendkim/KeyTable

添加以下行,该行告知私钥的位置。

default._domainkey.example.com     example.com:default:/etc/opendkim/keys/mail.example.com/default.private

保存并关闭文件。

创建受信任的主 机文件TrustedHosts

sudo nano /etc/opendkim/TrustedHosts

将以下行添加到新创建的文件中。这告诉OpenDKIM,如果电子邮件来自本地主机或来自同一域,则OpenDKIM应该只对电子邮件进行签名,而不对电子邮件执行DKIM验证。

127.0.0.1localhost*.example.com

保存并关闭文件。

重启O penDKIM

在完成以上步骤后,重新启动 OpenDKIM 服务以应用更改:

sudo systemctl restart opendkim

请确保没有错误,并监视系统日志以查找潜在的 DKIM 配置问题:

sudo journalctl -u opendkim

验证DNS记录

sudo opendkim-testkey -d example.com -s default -vvv ## 输出信息如下:opendkim-testkey: using default configfile /etc/opendkim.confopendkim-testkey: key loaded from /etc/opendkim/keys/default.com/default.privateopendkim-testkey: checking key 'maildkimkey._domainkey.example.com'opendkim-testkey: key not secureopendkim-testkey: key OK

完成上述步骤后,你的邮件服务器就使用 DKIM 进行签名了。确保邮件发送到目标邮箱时,目标邮箱服务器能够验证 DKIM 签名。

将Postfix连接到OpenDKIM

Postfix 可以通过 Unix 套接字文件与 OpenDKIM 通信。OpenDKIM 使用的默认套接字文件是 /var/run/opendkim/opendkim.sock。但是 Ubuntu 附带的 postfix SMTP 守护程序在 chroot jail 中运行,这意味着 SMTP 守护程序会解析相对于 Postfix 队列目录 (/etc/opendkim.conf) 的所有文件名。因此,我们需要更改OpenDKIM Unix套接字文件 /var/spool/postfix。

首先,我们将更改OpenDKIM套接字文件的位置。让我们使用以下命令创建一个新目录,并仅允许用户和组访问它。opendkim :postfix:

sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim
现在在文本编辑器中编辑OpenDKIM配置文件:
sudo nano /etc/opendkim.conf

搜索 Socket 条目并按如下方式更新它:

Socket    local:/var/spool/postfix/opendkim/opendkim.sock
接下 来编辑 /etc/default/opendkim 文件:
sudo nano /etc/default/opendkim

并设置SOCKET条目,如下所示:

SOCKET=local:/var/spool/postfix/opendkim/opendkim.sock
接 下来,您需要编辑位于 /etc/postfix/main.cf 的配置文件。在此文件中,您需要添加以下参数:milter_default_action – 这是收到消息时要执行的默认操作。milter_protocol – 这是与OpenDKIM通信时使用的协议。smtpd_milters – 这是 Postfix 将使用的 milter 列表。
sudo nano /etc/postfix/main.cf

在此文件的末尾添加以下行,以便 Postfix 能够通过 milter 协议调用 OpenDKIM。

# Milter configurationmilter_default_action = acceptmilter_protocol = 6smtpd_milters = local:opendkim/opendkim.socknon_smtpd_milters = $smtpd_milters

添 加参数后,您需要重新启动 OpenDKIm 和 Postfix 服务。为此,您需要运行以下命令:

sudo systemctl restart opendkim sudo systemctl restart postfix## 或sudo systemctl restart opendkim postfix

此命令将重新启动这两个服务,您将准备好使用 OpenDKIM 发送电子邮件。

配置DMARC什么是DMARC

基于域的邮件身份验证、报告和一致性 (DMARC) 是由 Internet 工程任务组 (IETF) 和 DMARC.org 联合开发的电子邮件身份验证技术规范。是一种互联网标准(RFC 7489),允许域名所有者防止其域名被电子邮件欺骗者使用。在DMARC被发明之前,不良行为者很容易在发件人地址中使用其他人的域名。DMARC允许电子邮件发件人在DNS中创建DMARC记录,告诉收件人如果发送的电子邮件没有通过SPF或DKIM认证检查该怎么做。

如果域名所有者为他/她的域名创建了DMARC DNS记录,并且接收电子邮件的服务器实施了DMARC检查,那么不良行为者需要通过SPF对齐或DKIM对齐才能通过DMARC检查。如果 DMARC 检查失败,欺骗性电子邮件可能会被拒绝。永远不会被最终用户看到。不良行为者很难通过 SPF 或 DKIM,除非域名所有者的电子邮件服务器遭到入侵。

DMARC是一个重要的安全协议,有助于保护电子邮件用户免受垃圾邮件和网络钓鱼攻击。通过对电子邮件的发件人进行认证,DMARC有助于确保只有来自合法来源的邮件才会被送到收件箱。

此外,DMARC提供了一种报告可疑活动的机制,使组织能够快速识别和应对潜在的威胁。由于电子邮件仍然是企业和消费者的主要通信手段,DMARC提供了一个重要的保护层,以抵御越来越多的网络攻击。

DMARC的工作原理是验证电子邮件“发件人”字段中的域名是否与发送邮件的电子邮件服务器的域名相匹配。如果域名不匹配,则该电子邮件将被视为欺诈性电子邮件,并且不会送达。

DMARC还提供了一种机制,用于报告未通过认证的电子邮件,以便可以通知发件人并采取行动纠正问题。最终,DMARC有助于保护电子邮件用户和电子邮件提供商免受垃圾邮件、网络钓鱼和其他形式的欺诈。

DNS的设置

DMARC记录是一种TXT记录,有助于防止电子邮件欺骗。

要为您的域生成 DMARC 记录,您需要在 DNS 上创建一个具有以下值的 TXT 记录:

_dmarc.example.com   TXT   "v=DMARC1; p=none; rua=mailto:dmarc_report@example.com; fo=1;"

有关上述记录的详细信息:

_dmarc.example.com– 是 DNS 记录名称,其中 example.com 是您的域名。TXT– 是 DNS 记录类型v=DMARC1表示这是 DMARC 记录。p=none– 指定在 DMARC 验证失败时不采取任何措施。p=none:监控您的电子邮件流量。不采取进一步措施。p=quarantine:将未经授权的电子邮件发送到垃圾邮件文件夹。p=reject:实施DMARC的最终政策和最终目标。此策略可确保根本不会传递未经授权的电子邮件。rua=mailto:dmarc_report@example.com 是用于发送每日报告的电子邮件地址。你可以改成你自己的邮件地址,任意可用的都行。fo=1,表示应报告所有故障。

您还可以对 DMARC 记录使用更多选项,如下所述:

ruf=mailto:dmarc_forensic@example.com指定DMARC取证报告的发送地点。pct=50说50%的电子邮件将经过DMARC验证。默认情况下,所有电子邮件都经过验证安装和配置DMARC

通过包管理器安装 DMARC 解析工具opendmarc。

sudo apt-get updatesudo apt-get install opendmarc

如果要求你为OpenDMARC配置数据库,你可以放心地选择“否”。如果你想为其他邮箱提供商生成DMARC报告,你只需要为OpenDMARC配置一个数据库。对于像我们这样的小型邮件服务器运营商来说,生成DMARC报告不是很有用,所以我们可以跳过它。

安装后,它将自动启动。使用以下方式检查其状态:

systemctl status opendmarc## 显示如下:opendmarc.service - OpenDMARC Milter   Loaded: loaded (/lib/systemd/system/opendmarc.service; disabled; vendor preset: enabled)   Active: active (running) since Tue 2018-10-30 19:49:52 CST; 23s ago     Docs: man:opendmarc(8)           man:opendmarc.conf(5) Main PID: 14858 (opendmarc)    Tasks: 6 (limit: 1110)   CGroup: /system.slice/opendmarc.service           └─14858 /usr/sbin/opendmarc

请注意,系统启动时的自动启动功能处于禁用状态。我们可以通过以下方式启用它:

sudo systemctl enable opendmarc

配置 DMARC 设置。编辑 /etc/opendmarc.conf 文件,根据你的需求进行配置。确保设置了 AuthservID,这是邮件服务器的身份标识。

AuthservID your.domain.com

接下来,添加以下行。将主机名替换为您的真实 Postfix 主机名。这告诉OpenDMARC信任ID中的认证结果。当您运行 OpenDKIM 进行 DKIM 验证时,这是必需的。

TrustedAuthservIDs your.domain.com

如果 Postfix 主机名未包含在 中,或者您的主机名中有拼写错误,那么 OpenDMARC 将忽略 OpenDKIM 生成的身份验证结果标头,您将在邮件日志 /var/log/mail.log 中找到以下错误消息

opendmarc[1133]: A436A205C9 ignoring Authentication-Results at 1 from mail.yourdomain.com

然后找到这一行:

# RejectFailures false

默认情况下,OpenDMARC不会拒绝未通过DMARC检查的电子邮件,即使域名的政策设置为.p=reject。如果您希望在域的政策设置为p=reject 时拒绝未通过 DMARC 检查的电子邮件,请取消注释此行并更改false为true

RejectFailures true

你可能希望OpenDMARC忽略通过SMTP AUTH成功认证的SMTP客户端。例如,我有一个Postfix SMTP服务器在我的博客网络服务器上运行,它使用我的主邮件服务器作为中继来发送通知电子邮件,所以我希望openDMARC忽略从我的博客网络服务器提交的电子邮件。这也适用于通过端口 587 提交传出电子邮件的桌面/移动邮件客户端。在这种情况下,请在此文件的末尾添加以下行。

IgnoreAuthenticatedClients true

在此文件的末尾添加以下行。

RequiredHeaders    true

这将拒绝不符合RFC5322中所述的电子邮件标题标准的电子邮件。例如,如果传入的电子邮件没有标题或标题,它将被拒绝。无法从中提取域名的 From: 字段也将被拒绝。From:date:

建议在此文件的末尾添加以下行。这将使OpenDMARC在邮件头中找不到SPF结果时执行回退SPF检查。

SPFSelfValidate true

OpenDMARC是作为milter(邮件过滤器)实现的。Postfix 可以通过 Unix 套接字与 milter 应用程序通信。OpenDMARC使用的默认套接字文件是/var/run/opendmarc/opendmarc.sock/。但是 Ubuntu 附带的 Postfix SMTP 守护程序在 chroot jail 中运行,这意味着 SMTP 守护程序会解析相对于 Postfix 队列目录 (var/spool/postfix) 的所有文件名。所以我们需要改变OpenDMARC使用的套接字文件。

找到以下行。

Socket local:/var/run/opendmarc/opendmarc.sock

将其更改为:

Socket local:/var/spool/postfix/opendmarc/opendmarc.sock

保存并关闭文件。

注意:该文件也可以设置套接字文件位置,但是 Ubuntu 18.04 和 20.04 上的包不会读取此文件,因此我们需要在文件中设置套接字文件路径。/etc/default/opendmarcopendmarc/etc/opendmarc.conf

创建一个目录来保存OpenDMARC套接字文件,并更改所有权,以便用户和组可以访问它。

sudo mkdir -p /var/spool/postfix/opendmarcsudo chown opendmarc:opendmarc /var/spool/postfix/opendmarc -Rsudo chmod 750 /var/spool/postfix/opendmarc/ -Rsudo adduser postfix opendmarc

启用 DMARC。编辑 /etc/default/opendmarc 文件,确保 OPENDMARC_ENABLED 被设置为 true。

OPENDMARC_ENABLED=true

然后重新启动OpenDMARC。

sudo systemctl restart opendmarc
如何在OpenDMARC中将IP地址列入白名单

如果你想允许你的其他服务器通过运行OpenDMARC的主邮件服务器的端口25来中继电子邮件,那么你应该在OpenDMARC中将另一台服务器的IP地址列入白名单,因为OpenDMARC也会检查中继电子邮件中的域名。

编辑 OpenDMARC 配置文件。

sudo nano /etc/opendmarc.conf

在此文件的末尾添加以下行。

IgnoreHosts  /etc/opendmarc/ignore.hosts

保存并关闭文件。然后创建目录。/etc/opendmarc/

sudo mkdir /etc/opendmarc/

创建文件。ignore.hosts

sudo nano /etc/opendmarc/ignore.hosts

在此文件中添加要列入白名单的 IP 地址,如下所示:

127.0.0.112.34.56.78

保存并关闭文件。然后重新启动OpenDMARC。

sudo systemctl restart opendmarc
Postfix的相关配置启用 DMARC 功能: 在 Postfix 中,你需要确保启用了 DMARC 功能。这通常是通过在主配置文件中添加以下行来完成:
sudo nano /etc/postfix/main.cf## 如何下面设置了插件rspamd,没注意端口的设置 smtpd_miltersmilter_default_action = acceptmilter_protocol = 6smtpd_milters = local:opendkim/opendkim.sock,local:opendmarc/opendmarc.socknon_smtpd_milters = $smtpd_milters

请确保 Postfix 启用了 milter 协议,并与一个 DMARC 验证器通信。你可能需要调整端口号和 IP 地址,以匹配你系统上的实际设置。

保存并关闭文件。然后重新启动 Postfix 以使更改生效。

sudo systemctl restart postfix

到此,文章开头说的这些外在条件已经基本设置完毕。后续配置下回分解。

标签: #ubuntu安装mail命令 #修改ubuntu主机dns