{"repo":"smck83/expurgate","free":true,"listed":false,"github":"https://github.com/smck83/expurgate","clone":"git clone https://github.com/smck83/expurgate.git","description":"A self-hosted dockerized SPF solution built on rbldnsd to simplify, hide and exceed limits with SPF records.","language":"Python","stars":43,"topics":[],"license":"GPL-3.0","category":"self-hosted-apps","readme_excerpt":"A dockerized, multi-domain SPF flattening solution. Expurgate resolves your SPF records into IP addresses, hides your vendor list behind an SPF macro, and eliminates the 10 DNS lookup limit — all without a UI or database. - 🌐 Don't want to self-host? Try spf.guru - 📦 Single container? See Expurgate Solo --- Table of Contents - What is Expurgate? - The Problem - The Solution - How It Works - Quick Start - Option 1: Live Demo - Option 2: Amazon Lightsail (Recommended) - Option 3: Manual / Docker Compose - Environment Variables - Sample DNS Queries - Performance - Recent Enhancements --- What is Expurgate? expurgate (EK-spur-gayt) — verb — to remove matter thought to be objectionable or unsuitable. Expurgate is a self-hosted SPF flattening (compression) solution. It replaces your complex, over-limit SPF record with a single SPF macro, and handles all the DNS resolution behind the scenes using rbldnsd. There is no web UI and no database. Configuration is done entirely via environment variables and a source DNS TXT record on a subdomain of your choice. SPF Primer: SPF (Sender Policy Framework) records are DNS TXT records that tell receiving mail servers which IPs are authorised to send email on behalf of your domain. They apply to the ENVELOPE FROM: address (not the visible From: header). SPF alone does not prevent spoofing of the displayed sender — that requires DMARC. Read more → --- The Problem SPF records have three hard constraints that cause real operational pain: 1. 10 DN","default_branch":null,"files":null,"tree":[],"storefront":"/r/smck83","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/smck83/expurgate/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}