×

对于自建的个人邮局来说,手动建立/设置一个基于DNS的黑名单规则(DNS based Block List)来阻止别人的邮件其实不是很有必要,事实上poste.io的默认策略就是尽量不拒收任何“正常”的邮件。因为别人想要向你的邮箱发送(垃圾)邮件首先必须得知道你真实存在、有效的地址,否则他们的发信尝试会被系统拒绝;网络空间中那些恶意发信、被利用的服务器大概率不会知道你的真实邮箱地址,并且当它们多次尝试发送无效邮件时(发送到系统中不存在的邮箱地址,或者尝试中继等)会被haraka标记为无效连接,达到指定次数时会被系统拒绝连接。所以当你想建立严格的黑名单列表拒绝邮件时,你防的很可能只有你自己。

只有一种情况你才需要额外设置过滤功能,就是你的域名被列入了DBL(基于域名的黑名单),在默认设置的情况下可能会导致如果邮件中包含你的列入了DBL域名,会被rspamd在主题(subject)前加上***SPAM***。你可以在rspamd设置中将自己的域名添加入白名单以规避这种情况。

话虽这么说,我还是这么折腾了🤐

根据poste.io邮件服务器的架构,它支持在Haraka(负责邮件收发)和Rspamd(邮件过滤组件)通过添加DNSBL规则进行拒收邮件的行为。

Haraka部分

haraka DNSBL 设置

图中的为Haraka的DNSBL设置,默认为公共的Spamhaus查询源,需要注意即使发信人被列入这些名单中,正如poste.io的默认策略,Haraka也不会立即阻止来自这些IP或域名的发信尝试,而是根据karma分数判断是否允许对方发信,除非有多次无效连接的记录,一般不会阻止。

2024-04-13T21:28:07.515Z [B05401B3-6AF2-4F38-ACD3-B97E5D14B813] 104.248.201.227:52073%NXDOMAIN () -> – [][] 500 very bad karma score: -12

被拒绝的部分系统对话日志举例

2024-04-13T21:28:03.055Z [INFO] [karma] score: -7, history: 0, awards: 031,086, asn_score: -91, asn_connections: 95, asn_good: 1, asn_bad: 92, fail:asn:history
2024-04-13T21:28:04.120Z [PROTOCOL] [core] S: 220 mx.kabe.dev ESMTP Haraka/3.0.3 ready
2024-04-13T21:28:04.315Z [PROTOCOL] [core] C: EHLO User state=1
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250-mx.kabe.dev Hello [104.248.201.227], Kabe.dev is at your service
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250-PIPELINING
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250-8BITMIME
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250-SMTPUTF8
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250-SIZE 26214400
2024-04-13T21:28:05.439Z [PROTOCOL] [core] S: 250 STARTTLS
2024-04-13T21:28:05.798Z [PROTOCOL] [core] C: RSET state=1
2024-04-13T21:28:05.799Z [DEBUG] [core] running rset hooks
2024-04-13T21:28:05.799Z [PROTOCOL] [core] S: 250 OK
2024-04-13T21:28:06.298Z [PROTOCOL] [core] C: AUTH LOGIN state=1
2024-04-13T21:28:07.304Z [PROTOCOL] [core] S: 500 very bad karma score: -12
2024-04-13T21:28:07.508Z [PROTOCOL] [core] C: QUIT state=1
2024-04-13T21:28:07.509Z [PROTOCOL] [core] S: 221 mx.kabe.dev closing connection. Have a jolly good day.

设置haraka黑白IP名单

System Settings -> Advanced -> Connection Blocking 中手动设置无效连接数上限,超出这个值会被系统列入自动黑名单,并在设置的时间后解除,最大值好像为216000秒.

手动设置无效连接上限
过多无效连接生成的IP黑名单

你可以将非常系统检测到的大量无效连接的IP/IP段手动加入永久黑名单,也可以将自己的IP手动加入白名单:

不要看错是白名单还是黑名单!

设置Rspamd规则

