DomainKeys in Postfix per milter
das thema domainkeys war fuer mich bislang ein frustrierendes.. vernuenftige implementationen gab es praktisch fuer alle MTAs, nur postfix nicht. seit postfix 2.3 hat dieser aber nun ein milter interface, das mit dem von sendmail weitestgehend kompatibel ist. schick, dachte ich mir, das probierste doch mal aus. in der MILTER_README von postfix wurde auch explizit das thema domainkeys als beispielanwendung fuer milter genannt - wie passend. die datei also durchgelesen und nur ein klein wenig schlauer geworden - naemlich welches domainkeys milter programm mit postfix garantiert zusammen arbeitet: dk-milter. findet sich praktischerweise auch in den freebsd ports.. also mal eben installiert. da wurde mir z.b. klar, warum es praktisch sein kann, dass freebsd ein sendmail im base-system hat - naemlich um die libmilter.a griffbereit zu haben, ohne sendmail aus den ports installieren zu muessen. nachdem diese huerde also erfolgreich genommen war, stand ich erstmal wie der ochs' vor'm berge. nirgends (im web) war das kleinste bissl dokumentation zu finden, wie es nun weiter geht. nach einigem suchen habe ich erstmal eine anleitung (fuer qmail, buaargh) ausmachen koennen, in der beschrieben wird, wie ich das spaeter notwendige keypair anlege ...
der aufruf von dk-filter hatte sich so mittlerweile auf folgendes stattliches konstrukt verlaengert..
als versuchskaninchen musste googles emaildienst herhalten, denn von denen weiss ich, dass sie domainkeys pruefen und entsprechende meldungen in den header schreiben. und sie da:
bei weiterem testen habe ich dann noch festgestellt, dass mails von meinen jails (192.168.0.x) im log nur folgenden hinweis produzierten:
$ openssl genrsa -out dkPrivate.pem 768... und das man den inhalt der dkPublic.pem mit folgendem befehl in den string umwandelt, den man spaeter einfach in seine dns zonen-dateien kopieren kann:
$ openssl rsa -in dkPrivate.pem -out dkPublic.pem -pubout -outform PEM
$ grep -v ^- dkPublic.pem | perl -e 'while(<>){chop;$l.=$_;}print "t=y; g=; k=rsa; p=$l;\n";'viel weiter war ich nun aber noch immer nicht.. also habe ich erstmal an einer meiner domains die zonendatei bearbeitet:
_domainkey TXT "t=y; o=-;"
default._domainkey TXT "t=n; g=; k=rsa; p=[...privater key...];"
smtpd_milters = unix:/tmp/domainkeys.sock
non_smtpd_milters = unix:/tmp/domainkeys.sock
der aufruf von dk-filter hatte sich so mittlerweile auf folgendes stattliches konstrukt verlaengert..
/usr/local/libexec/dk-filter -u domainkey -d [viele-domains-hier] -c nofws -H -m MSA -s /var/db/domainkeys/default.key.pem -S default -l -p local:/tmp/domainkeys.sock -P /var/run/dk-filter.pid.. und ich war fertig zum testen.
als versuchskaninchen musste googles emaildienst herhalten, denn von denen weiss ich, dass sie domainkeys pruefen und entsprechende meldungen in den header schreiben. und sie da:
DomainKey-Status: goodin der mail ebenfalls ersichtlich durch ein Signed-By: winter.cd neben dem (bei meinen domains) ueblichen Mailed-By: ....
bei weiterem testen habe ich dann noch festgestellt, dass mails von meinen jails (192.168.0.x) im log nur folgenden hinweis produzierten:
Aug 19 02:13:07 server dk-filter[96507]: (unknown-jobid) external host intern.example.org attempted to send as example.orgund die mails unberuehrt blieben. dies lies sich dadurch korrigieren, dass ich meine internen einlieferer in einer datei untereinander weg aufgeschrieben habe und diese dk-filter mit -i mitteile:
/usr/local/libexec/dk-filter [...] -i /usr/local/etc/dk-milter-ilistnun werden also ausgehende mails signiert... und eingehende mails pruefen macht der milter von ganz alleine - sehr praktisch. ziel erreicht. und es war in etwa so kompliziert, wie ich es erwartet hatte ;)
geschrieben am 19. August 2006, 02:08 in geeky