安装和集成Rspamd

这是我们设置和配置邮件服务器的第三部分。 在本教程中,我们将介绍Rspamd垃圾邮件过滤系统的安装和配置,并将其集成到我们的邮件服务器中,创建DKIM和DMARC DNS记录。

您可能会问为什么我们选择使用Rspamd而不选择Spamassassin。 Rspamd被更积极地维护和用C编写,并且比用Perl编写的Spamassassin快得多。 另一个原因是Rspamd带有DKIM签名模块,因此我们不必使用其他软件来签名我们的外发电子邮件。

如果您不熟悉Rspamd,可以在这里查看其官方文档

先决条件

在继续本教程之前,请确保您以具有sudo特权的用户身份登录。

安装Redis#

Redis将被Rspamd用作存储和缓存系统,只需运行即可安装:

sudo apt install redis-server

安装未绑定#

Unbound是非常安全的验证,递归和缓存DNS解析器。

安装此服务的主要目的是减少外部DNS请求的数量。 此步骤是可选的,可以跳过。

sudo apt updatesudo apt install unbound

对于大多数服务器,默认的“未绑定”设置应足够。

要将未绑定设置为服务器主DNS解析器,请运行以下命令:

sudo echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/headsudo resolvconf -u

如果您不使用 resolvconf 那么您需要编辑 /etc/resolv.conf 手动归档。

安装Rspamd#

我们将从其官方存储库中安装Rspamd的最新稳定版本。

首先安装必要的软件包:

sudo apt install software-properties-common lsb-releasesudo apt install lsb-release wget

使用以下wget命令将存储库GPG密钥添加到apt源密钥环:

wget -O- https://rspamd.com/apt-stable/gpg.key | sudo apt-key add -

通过运行以下命令启用Rspamd存储库:

echo "deb http://rspamd.com/apt-stable/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/rspamd.list

启用存储库后,更新软件包索引并使用以下命令安装Rspamd:

sudo apt updatesudo apt install rspamd

配置Rspamd#

无需修改库存配置文件,我们将在 /etc/rspamd/local.d/local.d/ 目录将覆盖默认设置。

默认情况下,Rspamd的 normal worker 扫描电子邮件的工作程序会在端口11333上的所有接口上进行侦听。创建以下文件以将Rspamd普通工作程序配置为仅侦听localhost接口:

/etc/rspamd/local.d/worker-normal.inc

bind_socket = "127.0.0.1:11333";

proxy worker 在端口11332上侦听并支持milter协议。 为了使Postfix与Rspamd通信,我们需要启用milter模式:

/etc/rspamd/local.d/worker-proxy.inc

bind_socket = "127.0.0.1:11332";
milter = yes;
timeout = 120s;
upstream "local" {
  default = yes;
  self_scan = yes;
}

接下来,我们需要为 controller worker 提供对Rspamd Web界面的访问的服务器。 要生成加密的密码,请运行:

rspamadm pw --encrypt -p P4ssvv0rD

输出应如下所示:

$2$khz7u8nxgggsfay3qta7ousbnmi1skew$zdat4nsm7nd3ctmiigx9kjyo837hcjodn1bob5jaxt7xpkieoctb

别忘了更改密码(P4ssvv0rD)到更安全的地方。

从终端复制密码,并将其粘贴到配置文件中:

/etc/rspamd/local.d/worker-controller.inc

password = "$2$khz7u8nxgggsfay3qta7ousbnmi1skew$zdat4nsm7nd3ctmiigx9kjyo837hcjodn1bob5jaxt7xpkieoctb";

稍后,我们将Nginx配置为控制器工作服务器Web服务器的反向代理,以便我们可以访问Rspamd Web界面。

通过将以下行添加到Redis来将Redis设置为Rspamd统计信息的后端 classifier-bayes.conf 文件:

/etc/rspamd/local.d/classifier-bayes.conf

servers = "127.0.0.1";
backend = "redis";

打开 milter_headers.conf 文件并设置milter标头:

