Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://www.michael-prokop.at/blog/wp-rss2.php

  1. <?xml version="1.0" encoding="ISO-8859-1"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>mikas blog</title>
  12. <atom:link href="https://michael-prokop.at/blog/feed/" rel="self" type="application/rss+xml" />
  13. <link>https://michael-prokop.at/blog</link>
  14. <description>... and even if no one reads it</description>
  15. <lastBuildDate>Fri, 22 Nov 2024 18:08:08 +0000</lastBuildDate>
  16. <language>en-US</language>
  17. <sy:updatePeriod>hourly</sy:updatePeriod>
  18. <sy:updateFrequency>1</sy:updateFrequency>
  19. <generator>https://wordpress.org/?v=5.0.3</generator>
  20. <item>
  21. <title>HTU Bigband Konzert am 04.06.2024</title>
  22. <link>https://michael-prokop.at/blog/2024/05/28/htu-bigband-konzert-am-04-06-2024/</link>
  23. <pubDate>Tue, 28 May 2024 14:32:20 +0000</pubDate>
  24. <dc:creator><![CDATA[mika]]></dc:creator>
  25. <category><![CDATA[Allgemein]]></category>
  26. <category><![CDATA[Events]]></category>
  27.  
  28. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6909</guid>
  29. <description><![CDATA[Am Dienstag den 4. Juni spielen wir ab 19:30 Uhr unser nächstes HTU-Bigband-Konzert. Das Konzert findet im Innenhof der TU Graz (Alte Technik, Rechbauerstraße 12, 8010 Graz) statt, bei Schlechtwetter geht es an der gleichen Adresse in den wunderbaren Hörsaal 2. Wir sind über 25 Musikerinnen und Musiker und haben ein anspruchsvolles Programm &#8211; von [&#8230;]]]></description>
  30. <content:encoded><![CDATA[<p><a href="/blog/img/htu-bigband-2024-06-04.jpg"><img src="/blog/img/htu-bigband-2024-06-04-small.jpg" alt="Plakat für das HTU Bigband-Konzert am 04.06.2024" style="border: 0px; margin-right: 20px" align=left /></a></p>
  31. <p>Am Dienstag den 4. Juni spielen wir ab 19:30 Uhr unser nächstes <a href="https://htugraz.at/deine-htu/htu-big-band">HTU-Bigband</a>-Konzert. Das Konzert findet im Innenhof der TU Graz (<a href="https://www.openstreetmap.org/#map=19/47.06894/15.44980">Alte Technik, Rechbauerstraße 12, 8010 Graz</a>) statt, bei Schlechtwetter geht es an der gleichen Adresse in den wunderbaren Hörsaal 2. Wir sind über 25 Musikerinnen und Musiker und haben ein anspruchsvolles Programm &#8211; von Swing, über Soul, Funk und Latin bis Pop ist alles dabei. Es gibt über 2 Stunden Musik vom Feinsten, und das Ganze bei freiem Eintritt.</p>
  32. <p>Das Event gibt es auch auf <a href="https://www.facebook.com/HTUGraz/posts/pfbid02FdAKWch5Rb2B1kxexhNBQywmeziXYEXuTd2XRAtHLDb45pdBYXBu7c7Fxfd8xWbWl">Facebook</a> und <a href="https://www.instagram.com/htugraz/p/C6yFjaVozaS/">Instagram</a> zum &#8220;Liken&#8221; und Weiterverteilen.</p>
  33. <p>Ich freue mich schon tierisch darauf und würde mich über bekannte Gesichter freuen. Ich hoffe man sieht und hört sich! :-)</p>
  34. ]]></content:encoded>
  35. </item>
  36. <item>
  37. <title>Being a Debian Developer since 15 years</title>
  38. <link>https://michael-prokop.at/blog/2024/05/28/being-a-debian-developer-since-15-years/</link>
  39. <pubDate>Tue, 28 May 2024 11:37:59 +0000</pubDate>
  40. <dc:creator><![CDATA[mika]]></dc:creator>
  41. <category><![CDATA[Computer]]></category>
  42. <category><![CDATA[English]]></category>
  43. <category><![CDATA[Open Source]]></category>
  44.  
  45. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6905</guid>
  46. <description><![CDATA[15 years ago I became an official Debian Developer. Incredible how time flies.]]></description>
  47. <content:encoded><![CDATA[<p><a href="/blog/2009/05/28/debiandeveloper-add_membermika/">15 years ago</a> I became an official Debian Developer. Incredible how time flies.</p>
  48. ]]></content:encoded>
  49. </item>
  50. <item>
  51. <title>Vortrag: We got hacked: Lektionen aus realen Security-Vorfällen @ GLT24</title>
  52. <link>https://michael-prokop.at/blog/2024/04/07/vortrag-we-got-hacked-lektionen-aus-realen-security-vorfallen-glt24/</link>
  53. <pubDate>Sun, 07 Apr 2024 10:22:35 +0000</pubDate>
  54. <dc:creator><![CDATA[mika]]></dc:creator>
  55. <category><![CDATA[Computer]]></category>
  56. <category><![CDATA[Events]]></category>
  57.  
  58. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6897</guid>
  59. <description><![CDATA[Auf den Grazer Linuxtagen 2024 (GLT24) war ich als Referent mit einem Vortrag zum Thema &#8220;We got hacked: Lektionen aus realen Security-Vorfällen&#8221; vertreten. In meinem Vortrag gibt es einen Einblick in reale Security-Incidents und welche Lektionen sich aus solchen Vorfällen mitnehmen lassen. Es gibt den Vortrag dank des fantastischen c3voc-Teams bereits als Videomitschnitt online. Meine [&#8230;]]]></description>
  60. <content:encoded><![CDATA[<p>Auf den <a href="https://www.linuxtage.at/">Grazer Linuxtagen 2024</a> (GLT24) war ich als Referent mit einem Vortrag zum Thema &#8220;<a href="https://pretalx.linuxtage.at/glt24/talk/3MMQBF/">We got hacked: Lektionen aus realen Security-Vorfällen</a>&#8221; vertreten. In meinem Vortrag gibt es einen Einblick in reale Security-Incidents und welche Lektionen sich aus solchen Vorfällen mitnehmen lassen.</p>
  61. <p>Es gibt den Vortrag dank des fantastischen c3voc-Teams bereits als <a href="https://media.ccc.de/v/glt24-418-we-got-hacked-lektionen-aus-realen-security-vorfllen">Videomitschnitt online</a>. Meine <a href="https://michael-prokop.at/slides/glt24_we-got-hacked.pdf">Vortragsfolien (2.1MB, PDF)</a> stehen ebenfalls online zur Verfügung. Viel Spaß beim Anschauen!</p>
  62. ]]></content:encoded>
  63. </item>
  64. <item>
  65. <title>Mein Lesejahr 2023</title>
  66. <link>https://michael-prokop.at/blog/2024/01/03/mein-lesejahr-2023/</link>
  67. <comments>https://michael-prokop.at/blog/2024/01/03/mein-lesejahr-2023/#comments</comments>
  68. <pubDate>Wed, 03 Jan 2024 11:39:37 +0000</pubDate>
  69. <dc:creator><![CDATA[mika]]></dc:creator>
  70. <category><![CDATA[Allgemein]]></category>
  71. <category><![CDATA[Bücher & CO]]></category>
  72.  
  73. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6849</guid>
  74. <description><![CDATA[Ich habe auch 2023 keine Bookdumps geschrieben (zu viel Aufwand), darum gibt es auch diesmal wieder (siehe Lesejahr 2022 für die letzte Ausgabe) eine Art Best-Of der von mir 2023 fertig gelesenen Bücher, also jene die ich besonders lesenswert fand bzw. empfehlen möchte (die Reihenfolge entspricht dem Foto und stellt keinerlei Reihung oder dergleichen dar): [&#8230;]]]></description>
  75. <content:encoded><![CDATA[<p><img src="/blog/img/buecher_2023.jpg" alt="Foto der hier vorgestellten Bücher" style="border: 0px; margin-right: 20px" align=left /></p>
  76. <p>Ich habe auch 2023 keine Bookdumps geschrieben (zu viel Aufwand), darum gibt es auch diesmal wieder (siehe <a href="/blog/2023/01/03/mein-lesejahr-2022/">Lesejahr 2022</a> für die letzte Ausgabe) eine Art Best-Of der von mir 2023 fertig gelesenen Bücher, also jene die ich besonders lesenswert fand bzw. empfehlen möchte (die Reihenfolge entspricht dem Foto und stellt keinerlei Reihung oder dergleichen dar):</p>
  77. <ul>
  78. <li><a href="https://www.penguin.de/Daniel-Everett-Das-gluecklichste-Volk-DVA/Das-gluecklichste-Volk/aid20724_4354.rhd"><strong>Das glücklichste Volk: Sieben Jahre bei den Pirahã-Indianern am Amazonas</strong>, Daniel L. Everett</a>. Diese Buch ist eine Empfehlung von Khaled Hakami, der u.a. im Erklär-mir-die-Welt-Podcast zum Thema <a href="https://xn--erklrmir-3za.at/2021/03/02/153-erklaer-mir-jaeger-und-sammler-khaled-hakami/">Erklär mir Jäger und Sammle</a> zu Gast war. Das Buch ist eine große Empfehlung speziell für all jene Leute, die sich für andere Kulturen interessieren. Es ist eines der horizonterweiterndsten Bücher, das ich in den letzten Jahren gelesen habe.</li>
  79. <li><a href="https://www.kiwi-verlag.de/buch/nele-pollatschek-kleine-probleme-9783869712406"><strong>Kleine Probleme</strong>, Nele Pollatschek</a>. Der letzte Tag des Jahres, eine To-do-Liste, unerledigte Dinge und die Sehnsucht nach Ordnung. Die Autorin schreibt aus Sicht von Lars, Familienvater und Endvierziger ein unterhaltsames Buch.</li>
  80. <li><a href="https://www.mare.de/buecher/gentleman-uber-bord-8696"><strong>Gentleman über Bord</strong>, Herbert Clyde Lewis</a>. Ein Roman aus dem Jahr 1937, in dem der Protagonist Henry bei einer Schiffsreise bei einem Missgeschick über Bord geht, und die restliche Besatzung des Schiffes jede Menge Ausreden für sich (er)findet, um das Verschwinden des Passagiers Henry zu entschuldigen. Bedeutungstief und zeitlos.</li>
  81. <li><a href="https://en.wikipedia.org/wiki/The_Undoing_Project"><strong>The Undoing Project: A Friendship That Changed Our Minds</strong>, Michael Lewis</a>. Ein Buch das die Freundschaft und Lebensweg von Daniel Kahneman (bekannt u.a. für das Buch &#8220;Thinking, Fast and Slow&#8221;) und Amos Tversk beleuchtet, jene Herren die u.a. für die <a href="https://de.wikipedia.org/wiki/Prospect_Theory">Prospect Theory</a> bekannt sind. Ich wurde auf das Buch über die <a href="https://www.piqd.de/literatur/the-undoing-project-und-der-beginn-einer-automatischen-sachbuchkritik">wunderbare Rezension von Kathrin Passig</a> aufmerksam, und mir hat das Buch voll zugesagt (auch wenn ein Lesebuddy zurecht anmerkte, dass man kein Problem mit amerikanischen Journalisten als Autor wie auch ein bisserl Drama haben sollte, <em>mich</em> hat beides nicht gestört). Für mich war das Buch insgesamt sehr gut gemacht, es gab einige interessante Stellen und diente mir als Erinnerung, dass ich die Werke von Kahneman (wieder) mal (fertig)lesen sollte.</li>
  82. <li><a href="https://www.rowohlt.de/buch/dirk-stermann-mir-geht-s-gut-wenn-nicht-heute-dann-morgen-9783498003746"><strong>Mir geht&#8217;s gut, wenn nicht heute, dann morgen</strong>, Dirk Stermann</a>. Eine wunderbare Mischung aus ernsten Themen und Schmäh.</li>
  83. <li><a href="https://www.hanser-literaturverlage.de/buch/vati/978-3-446-26917-0/"><strong>Vati</strong>, Monika Helfer</a>. Eine Fortsetzung ihrer eigenen Familiengeschichte, ich mag die schlichte und trotzdem berührende Sprache.</li>
  84. <li><a href="https://www.hanser-literaturverlage.de/buch/eigentum/978-3-446-27833-2/"><strong>Eigentum</strong>, Wolf Haas</a>. Ich habe Haas erst 2022 für mich entdeckt, er ist einer meiner Lieblingsautoren und ich bin seither auf dem Weg alles von ihm zu lesen. Auch <em>Eigentum</em> ist ein wunderschönes Buch, in dem Haas von seiner sterbenden Mutter schreibt. Sprachkünstler, Hilfsausdruck!</li>
  85. <li><a href="https://www.rowohlt.de/buch/wolfgang-herrndorf-arbeit-und-struktur-9783499268519"><strong>Arbeit und Struktur</strong>, Wolfgang Herrndorf</a>. Los ging es mit dem Schließen einer Bildungslücke: <a href="https://de.wikipedia.org/wiki/Tschick_(Roman)">Tschick</a> vom selbigen Autor hat mich dermaßen reingezogen, dass ich auch endlich mal dessen <em>Arbeit und Struktur</em> angefangen habe, ein Buch das <a href="https://daslesenderanderen.de/episodes/20-clemens-j-setz-und-der-buerostuhl-von-ernst-jandl/">Clemens J. Setz im Podcast &#8220;Das Lesen der Anderen&#8221;</a> empfohlen hat. Das Buch ist die Autobiografie der letzten Lebensjahre des Autors. Ursprünglich als Blog aufgesetzt nachdem der Autor die Diagnose Hirntumor bekommen hat, wurde sein digitales Tagebuch dann in Papier- und Buchform gebracht. Man möge sich von dem vielleicht etwas sperrigen Titel nicht aufhalten lassen. Ein beeindruckendes, bewegendes und großartiges Buch.</li>
  86. <li><a href="https://www.dumont-buchverlag.de/buch/mariana-leky-die-herrenausstatterin-9783832185442-t-3836"><strong>Die Herrenausstatterin</strong>, Mariana Leky</a>. Ich bin ein Fan von Mariana Leky und habe über die letzten Jahre regelmäßig Bücher von ihr gelesen, so auch dieses wunderbare Buch über eine Dreiecksgeschichte.</li>
  87. </ul>
  88. <p>Ich freue mich übrigens über Feedback, wenn jemand von euch ein Buch aufgrund dieses Beitrags hier gelesen oder selbst Lese-Empfehlungen für mich hat.</p>
  89. ]]></content:encoded>
  90. <wfw:commentRss>https://michael-prokop.at/blog/2024/01/03/mein-lesejahr-2023/feed/</wfw:commentRss>
  91. <slash:comments>2</slash:comments>
  92. </item>
  93. <item>
  94. <title>Postfix failing with &#8220;no shared cipher&#8221;</title>
  95. <link>https://michael-prokop.at/blog/2023/09/25/postfix-failing-with-no-shared-cipher/</link>
  96. <comments>https://michael-prokop.at/blog/2023/09/25/postfix-failing-with-no-shared-cipher/#comments</comments>
  97. <pubDate>Mon, 25 Sep 2023 18:35:15 +0000</pubDate>
  98. <dc:creator><![CDATA[mika]]></dc:creator>
  99. <category><![CDATA[Computer]]></category>
  100. <category><![CDATA[Debian]]></category>
  101. <category><![CDATA[English]]></category>
  102.  
  103. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6838</guid>
  104. <description><![CDATA[I&#8217;m one of the few folks left who run and maintain mail servers. Recently I had major troubles receiving mails from the mail servers used by a bank, and when asking my favourite search engine, I&#8217;m clearly]]></description>
  105. <content:encoded><![CDATA[<p>I&#8217;m one of the few folks left who run and maintain mail servers. Recently I had major troubles receiving mails from the mail servers used by a bank, and when <a href="https://duckduckgo.com/?q=%22no+shared+cipher%22+%22lost+connection+after+STARTTLS+from%22">asking my favourite search engine</a>, I&#8217;m clearly <a href=https://community.keyhelp.de/viewtopic.php?t=10987">not</a> the only <a href="https://talk.plesk.com/threads/two-words-about-postfix-and-ssl-tls.345772/">one</a> who <a href="https://serverfault.com/questions/1006059/postfix-3-4-9-ssl-issues-no-shared-cipher-from-servers-using-tlsv1">ran into</a> such <a href="https://github.com/docker-mailserver/docker-mailserver/issues/1784">an issue</a>. Actually, I should have checked off the issue and not become a customer at that bank, but the tech nerd in me couldn&#8217;t resist getting to the bottom of the problem. Since I got it working and this might be useful for others, here we are. :)</p>
  106. <p>I was trying to get an online banking account set up, but the corresponding account creation mail didn&#8217;t arrive me, at all. Looking at my mail server logs, my postfix mail server didn&#8217;t accept the mail due to:</p>
  107. <pre>
  108. postfix/smtpd[3319640]: warning: TLS library problem: error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:../ssl/statem/statem_srvr.c:2283:
  109. postfix/smtpd[3319640]: lost connection after STARTTLS from mx01.arz.at[193.110.182.61]
  110. </pre>
  111. <p>Huh, what&#8217;s going on here?! Let&#8217;s increase the TLS loglevel (setting <em>smtpd_tls_loglevel = 2</em>) and retry. But how can I retry receiving yet another mail? Luckily, on the registration website of the bank there was a URL available, that let me request a one-time password. This triggered another mail, so I did that and managed to grab this in the logs:</p>
  112. <pre>
  113. postfix/smtpd[3320018]: initializing the server-side TLS engine
  114. postfix/tlsmgr[3320020]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
  115. postfix/tlsmgr[3320020]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
  116. postfix/smtpd[3320018]: connect from mx01.arz.at[193.110.182.61]
  117. postfix/smtpd[3320018]: setting up TLS connection from mx01.arz.at[193.110.182.61]
  118. postfix/smtpd[3320018]: mx01.arz.at[193.110.182.61]: TLS cipher list "aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH"
  119. postfix/smtpd[3320018]: SSL_accept:before SSL initialization
  120. postfix/smtpd[3320018]: SSL_accept:before SSL initialization
  121. postfix/smtpd[3320018]: SSL3 alert write:fatal:handshake failure
  122. postfix/smtpd[3320018]: SSL_accept:error in error
  123. postfix/smtpd[3320018]: SSL_accept error from mx01.arz.at[193.110.182.61]: -1
  124. postfix/smtpd[3320018]: warning: TLS library problem: error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:../ssl/statem/statem_srvr.c:2283:
  125. postfix/smtpd[3320018]: lost connection after STARTTLS from mx01.arz.at[193.110.182.61]
  126. postfix/smtpd[3320018]: disconnect from mx01.arz.at[193.110.182.61] ehlo=1 starttls=0/1 commands=1/2
  127. postfix/smtpd[3320018]: connect from mx01.arz.at[193.110.182.61]
  128. postfix/smtpd[3320018]: disconnect from mx01.arz.at[193.110.182.61] ehlo=1 quit=1 commands=2
  129. </pre>
  130. <p>Ok, so this <em>TLS cipher list &#8220;aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH&#8221;</em> looked like the <em>tls_medium_cipherlist</em> setting in postfix, but which ciphers <em>might</em> we expect? Let&#8217;s see what their SMTP server would speak to us:</p>
  131. <pre>
  132. % testssl --cipher-per-proto -t=smtp mx01.arz.at:25
  133. [...]
  134. Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
  135. -----------------------------------------------------------------------------------------------------------------------------
  136. SSLv2
  137. SSLv3
  138. TLS 1
  139. TLS 1.1
  140. TLS 1.2
  141. xc030   ECDHE-RSA-AES256-GCM-SHA384       ECDH 256   AESGCM      256      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  142. xc028   ECDHE-RSA-AES256-SHA384           ECDH 256   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  143. xc014   ECDHE-RSA-AES256-SHA              ECDH 256   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  144. x9d     AES256-GCM-SHA384                 RSA        AESGCM      256      TLS_RSA_WITH_AES_256_GCM_SHA384
  145. x3d     AES256-SHA256                     RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA256
  146. x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
  147. xc02f   ECDHE-RSA-AES128-GCM-SHA256       ECDH 256   AESGCM      128      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  148. xc027   ECDHE-RSA-AES128-SHA256           ECDH 256   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  149. xc013   ECDHE-RSA-AES128-SHA              ECDH 256   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  150. x9c     AES128-GCM-SHA256                 RSA        AESGCM      128      TLS_RSA_WITH_AES_128_GCM_SHA256
  151. x3c     AES128-SHA256                     RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA256
  152. x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
  153. TLS 1.3
  154. </pre>
  155. <p>Looks like a very small subset of ciphers, and they don&#8217;t seem to be talking TLS v1.3 at all? Not great. :(</p>
  156. <p>A nice web service to verify the situation from another point of view is <a href="https://www.checktls.com/TestReceiver">checktls</a>, which also confirmed this:</p>
  157. <pre>
  158. [000.705] &lt;-- 220 2.0.0 Ready to start TLS
  159. [000.705] STARTTLS command works on this server
  160. [001.260] Connection converted to SSL
  161. SSLVersion in use: TLSv1_2
  162. Cipher in use: ECDHE-RSA-AES256-GCM-SHA384
  163. Perfect Forward Secrecy: yes
  164. Session Algorithm in use: Curve P-256 DHE(256 bits)
  165. Certificate #1 of 3 (sent by MX):
  166. Cert VALIDATED: ok
  167. Cert Hostname VERIFIED (mx01.arz.at = *.arz.at | DNS:*.arz.at | DNS:arz.at)
  168. [...]
  169. [001.517] TLS successfully started on this server
  170. </pre>
  171. <p>I got distracted by some other work, and when coming back to this problem, the one-time password procedure no longer worked, as the password reset URL was no longer valid. :( I managed to find the underlying URL, and with some web developer tools tinkering I could still use the website to let me trigger sending further one-time password mails, phew.</p>
  172. <p>Let&#8217;s continue, so <em>my</em> mail server was running Debian/bullseye with postfix v3.5.18-0+deb11u1 and openssl v1.1.1n-0+deb11u5, let&#8217;s see what it offers:</p>
  173. <pre>
  174. % testssl --cipher-per-proto -t=smtp mail.example.com:25
  175. [...]
  176. Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
  177. -----------------------------------------------------------------------------------------------------------------------------
  178. SSLv2
  179. SSLv3
  180. TLS 1
  181. xc00a   ECDHE-ECDSA-AES256-SHA            ECDH 253   AES         256      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  182. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  183. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  184. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  185. xc009   ECDHE-ECDSA-AES128-SHA            ECDH 253   AES         128      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  186. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  187. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  188. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  189. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  190. TLS 1.1
  191. xc00a   ECDHE-ECDSA-AES256-SHA            ECDH 253   AES         256      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  192. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  193. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  194. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  195. xc009   ECDHE-ECDSA-AES128-SHA            ECDH 253   AES         128      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  196. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  197. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  198. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  199. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  200. TLS 1.2
  201. xc02c   ECDHE-ECDSA-AES256-GCM-SHA384     ECDH 253   AESGCM      256      TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  202. xc024   ECDHE-ECDSA-AES256-SHA384         ECDH 253   AES         256      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  203. xc00a   ECDHE-ECDSA-AES256-SHA            ECDH 253   AES         256      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  204. xcca9   ECDHE-ECDSA-CHACHA20-POLY1305     ECDH 253   ChaCha20    256      TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
  205. xc0af   ECDHE-ECDSA-AES256-CCM8           ECDH 253   AESCCM8     256      TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8
  206. xc0ad   ECDHE-ECDSA-AES256-CCM            ECDH 253   AESCCM      256      TLS_ECDHE_ECDSA_WITH_AES_256_CCM
  207. xc073   ECDHE-ECDSA-CAMELLIA256-SHA384    ECDH 253   Camellia    256      TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
  208. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  209. xa7     ADH-AES256-GCM-SHA384             DH 2048    AESGCM      256      TLS_DH_anon_WITH_AES_256_GCM_SHA384
  210. x6d     ADH-AES256-SHA256                 DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA256
  211. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  212. xc5     ADH-CAMELLIA256-SHA256            DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256
  213. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  214. xc05d   ECDHE-ECDSA-ARIA256-GCM-SHA384    ECDH 253   ARIAGCM     256      TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384
  215. xc02b   ECDHE-ECDSA-AES128-GCM-SHA256     ECDH 253   AESGCM      128      TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  216. xc023   ECDHE-ECDSA-AES128-SHA256         ECDH 253   AES         128      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  217. xc009   ECDHE-ECDSA-AES128-SHA            ECDH 253   AES         128      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  218. xc0ae   ECDHE-ECDSA-AES128-CCM8           ECDH 253   AESCCM8     128      TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
  219. xc0ac   ECDHE-ECDSA-AES128-CCM            ECDH 253   AESCCM      128      TLS_ECDHE_ECDSA_WITH_AES_128_CCM
  220. xc072   ECDHE-ECDSA-CAMELLIA128-SHA256    ECDH 253   Camellia    128      TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
  221. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  222. xa6     ADH-AES128-GCM-SHA256             DH 2048    AESGCM      128      TLS_DH_anon_WITH_AES_128_GCM_SHA256
  223. x6c     ADH-AES128-SHA256                 DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA256
  224. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  225. xbf     ADH-CAMELLIA128-SHA256            DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256
  226. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  227. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  228. xc05c   ECDHE-ECDSA-ARIA128-GCM-SHA256    ECDH 253   ARIAGCM     128      TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256
  229. TLS 1.3
  230. x1302   TLS_AES_256_GCM_SHA384            ECDH 253   AESGCM      256      TLS_AES_256_GCM_SHA384
  231. x1303   TLS_CHACHA20_POLY1305_SHA256      ECDH 253   ChaCha20    256      TLS_CHACHA20_POLY1305_SHA256
  232. x1301   TLS_AES_128_GCM_SHA256            ECDH 253   AESGCM      128      TLS_AES_128_GCM_SHA256
  233. </pre>
  234. <p>Not so bad, but sadly no overlap with any of the ciphers that mx01.arz.at offers.</p>
  235. <p>What about disabling STARTTLS for the mx01.arz.at (+ mx02.arz.at being another one used by the relevant domain) mail servers when talking to mine? Let&#8217;s try that:</p>
  236. <pre>
  237. % sudo postconf -nf smtpd_discard_ehlo_keyword_address_maps
  238. smtpd_discard_ehlo_keyword_address_maps =
  239.    hash:/etc/postfix/smtpd_discard_ehlo_keywords
  240.  
  241. % cat /etc/postfix/smtpd_discard_ehlo_keywords
  242. # *disable* starttls for mx01.arz.at / mx02.arz.at:
  243. 193.110.182.61 starttls
  244. 193.110.182.62 starttls
  245. </pre>
  246. <p>But the remote mail server doesn&#8217;t seem to send mails without TLS:</p>
  247. <pre>
  248. postfix/smtpd[4151799]: connect from mx01.arz.at[193.110.182.61]
  249. postfix/smtpd[4151799]: discarding EHLO keywords: STARTTLS
  250. postfix/smtpd[4151799]: disconnect from mx01.arz.at[193.110.182.61] ehlo=1 quit=1 commands=2
  251. </pre>
  252. <p>Let&#8217;s verify this further, but without fiddling with the main mail server too much. We can add a dedicated service to postfix (see <a href="https://serverfault.com/questions/1045230/disable-postfix-server-tls-for-specific-clients">serverfault</a>), and run it in verbose mode, to get more detailled logging:</p>
  253. <pre>
  254. % sudo postconf -Mf
  255. [...]
  256. 10025      inet  n       -       -       -       -       smtpd
  257.    -o syslog_name=postfix/smtpd/badstarttls
  258.    -o smtpd_tls_security_level=none
  259.    -o smtpd_helo_required=yes
  260.    -o smtpd_helo_restrictions=pcre:/etc/postfix/helo_badstarttls_allow,reject
  261.    -v
  262.  
  263. [...]
  264.  
  265. % cat /etc/postfix/helo_badstarttls_allow
  266. /mx01.arz.at/ OK
  267. /mx02.arz.at/ OK
  268. /193.110.182.61/ OK
  269. /193.110.182.62/ OK
  270. </pre>
  271. <p>We redirect the traffic from mx01.arz.at + mx02.arz.at towards our new postfix service, listening on port 10025:</p>
  272. <pre>
  273. % sudo iptables -t nat -A PREROUTING -p tcp -s 193.110.182.61 --dport 25 -j REDIRECT --to-port 10025
  274. % sudo iptables -t nat -A PREROUTING -p tcp -s 193.110.182.62 --dport 25 -j REDIRECT --to-port 10025
  275. </pre>
  276. <p>With this setup we get very detailed logging, and it seems to confirm our suspicion that the mail server doesn&#8217;t want to talk unencrypted with us:</p>
  277. <pre>
  278. [...]
  279. postfix/smtpd/badstarttls/smtpd[3491900]: connect from mx01.arz.at[193.110.182.61]
  280. [...]
  281. postfix/smtpd/badstarttls/smtpd[3491901]: disconnect from mx01.arz.at[193.110.182.61] ehlo=1 quit=1 commands=2
  282. postfix/smtpd/badstarttls/smtpd[3491901]: master_notify: status 1
  283. postfix/smtpd/badstarttls/smtpd[3491901]: connection closed
  284. [...]
  285. </pre>
  286. <p>Let&#8217;s step back and revert those changes, back to our original postfix setup. Might the problem be related to our Let&#8217;s Encrypt certificate? Let&#8217;s see what we have:</p>
  287. <pre>
  288. % echo QUIT | openssl s_client -connect mail.example.com:25 -starttls
  289. [...]
  290. issuer=C = US, O = Let's Encrypt, CN = R3
  291.  
  292. ---
  293. No client certificate CA names sent
  294. Peer signing digest: SHA384
  295. Peer signature type: ECDSA
  296. Server Temp Key: X25519, 253 bits
  297. ---
  298. SSL handshake has read 4455 bytes and written 427 bytes
  299. Verification: OK
  300. ---
  301. New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
  302. Server public key is 384 bit
  303. [...]
  304. </pre>
  305. <p>We have an ECDSA based certificate, what about switching to RSA instead? Thanks to the wonderful <a href="https://github.com/dehydrated-io/dehydrated/">dehydrated</a>, this is as easy as:</p>
  306. <pre>
  307. % echo KEY_ALGO=rsa &gt; certs/mail.example.com/config
  308. % ./dehydrated -c --domain mail.example.com --force
  309. % sudo systemctl reload postfix
  310. </pre>
  311. <p>With switching to RSA type key we get:</p>
  312. <pre>
  313. % echo QUIT | openssl s_client -connect mail.example.com:25 -starttls smtp
  314. CONNECTED(00000003)
  315. [...]
  316. issuer=C = US, O = Let's Encrypt, CN = R3
  317.  
  318. ---
  319. No client certificate CA names sent
  320. Peer signing digest: SHA256
  321. Peer signature type: RSA-PSS
  322. Server Temp Key: X25519, 253 bits
  323. ---
  324. SSL handshake has read 5295 bytes and written 427 bytes
  325. Verification: OK
  326. ---
  327. New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
  328. Server public key is 4096 bit
  329. </pre>
  330. <p>Which ciphers do we offer now? Let&#8217;s check:</p>
  331. <pre>
  332. % testssl --cipher-per-proto -t=smtp mail.example.com:25
  333. [...]
  334. Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
  335. -----------------------------------------------------------------------------------------------------------------------------
  336. SSLv2
  337. SSLv3
  338. TLS 1
  339. xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  340. x39     DHE-RSA-AES256-SHA                DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA
  341. x88     DHE-RSA-CAMELLIA256-SHA           DH 2048    Camellia    256      TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
  342. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  343. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  344. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  345. x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
  346. x84     CAMELLIA256-SHA                   RSA        Camellia    256      TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
  347. xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  348. x33     DHE-RSA-AES128-SHA                DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  349. x9a     DHE-RSA-SEED-SHA                  DH 2048    SEED        128      TLS_DHE_RSA_WITH_SEED_CBC_SHA
  350. x45     DHE-RSA-CAMELLIA128-SHA           DH 2048    Camellia    128      TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
  351. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  352. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  353. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  354. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  355. x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
  356. x96     SEED-SHA                          RSA        SEED        128      TLS_RSA_WITH_SEED_CBC_SHA
  357. x41     CAMELLIA128-SHA                   RSA        Camellia    128      TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
  358. TLS 1.1
  359. xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  360. x39     DHE-RSA-AES256-SHA                DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA
  361. x88     DHE-RSA-CAMELLIA256-SHA           DH 2048    Camellia    256      TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
  362. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  363. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  364. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  365. x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
  366. x84     CAMELLIA256-SHA                   RSA        Camellia    256      TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
  367. xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  368. x33     DHE-RSA-AES128-SHA                DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  369. x9a     DHE-RSA-SEED-SHA                  DH 2048    SEED        128      TLS_DHE_RSA_WITH_SEED_CBC_SHA
  370. x45     DHE-RSA-CAMELLIA128-SHA           DH 2048    Camellia    128      TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
  371. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  372. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  373. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  374. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  375. x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
  376. x96     SEED-SHA                          RSA        SEED        128      TLS_RSA_WITH_SEED_CBC_SHA
  377. x41     CAMELLIA128-SHA                   RSA        Camellia    128      TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
  378. TLS 1.2
  379. xc030   ECDHE-RSA-AES256-GCM-SHA384       ECDH 253   AESGCM      256      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  380. xc028   ECDHE-RSA-AES256-SHA384           ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  381. xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  382. x9f     DHE-RSA-AES256-GCM-SHA384         DH 2048    AESGCM      256      TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
  383. xcca8   ECDHE-RSA-CHACHA20-POLY1305       ECDH 253   ChaCha20    256      TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  384. xccaa   DHE-RSA-CHACHA20-POLY1305         DH 2048    ChaCha20    256      TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  385. xc0a3   DHE-RSA-AES256-CCM8               DH 2048    AESCCM8     256      TLS_DHE_RSA_WITH_AES_256_CCM_8
  386. xc09f   DHE-RSA-AES256-CCM                DH 2048    AESCCM      256      TLS_DHE_RSA_WITH_AES_256_CCM
  387. x6b     DHE-RSA-AES256-SHA256             DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
  388. x39     DHE-RSA-AES256-SHA                DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA
  389. xc077   ECDHE-RSA-CAMELLIA256-SHA384      ECDH 253   Camellia    256      TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384
  390. xc4     DHE-RSA-CAMELLIA256-SHA256        DH 2048    Camellia    256      TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
  391. x88     DHE-RSA-CAMELLIA256-SHA           DH 2048    Camellia    256      TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
  392. xc019   AECDH-AES256-SHA                  ECDH 253   AES         256      TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  393. xa7     ADH-AES256-GCM-SHA384             DH 2048    AESGCM      256      TLS_DH_anon_WITH_AES_256_GCM_SHA384
  394. x6d     ADH-AES256-SHA256                 DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA256
  395. x3a     ADH-AES256-SHA                    DH 2048    AES         256      TLS_DH_anon_WITH_AES_256_CBC_SHA
  396. xc5     ADH-CAMELLIA256-SHA256            DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256
  397. x89     ADH-CAMELLIA256-SHA               DH 2048    Camellia    256      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  398. x9d     AES256-GCM-SHA384                 RSA        AESGCM      256      TLS_RSA_WITH_AES_256_GCM_SHA384
  399. xc0a1   AES256-CCM8                       RSA        AESCCM8     256      TLS_RSA_WITH_AES_256_CCM_8
  400. xc09d   AES256-CCM                        RSA        AESCCM      256      TLS_RSA_WITH_AES_256_CCM
  401. x3d     AES256-SHA256                     RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA256
  402. x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
  403. xc0     CAMELLIA256-SHA256                RSA        Camellia    256      TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
  404. x84     CAMELLIA256-SHA                   RSA        Camellia    256      TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
  405. xc051   ARIA256-GCM-SHA384                RSA        ARIAGCM     256      TLS_RSA_WITH_ARIA_256_GCM_SHA384
  406. xc053   DHE-RSA-ARIA256-GCM-SHA384        DH 2048    ARIAGCM     256      TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384
  407. xc061   ECDHE-ARIA256-GCM-SHA384          ECDH 253   ARIAGCM     256      TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384
  408. xc02f   ECDHE-RSA-AES128-GCM-SHA256       ECDH 253   AESGCM      128      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  409. xc027   ECDHE-RSA-AES128-SHA256           ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  410. xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  411. x9e     DHE-RSA-AES128-GCM-SHA256         DH 2048    AESGCM      128      TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
  412. xc0a2   DHE-RSA-AES128-CCM8               DH 2048    AESCCM8     128      TLS_DHE_RSA_WITH_AES_128_CCM_8
  413. xc09e   DHE-RSA-AES128-CCM                DH 2048    AESCCM      128      TLS_DHE_RSA_WITH_AES_128_CCM
  414. xc0a0   AES128-CCM8                       RSA        AESCCM8     128      TLS_RSA_WITH_AES_128_CCM_8
  415. xc09c   AES128-CCM                        RSA        AESCCM      128      TLS_RSA_WITH_AES_128_CCM
  416. x67     DHE-RSA-AES128-SHA256             DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
  417. x33     DHE-RSA-AES128-SHA                DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  418. xc076   ECDHE-RSA-CAMELLIA128-SHA256      ECDH 253   Camellia    128      TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
  419. xbe     DHE-RSA-CAMELLIA128-SHA256        DH 2048    Camellia    128      TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
  420. x9a     DHE-RSA-SEED-SHA                  DH 2048    SEED        128      TLS_DHE_RSA_WITH_SEED_CBC_SHA
  421. x45     DHE-RSA-CAMELLIA128-SHA           DH 2048    Camellia    128      TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
  422. xc018   AECDH-AES128-SHA                  ECDH 253   AES         128      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  423. xa6     ADH-AES128-GCM-SHA256             DH 2048    AESGCM      128      TLS_DH_anon_WITH_AES_128_GCM_SHA256
  424. x6c     ADH-AES128-SHA256                 DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA256
  425. x34     ADH-AES128-SHA                    DH 2048    AES         128      TLS_DH_anon_WITH_AES_128_CBC_SHA
  426. xbf     ADH-CAMELLIA128-SHA256            DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256
  427. x9b     ADH-SEED-SHA                      DH 2048    SEED        128      TLS_DH_anon_WITH_SEED_CBC_SHA
  428. x46     ADH-CAMELLIA128-SHA               DH 2048    Camellia    128      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  429. x9c     AES128-GCM-SHA256                 RSA        AESGCM      128      TLS_RSA_WITH_AES_128_GCM_SHA256
  430. x3c     AES128-SHA256                     RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA256
  431. x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
  432. xba     CAMELLIA128-SHA256                RSA        Camellia    128      TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
  433. x96     SEED-SHA                          RSA        SEED        128      TLS_RSA_WITH_SEED_CBC_SHA
  434. x41     CAMELLIA128-SHA                   RSA        Camellia    128      TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
  435. xc050   ARIA128-GCM-SHA256                RSA        ARIAGCM     128      TLS_RSA_WITH_ARIA_128_GCM_SHA256
  436. xc052   DHE-RSA-ARIA128-GCM-SHA256        DH 2048    ARIAGCM     128      TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256
  437. xc060   ECDHE-ARIA128-GCM-SHA256          ECDH 253   ARIAGCM     128      TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
  438. TLS 1.3
  439. x1302   TLS_AES_256_GCM_SHA384            ECDH 253   AESGCM      256      TLS_AES_256_GCM_SHA384
  440. x1303   TLS_CHACHA20_POLY1305_SHA256      ECDH 253   ChaCha20    256      TLS_CHACHA20_POLY1305_SHA256
  441. x1301   TLS_AES_128_GCM_SHA256            ECDH 253   AESGCM      128      TLS_AES_128_GCM_SHA256
  442. </pre>
  443. <p>With switching our SSL certificate to RSA, we gained around 51 new cipher options, amongst them being ones that also mx01.arz.at claimed to support.</p>
  444. <p>FTR, the result from above is what you get with the default settings for postfix v3.5.18, being:</p>
  445. <pre>
  446. smtpd_tls_ciphers = medium
  447. smtpd_tls_mandatory_ciphers = medium
  448. smtpd_tls_mandatory_exclude_ciphers =
  449. smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
  450. </pre>
  451. <p>But the delay between triggering the password reset mail and getting a mail server connect was getting bigger and bigger. Therefore while waiting for the next mail to arrive, I decided to capture the network traffic, to be able to look further into this if it should continue to be failing:</p>
  452. <pre>
  453. % sudo tshark -n -i eth0 -s 65535 -w arz.pcap -f "host 193.110.182.61 or host 193.110.182.62"
  454. </pre>
  455. <p>A few hours later the mail server connected again, and the mail went through!</p>
  456. <pre>
  457. postfix/smtpd[4162835]: connect from mx01.arz.at[193.110.182.61]
  458. postfix/smtpd[4162835]: Anonymous TLS connection established from mx01.arz.at[193.110.182.61]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
  459. postfix/smtpd[4162835]: E50D6401E6: client=mx01.arz.at[193.110.182.61]
  460. postfix/smtpd[4162835]: disconnect from mx01.arz.at[193.110.182.61] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
  461. </pre>
  462. <p>Now also having the captured network traffic, we can check the details there:</p>
  463. <pre>
  464. [...]
  465. % tshark -o smtp.decryption:true -r arz.pcap
  466.    1 0.000000000 193.110.182.61 &#8594; 203.0.113.42 TCP 74 24699 &#8594; 25 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=2261106119 TSecr=0 WS=128
  467.    2 0.000042827 203.0.113.42 &#8594; 193.110.182.61 TCP 74 25 &#8594; 24699 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM=1 TSval=3233422181 TSecr=2261106119 WS=128
  468.    3 0.020719269 193.110.182.61 &#8594; 203.0.113.42 TCP 66 24699 &#8594; 25 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=2261106139 TSecr=3233422181
  469.    4 0.022883259 203.0.113.42 &#8594; 193.110.182.61 SMTP 96 S: 220 mail.example.com ESMTP
  470.    5 0.043682626 193.110.182.61 &#8594; 203.0.113.42 TCP 66 24699 &#8594; 25 [ACK] Seq=1 Ack=31 Win=29312 Len=0 TSval=2261106162 TSecr=3233422203
  471.    6 0.043799047 193.110.182.61 &#8594; 203.0.113.42 SMTP 84 C: EHLO mx01.arz.at
  472.    7 0.043811363 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 24699 [ACK] Seq=31 Ack=19 Win=65280 Len=0 TSval=3233422224 TSecr=2261106162
  473.    8 0.043898412 203.0.113.42 &#8594; 193.110.182.61 SMTP 253 S: 250-mail.example.com | PIPELINING | SIZE 20240000 | VRFY | ETRN | AUTH PLAIN | AUTH=PLAIN | ENHANCEDSTATUSCODES | 8BITMIME | DSN | SMTPUTF8 | CHUNKING
  474.    9 0.064625499 193.110.182.61 &#8594; 203.0.113.42 SMTP 72 C: QUIT
  475.   10 0.064750257 203.0.113.42 &#8594; 193.110.182.61 SMTP 81 S: 221 2.0.0 Bye
  476.   11 0.064760200 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 24699 [FIN, ACK] Seq=233 Ack=25 Win=65280 Len=0 TSval=3233422245 TSecr=2261106183
  477.   12 0.085573715 193.110.182.61 &#8594; 203.0.113.42 TCP 66 24699 &#8594; 25 [FIN, ACK] Seq=25 Ack=234 Win=30336 Len=0 TSval=2261106204 TSecr=3233422245
  478.   13 0.085610229 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 24699 [ACK] Seq=234 Ack=26 Win=65280 Len=0 TSval=3233422266 TSecr=2261106204
  479.   14 1799.888108373 193.110.182.61 &#8594; 203.0.113.42 TCP 74 10330 &#8594; 25 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=2262906007 TSecr=0 WS=128
  480.   15 1799.888161311 203.0.113.42 &#8594; 193.110.182.61 TCP 74 25 &#8594; 10330 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM=1 TSval=3235222069 TSecr=2262906007 WS=128
  481.   16 1799.909030335 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=2262906028 TSecr=3235222069
  482.   17 1799.956621011 203.0.113.42 &#8594; 193.110.182.61 SMTP 96 S: 220 mail.example.com ESMTP
  483.   18 1799.977229656 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=1 Ack=31 Win=29312 Len=0 TSval=2262906096 TSecr=3235222137
  484.   19 1799.977229698 193.110.182.61 &#8594; 203.0.113.42 SMTP 84 C: EHLO mx01.arz.at
  485.   20 1799.977266759 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=31 Ack=19 Win=65280 Len=0 TSval=3235222158 TSecr=2262906096
  486.   21 1799.977351663 203.0.113.42 &#8594; 193.110.182.61 SMTP 267 S: 250-mail.example.com | PIPELINING | SIZE 20240000 | VRFY | ETRN | STARTTLS | AUTH PLAIN | AUTH=PLAIN | ENHANCEDSTATUSCODES | 8BITMIME | DSN | SMTPUTF8 | CHUNKING
  487.   22 1800.011494861 193.110.182.61 &#8594; 203.0.113.42 SMTP 76 C: STARTTLS
  488.   23 1800.011589267 203.0.113.42 &#8594; 193.110.182.61 SMTP 96 S: 220 2.0.0 Ready to start TLS
  489.   24 1800.032812294 193.110.182.61 &#8594; 203.0.113.42 TLSv1 223 Client Hello
  490.   25 1800.032987264 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 2962 Server Hello
  491.   26 1800.032995513 203.0.113.42 &#8594; 193.110.182.61 TCP 1266 25 &#8594; 10330 [PSH, ACK] Seq=3158 Ack=186 Win=65152 Len=1200 TSval=3235222214 TSecr=2262906151 [TCP segment of a reassembled PDU]
  492.   27 1800.053546755 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=186 Ack=3158 Win=36096 Len=0 TSval=2262906172 TSecr=3235222214
  493.   28 1800.092852469 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=186 Ack=4358 Win=39040 Len=0 TSval=2262906212 TSecr=3235222214
  494.   29 1800.092892905 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 900 Certificate, Server Key Exchange, Server Hello Done
  495.   30 1800.113546769 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=186 Ack=5192 Win=41856 Len=0 TSval=2262906232 TSecr=3235222273
  496.   31 1800.114763363 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 192 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  497.   32 1800.115000416 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 117 Change Cipher Spec, Encrypted Handshake Message
  498.   33 1800.136070200 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 113 Application Data
  499.   34 1800.136155526 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 282 Application Data
  500.   35 1800.158854473 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 162 Application Data
  501.   36 1800.159254794 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 109 Application Data
  502.   37 1800.180286407 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 144 Application Data
  503.   38 1800.223005960 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=5502 Ack=533 Win=65152 Len=0 TSval=3235222404 TSecr=2262906299
  504.   39 1802.230300244 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 146 Application Data
  505.   40 1802.251994333 193.110.182.61 &#8594; 203.0.113.42 TCP 2962 [TCP segment of a reassembled PDU]
  506.   41 1802.252034015 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=5582 Ack=3429 Win=63616 Len=0 TSval=3235224433 TSecr=2262908371
  507.   42 1802.252279083 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 1295 Application Data
  508.   43 1802.252288316 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=5582 Ack=4658 Win=64128 Len=0 TSval=3235224433 TSecr=2262908371
  509.   44 1802.272816060 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 833 Application Data, Application Data
  510.   45 1802.272827542 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=5582 Ack=5425 Win=64128 Len=0 TSval=3235224453 TSecr=2262908392
  511.   46 1802.338807683 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 131 Application Data
  512.   47 1802.398968611 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=5425 Ack=5647 Win=44800 Len=0 TSval=2262908518 TSecr=3235224519
  513.   48 1863.257457500 193.110.182.61 &#8594; 203.0.113.42 TLSv1.2 101 Application Data
  514.   49 1863.257495688 203.0.113.42 &#8594; 193.110.182.61 TCP 66 25 &#8594; 10330 [ACK] Seq=5647 Ack=5460 Win=64128 Len=0 TSval=3235285438 TSecr=2262969376
  515.   50 1863.257654942 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 110 Application Data
  516.   51 1863.257721010 203.0.113.42 &#8594; 193.110.182.61 TLSv1.2 97 Encrypted Alert
  517.   52 1863.278242216 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [ACK] Seq=5460 Ack=5691 Win=44800 Len=0 TSval=2262969397 TSecr=3235285438
  518.   53 1863.278464176 193.110.182.61 &#8594; 203.0.113.42 TCP 66 10330 &#8594; 25 [RST, ACK] Seq=5460 Ack=5723 Win=44800 Len=0 TSval=2262969397 TSecr=3235285438
  519. </pre>
  520. <pre>
  521. % tshark -O tls -r arz.pcap
  522. [...]
  523. Transport Layer Security
  524.    TLSv1 Record Layer: Handshake Protocol: Client Hello
  525.        Content Type: Handshake (22)
  526.        Version: TLS 1.0 (0x0301)
  527.        Length: 152
  528.        Handshake Protocol: Client Hello
  529.            Handshake Type: Client Hello (1)
  530.            Length: 148
  531.            Version: TLS 1.2 (0x0303)
  532.            Random: 4575d1e7c93c09a564edc00b8b56ea6f5d826f8cfe78eb980c451a70a9c5123f
  533.                GMT Unix Time: Dec  5, 2006 21:09:11.000000000 CET
  534.                Random Bytes: c93c09a564edc00b8b56ea6f5d826f8cfe78eb980c451a70a9c5123f
  535.            Session ID Length: 0
  536.            Cipher Suites Length: 26
  537.            Cipher Suites (13 suites)
  538.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
  539.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
  540.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
  541.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
  542.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
  543.                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
  544.                Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
  545.                Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
  546.                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d)
  547.                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
  548.                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
  549.                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
  550.                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
  551. [...]
  552. Transport Layer Security
  553.    TLSv1.2 Record Layer: Handshake Protocol: Server Hello
  554.        Content Type: Handshake (22)
  555.        Version: TLS 1.2 (0x0303)
  556.        Length: 89
  557.        Handshake Protocol: Server Hello
  558.            Handshake Type: Server Hello (2)
  559.            Length: 85
  560.            Version: TLS 1.2 (0x0303)
  561.            Random: cf2ed24e3300e95e5f56023bf8b4e5904b862bb2ed8a5796444f574e47524401
  562.                GMT Unix Time: Feb 23, 2080 23:16:46.000000000 CET
  563.                Random Bytes: 3300e95e5f56023bf8b4e5904b862bb2ed8a5796444f574e47524401
  564.            Session ID Length: 32
  565.            Session ID: 63d041b126ecebf857d685abd9d4593c46a3672e1ad76228f3eacf2164f86fb9
  566.            Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
  567. [...]
  568. </pre>
  569. <p>In this network dump we see what cipher suites are offered, and the <em>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</em> here is the Cipher Suite Name in IANA/RFC speak. Whis corresponds to the <em>ECDHE-RSA-AES256-GCM-SHA384</em> in openssl speak (see Mozilla&#8217;s <a href="https://wiki.mozilla.org/Security/Cipher_Suites">Mozilla&#8217;s cipher suite correspondence table</a>), which we also saw in the postfix log.</p>
  570. <p>Mission accomplished! :)</p>
  571. <p>Now, if we&#8217;re interested in avoiding certain ciphers and increase security level, we can e.g. get rid of the SEED, CAMELLIA and all anonymous ciphers, and could accept only TLS v1.2 + v1.3, by further adjusting postfix&#8217;s main.cf:</p>
  572. <pre>
  573. smtpd_tls_ciphers = high
  574. smtpd_tls_exclude_ciphers = aNULL CAMELLIA
  575. smtpd_tls_mandatory_ciphers = high
  576. smtpd_tls_mandatory_protocols = TLSv1.2 TLSv1.3
  577. smtpd_tls_protocols = TLSv1.2 TLSv1.3
  578. </pre>
  579. <p>Which would then gives us:</p>
  580. <pre>
  581. % testssl --cipher-per-proto -t=smtp mail.example.com:25
  582. [...]
  583.  
  584. Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
  585. -----------------------------------------------------------------------------------------------------------------------------
  586. SSLv2
  587. SSLv3
  588. TLS 1
  589. TLS 1.1
  590. TLS 1.2
  591. xc030   ECDHE-RSA-AES256-GCM-SHA384       ECDH 253   AESGCM      256      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  592. xc028   ECDHE-RSA-AES256-SHA384           ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  593. xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  594. x9f     DHE-RSA-AES256-GCM-SHA384         DH 2048    AESGCM      256      TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
  595. xcca8   ECDHE-RSA-CHACHA20-POLY1305       ECDH 253   ChaCha20    256      TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  596. xccaa   DHE-RSA-CHACHA20-POLY1305         DH 2048    ChaCha20    256      TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  597. xc0a3   DHE-RSA-AES256-CCM8               DH 2048    AESCCM8     256      TLS_DHE_RSA_WITH_AES_256_CCM_8
  598. xc09f   DHE-RSA-AES256-CCM                DH 2048    AESCCM      256      TLS_DHE_RSA_WITH_AES_256_CCM
  599. x6b     DHE-RSA-AES256-SHA256             DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
  600. x39     DHE-RSA-AES256-SHA                DH 2048    AES         256      TLS_DHE_RSA_WITH_AES_256_CBC_SHA
  601. x9d     AES256-GCM-SHA384                 RSA        AESGCM      256      TLS_RSA_WITH_AES_256_GCM_SHA384
  602. xc0a1   AES256-CCM8                       RSA        AESCCM8     256      TLS_RSA_WITH_AES_256_CCM_8
  603. xc09d   AES256-CCM                        RSA        AESCCM      256      TLS_RSA_WITH_AES_256_CCM
  604. x3d     AES256-SHA256                     RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA256
  605. x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
  606. xc051   ARIA256-GCM-SHA384                RSA        ARIAGCM     256      TLS_RSA_WITH_ARIA_256_GCM_SHA384
  607. xc053   DHE-RSA-ARIA256-GCM-SHA384        DH 2048    ARIAGCM     256      TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384
  608. xc061   ECDHE-ARIA256-GCM-SHA384          ECDH 253   ARIAGCM     256      TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384
  609. xc02f   ECDHE-RSA-AES128-GCM-SHA256       ECDH 253   AESGCM      128      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  610. xc027   ECDHE-RSA-AES128-SHA256           ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  611. xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  612. x9e     DHE-RSA-AES128-GCM-SHA256         DH 2048    AESGCM      128      TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
  613. xc0a2   DHE-RSA-AES128-CCM8               DH 2048    AESCCM8     128      TLS_DHE_RSA_WITH_AES_128_CCM_8
  614. xc09e   DHE-RSA-AES128-CCM                DH 2048    AESCCM      128      TLS_DHE_RSA_WITH_AES_128_CCM
  615. xc0a0   AES128-CCM8                       RSA        AESCCM8     128      TLS_RSA_WITH_AES_128_CCM_8
  616. xc09c   AES128-CCM                        RSA        AESCCM      128      TLS_RSA_WITH_AES_128_CCM
  617. x67     DHE-RSA-AES128-SHA256             DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
  618. x33     DHE-RSA-AES128-SHA                DH 2048    AES         128      TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  619. x9c     AES128-GCM-SHA256                 RSA        AESGCM      128      TLS_RSA_WITH_AES_128_GCM_SHA256
  620. x3c     AES128-SHA256                     RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA256
  621. x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
  622. xc050   ARIA128-GCM-SHA256                RSA        ARIAGCM     128      TLS_RSA_WITH_ARIA_128_GCM_SHA256
  623. xc052   DHE-RSA-ARIA128-GCM-SHA256        DH 2048    ARIAGCM     128      TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256
  624. xc060   ECDHE-ARIA128-GCM-SHA256          ECDH 253   ARIAGCM     128      TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
  625. TLS 1.3
  626. x1302   TLS_AES_256_GCM_SHA384            ECDH 253   AESGCM      256      TLS_AES_256_GCM_SHA384
  627. x1303   TLS_CHACHA20_POLY1305_SHA256      ECDH 253   ChaCha20    256      TLS_CHACHA20_POLY1305_SHA256
  628. x1301   TLS_AES_128_GCM_SHA256            ECDH 253   AESGCM      128      TLS_AES_128_GCM_SHA256
  629. </pre>
  630. <p>Don&#8217;t forget to also adjust the <em>smpt_tls_*</em> accordingly (for your sending side). For further information see <a href="https://www.postfix.org/TLS_README.html">the Postfix TLS Support documentation</a>. Also check out options like <a href="https://www.postfix.org/postconf.5.html#tls_ssl_options"><em>tls_ssl_options</em></a> (setting it to e.g. <em>NO_COMPRESSION</em>) and <a href="https://www.postfix.org/postconf.5.html#tls_preempt_cipherlist"><em>tls_preempt_cipherlist</em></a> (setting it to <em>yes</em> would prefer the servers&#8217; order of ciphers over clients).</p>
  631. <p><strong>Conclusions:</strong></p>
  632. <ul>
  633. <li>no matter what you change in your mail server settings, be aware that the type of your SSL certificate also matters for what ciphers are offered and used</li>
  634. <li>there are mail servers out there that don&#8217;t support SSL certificates with ECDSA, using RSA for those ensure better compatibility (nowadays postfix supports parallel usage of ECDSA <em>and</em> RSA keys BTW, check out the <a href="https://www.postfix.org/postconf.5.html#smtpd_tls_eccert_file"><em>smtpd_tls_eccert_file</em></a> + <a href="https://www.postfix.org/postconf.5.html#smtpd_tls_eckey_file"><em>smtpd_tls_eckey_file</em></a> options)</li>
  635. <li><a href="https://packages.debian.org/search?keywords=testssl.sh"><em>testssl</em></a> is a very useful tool, especially with its <em>&#8211;cipher-per-proto -t=smtp</em> option to check SMTP servers</li>
  636. <li>if you&#8217;re uncertain what&#8217;s going on, consider capturing network data (tshark/tcpdump/&#8230; are your friends)</li>
  637. <li>review your postfix configuration and logs every now and then :)</li>
  638. </ul>
  639. ]]></content:encoded>
  640. <wfw:commentRss>https://michael-prokop.at/blog/2023/09/25/postfix-failing-with-no-shared-cipher/feed/</wfw:commentRss>
  641. <slash:comments>1</slash:comments>
  642. </item>
  643. <item>
  644. <title>What to expect from Debian/bookworm #newinbookworm</title>
  645. <link>https://michael-prokop.at/blog/2023/06/11/what-to-expect-from-debian-bookworm-newinbookworm/</link>
  646. <pubDate>Sun, 11 Jun 2023 09:50:05 +0000</pubDate>
  647. <dc:creator><![CDATA[mika]]></dc:creator>
  648. <category><![CDATA[Computer]]></category>
  649. <category><![CDATA[Debian]]></category>
  650. <category><![CDATA[English]]></category>
  651. <category><![CDATA[Open Source]]></category>
  652.  
  653. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6707</guid>
  654. <description><![CDATA[Debian v12 with codename bookworm was released as new stable release on 10th of June 2023. Similar to what we had with #newinbullseye and previous releases, now it&#8217;s time for #newinbookworm! I was the driving force at several of my customers to be well prepared for bookworm. As usual with major upgrades, there are some [&#8230;]]]></description>
  655. <content:encoded><![CDATA[<p><a href="https://wiki.debian.org/DebianArt/Themes/Emerald"><img src="/blog/img/debian_bookworm_banner.png" alt="Bookworm Banner, Copyright 2022 Juliette Taka" style="border: 0px; margin-right: 20px" align=left width=200px /></a></p>
  656. <p>Debian v12 with <a href="https://wiki.debian.org/DebianBookworm">codename bookworm</a> was released as new stable release <a href="https://www.debian.org/News/2023/20230610">on 10th of June 2023</a>. Similar to what we had with <a href="/blog/index.php?s=newinbullseye">#newinbullseye</a> and previous releases, now it&#8217;s time for <a href="/blog/index.php?s=newinbookworm">#newinbookworm</a>!</p>
  657. <p>I was the driving force at several of my customers to be well prepared for bookworm. As usual with major upgrades, there are some things to be aware of, and hereby I&#8217;m starting my public notes on bookworm that might be worth also for other folks. My focus is primarily on server systems and looking at things from a sysadmin perspective.</p>
  658. <h3>Further readings</h3>
  659. <p>As usual start at the <a href="https://www.debian.org/releases/bookworm/amd64/release-notes/index.en.html">official Debian release notes</a>, make sure to especially go through <a href="https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html">What&#8217;s new in Debian 12</a> + <a href="https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html">Issues to be aware of for bookworm</a>.</p>
  660. <h3>Package versions</h3>
  661. <p>As a starting point, let&#8217;s look at some selected packages and their versions in bullseye vs. bookworm as of 2023-02-10 (mainly having amd64 in mind):</p>
  662. <style>
  663.     table {
  664.         border: 1px solid;
  665.         border-collapse: collapse;
  666.         border-spacing: 20px;
  667.         empty-cells: show;
  668.         table-layout: fixed;
  669.      }
  670.      thead th {
  671.          position: -webkit-sticky;
  672.          position: sticky;
  673.          top: 0;
  674.      }
  675.      th {
  676.        background-color: #666;
  677.        color: #fff;
  678.      }
  679.      tr {
  680.        background-color: #fffbf0;
  681.        color: #000;
  682.      }
  683.      tr:nth-child(odd) {
  684.        background-color: #e4ebf2;
  685.      }
  686. </style>
  687. <table>
  688. <thead>
  689. <tr style="background-color: lightgrey; font-weight:bold">
  690. <th scope="col">Package</th>
  691. <th scope="col">bullseye/v11</th>
  692. <th scope="col">bookworm/v12</th>
  693. </tr>
  694. </thead>
  695. <tbody style="text-align:center">
  696. <tr>
  697. <td scope="row">ansible</td>
  698. <td>2.10.7</td>
  699. <td>2.14.3</td>
  700. </tr>
  701. <tr>
  702. <td scope="row">apache</td>
  703. <td>2.4.56</td>
  704. <td>2.4.57</td>
  705. </tr>
  706. <tr>
  707. <td scope="row">apt</td>
  708. <td>2.2.4</td>
  709. <td>2.6.1</td>
  710. </tr>
  711. <tr>
  712. <td scope="row">bash</td>
  713. <td>5.1</td>
  714. <td>5.2.15</td>
  715. </tr>
  716. <tr>
  717. <td scope="row">ceph</td>
  718. <td>14.2.21</td>
  719. <td>16.2.11</td>
  720. </tr>
  721. <tr>
  722. <td scope="row">docker</td>
  723. <td>20.10.5</td>
  724. <td>20.10.24</td>
  725. </tr>
  726. <tr>
  727. <td scope="row">dovecot</td>
  728. <td>2.3.13</td>
  729. <td>2.3.19</td>
  730. </tr>
  731. <tr>
  732. <td scope="row">dpkg</td>
  733. <td>1.20.12</td>
  734. <td>1.21.22</td>
  735. </tr>
  736. <tr>
  737. <td scope="row">emacs</td>
  738. <td>27.1</td>
  739. <td>28.2</td>
  740. </tr>
  741. <tr>
  742. <td scope="row">gcc</td>
  743. <td>10.2.1</td>
  744. <td>12.2.0</td>
  745. </tr>
  746. <tr>
  747. <td scope="row">git</td>
  748. <td>2.30.2</td>
  749. <td>2.39.2</td>
  750. </tr>
  751. <tr>
  752. <td scope="row">golang</td>
  753. <td>1.15</td>
  754. <td>1.19</td>
  755. </tr>
  756. <tr>
  757. <td scope="row">libc</td>
  758. <td>2.31</td>
  759. <td>2.36</td>
  760. </tr>
  761. <tr>
  762. <td scope="row">linux kernel</td>
  763. <td>5.10</td>
  764. <td>6.1</td>
  765. </tr>
  766. <tr>
  767. <td scope="row">llvm</td>
  768. <td>11.0</td>
  769. <td>14.0</td>
  770. </tr>
  771. <tr>
  772. <td scope="row">lxc</td>
  773. <td>4.0.6</td>
  774. <td>5.0.2</td>
  775. </tr>
  776. <tr>
  777. <td scope="row">mariadb</td>
  778. <td>10.5</td>
  779. <td>10.11</td>
  780. </tr>
  781. <tr>
  782. <td scope="row">nginx</td>
  783. <td>1.18.0</td>
  784. <td>1.22.1</td>
  785. </tr>
  786. <tr>
  787. <td scope="row">nodejs</td>
  788. <td>12.22</td>
  789. <td>18.13</td>
  790. </tr>
  791. <tr>
  792. <td scope="row">openjdk</td>
  793. <td>11.0.18 <em>+</em> 17.0.6</td>
  794. <td>17.0.6</td>
  795. </tr>
  796. <tr>
  797. <td scope="row">openssh</td>
  798. <td>8.4p1</td>
  799. <td>9.2p1</td>
  800. </tr>
  801. <tr>
  802. <td scope="row">openssl</td>
  803. <td>1.1.1n</td>
  804. <td>3.0.8-1</td>
  805. </tr>
  806. <tr>
  807. <td scope="row">perl</td>
  808. <td>5.32.1</td>
  809. <td>5.36.0</td>
  810. </tr>
  811. <tr>
  812. <td scope="row">php</td>
  813. <td>7.4+76</td>
  814. <td>8.2+93</td>
  815. </tr>
  816. <tr>
  817. <td scope="row">podman</td>
  818. <td>3.0.1</td>
  819. <td>4.3.1</td>
  820. </tr>
  821. <tr>
  822. <td scope="row">postfix</td>
  823. <td>3.5.18</td>
  824. <td>3.7.5</td>
  825. </tr>
  826. <tr>
  827. <td scope="row">postgres</td>
  828. <td>13</td>
  829. <td>15</td>
  830. </tr>
  831. <tr>
  832. <td scope="row">puppet</td>
  833. <td>5.5.22</td>
  834. <td>7.23.0</td>
  835. </tr>
  836. <tr>
  837. <td scope="row">python2</td>
  838. <td>2.7.18</td>
  839. <td>&#8211; (gone!)</td>
  840. </tr>
  841. <tr>
  842. <td scope="row">python3</td>
  843. <td>3.9.2</td>
  844. <td>3.11.2</td>
  845. </tr>
  846. <tr>
  847. <td scope="row">qemu/kvm</td>
  848. <td>5.2</td>
  849. <td>7.2</td>
  850. </tr>
  851. <tr>
  852. <td scope="row">ruby</td>
  853. <td>2.7+2</td>
  854. <td>3.1</td>
  855. </tr>
  856. <tr>
  857. <td scope="row">rust</td>
  858. <td>1.48.0</td>
  859. <td>1.63.0</td>
  860. </tr>
  861. <tr>
  862. <td scope="row">samba</td>
  863. <td>4.13.13</td>
  864. <td>4.17.8</td>
  865. </tr>
  866. <tr>
  867. <td scope="row">systemd</td>
  868. <td>247.3</td>
  869. <td>252.6</td>
  870. </tr>
  871. <tr>
  872. <td scope="row">unattended-upgrades</td>
  873. <td>2.8</td>
  874. <td>2.9.1</td>
  875. </tr>
  876. <tr>
  877. <td scope="row">util-linux</td>
  878. <td>2.36.1</td>
  879. <td>2.38.1</td>
  880. </tr>
  881. <tr>
  882. <td scope="row">vagrant</td>
  883. <td>2.2.14</td>
  884. <td>2.3.4</td>
  885. </tr>
  886. <tr>
  887. <td scope="row">vim</td>
  888. <td>8.2.2434</td>
  889. <td>9.0.1378</td>
  890. </tr>
  891. <tr>
  892. <td scope="row">zsh</td>
  893. <td>5.8</td>
  894. <td>5.9</td>
  895. </tr>
  896. </tbody>
  897. </table>
  898. <h3>Linux Kernel</h3>
  899. <p>The bookworm release ships a Linux kernel based on version <strong>6.1</strong>, whereas bullseye shipped kernel 5.10. As usual there are plenty of changes in the kernel area, including better hardware support, and this might warrant a separate blog entry, but to highlight some changes:</p>
  900. <ul>
  901. <li><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=987f20a9dcce3989e48d87cff3952c095c994445">a.out support is gone</a></li>
  902. <li><a href="https://lwn.net/Articles/908347/">initial support for Rust</a></li>
  903. <li>lots of <a href="https://nick-black.com/dankwiki/index.php/Io_uring">io_uring</a> related improvements</li>
  904. <li>lots of <a href="https://lwn.net/Articles/847951/">BPF</a> improvements</li>
  905. <li>support for <a href="https://docs.kernel.org/6.1/x86/sgx.html">Intel Software Guard eXtensions (SGX)</a></li>
  906. <li><a href="https://lwn.net/Articles/837566/">ID mapping for mounted filesystems</a></li>
  907. <li><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=459c7c565ac36ba09ffbf24231147f408fde4203">unprivileged overlayfs mounts</a> and <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3a761d72fa62eec8913e45d29375344f61706541">ID mapping in overlayfs</a></li>
  908. <li><a href="https://wiki.linux-nfs.org/wiki/index.php/NFS_re-export">NFS re-exporting</a> support</li>
  909. <li><a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed7bcdb374d20fab9e9dc36853a6735c047ad1b1">eager NFS writes</a> with <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a0492339fc70f1f7aa98f0cab55b78b0be124711">new <em>writes=lazy/eager/wait</em> mount options</a></li>
  910. <li><a href="https://lwn.net/Articles/703876/">Landlock security module</a></li>
  911. <li>initial <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2d5ce3fbef324295f7c210f29d724b44b5642cb2">support for Apple M2</a></li>
  912. <li>new <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a72232eabdfcfe365a05a3eb392288b78d25a5ca"><em>misc</em> cgroup</a> and new <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=661ee6280931548f7b3b887ad26a157474ae5ac4">cgroup.kill file</a></li>
  913. <li>new <a href="https://lwn.net/Articles/865256/">memfd_secret(2) system call</a></li>
  914. <li>new <a href="https://docs.kernel.org/filesystems/ntfs3.html">NTFS file system implementation</a></li>
  915. <li><a href="https://www.kernel.org/doc/html/latest/admin-guide/filesystem-monitoring.html">file system monitoring with fanotify</a></li>
  916. <li>lots of improvements around perf, including the new <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d450bc501fbdceb9d71663ba8192b72f01001bf1">daemon</a>, <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0f70d8e9db4f250f694a3befe88501027b1dc88e">kwork</a> and <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f9ed693e8bc0e7de9eb766a3c7178590e8bb6cd5">iostat</a> commands, and <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=df936cadfb58ba93601ac351ab6fc2e2650cf591">JSON output option for <em>stat</em></a></li>
  917. </ul>
  918. <p>See <a href="https://kernelnewbies.org/LinuxChanges">Kernelnewbies.org</a> for further changes between kernel versions.</p>
  919. <h3>Configuration management</h3>
  920. <p><strong>puppet</strong>&#8216;s upstream sadly still doesn&#8217;t provide packages for bookworm (see <a href="https://tickets.puppetlabs.com/browse/PA-4995">PA-4995</a>), though Debian provides puppet-agent and puppetserver packages, and even puppetdb is back again, see <a href="https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#puppetserver">release notes for further information</a>.</p>
  921. <p><strong>ansible</strong> is also available and made it with version 2.14 into bookworm.</p>
  922. <h3>Prometheus stack</h3>
  923. <p><a href="https://prometheus.io/">Prometheus server</a> was updated from v2.24.1 to v2.42.0 and all the exporters that got shipped with bullseye are still around (in more recent versions of course).</p>
  924. <h3>Virtualization</h3>
  925. <p>docker (v20.10.24), ganeti (v3.0.2-3), libvirt (v9.0.0-4), lxc (v5.0.2-1), podman (v4.3.1), openstack (<a href="https://releases.openstack.org/zed/index.html">Zed</a>), qemu/kvm (v7.2), xen (v4.17.1) are all still around.</p>
  926. <p><strong>Vagrant</strong> is available in version 2.3.4, also <a href="https://www.vagrantup.com/">Vagrant upstream provides their packages for bookworm already</a>.</p>
  927. <p>If you&#8217;re relying on <strong>VirtualBox</strong>, be aware that upstream doesn&#8217;t provide packages for bookworm <em>yet</em> (see <a href="https://www.virtualbox.org/ticket/21524">ticket 21524</a>), but thankfully version 7.0.8-dfsg-2 is available from Debian/unstable (as of 2023-06-10) (VirtualBox isn&#8217;t shipped with stable releases since quite some time due to lack of cooperation from upstream on security support for older releases, see <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794466">#794466</a>).</p>
  928. <h3>rsync</h3>
  929. <p>rsync was updated from v3.2.3 to <a href="https://download.samba.org/pub/rsync/NEWS#3.2.7">v3.2.7</a>, and we got a few new options:</p>
  930. <ul>
  931. <li><code>--fsync</code>: fsync every written file</li>
  932. <li><code>--old-dirs</code>: works like &#8211;dirs when talking to old rsync</li>
  933. <li><code>--old-args</code>: disable the modern arg-protection idiom</li>
  934. <li><code>--secluded-args, -s</code>: use the protocol to safely send the args (replaces &#8211;protect-args option)</li>
  935. <li><code>--trust-sender</code>: trust the remote sender&#8217;s file list</li>
  936. </ul>
  937. <h3>OpenSSH</h3>
  938. <p>OpenSSH was updated from v8.4p1 to v9.2p1, so if you&#8217;re interested in all the changes, check out the release notes between those version (<a href="https://www.openssh.com/txt/release-8.5">8.5</a>, <a href="https://www.openssh.com/txt/release-8.6">8.6</a>, <a href="https://www.openssh.com/txt/release-8.7">8.7</a>, <a href="https://www.openssh.com/txt/release-8.8">8.8</a>, <a href="https://www.openssh.com/txt/release-8.9">8.9</a>, <a href="https://www.openssh.com/txt/release-9.0">9.0</a>, <a href="https://www.openssh.com/txt/release-9.1">9.1</a> + <a href="https://www.openssh.com/txt/release-9.2">9.2</a>). Let&#8217;s highlight some notable new features:</p>
  939. <ul>
  940. <li>new system for restricting forwarding and use of keys added to ssh-agent(1), see <a href="https://www.openssh.com/agent-restrict.html">SSH agent restriction for details</a>)</li>
  941. <li>switched scp(1) from using the legacy scp/rcp protocol to using the SFTP protocol by default (see <a href="https://www.openssh.com/txt/release-9.0">release notes for v9.0 for details</a> </li>
  942. <li>ssh(1): when prompting the user to accept a new hostkey, display any other host names/addresses already associated with the key</li>
  943. <li>ssh(1): allow UserKnownHostsFile=none to indicate that no known_hosts file should be used to identify host keys</li>
  944. <li>ssh(1): add a ssh_config KnownHostsCommand option that allows the client to obtain known_hosts data from a command in addition to the usual files</li>
  945. <li>ssh(1), sshd(8): add a RequiredRSASize directive to set a minimum RSA key length</li>
  946. <li>ssh(1): add a &#8220;host&#8221; line to the output of ssh -G showing the original hostname argument</li>
  947. <li>ssh-keygen -A (generate all default host key types) will no longer generate DSA keys</li>
  948. <li>ssh-keyscan(1): allow scanning of complete CIDR address ranges, e.g. <em>ssh-keyscan 192.168.0.0/24</em></li>
  949. </ul>
  950. <p>One important change you might wanna be aware of is that as of <a href="https://www.openssh.com/txt/release-8.8">OpenSSH v8.8</a>, <strong>RSA signatures using the SHA-1 hash algorithm got disabled by default</strong>, but RSA/SHA-256/512 AKA RSA-SHA2 gets used instead. OpenSSH has supported RFC8332 RSA/SHA-256/512 signatures since <a href="https://www.openssh.com/txt/release-7.2">release 7.2</a> and existing ssh-rsa keys will automatically use the stronger algorithm where possible. A good overview is also available at <a href="https://www.jhanley.com/blog/ssh-signature-algorithm-ssh-rsa-error/">SSH: Signature Algorithm ssh-rsa Error</a>.</p>
  951. <p>Now tools/libraries not supporting RSA-SHA2 fail to connect to OpenSSH as present in bookworm. For example python3-paramiko v2.7.2-1 as present in bullseye doesn&#8217;t support RSA-SHA2. It tries to connect using the deprecated RSA-SHA-1, which is no longer offered by default with OpenSSH as present in bookworm, and then fails. Support for RSA/SHA-256/512 signatures in Paramiko was requested e.g. at <a href="https://github.com/paramiko/paramiko/issues/1734">#1734</a>, and eventually got <a href="https://github.com/paramiko/paramiko/commit/2b66625659e66858cb5f557325c5fdd9c35fd073">added to Paramiko</a> and in the end the change made it into Paramiko versions >=2.9.0. Paramiko in bookworm works fine, and a backport by rebuilding the python3-paramiko package from bookworm for bullseye solves the problem (<abbr title="Been There, Done That">BTDT</abbr>).</p>
  952. <h3>Misc unsorted</h3>
  953. <ul>
  954. <li>new <strong>non-free-firmware</strong> component/repository (see <a href="https://wiki.debian.org/Firmware#Debian_12_.28bookworm.29_and_later">Debian Wiki</a> for details)</li>
  955. <li>support only the <strong>merged-usr</strong> root filesystem layout (see <a href="https://wiki.debian.org/UsrMerge">Debian Wiki</a> for details)</li>
  956. <li>the <strong>asterisk</strong> package didn&#8217;t make it into bookworm (see <a href="https://bugs.debian.org/1031046">#1031046</a>)</li>
  957. <li><strong>e2fsprogs</strong>: the breaking change related to <em>metadata_csum_seed</em> and <em>orphan_file</em> (see <a href="https://bugs.debian.org/1031325">#1031325</a>) was reverted with v1.47.0-2 for bookworm (also see <a href="https://bugs.debian.org/#1031622">#1031622</a> + <a href="https://bugs.debian.org/#1030939">#1030939</a>)</li>
  958. <li><strong>rsnapshot</strong> is back again (see <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=986709">#986709</a>)</li>
  959. <li><em>crmadmin</em> of <strong>pacemaker</strong> no longer interprets the timeout option (-t/&#8211;timeout) in <em>milliseconds</em> (as it used to be until v2.0.5), but as of v2.1.0 (and v2.1.5 is present in bookworm) it now <a href="https://github.com/ClusterLabs/pacemaker/commit/c26c9951d863e83126f811ee5b91a174fe0cc991">interprets the argument as <em>second</em></a> by default</li>
  960. </ul>
  961. <p>Thanks to everyone involved in the release, happy upgrading to bookworm, and let&#8217;s continue with working towards <a href="https://wiki.debian.org/DebianTrixie">Debian/trixie</a>. :)</p>
  962. ]]></content:encoded>
  963. </item>
  964. <item>
  965. <title>HTU Bigband Konzert am 27.06.2023</title>
  966. <link>https://michael-prokop.at/blog/2023/06/02/htu-bigband-konzert-am-27-06-2023/</link>
  967. <pubDate>Fri, 02 Jun 2023 15:35:04 +0000</pubDate>
  968. <dc:creator><![CDATA[mika]]></dc:creator>
  969. <category><![CDATA[Allgemein]]></category>
  970. <category><![CDATA[Events]]></category>
  971.  
  972. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6757</guid>
  973. <description><![CDATA[Die HTU Bigband ist zurück! Am 27. Juni 2023 findet im Innenhof der TU Graz (Alte Technik, Rechbauerstraße 12, 8010 Graz) das nächste Konzert statt (bei Schlechtwetter geht es in den Hörsaal 2, der ebenfalls an der gleichen Adresse ist). Mit einem fulminanten Programm von Swing, über Soul, Funk, Latin bis Pop ist alles dabei [&#8230;]]]></description>
  974. <content:encoded><![CDATA[<p><a href="/blog/img/htu-bigband-concert-2023-06-27.jpg"><img src="/blog/img/htu-bigband-concert-2023-06-27-small.jpg" alt="Plakat für das HTU Bigband-Konzert am 27.06.2023" style="border: 0px; margin-right: 20px" align=left /></a></p>
  975. <p>Die HTU Bigband ist zurück! Am 27. Juni 2023 findet im Innenhof der TU Graz (<a href="https://www.openstreetmap.org/#map=19/47.06894/15.44980">Alte Technik, Rechbauerstraße 12, 8010 Graz</a>) das nächste Konzert statt (bei Schlechtwetter geht es in den Hörsaal 2, der ebenfalls an der gleichen Adresse ist). Mit einem fulminanten Programm von Swing, über Soul, Funk, Latin bis Pop ist alles dabei &#8211; es gibt über 2 Stunden Musik vom Feinsten, und das Ganze bei freiem Eintritt.</p>
  976. <p>Für diejenigen mit Facebook-Account unter euch gibt es auch das passende <a href="https://www.facebook.com/events/623929286327453/">Facebook-Event</a>.</p>
  977. <p>Ich bin als Schlagzeuger und Percussionist mit von der Partie und würde mich über bekannte Gesichter freuen, ich hoffe man sieht und hört sich! 8-)</p>
  978. ]]></content:encoded>
  979. </item>
  980. <item>
  981. <title>Vortrag: Debugging für Sysadmins @ GLT23</title>
  982. <link>https://michael-prokop.at/blog/2023/04/16/vortrag-debugging-fur-sysadmins-glt23/</link>
  983. <pubDate>Sun, 16 Apr 2023 08:39:55 +0000</pubDate>
  984. <dc:creator><![CDATA[mika]]></dc:creator>
  985. <category><![CDATA[Computer]]></category>
  986. <category><![CDATA[Events]]></category>
  987.  
  988. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6748</guid>
  989. <description><![CDATA[Auf den Grazer Linuxtagen 2023 (GLT23) war ich als Referent mit einem Vortrag zum Thema &#8220;Debugging für Sysadmins&#8221; vertreten. In meinem Vortrag gibt es einen Überblick, welche Tools und Strategien rund ums Debugging in der Toolbox von Sysadmins nicht fehlen dürfen. Es gibt den Vortrag dank des wunderbaren c3voc-Teams bereits als Videomitschnitt online. Meine Vortragsfolien [&#8230;]]]></description>
  990. <content:encoded><![CDATA[<p>Auf den <a href="https://www.linuxtage.at/">Grazer Linuxtagen 2023</a> (GLT23) war ich als Referent mit einem Vortrag zum Thema &#8220;<a href="https://pretalx.linuxtage.at/glt23/talk/JHCGUX/">Debugging für Sysadmins</a>&#8221; vertreten. In meinem Vortrag gibt es einen Überblick, welche Tools und Strategien rund ums Debugging in der Toolbox von Sysadmins nicht fehlen dürfen.</p>
  991. <p>Es gibt den Vortrag dank des wunderbaren c3voc-Teams bereits als <a href="https://media.ccc.de/v/glt23-334-debugging-fr-sysadmins">Videomitschnitt online</a>. Meine <a href="http://michael-prokop.at/slides/glt23_debugging-fuer-sysadmins.pdf">Vortragsfolien (1.2MB, PDF)</a> stehen ebenfalls online zur Verfügung. Viel Spaß beim Anschauen!</p>
  992. <p>BTW: weil ich schon mehrfach gefragt wurde, den Vortrag gibt es auch in längerer Workshop-Version, bei Interesse <a href="https://michael-prokop.at/">einfach bei mir melden</a>.</p>
  993. ]]></content:encoded>
  994. </item>
  995. <item>
  996. <title>Automatically unlocking a LUKS encrypted root filesystem during boot</title>
  997. <link>https://michael-prokop.at/blog/2023/03/22/automatically-unlocking-a-luks-encrypted-root-filesystem-during-boot/</link>
  998. <comments>https://michael-prokop.at/blog/2023/03/22/automatically-unlocking-a-luks-encrypted-root-filesystem-during-boot/#comments</comments>
  999. <pubDate>Wed, 22 Mar 2023 12:30:57 +0000</pubDate>
  1000. <dc:creator><![CDATA[mika]]></dc:creator>
  1001. <category><![CDATA[Computer]]></category>
  1002. <category><![CDATA[Debian]]></category>
  1003. <category><![CDATA[English]]></category>
  1004.  
  1005. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6711</guid>
  1006. <description><![CDATA[Update on 2023-03-23: thanks to Daniel Roschka for mentioning the Mandos and TPM approaches, which might be better alternatives, depending on your options and needs. Peter Palfrader furthermore pointed me towards clevis-initramfs and tang. A customer of mine runs dedicated servers inside a foreign data-center, remote hands only. In such an environment you might need [&#8230;]]]></description>
  1007. <content:encoded><![CDATA[<p><strong>Update on 2023-03-23:</strong> thanks to Daniel Roschka for mentioning the <a href="https://www.recompile.se/mandos">Mandos</a> and <a href="https://micwan88.github.io/linux/ubuntu/luks/tpm/encryption/2021/05/03/auto-unlock-luks-volume-by-tpm2.html">TPM</a> approaches, which might be better alternatives, depending on your options and needs. Peter Palfrader furthermore pointed me towards <a href="https://packages.debian.org/bookworm/clevis-initramfs">clevis-initramfs</a> and <a href="https://github.com/latchset/tang">tang</a>.</p>
  1008. <p>A customer of mine runs dedicated servers inside a foreign data-center, remote hands only. In such an environment you might need a disk replacement because you need bigger or faster disks, though also a disk might (start to) fail and you need a replacement. One has to be prepared for such a scenario, but fully wiping your used disk then might not always be an option, especially once disks (start to) fail. On the other hand you don&#8217;t want to end up with (partial) data on your disk handed over to someone unexpected.</p>
  1009. <p>By encrypting the data on your disks upfront you can prevent against this scenario. But if you have a fleet of servers you might not want to manually jump on servers during boot and unlock crypto volumes <em>manually</em>. It&#8217;s especially annoying if it&#8217;s about the root filesystem where a solution like <a href="https://packages.debian.org/stable/dropbear-initramfs">dropbear-initramfs</a> needs to be used for remote access during initramfs boot stage. So my task for the customer was to adjust encrypted LUKS devices such that no one needs to manually unlock the encrypted device during server boot (with some specific assumptions about possible attack vectors one has to live with, see the disclaimer at the end).</p>
  1010. <p>The documentation about this use-case was rather inconsistent, especially because special rules apply for the root filesystem (no key file usage), we see different behavior between what&#8217;s supported by systemd (hello key file again), initramfs-tools and dracut, not to mention the changes between different distributions. Since tests with this tend to be rather annoying (better make sure to have a <a href="https://grml.org/">Grml</a> live system available :)), I&#8217;m hereby documenting what worked for us (Debian/bullseye with initramfs-tools and cryptsetup-initramfs).</p>
  1011. <p>The system was installed with LVM on-top of an encrypted Software-RAID device, only the /boot partition is unencrypted. But even if you don&#8217;t use Software-RAID nor LVM the same instructions apply. The system looks like this:</p>
  1012. <pre>
  1013. % mount -t ext4 -l
  1014. /dev/mapper/foobar-root_1 on / type ext4 (rw,relatime,errors=remount-ro)
  1015.  
  1016. % sudo pvs
  1017.  PV                    VG     Fmt  Attr PSize   PFree
  1018.  /dev/mapper/md1_crypt foobar lvm2 a--  445.95g 430.12g
  1019.  
  1020. % sudo vgs
  1021.  VG     #PV #LV #SN Attr   VSize   VFree
  1022.  foobar   1   2   0 wz--n- 445.95g 430.12g
  1023.  
  1024. % sudo lvs
  1025.  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  1026.  root_1 foobar -wi-ao---- &lt;14.90g
  1027.  
  1028. % lsblk
  1029. NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
  1030. [...]
  1031. sdd                     8:48   0 447.1G  0 disk
  1032. &#9500;&#9472;sdd1                  8:49   0   571M  0 part  /boot/efi
  1033. &#9500;&#9472;sdd2                  8:50   0   488M  0 part
  1034. &#9474; &#9492;&#9472;md0                 9:0    0   487M  0 raid1 /boot
  1035. &#9492;&#9472;sdd3                  8:51   0 446.1G  0 part
  1036.  &#9492;&#9472;md1                 9:1    0   446G  0 raid1
  1037.    &#9492;&#9472;md1_crypt       253:0    0   446G  0 crypt
  1038.      &#9500;&#9472;foobar-root_1 253:1    0  14.9G  0 lvm   /
  1039. [...]
  1040. sdf                     8:80   0 447.1G  0 disk
  1041. &#9500;&#9472;sdf1                  8:81   0   571M  0 part
  1042. &#9500;&#9472;sdf2                  8:82   0   488M  0 part
  1043. &#9474; &#9492;&#9472;md0                 9:0    0   487M  0 raid1 /boot
  1044. &#9492;&#9472;sdf3                  8:83   0 446.1G  0 part
  1045.  &#9492;&#9472;md1                 9:1    0   446G  0 raid1
  1046.    &#9492;&#9472;md1_crypt       253:0    0   446G  0 crypt
  1047.      &#9500;&#9472;foobar-root_1 253:1    0  14.9G  0 lvm   /
  1048. </pre>
  1049. <p>The actual crypsetup configuration is:</p>
  1050. <pre>
  1051. % cat /etc/crypttab
  1052. md1_crypt UUID=77246138-b666-4151-b01c-5a12db54b28b none luks,discard
  1053. </pre>
  1054. <p>Now, to automatically open the crypto device during boot we can instead use:</p>
  1055. <pre>
  1056. % cat /etc/crypttab
  1057. md1_crypt UUID=77246138-b666-4151-b01c-5a12db54b28b none luks,discard,keyscript=/etc/initramfs-tools/unlock.sh
  1058.  
  1059. # touch /etc/initramfs-tools/unlock.sh
  1060. # chmod 0700 /etc/initramfs-tools/unlock.sh
  1061. # $EDITOR etc/initramfs-tools/unlock.sh
  1062. # cat /etc/initramfs-tools/unlock.sh
  1063. #!/bin/sh
  1064. echo -n "provide_the_actual_password_here"
  1065.  
  1066. # update-initramfs -k all -u
  1067. [...]
  1068. </pre>
  1069. <p>The server will then boot <em>without</em> prompting for a crypto password.</p>
  1070. <p>Note that initramfs-tools by default uses an insecure umask of 0022, resulting in the initrd being accessible to everyone. But if you have the dropbear-initramfs package installed, its `<em>/usr/share/initramfs-tools/conf-hooks.d/dropbear</em>` sets `<em>UMASK=0077</em>`, so the resulting /boot/initrd* file should automatically have proper permissions (0600). The cryptsetup hook warns about a permissive umask configuration during update-initramfs runs, but if you want to be sure, explicitly set it via e.g.:</p>
  1071. <pre>
  1072. # cat > /etc/initramfs-tools/conf.d/umask &lt;&lt; EOF
  1073. # restrictive umask to avoid non-root access to initrd:
  1074. UMASK=0077
  1075. EOF
  1076. # update-initramfs -k all -u
  1077. </pre>
  1078. <p><strong>Disclaimer:</strong> Of course you need to trust users with access to <em>/etc/initramfs-tools/unlock.sh</em> as well as the initramfs/initrd on your system. Furthermore you should wipe the boot partition (to destroy the keyfile information) before handing over such a disk. But that is a risk my customer can live with, <abbr title="Your Mileage May Vary">YMMV</abbr>.</p>
  1079. ]]></content:encoded>
  1080. <wfw:commentRss>https://michael-prokop.at/blog/2023/03/22/automatically-unlocking-a-luks-encrypted-root-filesystem-during-boot/feed/</wfw:commentRss>
  1081. <slash:comments>2</slash:comments>
  1082. </item>
  1083. <item>
  1084. <title>Mein Lesejahr 2022</title>
  1085. <link>https://michael-prokop.at/blog/2023/01/03/mein-lesejahr-2022/</link>
  1086. <pubDate>Tue, 03 Jan 2023 17:11:13 +0000</pubDate>
  1087. <dc:creator><![CDATA[mika]]></dc:creator>
  1088. <category><![CDATA[Allgemein]]></category>
  1089. <category><![CDATA[Bücher & CO]]></category>
  1090.  
  1091. <guid isPermaLink="false">https://michael-prokop.at/blog/?p=6614</guid>
  1092. <description><![CDATA[Ich habe 2022 keine Bookdumps geschrieben, weil es mir einerseits zu viel Aufwand war, andererseits wollte ich mir auch nicht immer bzw. zeitnahe zu jedem Buch eine Meinung bilden (müssen). 2022 war aus verschiedenen Gründen intensiv, daher habe ich meine Lese-Gewohnheit von 2021 nicht ganz halten können, aber schlussendlich sind es doch 82 Bücher (ca. [&#8230;]]]></description>
  1093. <content:encoded><![CDATA[<p><img src="/blog/img/buecher_2022.jpg" alt="Foto der hier vorgestellten Bücher" style="border: 0px; margin-right: 20px" align=left width=200px /></p>
  1094. <p>Ich habe 2022 keine <a href="/blog/index.php?s=bookdump">Bookdumps</a> geschrieben, weil es mir einerseits zu viel Aufwand war, andererseits wollte ich mir auch nicht immer bzw. zeitnahe zu jedem Buch eine Meinung bilden (müssen). 2022 war aus verschiedenen Gründen intensiv, daher habe ich meine Lese-Gewohnheit von 2021 nicht ganz halten können, aber schlussendlich sind es doch 82 Bücher (ca. 19k Seiten) geworden.</p>
  1095. <p>Im Gegensatz zu den Vorjahren habe ich diesmal <em>nicht</em> auf das Verhältnis von Autorin zu Autor geachtet, und entsprechend sind es leider auch nur 27 Autorinnen zu 55 Autoren geworden. Ich bin leider noch immer ziemlich schlecht beim Abbrechen von Büchern, aber es waren fast alle Bücher gut. Daher hier nur eine kleine Auswahl jener Bücher, die ich besonders lesenswert fand bzw. empfehlen möchte (die Reihenfolge entspricht dem Foto und stellt keinerlei Reihung oder dergleichen dar):</p>
  1096. <ul>
  1097. <li><a href="https://www.rowohlt.de/buch/dirk-stermann-maksym-9783498002671"><strong>Maksym</strong>, Dirk Stermann</a>. Ein wichtiges Thema (Aufteilung der Kinderbetreuung) ist hier in eine unterhaltsam zu lesende Autofiktion verpackt. Das Buch hat meinen Humor im Sommerurlaub perfekt getroffen und wer mit kabarettistischem Humor kein Problem hat, sollte hier nicht enttäuscht werden.</li>
  1098. <li><a href="https://hoffmann-und-campe.de/products/59396-muell"><strong>Müll (Brenner #9)</strong>, Wolf Haas</a>. Ich hatte zuvor noch kein Buch von Haas gelesen, weil ich einmal den Spruch &#8220;wenn man nicht weiß was man lesen soll greift man zu Haas&#8221; aufgeschnappt habe und mich damit nicht angesprochen fühlte. Großer Fehler, Hilfsausdruck. Auf Empfehlung von Daniela Strigl hin habe ich mir den neuesten Brenner-Roman von Haas besorgt und fühlte mich total abgeholt. Ich habe darauf hin gleich weitere Bücher von Haas gelesen. Danke für den Stupser, Frau Strigl.</li>
  1099. <li><a href="https://www.droschl.com/buch/eine-runde-sache/"><strong>Eine runde Sache</strong>, Tomer Gardi</a>. Zwei Geschichten in einem Buch die miteinander lose verbunden sind &#8211; zuerst eine Odyssee mit einem Schäferhund in gebrochenem Deutsch, dann die Lebensgeschichte des indonesischen Malers Raden Saleh von Java. Danke für die Empfehlung, Insa Wilke.</li>
  1100. <li><a href="https://www.suhrkamp.de/buch/benjamin-labatut-das-blinde-licht-t-9783518429228"><strong>Das blinde Licht</strong>, Benjamín Labatut</a>. In vier Geschichten erzählt Benjamín Labatut vom schmalen Grat zwischen Genie und Wahnsinn, von menschlicher Hybris und der zwiespältigen Kraft der Wissenschaft. Ein wunderbares Buch, das ich nur aufs Wärmste weiterempfehlen kann.</li>
  1101. <li><a href="https://www.residenzverlag.com/buch/die-verschissene-zeit"><strong>Die verschissene Zeit</strong>, Barbi Markovi&#263;</a>. Ein wunderbarer popkultureller Ausflug in das Belgrad der Neunziger.</li>
  1102. <li><a href="https://www.suhrkamp.de/buch/rachel-cusk-coventry-t-9783518225318"><strong>Coventry: Essays</strong>, Rachel Cusk</a>. Unaufgeregte Beobachtungen des Alltags die zum Denken anregen. Ich bin leider erst im Nachhinein drauf gekommen, dass die deutsche Übersetzung wohl um einige Kapitel gekürzt ist, sprachlich hat mich die deutsche Ausgabe trotzdem absolut abgeholt.</li>
  1103. <li><a href="https://www.kiwi-verlag.de/buch/david-foster-wallace-das-hier-ist-wasser-this-is-water-9783462044188"><strong>Das hier ist Wasser / This is water</strong>, David Foster Wallace</a>. Ein 64 Seiten schlankes Buch, das im ersten Teil die deutsche Übersetzung und im zweiten Teil das englische Original beinhaltet. Inspirierende Gedanken rund um Bildung, Denken und Leben.</li>
  1104. <li><a href="https://www.dumont-buchverlag.de/buch/leky-kummer-aller-art-9783832182168/"><strong>Kummer aller Art</strong>, Mariana Leky</a>. Mir war noch Lekys &#8220;<em>Was man von hier aus sehen kann</em>&#8221; in guter Erinnerung, hatte die Autorin aber irgendwie aus den Augen verloren. Dieses Buch war ein Weihnachtsgeschenk an mich &#8211; und wow, was für ein Volltreffer. Ein fantastisches Buch, ich habe mir umgehend weitere Bücher von Mariana Leky besorgt. Klare Leseempfehlung.</li>
  1105. <li><a href="https://www.reclam.de/detail/978-3-15-014211-0/Twain__Mark/Was_ist_der_Mensch_"><strong>Was ist der Mensch? Ein Gespräch über die Welt und Gott</strong>, Mark Twain</a>. Ein philosophisches Zwiegespräch über den freien Willen des Menschen. Sehr anregend, danke für die Empfehlung, Darsha.</li>
  1106. <li><a href="https://www.penguinrandomhouse.de/Taschenbuch/Herr-Lehmann/Sven-Regener/Goldmann/e96191.rhd"><strong>Herr Lehmann (Frank Lehmann #1)</strong>, Sven Regener</a>. Das Buch wurde <a href="https://de.wikipedia.org/wiki/Herr_Lehmann">2001 veröffentlicht und 2003 verfilmt</a>, hat es aber erst 2022 auf mein Buchregal geschafft. Für mich hat sich in der Sommerzeit mit diesem Buch ein wunderbarer Lesesog ergeben, ich habe daraufhin gleich weitere Bücher von Regener besorgt und gelesen.</li>
  1107. <li><a href="https://www.chbeck.de/orwell-reise-ruinen/product/32447680"><strong>Reise durch Ruinen</strong>, George Orwell.</a> Orwell folgte als Kriegsberichterstatter den alliierten Streitkräften durch Deutschland und Österreich. Naturgemäß keine leichte Kost.</li>
  1108. <li><a href="https://en.wikipedia.org/wiki/On_Writing:_A_Memoir_of_the_Craft"><strong>On Writing: A Memoir of the Craft</strong>, Stephen King</a>. Dank eines Geburtstagsgeschenks (thx, Kathi + Karl!) habe ich 2022 endlich den Kosmos &#8220;Stephen King&#8221; betreten. Sprachlich hat mich in &#8220;<em>Finderlohn</em>&#8220;, der deutschen Ausgabe von &#8220;<em>Finders Keepers</em>&#8221; aber irgendetwas irritiert, ohne es wirklich benennen zu können. Im Zuge des Lesens von &#8220;<em>On Writing: A Memoir of the Craft</em>&#8221; habe ich stellenweise das <a href="https://en.wikipedia.org/wiki/On_Writing:_A_Memoir_of_the_Craft">englischsprachige Original</a> mit dessen deutscher Übersetzung &#8220;<a href="https://de.wikipedia.org/wiki/Das_Leben_und_das_Schreiben">Das Leben und das Schreiben</a>&#8221; verglichen und festgestellt, dass ich den &#8220;englischen King&#8221; <em>unvergleichlich</em> lesenswerter empfinde. Dieses Buch gibt einen lesenswerten Einblick in den Werdegang von King und seinem Zugang zum Schreiben. Und ich möchte hier ganz klar für die englische Ausgabe dieses Buches werben.</li>
  1109. </ul>
  1110. ]]></content:encoded>
  1111. </item>
  1112. </channel>
  1113. </rss>
  1114.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//www.michael-prokop.at/blog/wp-rss2.php

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda