HTTP remote lists and Spam filter improvements

This commit is contained in:
mdecimus
2024-12-22 19:35:22 +01:00
parent d1944b8a6f
commit 7cca6fc298
59 changed files with 743 additions and 808 deletions

View File

@@ -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"]

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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;