黑名单规则

这里需要涉及更多的操作,有些麻烦,参考poste.io的说明,通过Spamhaus为rspamd配置好的文件来添加实时黑名单规则。

在这个规则中,我们需要Spamhaus DQS(data querry services) 的访问权限来查询数据库;克隆仓库并更改DQS_key:

$ cd ~       //移动到你想要的文件夹
$ git clone https://github.com/spamhaus/rspamd-dqs
// 移动到克隆的库中
$ cd rspamd-dqs/3.x

$ sed -i 's/your\_DQS\_key/abcdefghijklmnopq123456789/g' *.conf rspamd.local.lua
使用sed命令将仓库内所用conf文件中的“your_DQS_key”替换为你获取的DQS_key,在这个例子中为“abcdefghijklmnopq123456789”

改好后我们需要将文件夹中的所有配置文件复制到 ~/data/_override目录中,该目录中的文件会链接到容器中的/etc/rspamd/local.d目录:

mkdir -p ~/data/_override/etc/rspamd/local.d
//需要将上面的目录地址修改为poste的data地址,如/opt/poste/data/_override/etc/rspamd/local.d
//将rbl.conf,rbl_group.conf复制到_override目录
cp rbl.conf rbl_group.conf /opt/poste/data/_override/etc/rspamd/local.d

白名单规则

设置rspamd中不同行为的分数

新建~/data/_override/etc/rspamd/local.d/multimap.conf,并根据你的需要添加白名单域名或IP并新建对应的map文件,并修改它们的分数(rspamd也是通过分数来判断是否拒收或是隔离邮件,所以通过一个负数来降低分数),你也可以根据这个生成手动的黑名单:

local_wl_domain {
        type = "from";
        filter = "email:domain";
        map = "$CONFDIR/local.d/local_wl_domain.map";
        symbol = "LOCAL_WL_DOMAIN";
        score = -7.0;
        description = "Whitelist map for LOCAL_WL_DOMAIN";
}
local_wl_from {
        type = "from";
        filter = "email:domain:tld";
        map = "$CONFDIR/local.d/local_wl_from.map";
        symbol = "LOCAL_WL_FROM";
        score = -6.0;
        description = "Whitelist map for LOCAL_WL_FROM";
}
local_wl_ip {
        type = "ip";
        map = "$CONFDIR/local.d/local_wl_ip.map";
        symbol = "LOCAL_WL_IP";
        score = -6.0;
        description = "Whitelist map for LOCAL_WL_IP";
}
local_wl_rcpt {
        type = "rcpt";
        map = "$CONFDIR/local.d/local_wl_rcpt.map";
        symbol = "LOCAL_WL_RCPT";
        score = -6.0;
        description = "Whitelist map for LOCAL_WL_RCPT";
}

默认情况下,不使用正则匹配,直接在文件中输入域名即可;~/data/_override/etc/rspamd/local.d/local_wl_domain.map,建立map文件后可以在rspamd面板中添加更多:

example.tld

当然你也可以直接进入容器中,在/etc/rspamd/local.d中直接增加上述rspamd的配置文件:

docker ps //获取容器ID和名称,将e37bbdfd替换为你的容器ID或名称
docker exec -it e37bbdfd /bin/bash   //进入容器
cd /etc/rspamd/local.d

配置完成后重启容器即可。可以通过Spamhaus的检测平台进行测试。

参考:

https://gist.github.com/ThomasLeister/f41adad98bb46d0c8418de50b5efb4a0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

相关文章

Spamhaus数据库

Spamhaus提供了基于DNS的方式查询I...

读出全部

增加wordpress上传大小限制

默认设置下wordpress上传大小限制为2...

读出全部

使用curl命令发送邮件

通过curl来发送简单邮件,并提供了一个脚本...

读出全部

nsupdate使用方法

我们可以使用nsupdate命令来更新域名记...

读出全部

搭建从服务器

如果你有多个服务器,你可以尝试为域名解析搭建...

读出全部