Whitelist module is intended to decrease or increase scores for some messages that are known to be from the trusted sources based on DKIM/SPF/DMARC policies (for generic lists please use multimap module).
The reasoning for this module is that due to SMTP
protocol design flaws, it is quite easy to forge sender. Therefore, rspamd tries to validate sender based on the following additional policies:
DKIM
: a message has a valid DKIM signature for this domain (similar to DMARC alignment but for DKIM only)SPF
: a message matches SPF record for the domainDMARC
: a message satisfies domain’s DMARC policy (implies aligned SPF or DKIM according to the DMARC standard)Whitelist configuration is quite straightforward. You can define a set of rules within
rules
section. Each rule must have domains
attribute that specifies either
map of domains (if specified as a string) or a direct list of domains (if specified as an array).
The following constraints are allowed:
valid_spf
: require a valid SPF policyvalid_dkim
: require DKIM validationvalid_dmarc
: require a valid DMARC policyEach whitelist rule can work in 3 modes:
whitelist
(default): add symbol when a domain has been found and one of constraints defined is satisfied (e.g. valid_dmarc
)blacklist
: add symbol when a domain has been found and one of constraints defined is NOT satisfied (e.g. valid_dmarc
)strict
: add symbol with negative (ham) score when a domain has been found and one of constraints defined is satisfied (e.g. valid_dmarc
) and add symbol with POSITIVE (spam) score when some of constraints defined has failedIf you do not define any constraints, then all both strict
and whitelist
rules just insert result for all mail from the specified domains. For blacklist
rules the result has normally positive score.
These options are combined using AND
operator for whitelist
and using OR
for blacklist
and strict
rules. Therefore, if valid_dkim = true
and
valid_spf = true
would require both DKIM and SPF validation to whitelist domains from
the list. On the contrary, for blacklist and strict rules any violation would cause positive score symbol being inserted.
Each whitelist entry in a map can also have a value override to override the default rule policy and even the score multiplier. For example, you can have a whitelist for DMARC but want some entries to act as strict
policy adding spam symbol in case of DMARC policy failure. You can use the following values in your map to achieve that:
example.com # normal whitelist entry: whitelisting on hit, nothing on no hit
bank.com both:1.0 # strict whitelist entry: spam symbol on policy failure and ham symbol on policy success
foo.com both:2.0 # same as previous but with 2.0 multiplier for score
bar.com bl:1.0 # add spam symbol on failure but do not enable ham symbol on success
baz.com wl:2.0 # vice-versa - return to the normal behaviour but with 2.0 multiplier for policy success
You can also check maps shipped with Rspamd in the following repo: https://github.com/rspamd/maps/ Reasonable pull requests are very wellcome.
You can also set the default metric settings using the ordinary attributes, such as:
score
: default scoregroup
: default group (whitelist
group is used if not specified explicitly)one_shot
: default one shot modedescription
: default descriptionWithin lists, you can also use optional multiplier
argument that defines additional
multiplier for the score added by this module. For example, let’s define twice bigger
score for github.com
:
["github.com", 2.0]
or if using map:
github.com 2.0
The valid_dkim = true
check verifies more than just R_DKIM_ALLOW
has been triggered. It also verifies that the DKIM domain being validated is equal to the domain in the FROM envelop. Thus a message sent by a sender x.com
that has been DKIM signed by mailchimp.app
will not set valid_dkim
to true and the whitelist rule will not fire.
whitelist {
rules {
WHITELIST_SPF = {
valid_spf = true;
domains = [
"github.com",
];
score = -1.0;
}
WHITELIST_DKIM = {
valid_dkim = true;
domains = [
"github.com",
];
score = -2.0;
}
WHITELIST_SPF_DKIM = {
valid_spf = true;
valid_dkim = true;
domains = [
["github.com", 2.0],
];
score = -3.0;
}
STRICT_SPF_DKIM = {
valid_spf = true;
valid_dkim = true;
strict = true;
domains = [
["paypal.com", 2.0],
];
score = -3.0; # For strict rules negative score should be defined
}
BLACKLIST_DKIM = {
valid_spf = true;
valid_dkim = true;
blacklist = true;
domains = "/some/file/blacklist_dkim.map";
score = 3.0; # Note positive score here
}
WHITELIST_DMARC_DKIM = {
valid_dkim = true;
valid_dmarc = true;
domains = [
"github.com",
];
score = -7.0;
}
}
}
Rspamd also comes with a set of pre-defined whitelisted domains that could be useful for start.