<?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 stretch)</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>Sat, 30 May 2020 10:04:52 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>Von Jessie zu Stretch - erneut</title>
    <link>https://netz-rettung-recht.de/archives/2245-Von-Jessie-zu-Stretch-erneut.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2245-Von-Jessie-zu-Stretch-erneut.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2245</wfw:comment>

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

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ja, ich bin spät dran - bereits Mitte letzten Jahres wurde Debian 10&amp;#160;&lt;em&gt;Buster&lt;/em&gt; veröffentlicht, aber die meisten meiner Server liefen noch unter Debian 8&amp;#160;&lt;em&gt;Jessie&lt;/em&gt;, mit Ausnahme des neuesten Zugangs, der bereits unter &lt;em&gt;Stretch&lt;/em&gt; installiert wurde, und meines heimischen Servers, den ich bereits vor zweieinhalb Jahren (!) &lt;a href=&quot;https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html&quot; title=&quot;&quot;&gt;geupdatet&lt;/a&gt; hatte (dass das so lange her ist und die anderen Updates schon so lange auf meiner Todo-Liste stehen, war mir gar nicht mehr bewusst).&lt;/p&gt;

&lt;p&gt;Ich hatte mir im Prinzip für jede Maschine einen (halben) Tag reserviert, aber der Aufwand hielt sich in erstaunlichen, sehr angenehmen Grenzen. Meine Hinweise, die ich bereits vor zweieinhalb Jahren im Blog notiert hatte, kann ich demnach recht kurz ergänzen.&lt;/p&gt;

&lt;p&gt;&lt;a  class=&quot;serendipity_image_link&quot; title=&quot;Debian Stretch&quot;  rel=&#039;lightbox[2245]&#039; href=&#039;https://netz-rettung-recht.de/uploads/articles/2020/debian-stretch-loginscreen.png&#039;&gt;&lt;!-- s9ymdb:833 --&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;1920&quot; height=&quot;1080&quot;  src=&quot;https://netz-rettung-recht.de/uploads/articles/2020/debian-stretch-loginscreen.png&quot; title=&quot;Debian Stretch&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;konkrete-einzelfallprobleme&quot;&gt;Konkrete Einzelfallprobleme&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Wie schon damals geschildert gab es Probleme beim Upgrade von &lt;strong&gt;fail2ban&lt;/strong&gt;, weil sich die Bezeichnungen einiger Filter geändert haben, die noch unter der alten Bezeichnung in &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; eingebunden waren. Dadurch endete das &lt;code&gt;dist-upgrade&lt;/code&gt; später mit einem Fehlercode und musste neu gestartet werden, um die restlichen Pakete zu initialisieren. Nach dem ersten Durchlauf habe ich das dadurch behoben, dass ich schon vor dem Upgrade statt des Filters &lt;code&gt;ssh&lt;/code&gt; den Filter &lt;code&gt;sshd&lt;/code&gt; und statt &lt;code&gt;apache&lt;/code&gt; den &lt;code&gt;apache-auth&lt;/code&gt; eingebunden habe.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auch das Upgrade von &lt;strong&gt;phpMyAdmin&lt;/strong&gt; verlief nicht störungsfrei; das Update der Datenbanken lief in einen Fehler (die Datenbankdateien seien korrumpiert) und ein entsprechendes debconf-Prompt. Es stellte sich heraus, dass ein Aufruf von &lt;code&gt;/usr/bin/mysql_upgrade&lt;/code&gt; notwendig war, den ich dann in einem anderen Terminal vorgenommen habe; danach lief das Upgrade durch. Bei den anderen Servern habe ich dann schon beim ersten Prompt wegen des Updates der &lt;em&gt;phpMyAdmin&lt;/em&gt;-Datenbanken in einem anderen Terminal &lt;code&gt;/usr/bin/mysql_upgrade&lt;/code&gt; gestartet; das Upgrade lief dann problemlos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In manchen Fällen wurde der mySQL-Server nach dem Upgrade nicht richtig neu gestartet. Ein &lt;code&gt;service mysql restart&lt;/code&gt; behebt das, wenn man nicht ohnehin zeitnah rebootet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solche Probleme sind bei Debian-Updates ungewöhnlich, waren aber gut managebar; dafür lief an der Configfile-Front alles sehr schön, es waren diesmal kaum Änderungen vorzunehmen.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-an-konfigurationsdateien&quot;&gt;Änderungen an Konfigurationsdateien&lt;/h3&gt;