/etc/rspamd/local.d/milter_headers.conf

use = ["x-spamd-bar", "x-spam-level", "authentication-results"];

您可以在此处找到有关milter头的更多信息。

最后,重新启动Rspamd服务,以使更改生效:

sudo systemctl restart rspamd

配置Nginx

在本系列的第一部分中,我们为PostfixAdmin实例创建了一个Nginx服务器块。

打开Nginx配置文件并添加以下位置指令,该位置指令以黄色突出显示:

/etc/nginx/sites-enabled/mail.linuxize.com.conf

...
location /rspamd {
    proxy_pass http://127.0.0.1:11334/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...

重新加载Nginx服务以使更改生效:

sudo systemctl reload nginx

前往 https://mail.linuxize.com/rspamd/,输入您以前使用生成的密码 rspamadm pw 命令,您将看到Rspamd Web界面。

配置后缀号

我们需要配置Postfix以使用Rspamd milter。

运行以下命令以更新Postfix主配置文件:

sudo postconf -e "milter_protocol = 6"sudo postconf -e "milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}"sudo postconf -e "milter_default_action = accept"sudo postconf -e "smtpd_milters = inet:127.0.0.1:11332"sudo postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"

重新启动Postfix服务以使更改生效:

sudo systemctl restart postfix

配置鸽舍#

我们已经在本系列的第二部分中安装并配置了Dovecot,现在我们将安装 sieve 过滤模块,并将Dovecot与Rspamd集成。

首先安装Dovecot过滤模块:

sudo apt install dovecot-sieve dovecot-managesieved

安装软件包后,打开以下文件并编辑以黄色突出显示的行。

/etc/dovecot/conf.d/20-lmtp.conf

...
protocol lmtp {
  postmaster_address = [email protected]
  mail_plugins = $mail_plugins sieve
}
...

/etc/dovecot/conf.d/20-imap.conf

...
protocol imap {
  ...
  mail_plugins = $mail_plugins imap_quota imap_sieve
  ...
}
...

/etc/dovecot/conf.d/20-managesieve.conf

...
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  ...
}
...
service managesieve {
  process_limit = 1024
}
...

/etc/dovecot/conf.d/90-sieve.conf

plugin {
    ...
    # sieve = file:~/sieve;active=~/.dovecot.sieve
    sieve_plugins = sieve_imapsieve sieve_extprograms
    sieve_before = /var/mail/vmail/sieve/global/spam-global.sieve
    sieve = file:/var/mail/vmail/sieve/%d/%n/scripts;active=/var/mail/vmail/sieve/%d/%n/active-script.sieve

    imapsieve_mailbox1_name = Spam
    imapsieve_mailbox1_causes = COPY
    imapsieve_mailbox1_before = file:/var/mail/vmail/sieve/global/report-spam.sieve

    imapsieve_mailbox2_name = *
    imapsieve_mailbox2_from = Spam
    imapsieve_mailbox2_causes = COPY
    imapsieve_mailbox2_before = file:/var/mail/vmail/sieve/global/report-ham.sieve

    sieve_pipe_bin_dir = /usr/bin
    sieve_global_extensions = +vnd.dovecot.pipe
    ....
}

保存并关闭文件。

为筛脚本创建目录:

mkdir -p /var/mail/vmail/sieve/global

创建全局筛选器过滤器,将标记为垃圾邮件的电子邮件移动到 Spam 目录:

/var/mail/vmail/sieve/global/spam-global.sieve

require ["fileinto","mailbox"];

if anyof(
    header :contains ["X-Spam-Flag"] "YES",
    header :contains ["X-Spam"] "Yes",
    header :contains ["Subject"] "*** SPAM ***"
    )
{
    fileinto :create "Spam";
    stop;
}

每当您将电子邮件移入或移出电子邮件时,都会触发以下两个筛选脚本 Spam 目录:

/var/mail/vmail/sieve/global/report-spam.sieve

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];

