From 93f814a408cb499993b12502d7bb6dd9e41a78a2 Mon Sep 17 00:00:00 2001 From: John Coffey Date: Thu, 29 Oct 2026 23:15:41 -0700 Subject: [PATCH] inbuxa Relay: ingest with session context, and live verdicts The third server-side part of docs/spec/features/relay.md ("Live mode", "Handing held mail down", "Ingest with session context"): - The link service asks for Inbound push as well as Relay, so the relay is live while a node is linked (RL-12). It claims up to eight messages at a time with a 300 s lease (RL-15), downloads each on its own connection, and unseals it with the downstream's sealing key (RL-21). - smtp::inbound::relayed plays the relay's session through this server's own handlers: connect (rate limits, scripts, milters), EHLO, MAIL FROM, each RCPT TO, then DATA, on port 25 with the original sender's address, port and HELO (RL-23). SPF, reverse IP, DMARC, DNSBL, the spam filter, the AI classifier, Sieve and the directory see the real facts. The relay's TLS shows in the Received header and in is_tls, and a new expression variable, relay, is the relay's name (id 92, in the connect, EHLO, MAIL FROM and RCPT contexts, with its schema label). - Live: this server's reply is the verdict. Accepted, the message is destroyed on the relay and the sender hears 250; refused, the relay gives the sender this server's reply. - Held: spam over the reject threshold goes to Junk with X-Inbuxa-Relay: held, over reject threshold, never refused or dropped (RL-17). Recipients refused for good get a DSN only when the sender passed SPF or DMARC here (RL-18); a refusal for now is tried again after the lease. - Every message taken is recorded before the relay is told, and one offered again is destroyed without a second delivery (RL-16). The records are forgotten after heldMaxAge and a day, and with the relay. - On the relay, a message waiting for its verdict stays pending when claimed, so the downstream knows to answer it (spec table updated). - The spec records the external-directory decision: such domains list only the accounts already seen, with no catch-all. - The link system test now sends mail through the real inbuxa-relay: live delivery before 250, a live refusal (too many Received headers) that reaches the sender as 450 4.4.6 with nothing kept, and a message held while the link was off, delivered once when it came back. --- crates/features/src/relay/link.rs | 99 ++++- crates/features/src/relay/mod.rs | 2 + crates/registry/src/schema/enums.rs | 6 + crates/registry/src/schema/enums_impl.rs | 5 +- crates/relay/src/spool.rs | 18 +- crates/relay/src/tests_e2e.rs | 4 + crates/services/src/inbuxa_relay_link.rs | 496 ++++++++++++++++++++++- crates/smtp/src/core/mod.rs | 19 + crates/smtp/src/inbound/data.rs | 34 +- crates/smtp/src/inbound/mod.rs | 1 + crates/smtp/src/inbound/relayed.rs | 489 ++++++++++++++++++++++ crates/smtp/src/inbound/session.rs | 15 +- crates/smtp/src/inbound/spam.rs | 4 +- docs/spec/features/relay.md | 23 +- resources/schema/schema.json.gz | Bin 154259 -> 154311 bytes resources/schema/schema.json.sha256 | 2 +- tests/src/system/relay.rs | 151 ++++++- 17 files changed, 1328 insertions(+), 40 deletions(-) create mode 100644 crates/smtp/src/inbound/relayed.rs diff --git a/crates/features/src/relay/link.rs b/crates/features/src/relay/link.rs index bcace8df..9a62e26c 100644 --- a/crates/features/src/relay/link.rs +++ b/crates/features/src/relay/link.rs @@ -9,7 +9,9 @@ //! the settings and recipient set a relay is sent, and each node's view of //! each relay's link, under `E` `s` + relay id + node id. -use super::{DownstreamKeys, FEATURE, Json, KIND_STATUS, Relay, get_versioned, replace}; +use super::{ + DownstreamKeys, FEATURE, Json, KIND_INGESTED, KIND_STATUS, Relay, get_versioned, replace, +}; use inbuxa_relay_proto::{ pin::{Pin, pins_match}, recipient::{self, RecipientDomain, RecipientHash}, @@ -319,6 +321,101 @@ pub(super) fn clear_statuses(batch: &mut BatchBuilder, relay_id: u32, nodes: &[N } } +// ---- Messages taken --------------------------------------------------------- + +/// The longest `Inbound` id kept: the relay's are 25 characters. +pub const INBOUND_ID_MAX: usize = 64; + +/// Whether `id` can be an `Inbound` id: never anything but letters and +/// digits. +pub fn is_inbound_id(id: &str) -> bool { + !id.is_empty() && id.len() <= INBOUND_ID_MAX && id.bytes().all(|b| b.is_ascii_alphanumeric()) +} + +/// A relay's message, taken at `at`. +#[derive(Debug, Clone, SerdeSerialize, SerdeDeserialize)] +struct Taken { + id: String, + at: u64, +} + +fn ingested_class(relay_id: u32, inbound_id: &[u8]) -> ValueClass { + let mut key = Vec::with_capacity(6 + inbound_id.len()); + key.push(FEATURE); + key.push(KIND_INGESTED); + key.extend_from_slice(&relay_id.to_be_bytes()); + key.extend_from_slice(inbound_id); + ValueClass::Any(AnyClass { + subspace: SUBSPACE_INBUXA, + key, + }) +} + +/// RL-16: whether a relay's message was taken already. +pub async fn was_ingested(data: &Store, relay_id: u32, inbound_id: &str) -> trc::Result { + data.get_value::>(ValueKey::from(ingested_class( + relay_id, + inbound_id.as_bytes(), + ))) + .await + .caused_by(trc::location!()) + .map(|value| value.is_some()) +} + +/// RL-16: records a relay's message as taken, before the relay is told so. +pub async fn record_ingested( + data: &Store, + relay_id: u32, + inbound_id: &str, + now: u64, +) -> trc::Result<()> { + let taken = Taken { + id: inbound_id.to_string(), + at: now, + }; + let mut batch = BatchBuilder::new(); + batch.set( + ingested_class(relay_id, inbound_id.as_bytes()), + Json(&taken).serialize()?, + ); + data.write(batch.build_all()) + .await + .caused_by(trc::location!())?; + Ok(()) +} + +/// Forgets the messages from a relay taken before `before`: RL-16 keeps +/// them for `heldMaxAge` and a day. How many went. +pub async fn forget_ingested(data: &Store, relay_id: u32, before: u64) -> trc::Result { + let mut old = Vec::new(); + data.iterate( + IterateParams::new( + ValueKey::from(ingested_class(relay_id, &[])), + ValueKey::from(ingested_class(relay_id, &[u8::MAX; INBOUND_ID_MAX + 1])), + ), + |_, value| { + if let Ok(Json(taken)) = Json::::deserialize(value) + && taken.at < before + { + old.push(taken.id); + } + Ok(true) + }, + ) + .await + .caused_by(trc::location!())?; + for chunk in old.chunks(500) { + let mut batch = BatchBuilder::new(); + for id in chunk { + batch.clear(ingested_class(relay_id, id.as_bytes())); + } + data.write(batch.build_all()) + .await + .caused_by(trc::location!())?; + } + Ok(old.len()) +} + #[cfg(test)] mod tests { use super::*; diff --git a/crates/features/src/relay/mod.rs b/crates/features/src/relay/mod.rs index 48e14e00..47b946a6 100644 --- a/crates/features/src/relay/mod.rs +++ b/crates/features/src/relay/mod.rs @@ -51,6 +51,7 @@ const FEATURE: u8 = b'E'; const KIND_KEYS: u8 = b'k'; const KIND_RELAY: u8 = b'r'; const KIND_STATUS: u8 = b's'; +const KIND_INGESTED: u8 = b'i'; const CREATE_ATTEMPTS: usize = 5; const MAX_NAME: usize = 100; @@ -569,6 +570,7 @@ pub async fn delete(data: &Store, id: u32) -> trc::Result<()> { data.write(batch.build_all()) .await .caused_by(trc::location!())?; + link::forget_ingested(data, id, u64::MAX).await?; Ok(()) } diff --git a/crates/registry/src/schema/enums.rs b/crates/registry/src/schema/enums.rs index 60020ad7..8d333fc7 100644 --- a/crates/registry/src/schema/enums.rs +++ b/crates/registry/src/schema/enums.rs @@ -840,6 +840,8 @@ pub enum ExpressionVariable { UrlOriginal = 89, Value = 90, ValueLower = 91, + // inbuxa: RL-23, the relay a message came through + Relay = 92, } #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)] @@ -3616,6 +3618,7 @@ pub static MTA_CONNECTION_VARIABLE: &[ExpressionVariable] = &[ ExpressionVariable::IsTls, ExpressionVariable::Asn, ExpressionVariable::Country, + ExpressionVariable::Relay, ]; pub static MTA_EHLO_VARIABLE: &[ExpressionVariable] = &[ @@ -3629,6 +3632,7 @@ pub static MTA_EHLO_VARIABLE: &[ExpressionVariable] = &[ ExpressionVariable::HeloDomain, ExpressionVariable::Asn, ExpressionVariable::Country, + ExpressionVariable::Relay, ]; pub static MTA_MAIL_FROM_VARIABLE: &[ExpressionVariable] = &[ @@ -3644,6 +3648,7 @@ pub static MTA_MAIL_FROM_VARIABLE: &[ExpressionVariable] = &[ ExpressionVariable::AuthenticatedAs, ExpressionVariable::Asn, ExpressionVariable::Country, + ExpressionVariable::Relay, ]; pub static MTA_QUEUE_HOST_VARIABLE: &[ExpressionVariable] = &[ @@ -3720,6 +3725,7 @@ pub static MTA_RCPT_TO_VARIABLE: &[ExpressionVariable] = &[ ExpressionVariable::HeloDomain, ExpressionVariable::Asn, ExpressionVariable::Country, + ExpressionVariable::Relay, ]; pub static MTA_RCPT_VARIABLE: &[ExpressionVariable] = &[ExpressionVariable::Rcpt]; diff --git a/crates/registry/src/schema/enums_impl.rs b/crates/registry/src/schema/enums_impl.rs index c74c4fb1..35e36eda 100644 --- a/crates/registry/src/schema/enums_impl.rs +++ b/crates/registry/src/schema/enums_impl.rs @@ -3775,6 +3775,7 @@ impl EnumImpl for ExpressionVariable { b"url_original" => ExpressionVariable::UrlOriginal, b"value" => ExpressionVariable::Value, b"value_lower" => ExpressionVariable::ValueLower, + b"relay" => ExpressionVariable::Relay, } .copied() } @@ -3873,6 +3874,7 @@ impl EnumImpl for ExpressionVariable { ExpressionVariable::UrlOriginal => "url_original", ExpressionVariable::Value => "value", ExpressionVariable::ValueLower => "value_lower", + ExpressionVariable::Relay => "relay", } } @@ -3974,11 +3976,12 @@ impl EnumImpl for ExpressionVariable { 89 => Some(ExpressionVariable::UrlOriginal), 90 => Some(ExpressionVariable::Value), 91 => Some(ExpressionVariable::ValueLower), + 92 => Some(ExpressionVariable::Relay), _ => None, } } - const COUNT: usize = 92; + const COUNT: usize = 93; } impl serde::Serialize for ExpressionVariable { diff --git a/crates/relay/src/spool.rs b/crates/relay/src/spool.rs index e2fbd2ae..783d9336 100644 --- a/crates/relay/src/spool.rs +++ b/crates/relay/src/spool.rs @@ -61,11 +61,13 @@ struct Entry { } impl Entry { + /// A message waiting for a verdict is pending even while leased: the + /// downstream has to know to answer it. fn state(&self, now: u64) -> InboundState { - if self.lease.as_ref().is_some_and(|l| l.until > now) { - InboundState::Claimed - } else if self.waiter.is_some() { + if self.waiter.is_some() { InboundState::Pending + } else if self.lease.as_ref().is_some_and(|l| l.until > now) { + InboundState::Claimed } else { InboundState::Held } @@ -267,13 +269,15 @@ impl Spool { /// The JMAP object for one message. pub fn get(&self, id: &str, now: u64) -> Option { let e = self.entries.get(id)?; - let state = e.state(now); Some(Inbound { id: e.meta.id.clone(), received_at: time::utc_date(e.meta.received_at), - state, - claimed_until: (state == InboundState::Claimed) - .then(|| time::utc_date(e.lease.as_ref().map_or(0, |l| l.until))), + state: e.state(now), + claimed_until: e + .lease + .as_ref() + .filter(|l| l.until > now) + .map(|l| time::utc_date(l.until)), envelope: e.meta.envelope.clone(), session: e.meta.session.clone(), size: e.meta.size, diff --git a/crates/relay/src/tests_e2e.rs b/crates/relay/src/tests_e2e.rs index 2273aa8c..73bd684a 100644 --- a/crates/relay/src/tests_e2e.rs +++ b/crates/relay/src/tests_e2e.rs @@ -589,6 +589,10 @@ async fn relay_end_to_end() { let got = ws.ok("Inbound/get", json!({ "ids": [live_id] })).await; assert_eq!(got["list"][0]["state"], "pending"); ws.ok("Inbound/claim", json!({})).await; + // Claimed, it still waits for its verdict + let got = ws.ok("Inbound/get", json!({ "ids": [live_id] })).await; + assert_eq!(got["list"][0]["state"], "pending"); + assert!(got["list"][0]["claimedUntil"].is_string()); let verdict = ws .ok( "Inbound/set", diff --git a/crates/services/src/inbuxa_relay_link.rs b/crates/services/src/inbuxa_relay_link.rs index 727d36f5..5f78fb4c 100644 --- a/crates/services/src/inbuxa_relay_link.rs +++ b/crates/services/src/inbuxa_relay_link.rs @@ -14,10 +14,19 @@ //! relay's settings and recipient set the same as this server's: in full //! when the link comes up, then as changes, every few seconds. //! -//! Push is asked for `Relay` only. Asking for `Inbound` would put the relay -//! in live mode, which waits for verdicts this node doesn't give yet. +//! Push is asked for `Relay` and `Inbound`, which puts the relay in live +//! mode (RL-12). Every message the relay takes is claimed, unsealed, and +//! judged by this server's own inbound pipeline with the relay's session +//! (RL-23): a live one gets this server's verdict before the sender is +//! answered, a held one is delivered, or reported to a sender who passed +//! SPF or DMARC (RL-17, RL-18). A message taken is recorded before the +//! relay is told, so one offered again isn't delivered twice (RL-16). -use common::{BuildServer, Inner, Server}; +use common::{ + BuildServer, Inner, Server, + config::server::{DEFAULT_TLS_TIMEOUT, ServerProtocol}, + network::{ServerInstance, TcpAcceptor, limiter::ConcurrencyLimiter}, +}; use futures::{SinkExt, StreamExt}; use http_body_util::{BodyExt, Full}; use hyper::body::Bytes; @@ -28,7 +37,8 @@ use inbuxa_features::{ self as relays, DownstreamKeys, JoinState, Relay, link::{ JoinRecorded, LinkState, LocalDomain, NODE_CERT_RENEW_AFTER, NodeCertificate, NodeLink, - RecipientPlan, issue_node_certificate, pushed_settings, record_join, set_status, + RecipientPlan, forget_ingested, is_inbound_id, issue_node_certificate, pushed_settings, + record_ingested, record_join, set_status, was_ingested, }, }, }; @@ -37,8 +47,11 @@ use inbuxa_relay_proto::{ jmap::{ClientFrame, Invocation, Request, ServerFrame, Session, method}, pin::{Pin, pins_match, spki_pin}, recipient::{RecipientDomain, RecipientHash}, - token, - types::{Capability, RELAY_SINGLETON, RelaySettings, RelayStatus}, + seal, token, + types::{ + Address, Capability, Inbound, InboundState, RELAY_SINGLETON, RelaySettings, RelayStatus, + Reply, Verdict, + }, }; use registry::schema::{ prelude::ObjectType, @@ -50,16 +63,25 @@ use rustls::{ }; use rustls_pki_types::{CertificateDer, PrivateKeyDer, ServerName, UnixTime}; use serde_json::{Value, json}; +use smtp::{ + core::Relayed, + inbound::relayed::{RelayedMessage, RelayedOutcome, ingest_relayed}, +}; use std::{ - collections::{BTreeMap, BTreeSet, HashMap}, + collections::{BTreeMap, BTreeSet, HashMap, HashSet}, sync::{Arc, Mutex}, time::Duration, }; use store::{registry::RegistryQuery, write::now}; -use tokio::{net::TcpStream, sync::watch, task::JoinHandle}; +use tokio::{ + net::TcpStream, + sync::{mpsc, watch}, + task::JoinHandle, +}; use tokio_rustls::{TlsConnector, client::TlsStream}; use tokio_tungstenite::{WebSocketStream, tungstenite::Message}; use types::id::Id; +use utils::snowflake::SnowflakeIdGenerator; /// How often the list of relays is read again. const SCAN: Duration = Duration::from_secs(10); @@ -79,16 +101,40 @@ const MAX_DELTA: usize = 2_000; const ACCOUNT_ID: &str = "relay"; /// Any name: the relay is known by its key, never its name (RL-6). const SERVER_NAME: &str = "relay.invalid"; +/// Messages one link takes at once. +const TAKE_MAX: usize = 8; +/// How long a claimed message is this node's (RL-15). +const LEASE_SECONDS: u64 = 300; +/// How often messages taken long ago are forgotten (RL-16). +const FORGET_EVERY: u64 = 3_600; pub fn spawn_relay_links(inner: Arc) { tokio::spawn(async move { let certs = Arc::new(NodeCertificates::default()); + // Relayed mail's sessions: port 25's, but no listener's + let instance = Arc::new(ServerInstance { + id: "relay".to_string(), + protocol: ServerProtocol::Smtp, + acceptor: TcpAcceptor::Plain, + limiter: ConcurrencyLimiter::new(100), + tls_timeout: DEFAULT_TLS_TIMEOUT, + shutdown_rx: watch::channel(false).1, + proxy_networks: vec![], + span_id_gen: Arc::new(SnowflakeIdGenerator::new()), + }); let mut links: HashMap = HashMap::new(); + let mut forgot_at = 0; loop { let server = inner.build_server(); - if let Err(err) = reconcile(&inner, &server, &certs, &mut links).await { + if let Err(err) = reconcile(&inner, &server, &certs, &instance, &mut links).await { trc::error!(err.details("Failed to start relay links")); } + if now() >= forgot_at + FORGET_EVERY { + forgot_at = now(); + if let Err(err) = forget_taken(&server).await { + trc::error!(err.details("Failed to forget relayed messages taken")); + } + } let woken = tokio::select! { _ = tokio::time::sleep(SCAN) => false, _ = relays::CHANGED.notified() => true, @@ -115,6 +161,7 @@ async fn reconcile( inner: &Arc, server: &Server, certs: &Arc, + instance: &Arc, links: &mut HashMap, ) -> trc::Result<()> { let data = server.store(); @@ -145,7 +192,13 @@ async fn reconcile( continue; } let (wake, woken) = watch::channel(0); - let handle = tokio::spawn(run_link(inner.clone(), id, certs.clone(), woken)); + let handle = tokio::spawn(run_link( + inner.clone(), + id, + certs.clone(), + instance.clone(), + woken, + )); links.insert( id, Running { @@ -158,6 +211,16 @@ async fn reconcile( Ok(()) } +/// RL-16: a relay's messages are remembered for its `heldMaxAge` and a day. +async fn forget_taken(server: &Server) -> trc::Result<()> { + let data = server.store(); + for relay in relays::all(data).await? { + let keep = (u64::from(relay.settings.held_max_age) + 1) * 86_400; + forget_ingested(data, relay.id, now().saturating_sub(keep)).await?; + } + Ok(()) +} + /// This node's link certificate, made again once it is old. #[derive(Default)] struct NodeCertificates(Mutex>>); @@ -210,6 +273,7 @@ async fn run_link( inner: Arc, relay_id: u32, certs: Arc, + instance: Arc, mut woken: watch::Receiver, ) { let mut backoff = BACKOFF_MIN; @@ -247,7 +311,16 @@ async fn run_link( "The join token ran out before the relay joined. Start a new join.", )), JoinState::Joined => { - session(&server, &relay, &keys, &cert, &mut woken, &mut status).await + session( + &server, + &instance, + &relay, + &keys, + &cert, + &mut woken, + &mut status, + ) + .await } }, Err(err) => Err(err), @@ -651,11 +724,12 @@ async fn join(data: &store::Store, relay: &Relay, cert: &NodeCertificate) -> Res // ---- The linked session --------------------------------------------------- -/// A WebSocket to the relay, with the `Relay` changes it pushed meanwhile. +/// A WebSocket to the relay, with the changes it pushed meanwhile. struct Ws { stream: WebSocketStream>, next_id: u64, relay_changed: bool, + inbound_changed: bool, } impl Ws { @@ -685,6 +759,7 @@ impl Ws { stream, next_id: 0, relay_changed: false, + inbound_changed: false, }) } @@ -716,10 +791,11 @@ impl Ws { } fn note(&mut self, frame: &ServerFrame) { - if let ServerFrame::StateChange { changed, .. } = frame - && changed.values().any(|types| types.contains_key("Relay")) - { - self.relay_changed = true; + if let ServerFrame::StateChange { changed, .. } = frame { + for types in changed.values() { + self.relay_changed |= types.contains_key("Relay"); + self.inbound_changed |= types.contains_key("Inbound"); + } } } @@ -801,6 +877,7 @@ struct Sent { /// turned off, moved or joined again, or this node stops. async fn session( server: &Server, + instance: &Arc, relay: &Relay, keys: &DownstreamKeys, cert: &NodeCertificate, @@ -809,11 +886,12 @@ async fn session( ) -> Result<(), LinkError> { let data = server.store(); let pin = relay.join.relay_pin; - let dialer = Dialer::new(relay, cert, pin)?; + let dialer = Arc::new(Dialer::new(relay, cert, pin)?); dialer.check_session().await?; let mut ws = Ws::open(&dialer).await?; + // Inbound too: live mode (RL-12) ws.send(&ClientFrame::WebSocketPushEnable { - data_types: Some(vec!["Relay".into()]), + data_types: Some(vec!["Relay".into(), "Inbound".into()]), push_state: None, }) .await?; @@ -823,6 +901,19 @@ async fn session( status.set(data, relay.id, LinkState::Linked, None).await; refresh_status(&mut ws, data, &relay, &sent, status).await?; + let (answers_tx, mut answers) = mpsc::unbounded_channel(); + let mut taker = Taker { + server: server.clone(), + instance: instance.clone(), + dialer: dialer.clone(), + relay_id: relay.id, + relay_name: relay.name.clone(), + secret: keys.sealing_secret, + taking: HashSet::new(), + answers: answers_tx, + }; + taker.take(&mut ws).await?; + let mut tick = tokio::time::interval(SYNC); tick.reset(); loop { @@ -833,6 +924,14 @@ async fn session( if ws.relay_changed { refresh_status(&mut ws, data, &relay, &sent, status).await?; } + if ws.inbound_changed { + taker.take(&mut ws).await?; + } + continue; + } + Some(answer) = answers.recv() => { + taker.answer(&mut ws, answer).await?; + taker.take(&mut ws).await?; continue; } _ = tick.tick() => {} @@ -856,6 +955,300 @@ async fn session( } sync(server, &relay, keys, &dialer, &mut ws, &mut sent).await?; refresh_status(&mut ws, data, &relay, &sent, status).await?; + taker.relay_name = relay.name.clone(); + taker.take(&mut ws).await?; + } +} + +// ---- Inbound mail ----------------------------------------------------------- + +/// Takes the relay's messages for this node: a few at a time, each judged in +/// its own task, each answered on the link when judged. +struct Taker { + server: Server, + instance: Arc, + dialer: Arc, + relay_id: u32, + relay_name: String, + secret: [u8; 32], + /// Claimed and still being judged. + taking: HashSet, + answers: mpsc::UnboundedSender, +} + +/// What a judged message's answer to the relay is. +struct Answer { + id: String, + action: Action, +} + +#[derive(Debug, PartialEq, Eq)] +enum Action { + /// Taken: the relay deletes it, and a live sender hears 250. + Destroy, + /// A live message refused: the relay gives the sender this reply. + Verdict(Verdict), + /// Not now: the lease runs out and it is offered again (RL-16). + Leave, +} + +impl Taker { + /// Claims what the relay holds, up to [`TAKE_MAX`] at once. + async fn take(&mut self, ws: &mut Ws) -> Result<(), LinkError> { + ws.inbound_changed = false; + let room = TAKE_MAX.saturating_sub(self.taking.len()); + if room == 0 { + return Ok(()); + } + let claimed = ws + .ok( + method::INBOUND_CLAIM, + json!({"limit": room, "leaseSeconds": LEASE_SECONDS}), + ) + .await?; + let ids: Vec<&str> = claimed["ids"] + .as_array() + .into_iter() + .flatten() + .filter_map(Value::as_str) + .collect(); + if ids.is_empty() { + return Ok(()); + } + let got = ws.ok(method::INBOUND_GET, json!({"ids": ids})).await?; + for inbound in got["list"].as_array().into_iter().flatten() { + let Ok(inbound) = serde_json::from_value::(inbound.clone()) else { + continue; + }; + if !is_inbound_id(&inbound.id) + || !is_inbound_id(&inbound.blob_id) + || !self.taking.insert(inbound.id.clone()) + { + continue; + } + let job = Job { + server: self.server.clone(), + instance: self.instance.clone(), + dialer: self.dialer.clone(), + relay_id: self.relay_id, + relay_name: self.relay_name.clone(), + secret: self.secret, + }; + let answers = self.answers.clone(); + tokio::spawn(async move { + let id = inbound.id.clone(); + let action = job.judge(inbound).await; + let _ = answers.send(Answer { id, action }); + }); + } + Ok(()) + } + + /// Tells the relay what became of one message. + async fn answer(&mut self, ws: &mut Ws, answer: Answer) -> Result<(), LinkError> { + self.taking.remove(&answer.id); + match answer.action { + Action::Destroy => { + ws.ok(method::INBOUND_SET, json!({"destroy": [answer.id]})) + .await?; + } + Action::Verdict(verdict) => { + // Refused as `notUpdated` if it stopped waiting meanwhile: + // then it is held, comes back when the lease runs out, and + // is judged as held + ws.ok( + method::INBOUND_SET, + json!({"update": {answer.id: {"verdict": verdict}}}), + ) + .await?; + } + Action::Leave => {} + } + Ok(()) + } +} + +/// Everything one message's judging needs, apart from the link. +struct Job { + server: Server, + instance: Arc, + dialer: Arc, + relay_id: u32, + relay_name: String, + secret: [u8; 32], +} + +impl Job { + async fn judge(self, inbound: Inbound) -> Action { + let data = self.server.store().clone(); + // RL-16: offered again after this server took it + match was_ingested(&data, self.relay_id, &inbound.id).await { + Ok(true) => return Action::Destroy, + Ok(false) => {} + Err(err) => { + trc::error!(err.details("Failed to read the relayed messages taken")); + return Action::Leave; + } + } + let live = inbound.state == InboundState::Pending; + + let message = match self.fetch(&inbound).await { + Ok(message) => message, + Err(reason) => { + trc::error!( + trc::EventType::Server(trc::ServerEvent::ThreadError) + .reason(reason) + .details("Failed to take a relayed message") + .id(inbound.id.clone()) + ); + return Action::Leave; + } + }; + + let input = relayed_message(&self.relay_name, &inbound, !live, message); + let outcome = ingest_relayed(self.server.clone(), self.instance.clone(), input).await; + let action = action_for(&outcome, live); + if action == Action::Destroy + && let Err(err) = record_ingested(&data, self.relay_id, &inbound.id, now()).await + { + trc::error!(err.details("Failed to record a relayed message as taken")); + } + action + } + + /// The message, downloaded and unsealed (RL-21). + async fn fetch(&self, inbound: &Inbound) -> Result, String> { + let (status, sealed) = self + .dialer + .http( + "GET", + &format!("/jmap/download/relay/{}/msg", inbound.blob_id), + "application/octet-stream", + Vec::new(), + ) + .await + .map_err(|err| err.message)?; + if status != 200 { + return Err(format!( + "The relay answered {status} for a held message's download." + )); + } + seal::open(&self.secret, inbound.id.as_bytes(), &sealed) + .map_err(|err| format!("A relayed message didn't unseal: {err}")) + } +} + +/// The relay's session, as this server's pipeline takes it (RL-23). +fn relayed_message(relay: &str, inbound: &Inbound, held: bool, message: Vec) -> RelayedMessage { + let address = |address: &Address| { + ( + address.email.clone(), + address + .parameters + .iter() + .flatten() + .map(|(key, value)| (key.clone(), value.clone())) + .collect(), + ) + }; + let session = &inbound.session; + RelayedMessage { + relayed: Relayed { + relay: relay.to_string(), + held, + tls: session + .tls + .as_ref() + .map(|tls| (tls.version.clone(), tls.cipher.clone())), + dmarc_pass: false, + }, + local_ip: session.local_ip, + remote_ip: session.remote_ip, + remote_port: session.remote_port, + helo: session.helo.clone(), + mail_from: address(&inbound.envelope.mail_from), + rcpt_to: inbound.envelope.rcpt_to.iter().map(address).collect(), + message, + } +} + +/// What the relay is told, from what this server answered. +fn action_for(outcome: &RelayedOutcome, live: bool) -> Action { + match outcome { + RelayedOutcome::Accepted { .. } => Action::Destroy, + RelayedOutcome::Refused { reply, .. } if live => Action::Verdict(verdict_for(reply)), + // Held and refused for good: reported to the sender if it may be + // (RL-18), and gone + RelayedOutcome::Refused { reply, .. } if reply.starts_with('5') => Action::Destroy, + // Held and refused for now: tried again after the lease + RelayedOutcome::Refused { .. } => Action::Leave, + } +} + +/// A live message's verdict: this server's reply, as the relay gives it. +fn verdict_for(reply: &str) -> Verdict { + let mut parts = reply.splitn(3, ' '); + let code = parts.next().and_then(|code| code.parse::().ok()); + let class = code.map_or(4, |code| code / 100); + let (enhanced, text) = match parts.next() { + Some(esc) + if esc.split('.').count() == 3 + && esc.split('.').all(|p| p.parse::().is_ok()) + && esc.starts_with(char::from(b'0' + class as u8)) => + { + ( + esc.to_string(), + parts.next().unwrap_or_default().to_string(), + ) + } + Some(word) => ( + format!("{class}.0.0"), + [word, parts.next().unwrap_or_default()].join(" "), + ), + None => (format!("{class}.0.0"), String::new()), + }; + // Not a reply at all: its words, as a temporary failure + let text = if code.is_none() { + reply.to_string() + } else { + text + }; + let text: String = text + .trim() + .chars() + .filter(|c| !c.is_control()) + .take(400) + .collect(); + let text = if text.is_empty() { + "Refused".to_string() + } else { + text + }; + let verdict = match (code, class) { + (Some(code), 5) => Verdict::Reject(Reply { + code, + enhanced, + text, + }), + (Some(code), 4) => Verdict::Tempfail(Reply { + code, + enhanced, + text, + }), + _ => Verdict::Tempfail(Reply { + code: 451, + enhanced: "4.3.0".into(), + text, + }), + }; + if verdict.is_valid() { + verdict + } else { + Verdict::Tempfail(Reply { + code: 451, + enhanced: "4.3.0".into(), + text: "Try again later".into(), + }) } } @@ -1060,3 +1453,70 @@ async fn local_recipients(server: &Server) -> trc::Result<(Vec, Vec } Ok((local, addresses)) } + +#[cfg(test)] +mod tests { + use super::*; + + fn reply(code: u16, enhanced: &str, text: &str) -> Reply { + Reply { + code, + enhanced: enhanced.into(), + text: text.into(), + } + } + + #[test] + fn verdicts() { + assert_eq!( + verdict_for("550 5.7.1 Message rejected due to excessive spam score."), + Verdict::Reject(reply( + 550, + "5.7.1", + "Message rejected due to excessive spam score." + )) + ); + assert_eq!( + verdict_for("450 4.4.6 Too many Received headers."), + Verdict::Tempfail(reply(450, "4.4.6", "Too many Received headers.")) + ); + // No enhanced code, or one of the wrong class: the class's own + assert_eq!( + verdict_for("554 no thanks"), + Verdict::Reject(reply(554, "5.0.0", "no thanks")) + ); + assert_eq!( + verdict_for("451 5.7.1 odd"), + Verdict::Tempfail(reply(451, "4.0.0", "5.7.1 odd")) + ); + // Anything else is a temporary failure, never a 250 + assert_eq!( + verdict_for("garbage"), + Verdict::Tempfail(reply(451, "4.3.0", "garbage")) + ); + assert!(verdict_for("550 5.1.1").is_valid()); + } + + #[test] + fn actions() { + let accepted = RelayedOutcome::Accepted { + refused: vec![("joe@example.com".into(), "550 5.1.1 No".into())], + }; + let refused = |reply: &str| RelayedOutcome::Refused { + reply: reply.into(), + refused: vec![], + }; + assert_eq!(action_for(&accepted, true), Action::Destroy); + assert_eq!(action_for(&accepted, false), Action::Destroy); + assert!(matches!( + action_for(&refused("550 5.7.1 Spam"), true), + Action::Verdict(Verdict::Reject(_)) + )); + // Held: refused for good is reported and gone, for now is retried + assert_eq!(action_for(&refused("550 5.1.1 No"), false), Action::Destroy); + assert_eq!( + action_for(&refused("451 4.3.0 Later"), false), + Action::Leave + ); + } +} diff --git a/crates/smtp/src/core/mod.rs b/crates/smtp/src/core/mod.rs index 45145327..ef409303 100644 --- a/crates/smtp/src/core/mod.rs +++ b/crates/smtp/src/core/mod.rs @@ -109,6 +109,23 @@ pub struct SessionData { // to, and recipients rules added, by rule name pub journal_marks: Vec, pub journal_added: Vec<(String, String)>, + // inbuxa: RL-23: a message a relay took on port 25, judged here as if + // this server had taken the session + pub relayed: Option, +} + +/// inbuxa: RL-23: what a relay saw of the session it took a message in. +/// Only the relay link service sets it, for a pinned relay. +#[derive(Debug, Clone, Default)] +pub struct Relayed { + /// The relay's name, for `relay` in expressions. + pub relay: String, + /// The relay already said 250 (RL-17). + pub held: bool, + /// TLS version and cipher between the sender and the relay. + pub tls: Option<(String, String)>, + /// DMARC passed, once DATA checked it (RL-18). + pub dmarc_pass: bool, } /// inbuxa: a DATA refusal by DLP rules: blocked, or a warning the sender @@ -199,6 +216,7 @@ impl SessionData { journal_marks: Vec::new(), journal_added: Vec::new(), access_token: None, + relayed: None, } } } @@ -328,6 +346,7 @@ impl SessionData { journal_marks: Vec::new(), journal_added: Vec::new(), access_token: None, + relayed: None, } } } diff --git a/crates/smtp/src/inbound/data.rs b/crates/smtp/src/inbound/data.rs index c78f258d..9ac61587 100644 --- a/crates/smtp/src/inbound/data.rs +++ b/crates/smtp/src/inbound/data.rs @@ -428,6 +428,10 @@ impl Session { let dmarc_result = dmarc_output.result(); let pass = dmarc_result == DmarcResult::Pass; + // inbuxa: RL-18, a held message's failures bounce only then + if let Some(relayed) = self.data.relayed.as_mut() { + relayed.dmarc_pass = pass; + } let strict = dmarc.is_strict(); let is_temp_fail = matches!(dmarc_result, DmarcResult::TempError(_)); let rejected = strict @@ -604,6 +608,25 @@ impl Session { | rcpt_spam_flag(scores.spam_percentage(user_score)); } } + // inbuxa: RL-17: held mail was already accepted, so it is + // never dropped or refused for spam: it goes to Junk + SpamFilterAction::Discard | SpamFilterAction::Reject + if self.data.relayed.as_ref().is_some_and(|r| r.held) => + { + trc::event!( + Spam(SpamEvent::Classify), + SpanId = self.data.session_id, + QueueId = message_id, + Result = "junk", + Reason = "Held by a relay, over the reject threshold: filed as Junk.", + ); + headers.extend_from_slice(b"X-Inbuxa-Relay: held, over reject threshold\r\n"); + for recipient in self.data.rcpt_to.iter_mut() { + recipient.flags = (recipient.flags & !RCPT_SPAM_MASK) | rcpt_spam_flag(100); + } + let scores = &self.server.core.spam.scores; + spam_result = Some((scores.reject_threshold.max(scores.spam_threshold), 100)); + } SpamFilterAction::Discard => { trc::event!( Spam(SpamEvent::Classify), @@ -1184,8 +1207,13 @@ impl Session { headers.extend_from_slice(b")"); } headers.extend_from_slice(b")\r\n\t"); - if self.stream.is_tls() { - let (version, cipher) = self.stream.tls_version_and_cipher(); + // inbuxa: RL-23: a relayed message's TLS is the relay's with the sender + let tls = match self.data.relayed.as_ref().and_then(|r| r.tls.as_ref()) { + Some((version, cipher)) => Some((version.clone().into(), cipher.clone().into())), + None if self.stream.is_tls() => Some(self.stream.tls_version_and_cipher()), + None => None, + }; + if let Some((version, cipher)) = tls { headers.extend_from_slice(b"(using "); headers.extend_from_slice(version.as_bytes()); headers.extend_from_slice(b" with cipher "); @@ -1195,7 +1223,7 @@ impl Session { headers.extend_from_slice(b"by "); headers.extend_from_slice(self.hostname.as_bytes()); headers.extend_from_slice(concat!(" (", types::brand!(), " SMTP) with ").as_bytes()); - headers.extend_from_slice(match (self.stream.is_tls(), !self.is_authenticated()) { + headers.extend_from_slice(match (self.is_tls(), !self.is_authenticated()) { (true, true) => b"ESMTPS", (true, false) => b"ESMTPSA", (false, true) => b"ESMTP", diff --git a/crates/smtp/src/inbound/mod.rs b/crates/smtp/src/inbound/mod.rs index 78d54470..ccb4d7b7 100644 --- a/crates/smtp/src/inbound/mod.rs +++ b/crates/smtp/src/inbound/mod.rs @@ -18,6 +18,7 @@ pub mod mail; pub mod mailflow; // inbuxa: DLP and mail flow rules pub mod milter; pub mod rcpt; +pub mod relayed; // inbuxa: RL-23, mail an inbuxa Relay took pub mod session; pub mod spam; pub mod spawn; diff --git a/crates/smtp/src/inbound/relayed.rs b/crates/smtp/src/inbound/relayed.rs new file mode 100644 index 00000000..1fdcfce1 --- /dev/null +++ b/crates/smtp/src/inbound/relayed.rs @@ -0,0 +1,489 @@ +/* + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +//! inbuxa: RL-23: a message an inbuxa Relay took on port 25, judged here as +//! if this server had taken the SMTP session itself. +//! +//! The relay's session is played again against this server's own handlers: +//! connect, EHLO, MAIL FROM, every RCPT TO, then DATA, with the original +//! sender's address, port and HELO. SPF, reverse IP, DMARC, DNSBL, the spam +//! filter, the AI classifier, Sieve and the directory all see the real +//! facts, and the answer is the one this server would have given. +//! +//! Only the relay link service calls this, for a relay whose key it pinned. +//! Mail arriving on this server's own port 25 is never treated as relayed. + +use crate::{ + core::{Relayed, Session, SessionData, SessionParameters, State}, + queue::{ + Error, ErrorDetails, MessageSource, Recipient, Status, UnexpectedResponse, dsn::SendDsn, + spool::SmtpSpool, + }, +}; +use common::{ + Server, + network::{ServerInstance, stream::NullIo}, +}; +use mail_auth::SpfResult; +use smtp_proto::{ + MAIL_RET_FULL, MAIL_RET_HDRS, MailFrom, RCPT_NOTIFY_DELAY, RCPT_NOTIFY_FAILURE, + RCPT_NOTIFY_NEVER, RCPT_NOTIFY_SUCCESS, RcptTo, Request, Response, + request::receiver::RequestReceiver, +}; +use std::{borrow::Cow, net::IpAddr, sync::Arc, time::Duration}; +use store::write::{BatchBuilder, BlobLink, BlobOp, now}; +use types::blob_hash::BlobHash; + +/// An address and its SMTP parameters, as the relay passed them on. +pub type EnvelopeAddress = (String, Vec<(String, Option)>); + +/// The session a relay took a message in, and the message. +pub struct RelayedMessage { + pub relayed: Relayed, + pub local_ip: IpAddr, + pub remote_ip: IpAddr, + pub remote_port: u16, + pub helo: String, + /// The return path and its MAIL FROM parameters. + pub mail_from: EnvelopeAddress, + /// Each recipient and its RCPT TO parameters. + pub rcpt_to: Vec, + pub message: Vec, +} + +/// What this server answered. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum RelayedOutcome { + /// Queued for every recipient but those in `refused`, each with its + /// reply. + Accepted { refused: Vec<(String, String)> }, + /// Refused as a whole, with this reply. `refused` has the recipients + /// refused one by one before it, if any. + Refused { + reply: String, + refused: Vec<(String, String)>, + }, +} + +/// How long a held message's headers stay stored for its DSN. +const DSN_HEADERS_FOR: u64 = 600; + +/// Runs `input` through this server's inbound pipeline. A held message's +/// refusals are reported to its sender only when the sender passed SPF or +/// DMARC here (RL-18); a live one's whole refusal is the relay's to give. +pub async fn ingest_relayed( + server: Server, + instance: Arc, + input: RelayedMessage, +) -> RelayedOutcome { + let session_id = instance.span_id_gen.generate(); + let asn_geo_data = server.lookup_asn_country(input.remote_ip).await; + // Port 25: the relay took it on port 25, and this server's settings + // tell port 25 from submission by it + let mut data = SessionData::new( + input.local_ip, + 25, + input.remote_ip, + input.remote_port, + asn_geo_data, + session_id, + ); + let held = input.relayed.held; + data.relayed = Some(input.relayed); + let mut session = Session { + hostname: String::new(), + state: State::None, + instance, + server, + stream: NullIo::default(), + data, + params: SessionParameters::default(), + }; + + let mut lines = Lines::default(); + let outcome = Box::pin(session.play( + input.helo, + input.mail_from, + input.rcpt_to, + input.message, + &mut lines, + )) + .await; + if held { + let refused = match &outcome { + RelayedOutcome::Accepted { refused } => refused.clone(), + RelayedOutcome::Refused { reply, refused } if reply.starts_with('5') => { + // Every recipient that got as far as RCPT, refused at once + let mut all = refused.clone(); + all.extend( + session + .data + .rcpt_to + .iter() + .map(|rcpt| (rcpt.address.clone(), reply.clone())), + ); + all + } + RelayedOutcome::Refused { .. } => Vec::new(), + }; + if !refused.is_empty() { + session.bounce_held(&refused, &lines).await; + } + } + outcome +} + +/// The MAIL FROM and RCPT TO commands as parsed, for a DSN. +#[derive(Default)] +struct Lines { + mail_from: Option>, + rcpt_to: Vec>, +} + +impl Session { + async fn play( + &mut self, + helo: String, + mail_from: EnvelopeAddress, + rcpt_to: Vec, + message: Vec, + lines: &mut Lines, + ) -> RelayedOutcome { + let mut refused = Vec::new(); + let refuse = |reply: String, refused: Vec<(String, String)>| RelayedOutcome::Refused { + reply, + refused, + }; + + // Connect: rate limits, then the connect stage's scripts and filters + if !self.is_allowed().await { + return refuse( + "421 4.7.0 Too many connections, try again later.".into(), + refused, + ); + } + if !self.init_conn().await { + let reply = self + .has_failed() + .unwrap_or_else(|| "421 4.3.0 Try again later.".into()); + return refuse(reply, refused); + } + self.stream.tx_buf.clear(); + + // EHLO + let _ = self.handle_ehlo(Cow::Owned(helo), true).await; + if let Some(reply) = self.has_failed() { + return refuse(reply, refused); + } + + // MAIL FROM + let line = command("MAIL FROM", &mail_from); + let mut receiver = RequestReceiver::default(); + let Ok(Request::Mail { from }) = receiver.ingest(&mut line.iter()) else { + return refuse("501 5.5.4 Invalid MAIL FROM.".into(), refused); + }; + lines.mail_from = Some(from.clone().into_owned()); + let _ = self.handle_mail_from(from).await; + if let Some(reply) = self.has_failed() { + return refuse(reply, refused); + } + + // RCPT TO: the relay already checked each recipient (RL-1); this + // server checks again, by its own directory and rules + self.params.rcpt_errors_wait = Duration::ZERO; + for (address, parameters) in rcpt_to { + let line = command("RCPT TO", &(address.clone(), parameters)); + let mut receiver = RequestReceiver::default(); + let Ok(Request::Rcpt { mut to }) = receiver.ingest(&mut line.iter()) else { + refused.push((address, "501 5.5.4 Invalid RCPT TO.".into())); + continue; + }; + if !self.params.rcpt_dsn { + // The relay offers DSN to everyone; this server may not + to.flags &= !(RCPT_NOTIFY_DELAY + | RCPT_NOTIFY_FAILURE + | RCPT_NOTIFY_NEVER + | RCPT_NOTIFY_SUCCESS); + to.orcpt = None; + } + lines.rcpt_to.push(to.clone().into_owned()); + let _ = self.handle_rcpt_to(to).await; + if let Some(reply) = self.has_failed() { + refused.push((address, reply)); + } + } + if self.data.rcpt_to.is_empty() { + // The reply the sender would have been given: a temporary one + // if any recipient had one, so it tries again + let reply = refused + .iter() + .map(|(_, reply)| reply) + .find(|reply| reply.starts_with('4')) + .or(refused.first().map(|(_, reply)| reply)) + .cloned() + .unwrap_or_else(|| "554 5.5.1 No valid recipients.".into()); + return refuse(reply, refused); + } + + // DATA + if let Some(reply) = self.can_send_data().await { + return refuse(reply_text(reply), refused); + } + if message.len() >= self.params.max_message_size { + return refuse("552 5.3.4 Message too big for system.".into(), refused); + } + self.data.message = message; + let reply = self.queue_message().await; + let reply = reply_text(&reply); + if reply.starts_with('2') { + RelayedOutcome::Accepted { refused } + } else { + refuse(reply, refused) + } + } + + /// RL-18: a DSN for recipients refused after the relay had said 250, + /// only when the sender passed SPF or DMARC here, so a forged sender + /// gets none and the relay is no backscatter source. + async fn bounce_held(&mut self, refused: &[(String, String)], lines: &Lines) { + let Some(mail_from) = self.data.mail_from.as_ref() else { + return; + }; + let spf_pass = self + .data + .spf_mail_from + .as_ref() + .is_some_and(|spf| spf.result() == SpfResult::Pass); + let dmarc_pass = self.data.relayed.as_ref().is_some_and(|r| r.dmarc_pass); + if mail_from.address_lcase.is_empty() || !(spf_pass || dmarc_pass) { + trc::event!( + Delivery(trc::DeliveryEvent::DoubleBounce), + SpanId = self.data.session_id, + From = mail_from.address_lcase.clone(), + Reason = "Held by a relay and refused here; the sender passed neither SPF nor DMARC, so no DSN.", + ); + return; + } + + let mut wrapper = self.server.new_message( + mail_from.address.as_str(), + MessageSource::Unauthenticated { dmarc_pass }, + self.data.session_id, + ); + if let Some(from) = &lines.mail_from { + wrapper.message.env_id = from.env_id.as_deref().map(Into::into); + wrapper.message.flags |= from.flags & (MAIL_RET_FULL | MAIL_RET_HDRS); + } + wrapper.message.received_from_ip = self.data.remote_ip; + wrapper.message.received_via_port = 25; + for (address, reply) in refused { + let line = lines + .rcpt_to + .iter() + .find(|to| to.address.eq_ignore_ascii_case(address)); + let flags = line.map_or(0, |to| to.flags); + let flags = if flags + & (RCPT_NOTIFY_DELAY + | RCPT_NOTIFY_FAILURE + | RCPT_NOTIFY_NEVER + | RCPT_NOTIFY_SUCCESS) + == 0 + { + RCPT_NOTIFY_FAILURE + } else { + flags + }; + let mut recipient = Recipient::new(address).with_flags(flags); + recipient.orcpt = line.and_then(|to| to.orcpt.as_deref()).map(Into::into); + recipient.status = Status::PermanentFailure(ErrorDetails { + entity: self.hostname.as_str().into(), + details: Error::UnexpectedResponse(UnexpectedResponse { + command: format!("RCPT TO:<{address}>").into_boxed_str(), + response: parse_response(reply), + }), + }); + wrapper.message.recipients.push(recipient); + } + + // The DSN quotes the message's headers from the blob store + let message = &self.data.message; + let headers = &message[..header_end(message)]; + wrapper.message.blob_hash = BlobHash::generate(headers); + wrapper.message.size = message.len() as u64; + let mut batch = BatchBuilder::new(); + batch.set( + BlobOp::Link { + hash: wrapper.message.blob_hash.clone(), + to: BlobLink::Temporary { + until: now() + DSN_HEADERS_FOR, + }, + }, + vec![], + ); + let stored = match self.server.store().write(batch.build_all()).await { + Ok(_) => self + .server + .blob_store() + .put_blob( + wrapper.message.blob_hash.as_slice(), + headers, + self.server.core.email.compression, + ) + .await + .map(|_| ()), + Err(err) => Err(err), + }; + if let Err(err) = stored { + trc::error!( + err.details("Failed to store a relayed message's headers for its DSN.") + .span_id(self.data.session_id) + .caused_by(trc::location!()) + ); + return; + } + self.server.send_dsn(&mut wrapper).await; + } +} + +/// `MAIL FROM:
KEY=value...` or the RCPT TO equivalent. Anything +/// that could end the line or start another parameter is dropped. +fn command(verb: &str, (address, parameters): &EnvelopeAddress) -> Vec { + let clean = |text: &str| -> String { + text.chars() + .filter(|c| !c.is_control() && !matches!(c, ' ' | '<' | '>')) + .collect() + }; + let mut line = format!("{verb}:<{}>", clean(address)); + for (key, value) in parameters { + let key: String = clean(key).replace('=', ""); + if key.is_empty() { + continue; + } + line.push(' '); + line.push_str(&key); + if let Some(value) = value { + line.push('='); + line.push_str(&clean(value)); + } + } + line.push_str("\r\n"); + line.into_bytes() +} + +/// A reply as text, its last line if it has several. +fn reply_text(reply: &[u8]) -> String { + let text = String::from_utf8_lossy(reply); + text.trim_end() + .rsplit("\r\n") + .next() + .unwrap_or_default() + .chars() + .take(512) + .collect::() + .trim() + .to_string() +} + +/// `550 5.1.1 text` as a response. +fn parse_response(reply: &str) -> Response> { + let mut parts = reply.splitn(3, ' '); + let code = parts.next().and_then(|c| c.parse().ok()).unwrap_or(550); + let (esc, message) = match parts.next() { + Some(esc) if enhanced(esc).is_some() => ( + enhanced(esc).unwrap_or([5, 0, 0]), + parts.next().unwrap_or_default(), + ), + other => ( + [(code / 100) as u8, 0, 0], + reply + .split_once(' ') + .map(|(_, rest)| rest) + .filter(|_| other.is_some()) + .unwrap_or_default(), + ), + }; + Response { + code, + esc, + message: message.into(), + } +} + +fn enhanced(text: &str) -> Option<[u8; 3]> { + let mut parts = text.split('.').map(|p| p.parse::().ok()); + let esc = [parts.next()??, parts.next()??, parts.next()??]; + parts.next().is_none().then_some(esc) +} + +/// Where the headers end: after the blank line, or the whole message. +fn header_end(message: &[u8]) -> usize { + message + .windows(4) + .position(|w| w == b"\r\n\r\n") + .map_or(message.len(), |pos| pos + 4) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn builds_commands() { + let line = command( + "RCPT TO", + &( + "jane@example.com".into(), + vec![ + ("NOTIFY".into(), Some("FAILURE,DELAY".into())), + ("ORCPT".into(), Some("rfc822;jane@example.com".into())), + ], + ), + ); + assert_eq!( + line, + b"RCPT TO: NOTIFY=FAILURE,DELAY ORCPT=rfc822;jane@example.com\r\n" + ); + let mut receiver = RequestReceiver::default(); + let Ok(Request::Rcpt { to }) = receiver.ingest(&mut line.iter()) else { + panic!("not parsed"); + }; + assert_eq!(to.address, "jane@example.com"); + assert_ne!(to.flags & RCPT_NOTIFY_FAILURE, 0); + + // Nothing can end the line or add a parameter + let line = command( + "MAIL FROM", + &( + "a@b.c> AUTH=x\r\nRCPT TO: BODYX=8BITMIME\r\n" + ); + } + + #[test] + fn reads_replies() { + assert_eq!( + reply_text(b"550-5.7.1 First\r\n550 5.7.1 Message rejected.\r\n"), + "550 5.7.1 Message rejected." + ); + let response = parse_response("550 5.1.1 Mailbox unavailable"); + assert_eq!( + (response.code, response.esc, response.message.as_ref()), + (550, [5, 1, 1], "Mailbox unavailable") + ); + let response = parse_response("451 try later"); + assert_eq!( + (response.code, response.esc, response.message.as_ref()), + (451, [4, 0, 0], "try later") + ); + assert_eq!(header_end(b"A: b\r\n\r\nbody"), 8); + assert_eq!(header_end(b"A: b"), 4); + } +} diff --git a/crates/smtp/src/inbound/session.rs b/crates/smtp/src/inbound/session.rs index 11394997..d8ad4f11 100644 --- a/crates/smtp/src/inbound/session.rs +++ b/crates/smtp/src/inbound/session.rs @@ -29,6 +29,12 @@ use crate::core::{Session, State}; use super::auth::{AUTH_BEARER, SaslToken}; impl Session { + /// inbuxa: TLS on this session, or between the sender and the relay + /// that took it (RL-23). + pub fn is_tls(&self) -> bool { + self.stream.is_tls() || self.data.relayed.as_ref().is_some_and(|r| r.tls.is_some()) + } + pub async fn ingest(&mut self, bytes: &[u8]) -> Result { let mut iter = bytes.iter(); let mut state = std::mem::replace(&mut self.state, State::None); @@ -623,7 +629,7 @@ impl ResolveVariable for Session { ExpressionVariable::RemotePort => self.data.remote_port.into(), ExpressionVariable::LocalIp => self.data.local_ip_str.as_str().into(), ExpressionVariable::LocalPort => self.data.local_port.into(), - ExpressionVariable::IsTls => self.stream.is_tls().into(), + ExpressionVariable::IsTls => self.is_tls().into(), ExpressionVariable::Priority => self.data.priority.to_compact_string().into(), ExpressionVariable::Protocol => self.instance.protocol.as_str().into(), ExpressionVariable::Asn => self @@ -642,6 +648,13 @@ impl ResolveVariable for Session { .map(|c| c.as_str()) .unwrap_or_default() .into(), + ExpressionVariable::Relay => self + .data + .relayed + .as_ref() + .map(|r| r.relay.as_str()) + .unwrap_or_default() + .into(), _ => expr::Variable::default(), } } diff --git a/crates/smtp/src/inbound/spam.rs b/crates/smtp/src/inbound/spam.rs index 94e85e5e..ab1fcd36 100644 --- a/crates/smtp/src/inbound/spam.rs +++ b/crates/smtp/src/inbound/spam.rs @@ -2,6 +2,8 @@ * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL + * + * Modified by Coffey Labs in 2026 for INBUXA. */ use crate::core::Session; @@ -70,7 +72,7 @@ impl Session { authenticated_as: self.data.authenticated_as.as_ref().map(|a| a.name()), asn: self.data.asn_geo_data.asn.as_ref().map(|a| a.id), country: self.data.asn_geo_data.country.as_ref().map(|c| c.as_str()), - is_tls: self.stream.is_tls(), + is_tls: self.is_tls(), env_from: self .data .mail_from diff --git a/docs/spec/features/relay.md b/docs/spec/features/relay.md index be66a11c..a522edf8 100644 --- a/docs/spec/features/relay.md +++ b/docs/spec/features/relay.md @@ -227,6 +227,12 @@ so a reboot without the link comes back with the same settings (RL-22). stop someone holding the relay's key from testing guessed addresses offline; nothing on the relay could, since the relay has to check real ones. +- A domain whose recipients an external directory (LDAP, SQL, OIDC) + answers for can't be listed. Its recipient set holds the accounts the + downstream has already seen from that directory, and nothing more: no + catch-all, which would break RL-1. Anyone else there is refused at the + relay until they first sign in (decided 2026-10-29). A live lookup over + the link may come later. - Deltas use `Recipient/set` (create and destroy by hash). A full refresh uses the custom `Recipient/replace {blobId}`: a sorted file of 32-byte hashes, swapped in atomically. The relay's `Recipient` state string lets @@ -238,8 +244,8 @@ so a reboot without the link comes back with the same settings (RL-22). |---|---| | `id` | Stable for the message's whole life. The downstream deduplicates on it (RL-16) | | `receivedAt` | When the relay accepted it (or got the final dot, if pending) | -| `state` | `pending` (live, awaiting a verdict), `held`, or `claimed` | -| `claimedUntil` | End of the current lease, when claimed | +| `state` | `pending` (live, awaiting a verdict, claimed or not), `held`, or `claimed` (held and leased) | +| `claimedUntil` | End of the current lease, when leased | | `envelope` | RFC 8621 `Envelope`: `mailFrom` and `rcptTo`, with parameters | | `session` | `{remoteIp, remotePort, localIp, helo, tls: {version, cipher} or null, ptr}` | | `size` | Bytes | @@ -675,8 +681,17 @@ In progress. Done so far: recipient set (whole, then deltas), and reports each node's link in the relay's `links` (PR #253). Node link certificates last 30 days and are renewed after 20. -- Not done yet: ingest, live verdicts, `inbuxa:RelayMessage`, relay events - in the trace, and the link-down alert. +- Ingest and live verdicts: the link service asks for `Inbound` push, so + the relay is live while a node is linked. Each message is claimed, + unsealed, and played through the downstream's own SMTP handlers with + the relay's session on port 25 (RL-23), with `relay` in expressions. + Live, the downstream's reply is the verdict; held, a refusal for good is + reported only to a sender who passed SPF or DMARC (RL-18), one for now + is retried after the lease, and spam over the reject threshold goes to + Junk (RL-17). Every message taken is recorded until `heldMaxAge` and a + day have passed (RL-16). A pending message stays `pending` when claimed. +- Not done yet: `inbuxa:RelayMessage`, relay events in the trace, and the + link-down alert. Order: diff --git a/resources/schema/schema.json.gz b/resources/schema/schema.json.gz index 916d09915f58691627f668f4fd50059ade609c36..d1e2a536a1d42c17e6a7ea446c82b91cb2cad792 100644 GIT binary patch delta 125374 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 delta 125339 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 z

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 O-ys40p1hLl;K?1JL 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 Vec { replies.split_off(2) } +/// Sends one message through the relay; the reply to its final dot. +async fn send_mail(port: u16, rcpt: &str, message: &str) -> String { + use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader}; + let stream = tokio::net::TcpStream::connect(("127.0.0.1", port)) + .await + .unwrap(); + let (read, mut write) = stream.into_split(); + let mut read = BufReader::new(read); + async fn reply(read: &mut BufReader) -> String { + let mut all = String::new(); + loop { + let mut line = String::new(); + read.read_line(&mut line).await.unwrap(); + all.push_str(&line); + if line.len() < 4 || line.as_bytes()[3] != b'-' { + return all; + } + } + } + assert!(reply(&mut read).await.starts_with("220")); + for line in [ + "EHLO sender.example".to_string(), + "MAIL FROM:".to_string(), + format!("RCPT TO:<{rcpt}>"), + "DATA".to_string(), + ] { + write + .write_all(format!("{line}\r\n").as_bytes()) + .await + .unwrap(); + let answer = reply(&mut read).await; + assert!( + answer.starts_with('2') || answer.starts_with('3'), + "{line}: {answer}" + ); + } + let body = message.replace('\n', "\r\n"); + write + .write_all(format!("{body}\r\n.\r\n").as_bytes()) + .await + .unwrap(); + let answer = reply(&mut read).await; + let _ = write.write_all(b"QUIT\r\n").await; + answer +} + +/// The subjects of every message in `account`'s mailboxes. +async fn subjects(account: &Account) -> Vec { + let response = account + .jmap_request( + &["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"], + json!([ + ["Email/query", {"accountId": account.id_string()}, "q"], + ["Email/get", { + "accountId": account.id_string(), + "#ids": {"resultOf": "q", "name": "Email/query", "path": "/ids"}, + "properties": ["subject"] + }, "g"] + ]), + ) + .await; + response + .0 + .pointer("/methodResponses/1/1/list") + .and_then(Value::as_array) + .into_iter() + .flatten() + .filter_map(|email| email["subject"].as_str().map(str::to_string)) + .collect() +} + +/// Waits until `account` has `count` messages titled `subject`. +async fn wait_for_mail(account: &Account, subject: &str, count: usize) { + let deadline = std::time::Instant::now() + std::time::Duration::from_secs(30); + loop { + let found = subjects(account).await; + let n = found.iter().filter(|s| *s == subject).count(); + if n == count { + return; + } + assert!( + n < count && std::time::Instant::now() < deadline, + "{count} of {subject:?}: {found:?}" + ); + tokio::time::sleep(std::time::Duration::from_millis(500)).await; + } +} + +fn message(subject: &str, extra_headers: &str) -> String { + format!( + "{extra_headers}From: Someone \nTo: jane@example.com\n\ + Subject: {subject}\nMessage-ID: <{}@sender.example>\n\nHello from outside.", + subject.replace(' ', "-") + ) +} + pub async fn link(test: &mut TestServer) { println!("Running inbuxa Relay link tests..."); let admin = test.account("admin@example.com"); @@ -459,7 +558,7 @@ pub async fn link(test: &mut TestServer) { "{} is missing: run cargo build -p inbuxa-relay", binary.display() ); - admin + let jane = admin .create_user_account( "jane@example.com", "jane-secret-4417", @@ -525,7 +624,7 @@ pub async fn link(test: &mut TestServer) { .as_array() .into_iter() .flatten() - .any(|link| link["state"] == "linked" && link["relay"]["mode"] == "held") + .any(|link| link["state"] == "linked" && link["relay"]["mode"] == "live") }) .await; assert!(relay["linkKeyPin"].as_str().is_some(), "{relay}"); @@ -556,6 +655,27 @@ pub async fn link(test: &mut TestServer) { "not served: {replies:?}" ); + // Live (RL-12): delivered here before the sender hears 250 + let reply = send_mail(smtp_port, "jane@example.com", &message("Live one", "")).await; + assert!(reply.starts_with("250"), "{reply}"); + wait_for_mail(&jane, "Live one", 1).await; + + // Live: this server's refusal is the sender's reply, and the relay + // keeps nothing + let loop_headers = + "Received: from a.example by b.example; Thu, 29 Oct 2026 10:00:00 +0000\n".repeat(60); + let reply = send_mail( + smtp_port, + "jane@example.com", + &message("Looped one", &loop_headers), + ) + .await; + assert!(reply.starts_with("450 4.4.6"), "{reply}"); + wait_for(admin, &id, "the relay kept nothing", 30, |relay| { + relay["links"][0]["relay"]["spool"]["inbound"] == 0 + }) + .await; + // A new account reaches the relay as a change admin .create_user_account("joe@example.com", "joe-secret-5529", "Joe", &[], vec![]) @@ -606,6 +726,31 @@ pub async fn link(test: &mut TestServer) { }) .await; + // Held while the link is off: the relay says 250 itself, and the + // message is delivered once the link is back, once + let reply = send_mail(smtp_port, "jane@example.com", &message("Held one", "")).await; + assert!(reply.starts_with("250"), "{reply}"); + call( + admin, + "inbuxa:Relay/set", + json!({"update": {&id: {"enabled": true}}}), + ) + .await; + wait_for_mail(&jane, "Held one", 1).await; + wait_for(admin, &id, "the held message was taken", 30, |relay| { + relay["links"][0]["state"] == "linked" + && relay["links"][0]["relay"]["spool"]["inbound"] == 0 + }) + .await; + assert_eq!( + subjects(&jane) + .await + .iter() + .filter(|s| *s == "Held one" || *s == "Live one") + .count(), + 2 + ); + call(admin, "inbuxa:Relay/set", json!({"destroy": [&id]})).await; } -- 2.54.0