{"id":1202,"date":"2012-03-28T00:06:42","date_gmt":"2012-03-27T22:06:42","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1202"},"modified":"2012-03-28T00:06:42","modified_gmt":"2012-03-27T22:06:42","slug":"dkim-und-die-leere-aus-veralteter-software","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1202","title":{"rendered":"DKIM und die Leere aus veralteter Software"},"content":{"rendered":"<p>Nein, die \u00dcberschrift hat keinen Tippfehler; zumindest, wenn es um die Leere in den Postf\u00e4chern auf dem Server geht. Ungef\u00e4hr seit etwa 3 Monaten wollten n\u00e4mlich sporadisch einige Mails nicht mehr ankommen. Dies war insbesondere auff\u00e4llig bei Mails, die von GoogleMail aus gesendet wurden: Diese wollten n\u00e4mlich einfach nicht ankommen.<!--more--><\/p>\n<p>Nun l\u00e4sst sich ein Mailserver typischerweise so effizient debuggen wie Sand zum Schlittschuhfahren geeignet ist (es geht, aber man hat diverse Reibungsverluste, w\u00e4hrend man das tut), so dass eine Logmeldung jede Stunde schon fast der einzige Ausgangspunkt f\u00fcr die Fehlersuche war:<\/p>\n<pre>Mar 25 23:00:42 server dkim-filter[1337]: FEDCBA987654: dkim_eoh(): internal error from libdkim: ar_addquery() for `20120113._domainkey.gmail.com' failed<\/pre>\n<p>Wer dies f\u00fcr zu viel Ausgangsinformation f\u00fcr die Fehlersuche h\u00e4lt, darf sich als n\u00e4chstes auf die Suche nach dem richtigen Source-Paket begeben, denn eine Bibliothek f\u00fcr DKIM gibt es in mindestens 3 verschiedenen Paketen in Debian, die alle samt irgendwie dkim hei\u00dfen: libmail-dkim-perl, libsmdkim2 und dkim-filter. Wer sich jetzt wundert, eigentlich gibt&#8217;s ja noch eine; aber zu der komme ich gleich noch; keine Sorge! Nunja: Alle 3 haben ihre Berechtigung und basierend auf der Fehlermeldung KANN es eigentlich jedes dieser Pakete sein. Also hilft nur ein kurzes Trial-and-Error, was die DKIM-Implementation von AMaViS, die sich hinter libmail-dkim-perl versteckt recht schnell ausschlie\u00dft: Die hat n\u00e4mlich die in der Logmeldung enthaltene Funktion nicht. Okay, weiter zu libsmdkim2: Die sieht zwar auch stark verd\u00e4chtig aus, stellt sich nach kurzer Durchsicht des Sources auch als unproblematisch heraus. Womit wir den dkim-milter als \u00dcbelt\u00e4ter h\u00e4tten.<\/p>\n<p>Also auch hier kurz einen Blick in den Soruce geworfen und recht schnell gefunden, dass die drei erw\u00e4hnten Code-Fragmente &#8222;dkim_eoh&#8220;, &#8222;libar&#8220; und &#8222;libdkim&#8220; zum dkim-milter geh\u00f6ren; bzw. dessen Libraries. Nun ist das Einarbeiten in komplexere Projekte mit Multithreading-Architektur oftmals etwas schwierig, weshalb ich mich f\u00fcr die Fehlersuche f\u00fcr den Frontalangriff mittels Debugger entschieden hab: Nur leider ohne Debug-Symbole wollte mir der gdb meinen Breakpoint nicht setzen.<\/p>\n<p>Also nach etwas Frickeln an den Build-Scripts die Debug-Symbole bis ins Installer-Paket bekommen und den GDB erneut auf den Dienst losglassen, was diesmal mit mehr Erfolg gekr\u00f6nt war; leider wegen Optimierung aber sehr interessant zu  debuggen ist; insbesondere, wenn man nur eine Kommandozeile f\u00fcr die Bedienung des Debuggerfrontends zur Verf\u00fcgung hat. Und so brauchte es durchaus ein paar mehr hereinkommende Mails, bevor der Workflow soweit sa\u00df, dass innerhalb des Request Timeouts der Postfix seine Antwort bekam, wenn ich einen Request nicht zu debuggen brauchte. Oder anders ausgedr\u00fcckt: Der Debugger hing im Live-System und f\u00fcr das Debuggen einer Funktion hatte man exakt bis zum Timeout des Mailservers Zeit, was \u00fcblicherweise unter einer halben Minute betr\u00e4gt. F\u00fcr gro\u00dfe Analysen bleibt da also nicht viel Zeit. Nja, au\u00dfer halt bei den Mails, wo man wei\u00df, dass der Bug auftritt und man sich deshalb auch \u00fcber das Timeout hinweg Zeit nehmen konnte.<\/p>\n<p>Nach etwa 20 Requests, die ich auf diese Weise manuell im Debugger best\u00e4tigt hatte, konnte ich im Code die Fehlerquelle dann noch etwas genauer eingrenzen und indirekt best\u00e4tigen, dass der Fehler nicht wirklich an der im Syslog genannten Stelle lag; sondern im Resolver-Code &#8211; auf den ich nun wiederum nicht so wirklichscharf war.<\/p>\n<p>Da man in einem solchen Falle, in der Regel bereits bevor man den Debugger anschmei\u00dft, einen Blick in die gro\u00dfe, allwissende M\u00fcllhalde wirft, f\u00e4llt einem dann auch manchmal etwas Brauchbares in die Hand. In meinem Fall handelte es sich um einen <a href=\"http:\/\/permalink.gmane.org\/gmane.mail.sendmail.dkim-milter.general\/203\">etwa 2 Jahre alten Diskussionsbeitrag<\/a>, der ziemlich genau auf mein Problem passte.<\/p>\n<p>Da ich nun nicht so viel Zeit hatte, noch gro\u00df auf dem Server weiter zu debuggen und auch sonst die Maintainer solche Probleme \u00fcblicherweise besser einordnen k\u00f6nnen, ging dann auch prompt eine <a href=\"http:\/\/www.mail-archive.com\/dkim-milter-discuss@lists.sourceforge.net\/msg01779.html\">Mail an die DKIM-Milter-Leute<\/a> raus, da f\u00fcr ander Nutzer das Problm durchaus auch von Interesse sein d\u00fcrfte. Nach kurzer Bedenkzeit kam dann auch gleich <a href=\"http:\/\/www.mail-archive.com\/dkim-milter-discuss@lists.sourceforge.net\/msg01780.html\">mailwendend die Antwort<\/a>: Probier mal <a href=\"http:\/\/www.opendkim.org\/\">OpenDKIM<\/a>.<\/p>\n<p>Also dann: Wechseln wir mal eben die Software im Live-System; wir haben ja sonst keinen Spa\u00df sonst.<\/p>\n<pre lang=\"bash\">aptitude remove dkim-milter\r\naptitude install opendkim<\/pre>\n<p>Funktionierte sofort, wie man es von der Paket-Verwaltung gewohnt ist, aber Mails angekommen w\u00e4ren so erstmal gar keine; das w\u00e4re n\u00e4mlich ZU einfach gewesen. Schuld daran sind im Wesentlichen 2 Aspekte:<\/p>\n<ol>\n<li>DKIM-Milter lief \u00fcber TCP-Socket auf Port 8891<\/li>\n<li>DKIM-Milter und OpenDKIM nutzen unterschiedliche Konfig-Dateien<\/li>\n<\/ol>\n<p>Aber dies sollte sich recht schnell korrigieren lassen, denn die Start-Scripte von dkim-milter und opendkim sind praktisch identisch: Also Settings umkopieren und fertig.<\/p>\n<p>Ein wenig schwieriger sah es bei der dkim-milter.conf aus; aber auch hier zeigte ein kurzer Diff recht schnell, dass mit einem kurzen Umkopieren der Settings alles laufen sollte. Gesagt, getan. Kurz ein paar Dienste neustarten und die ersten Mails wurden erfolgreich angenommen. Bliebe da nur noch ein anderes Problem, was ein andermal zu l\u00f6sen ist &#8230;<\/p>\n<p>Ach ja, was das mit veralteter Software zu tun hat? Das in Debian enthaltene Paket dkim-milter wird seit 2 Jahren nicht mehr weiterentwickelt und ist seit Ende letzten Jahres auch laut SourceForge.net-Projektseite offiziell begraben. Dennoch gibt es nirgends bei Debian einen entsprechenden Hinweis, dass man auf das neue Paket von OpenDKIM wechseln sollte. Naja, der Bugreport dazu geht (auch auf Bitte des Maintainers) die Tage raus. Und wer jetzt gegen Testing meckern m\u00f6chte: Das Problematische Paket ist auch in Stable drinnen.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1202&amp;md5=55ebdca30415f98c05739c731a069969\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Nein, die \u00dcberschrift hat keinen Tippfehler; zumindest, wenn es um die Leere in den Postf\u00e4chern auf dem Server geht. Ungef\u00e4hr seit etwa 3 Monaten wollten n\u00e4mlich sporadisch einige Mails nicht mehr ankommen. Dies war insbesondere auff\u00e4llig bei Mails, die von GoogleMail aus gesendet wurden: Diese wollten n\u00e4mlich einfach nicht ankommen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[14,10,98,69,204,346,20],"class_list":["post-1202","post","type-post","status-publish","format-standard","hentry","category-server","tag-bugs","tag-debian","tag-developement","tag-internet","tag-postfix","tag-server","tag-update"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1202"}],"version-history":[{"count":1,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1202\/revisions"}],"predecessor-version":[{"id":1203,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1202\/revisions\/1203"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}