/var/mail/vmail/sieve/global/report-ham.sieve

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_ham"];

重新启动Dovecot服务以使更改生效:

sudo systemctl restart dovecot

编译筛子脚本并设置正确的权限:

sievec /var/mail/vmail/sieve/global/spam-global.sievesievec /var/mail/vmail/sieve/global/report-spam.sievesievec /var/mail/vmail/sieve/global/report-ham.sievesudo chown -R vmail: /var/mail/vmail/sieve/

创建DKIM密钥

DomainKeys Identified Mail(DKIM)是一种电子邮件身份验证方法,它将密码签名添加到出站邮件头中。 它允许接收者验证声称来自某个特定域的电子邮件确实已被该域的所有者授权。 其主要目的是防止伪造的电子邮件。

我们可以为所有域使用不同的DKIM密钥,甚至可以为单个域使用多个密钥,但是为了本文的简单起见,我们将使用单个DKIM密钥,以后可以将其用于所有新域。

创建一个新目录来存储DKIM密钥,并使用来生成新的DKIM密钥对。 rspamadm 效用:

sudo mkdir /var/lib/rspamd/dkim/rspamadm dkim_keygen -b 2048 -s mail -k /var/lib/rspamd/dkim/mail.key | sudo tee -a  /var/lib/rspamd/dkim/mail.pub

在上面的示例中,我们使用 mail 作为DKIM选择器。

现在,您应该在其中有两个新文件 /var/lib/rspamd/dkim/ 目录, mail.key 这是我们的私钥文件, mail.pub 包含DKIM公钥的文件。 我们稍后将更新我们的DNS区域记录。

设置正确的所有权和权限:

