← Projecten

Een scanner die niet kon mailen: SMTP-relay met eigen gehard image

Een multifunctional kon niet mailen omdat de mailprovider alleen moderne TLS-ciphers accepteert. De oplossing: een kleine Postfix-relay met een zelf gebouwd image, een Trivy-gate in de deploy en automatische rollback.

Het probleem

Een multifunctional op kantoor kon zijn scans niet meer mailen. De melding: "SMTP email server error. The server might be down or busy." DNS, netwerk en poort 587 waren in orde.

De werkelijke oorzaak zat in TLS. De mailprovider accepteert op TLS 1.2 alleen drie AEAD-ciphers (ECDHE met AES-GCM of ChaCha20). De printer ondersteunt STARTTLS, maar geen van die drie. De generieke foutmelding verraadde dat niet.

De oplossing

Een kleine Postfix-relay op de monitoringhost:

  • Printer → relay: TLS verplicht, met een eigen certificaat dat de printer valideert.
  • Relay → provider: smtp_tls_security_level=secure, dus alleen met een geldig certificaat.
  • Drie losse restricties: alleen de IP-adressen van de printers, SASL-authenticatie en een vast afzenderdomein (met SPF, DKIM en DMARC ingericht).

Het image

Het gangbare Postfix-image had tientallen kritieke en honderden hoge kwetsbaarheden waarvoor al een fix bestond. De "edge"-variant was op een andere manier kapot. Daarom bouw ik het image zelf, in dezelfde repository:

  • een apt-get upgrade bovenop de basis en het verwijderen van een overbodige Python-omgeving: nul HIGH/CRITICAL;
  • de deploy bouwt op de host zonder cache, scant het resultaat met Trivy en weigert bij bevindingen;
  • het nieuwe image wordt pas actief na een rooktest, anders gaat het automatisch terug naar :previous;
  • een wekelijkse geplande pipeline herbouwt het image, zodat beveiligingsupdates vanzelf meekomen.

Resultaat

De scanner mailt weer, via een relay die zichzelf actueel houdt en niet uitrolt als hij kwetsbaar is. Het hele project staat in één repository: compose, Dockerfile, CI, deploy-script en documentatie.