安装和集成Rspamd

时间:2020-03-05 15:27:45  来源:igfitidea点击:

这是我们设置和配置邮件服务器的第三部分。

在本教程中,我们将介绍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

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

要将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的“正常工作者”扫描邮件的工作者在端口11333上的所有接口上进行侦听。
创建以下文件以将Rspamd正常工作者配置为仅侦听localhost接口:

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

bind_socket = "127.0.0.1:11333";

“代理工作者”在端口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

输出应如下所示:

$khz7u8nxgggsfay3qta7ousbnmi1skew$zdat4nsm7nd3ctmiigx9kjyo837hcjodn1bob5jaxt7xpkieoctb

不要忘记将密码('P4ssvv0rD')更改为更安全的密码。

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

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

password = "$khz7u8nxgggsfay3qta7ousbnmi1skew$zdat4nsm7nd3ctmiigx9kjyo837hcjodn1bob5jaxt7xpkieoctb";

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

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

/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.theitroad.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.theitroad.com/rspamd/”,输入我们以前使用“ rspamadm pw”命令生成的密码,然后将显示Rspamd Web界面。

配置Postfix

我们需要配置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

我们已经在本系列的第二部分中安装并配置了Dovecot,现在我们将安装“筛网”过滤模块并将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

创建一个全局筛选器筛选器,以将标记为垃圾邮件的电子邮件移动到“垃圾邮件”目录:

/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;
}

每当我们将电子邮件移入或者移出“垃圾邮件”目录时,都会触发以下两个筛选脚本:

/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密钥,并使用“ rspamadm”实用程序生成一个新的DKIM密钥对:

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

在上面的示例中,我们使用“邮件”作为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界面,则需要使用“ mail._domainkey”作为名称创建一个新的TXT记录,而对于值/内容,则需要删除所有三行之间的引号。
在我们的情况下,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,则不采取任何措施。我们也可以使用“拒绝”或者“隔离”
  • 'adkim = r'和'aspf = r'-'DKIM'和'SPF'对齐,'r'表示放宽,'s'表示严格,在我们的示例中,我们对DKIM和SPF都使用了放宽对齐。

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

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

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

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