&lt;p&gt;Bei mir bekamen u.a. folgende Konfigurationsdateien größere und kleinere Änderungen mit, die ich dann mit eigenen Änderungen zu konsolidieren hatte (was aber wegen des geringen Umfangs sehr einfach und flott ging):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/apache2/mods-available/userdir.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/dhcp/dhclient.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/munin/plugin-conf.d/munin-node&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/inn.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/news/innfeed.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/vim/vimrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/phpmyadmin/apache.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das ist natürlich eine sehr spezifische Aufzählung, hängt sie doch von der installierten Software und von vorgenommenen Änderungen an deren Konfiguration ab. Sie ist aber m.E. erfreulich übersichtlich; so wenig Nacharbeit hatte ich selten.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-f-r-bestimmte-softwarepakete&quot;&gt;Änderungen für bestimmte Softwarepakete&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Der Account &lt;strong&gt;news&lt;/strong&gt; bekam &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; als Shell verpasst; das mag ich nicht, ich arbeite damit häufiger und setze die Shell daher auf die Bash. Das ist im Hinblick auf externe Logins kein Problem, weil ich die passwortbasierte Anmeldung per SSH deaktiviert habe und der User &lt;em&gt;news&lt;/em&gt; keine &lt;code&gt;authorized_keys&lt;/code&gt; hat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;duply&lt;/strong&gt; und &lt;strong&gt;duplicity&lt;/strong&gt; benötigen, wie schon damals geschildert, &lt;code&gt;GPG_OPTS=&#039;--pinentry-mode loopback&#039;&lt;/code&gt;. Wer - wie ich - damit &lt;a href=&quot;https://netz-rettung-recht.de/archives/1699-Backups-in-die-Cloud-duply-und-S3.html&quot; title=&quot;&quot;&gt;in die Amazon-Cloud (S3) sichert&lt;/a&gt;, muss zudem ggf. &lt;code&gt;TARGET_USER&lt;/code&gt; in der Konfiguration durch &lt;code&gt;export AWS_ACCESS_KEY_ID&lt;/code&gt; und &lt;code&gt;TARGET_PASS&lt;/code&gt; durch &lt;code&gt;export AWS_SECRET_ACCESS_KEY&lt;/code&gt; ersetzen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ggf. braucht &lt;strong&gt;phpMyAdmin&lt;/strong&gt; ein längeres &lt;code&gt;blowfish_secret&lt;/code&gt; als früher, das man in &lt;code&gt;/var/lib/phpmyadmin/blowfish_secret.inc.php&lt;/code&gt; setzen kann.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wie immer möchte &lt;strong&gt;debsecan&lt;/strong&gt; per &lt;code&gt;dpkg-reconfigure debsecan&lt;/code&gt; das aktuell installierte Release beigebogen bekommen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;neue-software-und-ge-nderte-defaults&quot;&gt;Neue Software und geänderte Defaults&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vim&lt;/strong&gt; hat diese furchtbare Maussteuerung bekommen, die man - wie schon beschrieben - aufgrund der Reihenfolge, in der die Konfigurationsdateien geladen werden, nicht so einfach deaktivieren kann, wie man das denken sollte. Entweder braucht jeder Nutzer (!) eine (leere) &lt;code&gt;~/.vimrc&lt;/code&gt;, oder man klemmt das Laden der &lt;code&gt;defaults.vim&lt;/code&gt; in &lt;code&gt;/etc/vim/vimrc&lt;/code&gt; in der dort beschriebenen Weise ab. Ich tat letzteres.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Der &lt;strong&gt;INN&lt;/strong&gt; setzt jetzt statt &lt;em&gt;NNTP-Posting-Host&lt;/em&gt;, &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; und &lt;em&gt;X-Trace&lt;/em&gt; die Header &lt;em&gt;Injection-Info&lt;/em&gt; und ggf. auch &lt;em&gt;Injection-Date&lt;/em&gt;; ich habe die damit verbundenen Änderungen bereits 2017&amp;#160;&lt;a href=&quot;https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html&quot; title=&quot;&quot;&gt;beschrieben&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer seinen &lt;strong&gt;INN&lt;/strong&gt; von einer anderen Maschine aus bspw. per &lt;em&gt;nntpsend&lt;/em&gt; füttert, muss darauf achten, dass die Gegenstelle (also quasi der Client) in der &lt;code&gt;passwd.nntp&lt;/code&gt; nunmehr zwingend einen Usernamen gesetzt haben muss, auch wenn der gar nicht ausgewertet wird; dies entspricht der Doku. Aus &lt;code&gt;news.szaf.org::SECRETPASS&lt;/code&gt; muss also &lt;code&gt;news.szaf.org:blafasel:SECRETPASS&lt;/code&gt; werden, sonst kann der &amp;#8220;Client&amp;#8221; sich nicht mehr anmelden,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mit Debian &lt;em&gt;Stretch&lt;/em&gt; kommt &lt;em&gt;PHP7&lt;/em&gt;; ich habe daher auch direkt komplett von &lt;em&gt;PHP5&lt;/em&gt; auf &lt;em&gt;PHP7&lt;/em&gt; umgestellt.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;umstellung-von-php-5-auf-php-7&quot;&gt;Umstellung von PHP 5 auf PHP 7&lt;/h4&gt;

&lt;p&gt;In &lt;a href=&quot;https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html&quot; title=&quot;&quot;&gt;meiner Konfiguration&lt;/a&gt; waren dafür folgende Änderungen erforderlich:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt install php7.0-fpm
cp /etc/apache2/conf-available/php5-fpm.conf /etc/apache2/conf-available/php7.0-fpm.conf
vim /etc/apache2/conf-available/php7.0-fpm.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dort wird dann die Zeile&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;Proxy &quot;unix:/var/run/php5-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;geändert auf&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;Proxy &quot;unix:/run/php/php7.0-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Weiter geht es mit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a2disconf php5-fpm
a2enconf php7.0-fpm
service apache2 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ggf. sind auch benutzerbezogene Konfigurationen anzupassen.&lt;/p&gt;

&lt;p&gt;Schließlich kann man &lt;em&gt;PHP5&lt;/em&gt; abräumen, bspw. mit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt remove php5-fpm php5 php5-gd php5-mysql php5-mcrypt php5-imagick php5-curl; apt autoremove
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das hängt natürlich davon ab, was man so alles installiert hatte.&lt;/p&gt;

&lt;p&gt;Und dann kommt ggf. der größte Aufwand: alte PHP-Scripts so anzupassen, dass sie mit &lt;em&gt;PHP7&lt;/em&gt; laufen &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;