sudo chown -R _rspamd: /var/lib/rspamd/dkimsudo chmod 440 /var/lib/rspamd/dkim/*

现在我们需要告诉Rspamd在哪里寻找DKIM密钥,选择器的名称和最后一行将为别名发件人地址启用DKIM签名。 为此,请创建一个具有以下内容的新文件:

/etc/rspamd/local.d/dkim_signing.conf

selector = "mail";
path = "/var/lib/rspamd/dkim/$selector.key";
allow_username_mismatch = true;

Rspamd还支持对身份验证接收链(ARC)签名进行签名。 您可以在此处找到有关ARC规范的更多信息。

Rspamd使用DKIM模块来处理ARC签名,因此我们可以简单地复制以前的配置:

sudo cp /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf

重新启动Rspamd服务以使更改生效:

sudo systemctl restart rspamd

DNS设置

我们已经创建了DKIM密钥对,现在我们需要更新DNS区域。 DKIM公钥存储在 mail.pub 文件。 该文件的内容应如下所示:

cat /var/lib/rspamd/dkim/mail.pub
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
	"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqdBRCqYzshc4LmmkxUkCH/rcIpSe/QdNIVmBrgqZmZ5zzWQi7ShdFOH7V32/VM1VRk2pkjDV7tmfbwslsymsfxgGhVHbU0R3803uRfxAiT2mYu1hCc9351YpZF4WnrdoA3BT5juS3YUo5LsDxvZCxISnep8VqVSAZOmt8wFsZKBXiIjWuoI6XnWrzsAfoaeGaVuUZBmi4ZTg0O4yl"
	"nVlIz11McdZTRe1FlONOzO7ZkQFb7O6ogFepWLsM9tYJ38TFPteqyO3XBjxHzp1AT0UvsPcauDoeHUXgqbxU7udG1t05f6ab5h/Kih+jisgHHF4ZFK3qRtawhWlA9DtS35DlwIDAQAB"
) ;

如果您正在运行自己的Bind DNS服务器,则只需将记录直接复制并粘贴到您的域区域文件中即可。 如果使用DNS Web界面,则需要使用以下命令创建新的TXT记录: mail._domainkey 作为名称,而对于值/内容,则需要删除所有三行连接在一起的引号。 在我们的情况下,TXT记录的值/内容应如下所示:

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqdBRCqYzshc4LmmkxUkCH/rcIpSe/QdNIVmBrgqZmZ5zzWQi7ShdFOH7V32/VM1VRk2pkjDV7tmfbwslsymsfxgGhVHbU0R3803uRfxAiT2mYu1hCc9351YpZF4WnrdoA3BT5juS3YUo5LsDxvZCxISnep8VqVSAZOmt8wFsZKBXiIjWuoI6XnWrzsAfoaeGaVuUZBmi4ZTg0O4ylnVlIz11McdZTRe1FlONOzO7ZkQFb7O6ogFepWLsM9tYJ38TFPteqyO3XBjxHzp1AT0UvsPcauDoeHUXgqbxU7udG1t05f6ab5h/Kih+jisgHHF4ZFK3qRtawhWlA9DtS35DlwIDAQAB

我们还将创建基于域的消息身份验证(DMARC),旨在告知接收服务器是否接受来自特定发件人的电子邮件。 基本上,它将保护您的域免遭直接域欺骗,并提高您的域信誉。

如果您从一开始就遵循该系列,那么您应该已经有一个 SFP 为您的域记录。 要设置DMARC记录,发送域需要发布SPF和DKIM记录。 DMARC策略以TXT记录的形式发布,它定义了验证失败时接收方应如何处理来自您域的邮件。

在本文中,我们将实现以下DMARC策略:

_dmarc  IN  TXT  "v=DMARC1; p=none; adkim=r; aspf=r;"

让我们分解上面的DMARC记录:

  • v=DMARC1 -这是DMARC标识符
  • p=none -这告诉接收者如何处理未通过DMARC的消息。 在我们的情况下,将其设置为none意味着如果消息失败DMARC则不采取任何措施。 您也可以使用“拒绝”或 quarantine
  • adkim=raspf=rDKIMSPF 对准, r 为轻松和 s 对于Strict,在我们的示例中,我们对DKIM和SPF使用了宽松对齐。

与以前一样,如果您正在运行自己的Bind DNS服务器,则只需将记录复制并粘贴到域区域文件中;如果您使用的是其他DNS提供程序,则需要使用 _dmarc 作为一个名字和 v=DMARC1; p=none; adkim=r; aspf=r; 作为价值/内容。

DNS更改可能需要一段时间才能传播。 您可以使用dig命令检查记录是否已传播:

dig mail._domainkey.linuxize.com TXT +short
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqdBRCqYzshc4LmmkxUkCH/rcIpSe/QdNIVmBrgqZmZ5zzWQi7ShdFOH7V32/VM1VRk2pkjDV7tmfbwslsymsfxgGhVHbU0R3803uRfxAiT2mYu1hCc9351YpZF4WnrdoA3BT5juS3YUo5LsDxvZCxISnep8VqVSAZOmt8wFsZKBXiIjWuoI6XnWrzsAfoaeGa" "VuUZBmi4ZTg0O4ylnVlIz11McdZTRe1FlONOzO7ZkQFb7O6ogFdepWLsM9tYJ38TFPteqyO3XBjxHzp1AT0UvsPcauDoeHUXgqbxU7udG1t05f6ab5h/Kih+jisgHHF4ZFK3qRtawhWlA9DtS35DlwIDAQAB"
dig _dmarc.linuxize.com TXT +short
"v=DMARC1; p=none; adkim=r; aspf=r;"

您还可以检查域中当前的DMARC策略,或在此处创建自己的DMARC策略。

结论#

就是本教程的这一部分。 在本系列的下一部分中,我们将继续RoundCube的安装和配置。

邮件服务器后缀dovecot dns rspamd

这篇文章是“设置和配置邮件服务器”系列的一部分。该系列的其他文章:

•使用PostfixAdminMarch 1,2018设置邮件服务器•安装和配置Postfix和DovecotMarch 2,2018•安装和集成RspamdMarch 8,2018•安装和配置Roundcube Webmail2018年3月12日

Sidebar