Zender en ontvanger specifieke restricties in Postfix

Een organisatie die diverse domeinen beheert, huurt voor een aantal van die domeinen een specifieke anti-spamdienst in, waarbij de mx records van deze specifieke domeinen naar de servers van deze dienst wijzen.

Deze servers ontvangen de email, filteren deze en sturen die dan door naar de mail server van de organisatie. Op deze mail server komt ook rechtstreeks e-mail toe voor de andere domeinen waarvoor de anti-spamdienst niet ingehuurd wordt.

Soms wordt een domein omgezet van het ene systeem naar het andere. Zo gebeurt het dat een domein die oorspronkelijk niet gefilterd werd, omgezet wordt naar een gefilterd systeem, en diens mx records dus niet meer naar de server van de organisatie verwijzen, maar naar deze van de anti-spamdienst.

Nu zijn spammers nogal slim, en die onthouden het adres van de mail server van de organisatie, en voor welk domein die (vroeger) dienst deed. En aangezien de anti-spamdienst uiteindelijk de email naar diezelfde server doorstuurt, blijft die server ook daadwerkelijk email ontvangen voor dat domein.

De slimme spammer omzeilt dan gemakkelijk het anti-spam systeem door e-mail nog steeds rechtstreeks naar de server van de organisatie te sturen.

Om dit tegen nu te gaan willen we toegang tot de server van de organisatie gaan beperken. Zuiver op basis van het ip adres van de zender kan dat gemakkelijk. Evenwel willen we die restrictie enkel toepassen voor die domeinen die van de anti-spamdienst genieten, en zodanig dat enkel nog de mail servers van die anti-spamdienst e-mail voor die domeinen kunnen sturen naar de server van de organisatie. De andere domeinen moeten nog steeds vlot e-mail kunnen ontvangen van overal.

Om dit op te lossen hebben we dus een manier nodig om de mail server (de Postfix MTA in dit geval) zo in te stellen dat alle mail voor een specifiek domein, die van de anti-spamdienst geniet, enkel maar afkomstig mag zijn van bepaalde mailservers, namelijk deze van de anti-spamdienst, en dit zonder deze beperking te leggen aan de andere domeinnamen.

Dit kunnen we implementeren door restriction classes te gebruiken:

  • /etc/postfix/main.cf:
    smtpd_recipient_restrictions =
          recipient_access hash:/etc/postfix/mailscan_domains
    smtpd_restriction_classes = mailscan_only
    mailscan_only =
          check_client_access hash:/etc/postfix/mailscan_client_ip, reject
  • /etc/postfix/mailscan_domains:
    this.domain     mailscan_only
    that.domain     mailscan_only
  • /etc/postfix/mailscan_client_ip:
    x.y.z.a      OK
    c.d.f.g      OK

We vertellen Postfix om gebruik te maken van een beperking naar ontvanger op smtp niveau (smtpd_recipient_restrictions), en configureren deze beperking via een hash table die de domeinen van de anti-spamdienst oplijst, en er een specifieke “actie” aan geeft (/etc/postfix/mailscan_domains).

Die actie is niet de klassieke OK of REJECT, maar een restrictie class (smtpd_restriction_classes = mailscan_only), die op zich weer een extra beperking bevat, namelijk de controle op het ip adres van de zender (check_client_access), welke moet overeenstemmen met een adres van een van de mail servers van de anti-spamdienst (/etc/postfix/mailscan_client_ip).

Aldus zal postfix controleren voor welk domein email ontvangen wordt, en in het geval het een domein is die via de anti-spamdienst loopt, controleren dat de email wel degelijk van een server van die dienst afkomstig is. Zo niet wordt de mail geweigerd.