&lt;p&gt;Echte Arbeit ist ggf. die Umstellung vorhandener PHP-Scripts von &lt;em&gt;PHP5&lt;/em&gt; auf &lt;em&gt;PHP7&lt;/em&gt; (die man aber nicht zwingend zusammen mit dem Upgrade durchziehen muss); ansonsten ist der Aufwand sehr überschaubar. Es gibt m.E. einen echten Fehler (das Upgrade von &lt;strong&gt;phpMyAdmin&lt;/strong&gt; und einen vermutlich häufigeren Stolperstein (die geänderten Filterbezeichnungen von &lt;strong&gt;fail2ban&lt;/strong&gt;); alle übrigen Anpassungen sind konfigurationsspezifisch. Die Änderungen an Conffiles fielen diesmal angenehm überschaubar aus.&lt;/p&gt;

&lt;p&gt;Alles in allem ein überschaubarer Aufwand, insbesondere, wenn man beim zweiten Durchgang (und allen weiteren) den Großteil der Fallstricke bereits kennt. &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/a1b39f94fde84011be4381859cea908d&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 12 May 2020 06:10:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2245-guid.html</guid>
    <category>debian</category>
<category>stretch</category>

</item>
<item>
    <title>Der Injection-Date:-Header</title>
    <link>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2037</wfw:comment>

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

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Das Usenet ist zunehmend in die Bedeutungslosigkeit zurückgefallen - ironischerweise sind die zugrundeliegenden Formate und Protokolle heutzutage aber klarer spezifiziert als das zu seinen Hochzeiten der Fall war. &lt;em&gt;NNTP&lt;/em&gt;, das Übermittlungsprotokoll mit der größten Verbreitung, war recht gut definiert, erst in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc977.txt&quot; title=&quot;&quot;&gt;RFC 977&lt;/a&gt; von 1986 und dann zwanzig Jahre später in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc3977.txt&quot; title=&quot;&quot;&gt;RFC 3977&lt;/a&gt;; außerdem kann man den &lt;em&gt;INN&lt;/em&gt; wohl als eine Referenzimplementation betrachten.&lt;/p&gt;

&lt;p&gt;Mit dem Nachrichtenformat war es da schon schwieriger: Auf &lt;a href=&quot;https://www.ietf.org/rfc/rfc850.txt&quot; title=&quot;&quot;&gt;RFC 850&lt;/a&gt; von 1983 folgte &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1036.txt&quot; title=&quot;&quot;&gt;RFC 1036&lt;/a&gt; von 1987, der während der Blütezeit des Usenets niemals aktualisiert wurde, obschon es bereits 1993 einen Entwurf für einen Nachfolger gab, den sog. &amp;#8220;Son-of-1036&amp;#8221; (der erst 2010 als historisches Dokument in Form von &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1849.txt&quot; title=&quot;&quot;&gt;RFC 1849&lt;/a&gt; veröffentlicht wurde). Der De-Facto-Standard war dann letztlich &amp;#8220;Son-of-1036&amp;#8221; mit weitgehend ungeschriebenen Modifikationen aus der Implementierungspraxis, während die &lt;em&gt;USEFOR working group&lt;/em&gt; der &lt;em&gt;IETF&lt;/em&gt; sich unendlich lange vergeblich mit der Erstellung einer Spezifikation abmühte. Als Ende 2009 dann endlich &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5536.txt&quot; title=&quot;&quot;&gt;RFC 5536&lt;/a&gt; &amp;#8220;Netnews Article Format&amp;#8221; veröffentlicht wurde (der zusammen mit &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5537.txt&quot; title=&quot;&quot;&gt;RFC 5537&lt;/a&gt; &amp;#8220;Netnews Architecture and Protocols&amp;#8221; ein umfassendes Kompendium zur Implementation von Newsservern, -readern und allen möglichen anderen Tools rund um das Usenet bzw. Netnews darstellt), waren die großen Zeiten des Usenets bereits Vergangenheit.&lt;/p&gt;

&lt;h3 id=&quot;implementation-von-rfc-5536&quot;&gt;Implementation von RFC 5536&lt;/h3&gt;

&lt;p&gt;Es dauerte dementsprechend auch seine Zeit, bis die Theorie der RFCs allmählich in die Praxis einzusickern begann. Die ersten Neuerungen fanden sich schon in &lt;em&gt;INN 2.5.0&lt;/em&gt; (von 2009), aber neue Header wie &lt;em&gt;Injection-Info&lt;/em&gt; oder &lt;em&gt;Injection-Date&lt;/em&gt; wurden erst ab &lt;em&gt;INN 2.5.3&lt;/em&gt; (2012) tatsächlich beachtet und erst ab &lt;em&gt;INN 2.6.0&lt;/em&gt; (2015!) erzeugt.&lt;/p&gt;

&lt;p&gt;Damit wurden dann die bisherigen, nie offiziell standardisierten Header &lt;em&gt;NNTP-Posting-Host&lt;/em&gt;, &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; und &lt;em&gt;X-Trace&lt;/em&gt; durch eine klarere Definition des &lt;em&gt;Path&lt;/em&gt;-Headers und die neuen Header &lt;em&gt;Injection-Info&lt;/em&gt; und &lt;em&gt;Injection-Date&lt;/em&gt; ersetzt. Dabei ersetzt &lt;em&gt;Injection-Date&lt;/em&gt; das &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; (also den Zeitstempel der Einspeisung ins Netz per &lt;kbd&gt;POST&lt;/kbd&gt;), wohingegen im Header &lt;em&gt;Injection-Info&lt;/em&gt; alle Daten über das einspeisende System enthalten sind; dieser Header ersetzt also neben &lt;em&gt;NNTP-Posting-Host&lt;/em&gt; vor allem &lt;em&gt;X-Trace&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Wer als Newsserver-Betreiber diese Tracking-Header zu Zwecken der Anonymisierung oder Pseudonymisierung seiner Nutzer bisher entfernt oder modifiziert hat, muss beim Update auf &lt;em&gt;INN 2.6.0&lt;/em&gt; (und damit beim Update auf &lt;em&gt;Debian Stretch&lt;/em&gt;) entsprechend &lt;a href=&quot;https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html#c4649&quot; title=&quot;&quot;&gt;aufpassen und nacharbeiten&lt;/a&gt;. Dasselbe gilt auch für denjenigen, der Postings aus seinem &lt;em&gt;INN&lt;/em&gt; heraus per &lt;em&gt;suck&lt;/em&gt; erneut ins Netz einspeist: auch der Header &lt;em&gt;Injection-Info&lt;/em&gt; muss vor dem Repost entfernt werden.&lt;/p&gt;

&lt;h3 id=&quot;-injection-date-als-ersatz-f-r-nntp-posting-date-&quot;&gt;&lt;em&gt;Injection-Date&lt;/em&gt; als Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;?&lt;/h3&gt;

&lt;p&gt;So weit, so gut - eines sollte man aber dabei nicht aus den Augen verlieren: &lt;em&gt;Injection-Date&lt;/em&gt; ist &lt;strong&gt;nicht&lt;/strong&gt; dasselbe wie &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;, obschon das eine der Ersatz des anderen sein soll (RFC 5536, 3.2.7):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This header field is intended to replace the currently used but
undocumented &quot;NNTP-Posting-Date&quot; header field, whose use is now
deprecated.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;NNTP-Posting-Date&lt;/em&gt; wurde nämlich - wenn konfiguriert - immer gesetzt, um den Zeitpunkt der tatsächlichen Einspeisungs ins Netz anzugeben, der durchaus Stunden oder Tage nach der Erstellung des Artikels liegen kann. &lt;em&gt;Injection-Date&lt;/em&gt; hat zwar denselben Zweck - um aber zu vermeiden, dass ansonsten identische Artikel mit verschiedenen &lt;em&gt;Injection-Date&lt;/em&gt;-Headern verbreitet werden, &lt;strong&gt;darf&lt;/strong&gt; &lt;em&gt;Injection-Date&lt;/em&gt; nicht gesetzt werden, wenn der eingelieferte Artikel bereits sowohl einen &lt;em&gt;Date:&lt;/em&gt;- als auch einen &lt;em&gt;Message-ID:&lt;/em&gt;-Header hat:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;                                     If the proto-article had
both a Message-ID header field and a Date header field, an
Injection-Date header field MUST NOT be added, since the proto-
article may have been multiply injected by a posting agent that
predates this standard.  Otherwise, the injecting agent MUST add
an Injection-Date header field containing the current date and
time.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sinnigerweise findet man das nicht in RFC 5536, sondern in RFC 5537 (3.6, Ziffer 11). Der Hintergrund für diese Regelung ist etwas komplex: Die Verbreitung von Duplikaten bereits vorhandener Artikel wird verhindert, indem jeder Newsserver nur solche Artikel annimmt, deren &lt;em&gt;Message-ID&lt;/em&gt; er noch nicht kennt. Um nun diese Liste bekannter &lt;em&gt;Message-IDs&lt;/em&gt; (die sog. &lt;em&gt;History&lt;/em&gt;) nicht ins Unendliche wachsen zu lassen, speichert jeder Newsserver die ihm bekannte &lt;em&gt;Message-IDs&lt;/em&gt; nur für einen begrenzten Zeitraum (bspw. 14 Tage) und nimmt ältere Artikel schlicht nicht an. Für die Bestimmung des Alters eines Artikels soll aber auf den &lt;em&gt;Injection-Date&lt;/em&gt;-Header abgestellt werden, nicht auf &amp;#8220;Date&amp;#8221;; schließlich mag ein Artikel vor seiner Einspeisung länger auf Halde gelegen haben. Wenn nun aber ein Artikel (mit &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt;) einmal heute und dann nochmals drei Wochen später eingespeist würde und beide Male ein aktuelles &lt;em&gt;Injection-Date&lt;/em&gt; bekäme, dann würde ein Newsserver, der seine &lt;em&gt;History&lt;/em&gt; nur 14 Tage hält, den zweiten Artikel annehmen (lt. &lt;em&gt;Injection-Date&lt;/em&gt; ist er ja ganz frisch) und duplizieren (weil er nicht mehr weiß, dass derselbe Artikel vor drei Wochen schonmal vorbeikam).&lt;/p&gt;

&lt;p&gt;Nun ist es alles andere als ungewöhnlich, dass ein einzuspeisender Artikel bereits über &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt; verfügt; das Datum wird ohnehin regelmäßig gesetzt, und die Message-ID setzten viele (die meisten?) Newsreader auch. Das bedeutet dann aber im Umkehrschluss, dass &lt;em&gt;Injection-Date&lt;/em&gt; in sehr vielen Situationen eben kein Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; ist.&lt;/p&gt;

&lt;p&gt;Mir fiel das auf, als ich mal wieder einen Stapel noch auf meinem Laptop herumliegender Artikel mit ungefähr einer Woche Verspätung gepostet hatte: nach dem Update meines lokalen Newsservers auf &lt;em&gt;Debian Stretch&lt;/em&gt; war nicht mehr erkennbar, dass diese Postings verspätet eingespeist worden waren, weil es keinen &lt;em&gt;Injection-Date&lt;/em&gt;-Header gab. Die Ursache dieses scheinbaren Fehlers musste ich mir dann erst von &lt;em&gt;Russ Allbery&lt;/em&gt; persönlich erklären lassen &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;-x-nntp-posting-date-&quot;&gt;&lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Ich habe mir dann kurzerhand einen Ersatz geschaffen und setze nunmehr über den Perl-Filter (&lt;code&gt;filter_nnrpd.pl&lt;/code&gt;) einen &lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;-Header:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Add X-NNTP-Posting-Date header
$hdr{&#039;X-NNTP-Posting-Date&#039;} = strftime(&quot;%a, %d %b %Y %H:%M:%S %z&quot;, localtime);
&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/757823ebb3e148a6b238b1627c04ff19&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 06 Oct 2017 06:05:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2037-guid.html</guid>
    <category>debian</category>
<category>inn</category>
<category>perl</category>
<category>stretch</category>
<category>usenet</category>

</item>
<item>
    <title>phpMyAdmin nur für einen vhost einbinden</title>
    <link>https://netz-rettung-recht.de/archives/2020-phpMyAdmin-nur-fuer-einen-vhost-einbinden.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2020-phpMyAdmin-nur-fuer-einen-vhost-einbinden.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2020</wfw:comment>

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

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&lt;a href=&quot;https://www.phpmyadmin.net/&quot; title=&quot;phpMyAdmin&quot;&gt;&lt;em&gt;phpMyAdmin&lt;/em&gt;&lt;/a&gt; verwende ich seit über einem Jahrzehnt, um bequem auf die Datenbanken auf meinen verschiedenen Webspaces zugreifen zu können (und diesen Zugriff ggf. auch anderen Nutzern zu ermöglichen). Dabei nutze ich der Einfachheit halber das jeweilige Debian-Paket - je mehr Webapplikationen nicht gesondert aktualisiert werden müssen, desto besser.&lt;/p&gt;

&lt;p&gt;Die Standardinstallation hat - aus meiner Sicht - allerdings einen Nachteil: sie macht &lt;em&gt;phpMyAdmin&lt;/em&gt; für alle &lt;em&gt;vhosts&lt;/em&gt; verfügbar, d.h. unter allen auf dem Server gehosteten &amp;#8220;Domains&amp;#8221; aufrufbar. Manchmal mag das praktisch sein, wenn man bspw. so für jeden Kunden scheinbar &amp;#8220;sein&amp;#8221; &lt;em&gt;phpMyAdmin&lt;/em&gt; mitliefert; mir gefällt das aber nicht so gut, und sei es nur, weil &lt;em&gt;phpMyAdmin&lt;/em&gt; (wie jede verbreitete Webapplikation) regelmäßig &amp;#8220;angegriffen&amp;#8221; wird (sprich: Bots rufen die URL auf und suchen nach Schwachstellen oder versuchen, das Passwort zu erraten). Lieber würde ich &lt;em&gt;phpMyAdmin&lt;/em&gt; nur unter einer &amp;#8220;Domain&amp;#8221; - einem &lt;em&gt;vhost&lt;/em&gt; aufrufbar machen.&lt;/p&gt;

&lt;p&gt;Glücklicherweise lässt sich das ohne großen Aufwand machen.&lt;/p&gt;

&lt;p&gt;Standardmäßig legt Debian (Stretch) bei der Installation des Pakets eine entsprechende Konfiguration unter &lt;code&gt;/etc/apache2/conf-available/phpmyadmin.conf&lt;/code&gt; an und aktiviert sie durch einen Symlink in &lt;code&gt;/etc/apache2/conf-enabled/&lt;/code&gt;. Diese Datei hat folgenden Inhalt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&amp;lt;Directory /usr/share/phpmyadmin&amp;gt;
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    &amp;lt;IfModule mod_php5.c&amp;gt;
        &amp;lt;IfModule mod_mime.c&amp;gt;
            AddType application/x-httpd-php .php
        &amp;lt;/IfModule&amp;gt;
        &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
            SetHandler application/x-httpd-php
        &amp;lt;/FilesMatch&amp;gt;

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    &amp;lt;/IfModule&amp;gt;
    &amp;lt;IfModule mod_php.c&amp;gt;
        &amp;lt;IfModule mod_mime.c&amp;gt;
            AddType application/x-httpd-php .php
        &amp;lt;/IfModule&amp;gt;
        &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
            SetHandler application/x-httpd-php
        &amp;lt;/FilesMatch&amp;gt;

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    &amp;lt;/IfModule&amp;gt;

&amp;lt;/Directory&amp;gt;

# Authorize for setup
&amp;lt;Directory /usr/share/phpmyadmin/setup&amp;gt;
    &amp;lt;IfModule mod_authz_core.c&amp;gt;
        &amp;lt;IfModule mod_authn_file.c&amp;gt;
            AuthType Basic
            AuthName &quot;phpMyAdmin Setup&quot;
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        &amp;lt;/IfModule&amp;gt;
        Require valid-user
    &amp;lt;/IfModule&amp;gt;
&amp;lt;/Directory&amp;gt;

# Disallow web access to directories that don&#039;t need it
&amp;lt;Directory /usr/share/phpmyadmin/templates&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /usr/share/phpmyadmin/libraries&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /usr/share/phpmyadmin/setup/lib&amp;gt;
    Require all denied
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Entscheidend ist dabei die Zeile &lt;code&gt;Alias /phpmyadmin /usr/share/phpmyadmin&lt;/code&gt; - sie legt (global, da in der Serverkonfiguration eingebunden) für jeden &lt;em&gt;vhost&lt;/em&gt; einen Alias an, der beim Aufruf von &lt;code&gt;http://meine-domain.example/phpmyadmin/&lt;/code&gt; nun eben &lt;em&gt;phpMyAdmin&lt;/em&gt; anzeigt.&lt;/p&gt;

&lt;p&gt;Will man diese Funktionalität auf einen &lt;em&gt;vhost&lt;/em&gt; beschränken, genügt, es, die globale Konfiguration mit &lt;kbd&gt;a2disconf phpmyadmin&lt;/kbd&gt; abzuschalten und sie danach stattdessen in einen &lt;em&gt;vhost&lt;/em&gt; (oder auch mehrere) einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost ${APACHE_IP4}:80 ${APACHE_IP6}:80&amp;gt;
    ServerName mein-vhost.example
    DocumentRoot /var/www/mein-vhost.example

    Include /etc/apache2/conf-available/phpmyadmin.conf
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sinnvoll mag es zudem sein, die Konfiguration nur für einen &lt;em&gt;vhost&lt;/em&gt; einzubinden, bei dem SSL aktiviert ist.&lt;/p&gt;

&lt;p&gt;Dann noch ein &lt;kbd&gt;service apache2 reload&lt;/kbd&gt; (oder &lt;kbd&gt;systemctl reload apache2&lt;/kbd&gt;, oder &lt;kbd&gt;apache2ctl graceful&lt;/kbd&gt;), und jetzt ist &lt;em&gt;phpMyAdmin&lt;/em&gt; nur noch unter &lt;code&gt;http://mein-vhost.example/phpmyadmin/&lt;/code&gt; abrufbar - und nirgendwo sonst.&lt;/p&gt;

&lt;p&gt;Wer ganz andere Lösungen umsetzen möchte als der Debian-Default es vorsieht (bspw. ein Aufruf über &lt;code&gt;https://phpmyadmin.mein-vhost.example/&lt;/code&gt;), der kann die Debian-Konfiguration schlicht als Ausgangspunkt nehmen und die entscheidenden Teile in einen passenden &lt;em&gt;vhost&lt;/em&gt; kopieren.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/bce22a9244b348fe870c8a469fce92fe&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 08 Sep 2017 06:50:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2020-guid.html</guid>
    <category>apache</category>
<category>debian</category>
<category>phpmyadmin</category>
<category>stretch</category>

</item>
<item>
    <title>Von Jessie zu Stretch</title>
    <link>https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2032</wfw:comment>

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

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ein Jahr nach dem &lt;a href=&quot;https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html&quot; title=&quot;&quot;&gt;letzten Distributions-Upgrade&lt;/a&gt; stand für meinen heimischen Server das Upgrade auf &lt;em&gt;Debian Stretch&lt;/em&gt; an, das (wie immer) allein durch Download und Installation einige Zeit in Anspruch nahm, diesmal aber auch ungewohnt viele manuelle Eingriffe erforderte.&lt;/p&gt;

&lt;p&gt;Erneut war ich positiv über die geringe Zahl von Änderungen in &lt;em&gt;conffiles&lt;/em&gt; überrascht; insgesamt verlief das Upgrade auch grundsätzlich problemlos. Es &amp;#8220;hakte&amp;#8221; dann aber im Vergleich zu früheren Upgrades doch ungewohnt oft - jedenfalls für Debian, das normalerweise nach meiner Erfahrung einen nahezu hindernisfreien Upgrade-Pfad bietet.&lt;/p&gt;

&lt;h3 id=&quot;konkrete-einzelfallprobleme&quot;&gt;Konkrete Einzelfallprobleme&lt;/h3&gt;

&lt;p&gt;Es begann damit, dass das initiale Upgrade und das folgende Dist-Upgrade nicht ohne Schwierigkeiten durchliefen, sondern abbrachen und mehrfach neu gestartet werden mussten; ohne längere Suche im Log kann ich den Grund dafür gar nicht benennen, was letztlich aber auch egal ist - solange am Ende das Upgrade durchläuft, soll&amp;#8217;s mir recht sein.&lt;/p&gt;

&lt;p&gt;Ganz tat es das allerdings nicht; die Datenbank-Upgrades von phpMyAdmin und Roundcube scheiterten, weil der Datenbank-Server nicht richtig lief. Das wiederum lag darum, dass das Upgrade / die Umstellung von mySQL auf MariaDB nicht vollständig funktioniert hatte:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysqld_safe[6933]: 2017-09-01 13:52:40 139724014662208 [Note] Using unique option prefix &#039;key_buffer&#039; is error-prone and can break in the future. Please use the full name &#039;key_buffer_size&#039; instead.
mysqld_safe[6933]: 2017-09-01 13:52:40 139724014662208 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 6959 ...
mysqld_safe[6933]: 
mysqld_safe[6933]: Installation of system tables failed!  Examine the logs in
mysqld_safe[6933]: /var/lib/mysql for more information.
mysqld_safe[6933]: 
mysqld_safe[6933]: The problem could be conflicting information in an external
mysqld_safe[6933]: my.cnf files. You can ignore these by doing:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/scripts/scripts/mysql_install_db --defaults-file=~/.my.cnf
mysqld_safe[6933]: 
mysqld_safe[6933]: You can also try to start the mysqld daemon with:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/sbin/mysqld --skip-grant --general-log &amp;amp;
mysqld_safe[6933]: 
mysqld_safe[6933]: and use the command line tool /usr/bin/mysql
mysqld_safe[6933]: to connect to the mysql database and look at the grant tables:
mysqld_safe[6933]: 
mysqld_safe[6933]:     shell&amp;gt; /usr/bin/mysql -u root mysql
mysqld_safe[6933]:     mysql&amp;gt; show tables;
mysqld_safe[6933]: 
mysqld_safe[6933]: Try &#039;mysqld --help&#039; if you have problems with paths.  Using
mysqld_safe[6933]: --general-log gives you a log in /var/lib/mysql that may be helpful.
mysqld_safe[6933]: 
mysqld_safe[6933]: The latest information about mysql_install_db is available at
mysqld_safe[6933]: https://mariadb.com/kb/en/installing-system-tables-mysql_install_db
mysqld_safe[6933]: MariaDB is hosted on launchpad; You can find the latest source and
mysqld_safe[6933]: email lists at http://launchpad.net/maria
mysqld_safe[6933]: 
mysqld_safe[6933]: Please check all of the above before submitting a bug report
mysqld_safe[6933]: at http://mariadb.org/jira
mysqld_safe[6933]: 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ich mutmaße, dass die Rechte in &lt;code&gt;/var/lib/mysql&lt;/code&gt; nicht ganz stimmten - was auch immer. Mehrere Versuche mit &lt;kbd&gt;mysql_upgrade&lt;/kbd&gt; und &lt;kbd&gt;/usr/bin/mysql_install_db --defaults-file=~/.my.cnf&lt;/kbd&gt; waren jedenfalls schlussendlich erfolgreich; die Einzelheiten habe ich nicht debugt.&lt;/p&gt;

&lt;h3 id=&quot;-nderungen-f-r-bestimmte-softwarepakete&quot;&gt;Änderungen für bestimmte Softwarepakete&lt;/h3&gt;

&lt;p&gt;Abgesehen von dem vorstehend geschilderten Einzelfallproblem ergeben sich einige generelle Merkpunkte, die ich auch beim Upgrade meiner anderen Maschinen im Blick behalten werde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Der Account &lt;strong&gt;uucp&lt;/strong&gt; bekam - wie beim Upgrade auf &lt;em&gt;Jessie&lt;/em&gt; - wieder &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; als Shell verpasst.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;fail2ban&lt;/strong&gt; startete nicht mehr, weil in der &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; ein nicht mehr existenter Filter aktiviert wurde. Nach Berichtigung der Konfiguration ließ sich der Dienst problemlos starten.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Der &lt;strong&gt;isc-dhcp-server&lt;/strong&gt; startet jetzt per Default für &lt;em&gt;ipv4&lt;/em&gt; und &lt;em&gt;ipv6&lt;/em&gt;; jedenfalls bei mir fehlte ihm aber für letzteres die passende Konfiguration, so dass er mit einer Fehlermeldung stehenblieb. Das bisherige Verhalten lässt sich wiederhestellen, indem man in &lt;code&gt;/etc/default/isc-dhcp-server&lt;/code&gt; folgendes setzt: &lt;code&gt;INTERFACES=&quot;eth0&quot;&lt;/code&gt;. Da aber &lt;code&gt;INTERFACES&lt;/code&gt; offenbar demnächst wegfällt, kann man es auch direkt richtig machen und stattdessen &lt;code&gt;INTERFACESv4=&quot;eth0&quot;&lt;/code&gt; setzen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer &lt;strong&gt;duply&lt;/strong&gt; und &lt;em&gt;duplicity&lt;/em&gt; für sein Backup nutzt, muss aufgrund der neuen Version von &lt;code&gt;gpg&lt;/code&gt; die Konfiguration anpassen: in der &lt;code&gt;conf&lt;/code&gt;-Datei ist zu setzen: &lt;code&gt;GPG_OPTS=&#039;--pinentry-mode loopback&#039;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;offlineimap&lt;/strong&gt; verifiziert jetzt TLS-Zertifikate, will also immer dann, wenn &lt;code&gt;ssl = yes&lt;/code&gt; in der Konfiguration gesetzt ist (aber wohl auch dann, wen SSL jedenfalls möglich wäre), entweder den Pfad zu den Root-Zertifikaten angegeben haben (wenn die Gegenstelle ein Zertifikat einer anerkannten &lt;em&gt;CA&lt;/em&gt; hat) oder den &lt;em&gt;Fingerprint&lt;/em&gt; des Zertifikats (wenn es sich um ein selbst-signiertes handelt). Zum jeweiligen &lt;code&gt;remotehost&lt;/code&gt; gehört also entweder &lt;code&gt;sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;/code&gt; oder &lt;code&gt;cert_fingerprint = ...&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Außerdem müssen bei &lt;strong&gt;offlineimap&lt;/strong&gt; Sonderzeichen in Passworten - konkret hier &lt;code&gt;%&lt;/code&gt; - teilweise gequoted werden (konkret hier als &lt;code&gt;%%&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jedenfalls wenn bei &lt;strong&gt;offlineimap&lt;/strong&gt; das Feature &lt;em&gt;Name translation&lt;/em&gt; genutzt wird, muss überdies die Konfiguration auch insoweit angepasst werden - &lt;em&gt;offlineimap&lt;/em&gt; synchronisiert Folder jetzt beidseits, was beim Umschreiben von Foldernamen zum Chaos führen kann, weil externe Folder lokal anders heißen und dann ggf. unter ihrem lokalen Namen neu auf den entfernten IMAP-Server synchronisiert würden. Die &lt;em&gt;Name translation&lt;/em&gt; muss daher beidseits erfolgen, daher auch für das lokale &amp;#8220;Repository&amp;#8221; (&amp;#8220;&lt;a href=&quot;http://www.offlineimap.org/doc/nametrans.html#reverse-nametrans&quot; title=&quot;301 Moved Permanently&quot;&gt;Reverse namentrans&lt;/a&gt;&amp;#8221;). Der Aufruf von &lt;kbd&gt;offlineimap --info&lt;/kbd&gt; kann beim Debugging hier sehr hilfreich sein.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wer &lt;strong&gt;gitolite&lt;/strong&gt; genutzt hat und nun auf &lt;em&gt;gitolite3&lt;/em&gt; umstellen will, wird jedenfalls die bisherige Konfiguration übernehmen bzw. anpassen müssen und muss auf den Clients im Auge behalten, dass der lokale Benutzer auf dem Server jetzt nicht mehr &lt;code&gt;gitolite&lt;/code&gt;, sondern &lt;code&gt;gitolite3&lt;/code&gt; heißt. (Ob es einen automatisierten Upgrade-Pfad gibt, wenn man &lt;em&gt;gitolite3&lt;/em&gt; nachinstalliert, kann ich nicht sagen, weil ich so &amp;#8220;klug&amp;#8221; war, erst das &lt;em&gt;gitolite&lt;/em&gt;-Paket zu entfernen und dann &lt;em&gt;gitolite3&lt;/em&gt; zu installieren &amp;#8230;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hinweis:&lt;/strong&gt; In den Kommentaren finden sich noch Ergänzungen, auf die ich später gestoßen bin. So muss man als Nutzer von &lt;strong&gt;suck&lt;/strong&gt; daran denken, den &lt;code&gt;Injection-Info:&lt;/code&gt;-Header auszufiltern, und wer noch &lt;em&gt;DSS&lt;/em&gt;-Keys für (automatisierte) &lt;strong&gt;SSH&lt;/strong&gt;-Verbindungen nutzt, sollte im Blick haben, dass &lt;code&gt;ssh-dss&lt;/code&gt; nicht mehr zu den &lt;code&gt;PubkeyAcceptedKeyTypes&lt;/code&gt; gehört.&lt;/p&gt;

&lt;h3 id=&quot;neue-software-und-ge-nderte-defaults&quot;&gt;Neue Software und geänderte Defaults&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vim&lt;/strong&gt; hat per Default ärgerlicherweise eine aktivierte Maussteuerung verpasst bekommen, die sich zudem (aufgrund der Reihenfolge, mit der die Konfigurationsdateien eingelesen werden) nicht systemweit deaktivieren lässt, sondern zumindest eine leere &lt;code&gt;~/.vimrc&lt;/code&gt; für jeden Nutzer erfordert (weil sonst stattdessen &lt;code&gt;/usr/share/vim/vim80/defaults.vim&lt;/code&gt; geladen wird, und zwar zur selben Zeit wie sonst die &lt;code&gt;.vimrc&lt;/code&gt; und damit &lt;em&gt;nach&lt;/em&gt; &lt;code&gt;/etc/vim/vimrc.local&lt;/code&gt;). Alternativ kann man das Laden der &lt;code&gt;defaults.vim&lt;/code&gt; in &lt;code&gt;/etc/vim/vimrc&lt;/code&gt; deaktivieren (wenn man dieses &lt;em&gt;conffile&lt;/em&gt; um den entsprechenden, auskommentierten Inhalt ergänzt hat, wie beim Upgrade vorgeschlagen). Für die Einzelheiten sehr informativ ist hier der entsprechende &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074&quot; title=&quot;#864074 - vim: &amp;#39;set mouse=&amp;#39; in /etc/vim/vimrc.local is ignored unless ~/.vimrc exists - Debian Bug report logs&quot;&gt;Bugreport&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mit &lt;em&gt;Debian Stretch&lt;/em&gt; kommt &lt;em&gt;PHP7&lt;/em&gt;; es mag sich daher empfehlen, &lt;em&gt;PHP5&lt;/em&gt; zu deinstallieren. Außerdem wird man im Zweifel spätetens jetzt auf &lt;em&gt;php-fpm&lt;/em&gt; umstellen wollen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;zusammenfassung&quot;&gt;Zusammenfassung&lt;/h3&gt;

&lt;p&gt;Das Upgrade verlief - in einer Gesamtbetrachtung - ohne echte (reproduzierbare) Fehler, erforderte aber ungewöhnlich viel manuellen Nacharbeit. Andererseits wurden zumindest manche Punkte vermutlich im jeweiligen &lt;code&gt;NEWS&lt;/code&gt;-Eintrag angesprochen (ich muss gestehen, ich lese die Upgrade-Anleitung immer sehr genau, aber &lt;code&gt;NEWS&lt;/code&gt; habe ich bisher allenfalls überflogen - keine gute Idee), und meine Konfiguration hier zuhause ist eher komplex und historisch gewachsen; eine schlechte Kombination.&lt;/p&gt;

&lt;p&gt;Weitere Hinweise zum Upgrade gibt es auch in &lt;a href=&quot;https://www.earth.li/~noodles/blog/2017/08/notes-on-stretch.html&quot; title=&quot;Notes on upgrading from Jessie to Stretch | Noodles’ Emptiness&quot;&gt;Jonathan McDowell&amp;#8217;s Blog&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/67e6f32e5a054d04ae2282ca1fcb265f&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 06 Sep 2017 05:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2032-guid.html</guid>
    <category>debian</category>
<category>stretch</category>

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

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

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Alle paar Monate wieder turnt ein - weniger rücksichtsvoller - Crawler vorbei und spidert sich zügig durch alle Einträge meines Blogs. Damit brachte er meinen bisherigen Server gerne an den Rand seiner Leistungsfähigkeit, durfte dieser doch für jeden Link einen &lt;code&gt;php-cgi&lt;/code&gt;-Prozess starten. Man merkte das recht schnell an den steigenden Antwortzeiten, und auch interaktiv auf der Shell machte sich die steigende &lt;em&gt;load&lt;/em&gt; bemerkbar. Am Ende blieben meist einige &lt;code&gt;php-cgi&lt;/code&gt;-Prozesse übrig, die man dann manuell mittels &lt;code&gt;kill&lt;/code&gt; entsorgen durfte. (Vielleicht lag auch hier das eigentliche Problem, dass nämlich die genutzten Ressourcen nicht wieder freigegeben wurden. Hinter die Einzelheiten bin ich nie so recht gekommen.)&lt;/p&gt;

&lt;p&gt;Die brandneue Maschine hingegen sollte durch &lt;em&gt;FastCGI&lt;/em&gt; und massenhaft RAM sowie schnelle SSDs einem solchen Ansturm (auch bei weiterer Verwendung des doch eher schwergewichtigen Apachen) besser gewachsen sein - dachte ich mir. Bis eines Freitagmorgens die E-Mails des Monitoring-System eingingen, die mir mitteilten, dass der Webserver nicht mehr auf Anfragen reagiert. Gar nicht mehr.&lt;/p&gt;

&lt;p&gt;Der Grund dafür fand sich schnell im Log:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[mpm_event:error] [pid 1365:tid 139856442496192] AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Alle Threads des Webservers waren mit Anfragen ausgelastet (und offensichtlich wurden sie auch nicht mehr freigegeben - oder der Apache hatte sich &amp;#8220;verschluckt&amp;#8221;). Ein &lt;kbd&gt;service apache2 restart&lt;/kbd&gt; löste daher das Problem; Zeit aber für einen Blick in die Konfiguration - vielleicht sollte man etwas an den Limits drehen (&amp;#8220;consider raising the MaxRequestWorkers setting
&amp;#8220;).&lt;/p&gt;

&lt;h3 id=&quot;apache-event-mpm&quot;&gt;Apache Event-MPM&lt;/h3&gt;

&lt;p&gt;Für das verwendete &lt;em&gt;MPM&lt;/em&gt; findet sich die entsprechende Konfiguration (unter Debian) in &lt;code&gt;/etc/apache2/mods-enabled/mpm_event.conf&lt;/code&gt;; sie sieht per default so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# event MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestWorkers: maximum number of worker threads
# MaxConnectionsPerChild: maximum number of requests a server process serves
&amp;lt;IfModule mpm_event_module&amp;gt;
       StartServers              2
       MinSpareThreads          25
       MaxSpareThreads          75
       ThreadLimit              64
       ThreadsPerChild          25
       MaxRequestWorkers       150
       MaxConnectionsPerChild    0
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Es werden also standardmäßig zwei Serverprozesse (&lt;code&gt;StartServers&lt;/code&gt;)gestartet; jeder hat 25 Threads (&lt;code&gt;ThreadsPerChild&lt;/code&gt;), also können 50 parallele Anfragen abgearbeitet werden. Sobald weniger als 25 freie Threads zur Verfügung stehen (&lt;code&gt;MinSpareThreads&lt;/code&gt;), werden weitere Serverprozesse gestartet, bis zum Maximum von 150 Threads (&lt;code&gt;MaxRequestWorkers&lt;/code&gt;) - das entspricht sechs Prozessen (mit je 25 Threads). Sobald mehr als 75 Threads unbeschäftigt sind (&lt;code&gt;MaxSpareThreads&lt;/code&gt;), werden Serverprozesse wieder zurückgefahren.&lt;/p&gt;

&lt;p&gt;150 Prozesse für eine Vielzahl von Webpräsenzen erschien mir wirklich nicht viel; ich habe (angesichts des zur Verfügung stehenden Speichers) daher etwas nachgelegt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mpm_event_module&amp;gt;
        ServerLimit               40
        StartServers               5
        MinSpareThreads          100
        MaxSpareThreads          250
        ThreadLimit               64     
        ThreadsPerChild           25
        MaxRequestWorkers       1000
        MaxConnectionsPerChild  1000
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wir fangen jetzt also mit mit 125 Threads an (fünf Server mit je 25 Threads) und halten minimal 100 Threads bereit, maximal 250 - eine Lastspitze kann daher besser abgefedert werden, weil von Anfang an mehr Ressourcen bereitstehen und schneller zusätzliche Ressourcen hochgefahren werden). Maximal können dann 1.000 Threads laufen (statt vorher 150) - zu diesem Zweck muss auch &lt;code&gt;ServerLimit&lt;/code&gt; erhöht werden, das per Default auf 16 steht - denn 1.000 Threads brauchen bei 25 Threads pro Prozess 40 Prozesse (mit dem Default von 16 Prozessen kommt man daher maximal auf 400 Threads).&lt;/p&gt;

&lt;p&gt;Außerdem lasse icn jeden Thread nach 1.000 beantworteten Anfragen neu starten (&lt;code&gt;MaxConnectionsPerChild&lt;/code&gt;); so können sich Speicherlecks nicht zu Problemen auswachsen.&lt;/p&gt;

&lt;p&gt;Seitdem war der Webserver jedenfalls nicht mehr komplett ausgelastet; schauen wir mal, ob das schon der richtige Mittelweg zwischen der Bereitstellung ausreichender Ressourcen und dem Schutz des Gesamtsystems vor Überlast war oder mir als nächstes die ganze Maschine in die Knie geht, wenn es mal richtig rundgeht &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;fpm-konfiguration&quot;&gt;FPM-Konfiguration&lt;/h3&gt;

&lt;p&gt;Für Webapplikationen in PHP ist die Apache-Konfiguration nicht das einzige limitierende Element - vielmehr muss jede Anfrage auch von einem &lt;em&gt;FastCGI&lt;/em&gt;-Prozess beantwortet werden, und auch die sind limitiert: per Default (bei Debian) auf 50 pro Pool, konfiguriert (unter Strech) in &lt;code&gt;/etc/php/7.0/fpm/pool.d/www.conf&lt;/code&gt;, wobei statt &lt;code&gt;www.conf&lt;/code&gt; eben der jeweilige Pool einzusetzen ist.&lt;/p&gt;

&lt;p&gt;Das erscheint mir ebenfalls nicht besonders viel; ich habe daher den Pool für mein Blog etwas nach oben angepasst:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pm.max_children = 250
pm.start_servers = 30
pm.min_spare_servers = 10
pm.max_spare_servers = 50
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Zu lesen ist das ähnlich wie oben beim Apachen: 30 Prozesse stehen von Anfang an zur Verfügung, 10&amp;#160;müssen mindestens immer arbeitslos sein, sonst werden Prozesse nachgelegt, bis zur Maximalzahl von 250. Ab 50 &amp;#8220;arbeitslosen&amp;#8221; Prozessen werden überzählige Prozesse gestoppt.&lt;/p&gt;

&lt;h3 id=&quot;erfahrungswerte&quot;&gt;Erfahrungswerte&lt;/h3&gt;

&lt;p&gt;Ich habe bisher, muss ich gestehen, nicht die geringste Erfahrung mit solchen &amp;#8220;Tuning-Aufgaben&amp;#8221;, und werde daher abwarten müssen, ob sich die Werte bewähren. Aus dem Log kann ich jedenfalls sehen, dass 50 Prozesse viel zu wenig waren und auch 150 mehrfach nicht ausreichten:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;WARNING: [pool blog] server reached pm.max_children setting (150), consider raising it
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Andererseits habe ich bisher zumindest aus &lt;em&gt;Munin&lt;/em&gt; - das allerdings nicht sehr fein auflöst - keine Hinweise für Lastspitzen (CPU-Nutzung, RAM-Nutzung und Load); da scheint im Tagesverlauf überall noch viel, viel Luft nach oben zu sein.&lt;/p&gt;

&lt;p&gt;Hat jemand aus der werten Leserschaft Erfahrungen und Tips, die er gerne teilen möchte? Sonst berichte ich, wenn das nächste Mal etwas danebengeht. &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/87d9555e0645490ebf5eee951e24a9ff&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 22 Aug 2017 05:40:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2021-guid.html</guid>
    <category>apache</category>
<category>debian</category>
<category>followerpower</category>
<category>php</category>
<category>stretch</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>

</channel>
</rss>
