Mail to [email protected] / [email protected] (and any unlisted lyte.dev address) was being rejected 550 mailbox does not exist — e.g. a Spotify mail to oliver@ bounced. There was no alias or catch-all for them, and the module doesn't manage accounts (user data), so this was config drift waiting to happen.
stalwart-apply)accountAliases — extra aliases ensured on an account's aliases (a list<EmailAlias>). Configured: daniel gets dax@/oliver@.catchAllAddress — sets Domain.catchAllAddress so any otherwise-unmatched lyte.dev address is delivered to daniel. Subsumes the explicit aliases; the tradeoff is accepting spam to bogus addresses (spam filter still routes most to Junk).Both run in stalwart-apply with admin creds, are idempotent, and survive a DB rebuild (the whole point — like the trusted-domain rule that silently vanished before).
list<EmailAlias> where EmailAlias = {enabled, name, domainId, description?}; name is the local part (+ domainId forms the address).{"0":{…},"1":{…}}), not a JSON array.name is rejected, so the catch-all is NOT an empty-name alias — it's the separate Domain.catchAllAddress field.| RCPT TO | Before | After |
|---|---|---|
made-up @lyte.dev |
550 mailbox does not exist | 250 OK ✓ (catch-all) |
| [email protected] | 550 | 250 OK ✓ (alias) |
🤖 Generated with Claude Code
]]>Reworked from the initial narrow denylist (Samba/arr/k3s) to default-deny: non-dragon LAN clients can only reach an explicit allowlist (router-forwarded public ports + UniFi/mDNS); everything else — Samba, MQTT, and any future service — is dropped. Future-proofs against new services being silently LAN-exposed.
Verified live on beefcake from a non-dragon LAN source:
IPv4 only (dragon's v6 is SLAAC; guest VLAN closes v6 at L2). SSH stays open because it's WAN-forwarded — say the word if you also want it locked to dragon/tailnet (would mean dropping the router's :22 forward too).
]]>Interim LAN hardening ahead of the isolated guest VLAN (which needs a UniFi SSID tag — pending controller creds).
WiFi clients currently share the untagged LAN with wired gear, and beefcake opens several sensitive services on all interfaces: Samba (445/139), the *arr stack (9876/9877), and the k3s API/kubelet (6443/10250). A guest on the main WiFi could reach any of them.
Drops LAN access to those ports unless the source is dragon (192.168.0.10, MAC-reserved bastion). Per design:
eno1 (LAN) interface, never tailscale0.Reversible: pure firewall extraCommands; remove the import + redeploy to revert.
| Source → beefcake:445 | Result |
|---|---|
dragon ethernet .0.10 |
✅ succeeds (allowlisted) |
non-dragon LAN .0.67 |
✅ DROP (blocked) |
| non-dragon → :22 SSH | ✅ open (intentionally not locked) |
🤖 Generated with Claude Code
]]>Comments out the meshtasticd.nix + mmrelay.nix imports so only the Mosquitto broker is active. The other two depend on secrets that are still placeholders (meshtastic-channel-url, mmrelay-credentials); enabling them now would fail-loop (meshtasticd-provision errors on the placeholder --seturl, mmrelay crash-loops on bad Matrix creds).
Already deployed to beefcake (broker-only) — mosquitto is active and listening on 1883. This PR brings main in line with what's deployed so a future deploy doesn't re-enable the broken units.
Re-enable by uncommenting the two imports once meshtastic-channel-url + mmrelay-credentials are filled in sops (and an unencrypted Matrix room + bot exist).