HTTP remote lists and Spam filter improvements
This commit is contained in:
@@ -5,8 +5,8 @@ edition = "2021"
|
||||
resolver = "2"
|
||||
|
||||
[features]
|
||||
default = ["sqlite", "postgres", "mysql", "rocks", "elastic", "s3", "redis", "azure", "foundationdb"]
|
||||
#default = ["rocks"]
|
||||
#default = ["sqlite", "postgres", "mysql", "rocks", "elastic", "s3", "redis", "azure", "foundationdb"]
|
||||
default = ["rocks"]
|
||||
sqlite = ["store/sqlite"]
|
||||
foundationdb = ["store/foundation", "common/foundation"]
|
||||
postgres = ["store/postgres"]
|
||||
|
||||
@@ -6,7 +6,7 @@ spf.result none
|
||||
spf_ehlo.result none
|
||||
dmarc.result none
|
||||
remote_ip 195.210.29.48
|
||||
expect_header X-Spam-Result: ARC_NA (0.00), DKIM_NA (0.00), DMARC_NA (0.00), FROM_EQ_ENVFROM (0.00), FROM_HAS_DN (0.00), HAS_DATA_URI (0.00), RCPT_COUNT_ONE (0.00), RCVD_COUNT_ZERO (0.00), SPF_NA (0.00), SUBJECT_ENDS_EXCLAIM (0.00), TO_DN_NONE (0.00), TO_MATCH_ENVRCPT_ALL (0.00), ONCE_RECEIVED (0.10), RCVD_NO_TLS_LAST (0.10), MIME_HTML_ONLY (0.20), HELO_NORES_A_OR_MX (0.30), AUTH_NA (1.00), DATE_IN_PAST (1.00), MID_RHS_MATCH_FROM (1.00), RDNS_NONE (1.00), FROMHOST_NORES_A_OR_MX (1.50), HTML_SHORT_LINK_IMG_1 (2.00), PYZOR (3.50)
|
||||
expect_header X-Spam-Result: ARC_NA (0.00), DKIM_NA (0.00), DMARC_NA (0.00), FROM_EQ_ENVFROM (0.00), FROM_HAS_DN (0.00), HAS_DATA_URI (0.00), MID_RHS_MATCH_ENVFROM (0.00), RCPT_COUNT_ONE (0.00), RCVD_COUNT_ZERO (0.00), SPF_NA (0.00), SUBJECT_ENDS_EXCLAIM (0.00), TO_DN_NONE (0.00), TO_MATCH_ENVRCPT_ALL (0.00), ONCE_RECEIVED (0.10), RCVD_NO_TLS_LAST (0.10), MIME_HTML_ONLY (0.20), HELO_NORES_A_OR_MX (0.30), AUTH_NA (1.00), DATE_IN_PAST (1.00), MID_RHS_MATCH_FROM (1.00), RDNS_NONE (1.00), FROMHOST_NORES_A_OR_MX (1.50), HTML_SHORT_LINK_IMG_1 (2.00), PYZOR (3.50)
|
||||
expect_header X-Spam-Status: Yes, score=11.70
|
||||
|
||||
From: Client Services <noreply@tetheer.com>
|
||||
@@ -574,7 +574,7 @@ dmarc.result fail
|
||||
dmarc.policy reject
|
||||
remote_ip 51.89.165.39
|
||||
tls.version TLS1_2
|
||||
expect_header X-Spam-Result: DKIM_ALLOW (-0.20), HAS_LIST_UNSUB (-0.01), ARC_NA (0.00), DKIM_SIGNED (0.00), FROM_EQ_ENVFROM (0.00), FROM_HAS_DN (0.00), HAS_REPLYTO (0.00), RCPT_COUNT_ONE (0.00), RCVD_COUNT_ZERO (0.00), REPLYTO_ADDR_EQ_FROM (0.00), REPLYTO_EQ_FROM (0.00), SPF_SOFTFAIL (0.00), TO_DN_NONE (0.00), TO_MATCH_ENVRCPT_ALL (0.00), ONCE_RECEIVED (0.10), RCVD_NO_TLS_LAST (0.10), HELO_NORES_A_OR_MX (0.30), DATE_IN_PAST (1.00), MID_RHS_MATCH_FROM (1.00), RDNS_NONE (1.00), R_PARTS_DIFFER (1.00), FROMHOST_NORES_A_OR_MX (1.50), DMARC_POLICY_REJECT (2.00), HTML_SHORT_LINK_IMG_1 (2.00), VIOLATED_DIRECT_SPF (3.50)
|
||||
expect_header X-Spam-Result: DKIM_ALLOW (-0.20), HAS_LIST_UNSUB (-0.01), ARC_NA (0.00), DKIM_SIGNED (0.00), FROM_EQ_ENVFROM (0.00), FROM_HAS_DN (0.00), HAS_REPLYTO (0.00), MID_RHS_MATCH_ENVFROM (0.00), RCPT_COUNT_ONE (0.00), RCVD_COUNT_ZERO (0.00), REPLYTO_ADDR_EQ_FROM (0.00), REPLYTO_EQ_FROM (0.00), SPF_SOFTFAIL (0.00), TO_DN_NONE (0.00), TO_MATCH_ENVRCPT_ALL (0.00), ONCE_RECEIVED (0.10), RCVD_NO_TLS_LAST (0.10), HELO_NORES_A_OR_MX (0.30), DATE_IN_PAST (1.00), MID_RHS_MATCH_FROM (1.00), RDNS_NONE (1.00), R_PARTS_DIFFER (1.00), FROMHOST_NORES_A_OR_MX (1.50), DMARC_POLICY_REJECT (2.00), HTML_SHORT_LINK_IMG_1 (2.00), VIOLATED_DIRECT_SPF (3.50)
|
||||
expect_header X-Spam-Status: Yes, score=13.29
|
||||
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=sectionalism; d=grupokonecta.net;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
expect DMARC_NA SPF_NA DKIM_NA ARC_NA
|
||||
expect DMARC_NA SPF_NA DKIM_NA ARC_NA AUTH_NA
|
||||
|
||||
Subject: test
|
||||
|
||||
@@ -77,7 +77,7 @@ Test
|
||||
dkim.result pass
|
||||
dkim.domains spf-dkim-allow.org
|
||||
spf.result pass
|
||||
expect ALLOWLIST_SPF_DKIM DKIM_ALLOW SPF_ALLOW ARC_NA DMARC_NA
|
||||
expect DKIM_ALLOW SPF_ALLOW ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -87,7 +87,7 @@ Test
|
||||
dkim.result pass
|
||||
spf.result pass
|
||||
arc.result pass
|
||||
expect ALLOWLIST_SPF_DKIM DKIM_ALLOW SPF_ALLOW ARC_ALLOW DMARC_NA
|
||||
expect DKIM_ALLOW SPF_ALLOW ARC_ALLOW DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -96,7 +96,7 @@ Test
|
||||
<!-- NEXT TEST -->
|
||||
spf.result pass
|
||||
dkim.result fail
|
||||
expect ALLOWLIST_SPF BLOCKLIST_DKIM DKIM_REJECT SPF_ALLOW ARC_NA DMARC_NA
|
||||
expect DKIM_REJECT SPF_ALLOW ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -105,7 +105,7 @@ Test
|
||||
<!-- NEXT TEST -->
|
||||
spf.result pass
|
||||
dkim.result temperror
|
||||
expect ALLOWLIST_SPF DKIM_TEMPFAIL SPF_ALLOW ARC_NA DMARC_NA
|
||||
expect DKIM_TEMPFAIL SPF_ALLOW ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -115,7 +115,7 @@ Test
|
||||
dkim.result pass
|
||||
dkim.domains spf-dkim-allow.org
|
||||
spf.result fail
|
||||
expect BLOCKLIST_SPF ALLOWLIST_DKIM DKIM_ALLOW SPF_FAIL ARC_NA DMARC_NA
|
||||
expect DKIM_ALLOW SPF_FAIL ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -125,7 +125,7 @@ Test
|
||||
dkim.result pass
|
||||
dkim.domains spf-dkim-allow.org
|
||||
spf.result temperror
|
||||
expect ALLOWLIST_DKIM DKIM_ALLOW SPF_DNSFAIL ARC_NA DMARC_NA
|
||||
expect DKIM_ALLOW SPF_DNSFAIL ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -134,7 +134,7 @@ Test
|
||||
<!-- NEXT TEST -->
|
||||
dkim.result fail
|
||||
spf.result fail
|
||||
expect BLOCKLIST_SPF_DKIM DKIM_REJECT SPF_FAIL ARC_NA DMARC_NA
|
||||
expect DKIM_REJECT SPF_FAIL ARC_NA DMARC_NA
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
@@ -143,7 +143,7 @@ Test
|
||||
<!-- NEXT TEST -->
|
||||
dkim.result temperror
|
||||
spf.result temperror
|
||||
expect DKIM_TEMPFAIL SPF_DNSFAIL ARC_NA DMARC_NA
|
||||
expect DKIM_TEMPFAIL SPF_DNSFAIL ARC_NA DMARC_NA AUTH_NA_OR_FAIL
|
||||
|
||||
From: user@spf-dkim-allow.org
|
||||
Subject: test
|
||||
|
||||
@@ -158,15 +158,15 @@ Reply-to: <info@www.domain.org>
|
||||
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
envelope_from hello@gmail.com
|
||||
expect FREEMAIL_ENVFROM FREEMAIL_FROM FROM_EQ_ENVFROM FROM_NO_DN
|
||||
envelope_from hello@custom.disposable.org
|
||||
expect FREEMAIL_FROM DISPOSABLE_ENV_FROM FROM_NEQ_ENVFROM FROM_NO_DN FORGED_SENDER
|
||||
|
||||
From: hello@gmail.com
|
||||
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
envelope_from hello@custom.disposable.org
|
||||
expect DISPOSABLE_ENVFROM DISPOSABLE_FROM FROM_EQ_ENVFROM FROM_NO_DN
|
||||
envelope_from hello@gmail.com
|
||||
expect DISPOSABLE_FROM FREEMAIL_ENV_FROM FROM_NEQ_ENVFROM FROM_NO_DN FORGED_SENDER
|
||||
|
||||
From: hello@custom.disposable.org
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ Message-ID: <1234@host.domain.co.uk>
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
envelope_from hello@domain.co.uk
|
||||
expect MID_RHS_MATCH_FROMTLD
|
||||
expect MID_RHS_MATCH_ENVFROMTLD
|
||||
|
||||
Message-ID: <1234@host.domain.co.uk>
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ Cc: otheruser@guerrillamail.com
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
envelope_from test@test.com
|
||||
expect FREEMAIL_CC DISPOSABLE_TO DISPOSABLE_CC RCPT_COUNT_THREE TO_DN_NONE
|
||||
expect FREEMAIL_CC DISPOSABLE_TO DISPOSABLE_BCC RCPT_COUNT_THREE TO_DN_NONE
|
||||
|
||||
To: otheruser@guerrillamail.com
|
||||
Cc: user@gmail.com
|
||||
|
||||
@@ -90,21 +90,21 @@ Reply-to: "Mr. Hello" <bye@domain.org>
|
||||
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
expect FREEMAIL_REPLYTO REPLYTO_EQ_FROM HAS_REPLYTO
|
||||
expect FREEMAIL_REPLY_TO FREEMAIL_FROM REPLYTO_DOM_EQ_FROM_DOM HAS_REPLYTO
|
||||
|
||||
From: hello@gmail.com
|
||||
Reply-to: hello@gmail.com
|
||||
Reply-to: bye@gmail.com
|
||||
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
expect DISPOSABLE_REPLYTO REPLYTO_EQ_FROM HAS_REPLYTO
|
||||
expect DISPOSABLE_REPLY_TO DISPOSABLE_FROM REPLYTO_DOM_EQ_FROM_DOM HAS_REPLYTO
|
||||
|
||||
From: hello@custom.disposable.org
|
||||
Reply-to: hello@custom.disposable.org
|
||||
Reply-to: bye@custom.disposable.org
|
||||
|
||||
Test
|
||||
<!-- NEXT TEST -->
|
||||
expect FREEMAIL_REPLYTO_NEQ_FROM_DOM FREEMAIL_REPLYTO REPLYTO_DOM_NEQ_FROM_DOM SPOOF_REPLYTO HAS_REPLYTO
|
||||
expect FREEMAIL_REPLY_TO_NEQ_FROM_DOM FREEMAIL_REPLY_TO FREEMAIL_FROM REPLYTO_DOM_NEQ_FROM_DOM SPOOF_REPLYTO HAS_REPLYTO
|
||||
|
||||
From: hello@gmail.com
|
||||
Reply-to: hello@yahoomail.com
|
||||
|
||||
@@ -106,19 +106,19 @@ model = "gpt-dummy"
|
||||
allow-invalid-certs = true
|
||||
|
||||
[spam-filter.list]
|
||||
"freemail-providers" = {"gmail.com", "googlemail.com", "yahoomail.com", "*freemail.org"}
|
||||
"disposable-providers" = {"guerrillamail.com", "*disposable.org"}
|
||||
"url-redirectors" = {"bit.ly", "redirect.io", "redirect.me", "redirect.org", "redirect.com", "redirect.net", "t.ly", "tinyurl.com"}
|
||||
"dmarc-allow" = {"dmarc-allow.org"}
|
||||
"spf-dkim-allow" = {"spf-dkim-allow.org"}
|
||||
"spam-traps" = {"spamtrap@*"}
|
||||
"trusted-domains" = {"stalw.art"}
|
||||
"file-extensions" = { "html" = "text/html|BAD",
|
||||
"pdf" = "application/pdf|NZ",
|
||||
"txt" = "text/plain|message/disposition-notification|text/rfc822-headers",
|
||||
"zip" = "AR",
|
||||
"js" = "BAD|NZ",
|
||||
"hta" = "BAD|NZ" }
|
||||
[lookup]
|
||||
"url-redirectors" = {"bit.ly", "redirect.io", "redirect.me", "redirect.org", "redirect.com", "redirect.net", "t.ly", "tinyurl.com"}
|
||||
"known-dmarc-domains" = {"dmarc-allow.org"}
|
||||
"spam-traps" = {"spamtrap@*"}
|
||||
"trusted-domains" = {"stalw.art"}
|
||||
"freemail-providers" = {"gmail.com", "googlemail.com", "yahoomail.com", "*freemail.org"}
|
||||
"disposable-providers" = {"guerrillamail.com", "*disposable.org"}
|
||||
"#;
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@@ -526,10 +526,12 @@ async fn antispam() {
|
||||
}
|
||||
"from" => {
|
||||
server.spam_filter_analyze_from(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_domain(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_rules(&mut spam_ctx).await;
|
||||
}
|
||||
"replyto" => {
|
||||
server.spam_filter_analyze_reply_to(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_domain(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_rules(&mut spam_ctx).await;
|
||||
}
|
||||
"recipient" => {
|
||||
@@ -553,6 +555,9 @@ async fn antispam() {
|
||||
}
|
||||
"dmarc" => {
|
||||
server.spam_filter_analyze_dmarc(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_headers(&mut spam_ctx).await;
|
||||
server.spam_filter_analyze_rules(&mut spam_ctx).await;
|
||||
spam_ctx.result.tags.retain(|t| !t.starts_with("X_HDR_"));
|
||||
}
|
||||
"ip" => {
|
||||
server.spam_filter_analyze_ip(&mut spam_ctx).await;
|
||||
|
||||
Reference in New Issue
Block a user