Ich hab jetzt mal den Sourcecode von OpenDMARC etwas studiert. Im Prinzip gibt es 3 Möglichkeiten für den SPF-Check:
1. ein externer Check eines Policy Daemon oder Milter, der sein Ergebnis im Header übergibt. Laut opendmarc Mailingliste scheint so ein Header aber nicht vom Postfix Policy check an den DMARC Milter übergeben zu werden. Jetzt könnte man mal versuchen ob es mit einem SPF-milter klappt. Kennt jemand einen guten SPF-Milter? Am besten einen der libspf2 benutzt, das scheint ausgereift zu sein und lässt sich gut mit spfquery nachvollziehen.
2. interner check mit eigenen SPF-check Funktionen. Die sind offenbar buggy, wie das Beispiel DHL gezeigt hat.
3. interner check mit libspf2. Klappt besser als 2., hat aber noch Probleme mit ipv6. Was OpenDMARC da macht entspricht praktisch dem Coding Beispiel von libspf2 hier: http://www.libspf2.org/docs/html/. Es fehlte lediglich der Aufruf für ipv6 Adressen, den habe ich bei mir eingebaut. Laut Fehlerticket soll es noch ein weiteres Problem mit HELO Namen geben. Das kann aber eigentlich nur auftreten wenn eine Mail-From Adresse fehlt, denn nur dann wird der HELO Name benutzt. Ich hab keine Ahnung wann der Fall eintreten kann.
Ob 2. oder 3. genutzt wird hängt davon ab wie man es compiliert. Ob 1. oder 2./3. genutzt wird hängt von der Config ab (SPFSelfValidate).
Am zuverlässigsten erscheint mir wohl derzeit die Variante 1. mit milter zu sein (falls die Header-Übergabe da klappt). Was ich hier lese hört sich für Debian aber nicht so rosig an: http://tanguy.ortolo.eu/blog/article103/spf-milter