<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Email on Chris Rants at Clouds</title>
    <link>https://chris.funderburg.me/tags/email/</link>
    <description>Recent content in Email on Chris Rants at Clouds</description>
    <image>
      <title>Chris Rants at Clouds</title>
      <url>https://chris.funderburg.me/me.jpg</url>
      <link>https://chris.funderburg.me/me.jpg</link>
    </image>
    <generator>Hugo -- 0.157.0</generator>
    <language>en-gb</language>
    <lastBuildDate>Wed, 06 Nov 2024 22:38:27 +0000</lastBuildDate>
    <atom:link href="https://chris.funderburg.me/tags/email/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>06/Nov/2024 - Tech Bingo</title>
      <link>https://chris.funderburg.me/posts/2024/11/06/tech-bingo/</link>
      <pubDate>Wed, 06 Nov 2024 22:38:27 +0000</pubDate>
      <guid>https://chris.funderburg.me/posts/2024/11/06/tech-bingo/</guid>
      <description>Lots and lots of technical changes and learning new systems</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve spent the last 3 or 4 weekends playing with technology. I&rsquo;ve built:</p>
<h2 id="a-new-self-hosted-email-system">A new self-hosted email system.</h2>
<p>I decommissioned my email on Proton and migrated everything to self-hosted
<a href="https://docker-mailserver.github.io/docker-mailserver/latest/" target="_blank" >docker-mailserver</a>
The makers describe it as a, &ldquo;<em>Production-ready fullstack but simple mail
server (SMTP, IMAP, LDAP, Antispam, Antivirus, etc.) running inside a
container.</em>&rdquo;</p>
<p>Now, like me, if your understanding of a <strong>proper</strong> container is an image that
runs <strong>one</strong> process, you should look away now.  This is more of a
<strong>operating system</strong> image that runs:</p>
<ul>
<li><a href="https://www.postfix.org/" target="_blank" >Postfix</a> as the Mail Transfer Agent.</li>
<li><a href="https://www.dovecot.org/" target="_blank" >Dovecot</a> as the Mail Delivery Agent.</li>
<li><a href="https://www.clamav.net/" target="_blank" >ClamAV</a> and <a href="https://docs.clamav.net/faq/faq-freshclam.html" target="_blank" >Freshclam</a> for virus scanning.</li>
<li><a href="https://www.rspamd.com/" target="_blank" >Rspamd</a> or <a href="https://spamassassin.apache.org/" target="_blank" >Spamassassin</a> for spam detection.</li>
<li><a href="https://postgrey.schweikert.ch/" target="_blank" >Postgrey</a>, <a href="https://en.wikipedia.org/wiki/Amavis" target="_blank" >Amavis</a>, and more.</li>
</ul>
<p>It even has cron running things and supervisord controlling it all. But don&rsquo;t
let any of that put you off!  I am <strong>super</strong> happy with it all!</p>
<p>I started with the <a href="https://github.com/bocan/odin" target="_blank" >same Terraform / OpenTofu setup</a> that
my webserver <a href="https://chris.funderburg.me/about/#this-web-sites-tech" target="_blank" >uses</a>.</p>
<p>It&rsquo;s the same t3.medium instance, but instead of running on a Spot instance, I chose
an on-demand one with an EC2 Instance Savings Plan. In the Europe (London)
region, for a 1 year term and nothing upfront, that should cost me around $22 a
month (plus storage) instead of $35 (plus storage).</p>
<p>So now it&rsquo;s all back under my control.  It&rsquo;s fast.  And best of all - I don&rsquo;t need to
deal with Proton&rsquo;s absurdly poor systems.</p>
<h2 id="a-firewall-using-nftables-instead-of-iptables">A firewall using NFTABLES instead of IPTABLES.</h2>
<p>Since I run Debian Sid on both my webserver and the new mail server, I&rsquo;m using
the very latest tooling in Linux.  I noticed that <code>fail2ban</code> on both machines
were using something called <a href="https://www.netfilter.org/projects/nftables/index.html" target="_blank" >nftables</a>
instead of <a href="https://www.netfilter.org/projects/iptables/index.html" target="_blank" >iptables</a>
and I my usual Geo-blocking scripts didn&rsquo;t work.</p>
<p>So, I got down to work figuring out the new way to build these things and came
up with <a href="https://gist.github.com/bocan/ff82cbcbdc848aa34ff015e23ed866bf#file-build-sh" target="_blank" >this script</a>,
to block Russia, China, Vietnam, and Taiwan. I&rsquo;ve popped it online as open
source. It should work alongside any built-in firewall on new versions of Linux.</p>
<h2 id="http3-quic-and-more-firewalling-for-udp">HTTP/3, QUIC, And more firewalling for UDP.</h2>
<p>On my webserver, I enabled shiny brand new <a href="https://en.wikipedia.org/wiki/HTTP/3" target="_blank" >HTTP/3</a>
and the accompanying <a href="https://en.wikipedia.org/wiki/QUIC" target="_blank" >QUIC</a> protocol. The
interesting bit of this work is that, where the older HTTP/1.1, and 2 using
TCP to ports 80 and 443 - QUIC uses UDP to port 80 and 443. So, in addition to
lots of NGINX work, I had to open up security groups and do yet more poking of
firewalls.</p>
<p>HTTP/3 can handle more traffic and deliver content faster, especially on slower
or unreliable networks. It does this by having multiple steams in the same
connection, less handshakes, and of course by using UDP transport rather than
TCP.</p>
<p>It&rsquo;s also, in theory, a better security model as it uses TLS 1.3.</p>
<h2 id="dnssec-for-cloudcauldronio-and-funderburgme">DNSSEC for cloudcauldron.io and funderburg.me.</h2>
<p>For no particular reason aside from security, and that I could, I setup
<a href="https://www.cloudflare.com/en-gb/learning/dns/dnssec/how-dnssec-works/" target="_blank" >DNSSEC</a>
on both my larger domains. This mostly involved clicking a few buttons in Route53
in AWS to create the signing keys, then adding those details back into the
appropriate registrars for the domain. Surprisingly easy work!</p>
<p>Whist I was in Route53, I also moved funderburg.me&rsquo;s DNS into a new Route53 zone
from my DNS provider.  They didn&rsquo;t allow more &ldquo;exotic&rdquo; record creations which
I&rsquo;ll talk about below.</p>
<h2 id="an-opentofu-run-for-ipv6-on-odin">An OpenTofu Run for IPv6 on Odin.</h2>
<p>It&rsquo;s been a few months so I re-ran my OpenTofu project for <code>odin</code> (the webserver)
and the newish <code>freyja</code> (my mailserver) - mostly just to pick up a fresh base
image of Debian Sid.</p>
<p>But also, it was a chance to enable ipv6 across my VPC and both the ec2
instances. Back into Route53 and added a shiny AAAA record for
chris.funderburg.me that points to 2a05:d01c:eb9:2c00:11b5:6c38:49f4:92 - and
the job&rsquo;s a good one.</p>
<p>Still trying to get my head around IPv6 and I&rsquo;m not sure if that address will
change if I reboot - or re-create the machine.  I should probably check that!
If not, it should be easy enough to use OpenTofu to dynamically update the
route53 record.</p>
<h2 id="enabled-the-legendarily-dangerous-hsts-and-lots-of-edge-case-security-things">Enabled the legendarily dangerous HSTS and lots of edge-case security things.</h2>
<p>I tried setting up <a href="https://www.howtogeek.com/devops/what-is-hsts-and-how-do-you-set-it-up/" target="_blank" >HSTS</a>
years ago at work, not quite understanding what I was doing - and its lucky I
didn&rsquo;t get sacked!  HSTS very violently enforces HTTPS <strong>only</strong> connections by
leaving an entry in anyone&rsquo;s browser who visits. This entry tells the browser to
NEVER try to connect unencrypted.  It also usually says, &ldquo;and also do this with
all my subdomains&rdquo;.  That last one can break casual websites where you forgot
to add a certificate.</p>
<p>These days however, I encrypt everything everywhere using Letsencrypt. So, less
chance of blowing sites up or having to walk people through scrubbing their
browser data.  I set it up on funderburg.me and cloudcauldron withing an hour
and used the recommended settings of setting it&rsquo;s timeout first for 10 minutes,
now a week. And next week I&rsquo;ll change it to a month, and the month after, 2
years! In this way I have time to see if I&rsquo;ve forgotten anything.</p>
<h2 id="and-finally-for-securitys-sake">And finally, for security&rsquo;s sake:</h2>
<ul>
<li>A <a href="https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization" target="_blank" >Certification Authority Authorization</a>
(CAA) record, which notes that my web certificates should only come from
letsencrypt.org.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>23/Oct/2024 - Sweet Summer Child</title>
      <link>https://chris.funderburg.me/posts/2024/10/23/sweet-summers-child/</link>
      <pubDate>Wed, 23 Oct 2024 11:00:10 +0100</pubDate>
      <guid>https://chris.funderburg.me/posts/2024/10/23/sweet-summers-child/</guid>
      <description>I don&amp;rsquo;t want to tell them.</description>
      <content:encoded><![CDATA[<h2 id="it-makes-me-sad">It Makes Me Sad</h2>
<p>This poor person on Github is about to learn an unhappy fact.  Email has no guarantee of
being encrypted as it moves across the internet.  And there&rsquo;s no <strong>good</strong>
solution for that at all.</p>
<p><img alt="Oh no!" loading="lazy" src="/posts/2024/10/23/ohno.png"></p>
<blockquote>
<p>Come away, O human child!<br>
To the waters and the wild<br>
With a faery, hand in hand,<br>
For the world&rsquo;s more full of weeping than you can understand.<br>
&ndash; W. B. Yeats</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>15/Sep/2024 - Weekly Update</title>
      <link>https://chris.funderburg.me/posts/2024/09/15/weekly-update/</link>
      <pubDate>Sun, 15 Sep 2024 09:12:38 +0100</pubDate>
      <guid>https://chris.funderburg.me/posts/2024/09/15/weekly-update/</guid>
      <description>Gym guilt, health, building things for druids, email servers, and Docker</description>
      <content:encoded><![CDATA[<h2 id="gym-guilt">Gym Guilt</h2>
<p>I cancelled my gym membership yesterday and I feel <strong>terribly</strong> guilty about
it!  If you were standing right here in front of me, I&rsquo;d tell you how
oversubscribed the gym was, how it was filled with groups of teenagers hogging
machines for ages, how the place was unusable at any convenient time unless you
went past 10pm.</p>
<p>But that&rsquo;s not why my daughter and I stopped going and have now cancelled our
membership.  It&rsquo;s because it just became too hard and we lost motivation.</p>
<p>And that&rsquo;s the last thing I need. Not to gain muscle as I could care less.  And
certainly not to lose weight.  Over the last 8ish years I&rsquo;ve lost 33.7kg / 74.3
lbs / 5.3 stone. I&rsquo;ve gone from size 38 trousers down to 34 and from XXL shirts
down to just Large.  If BMI&rsquo;s are really any indication of health, I&rsquo;ve gone
from &ldquo;obese&rdquo;, down through simply &ldquo;overweight&rdquo; range, and I&rsquo;m within touching
distance (8k) of what it thinks is a healthy weight.  That&rsquo;s mostly down to just
improving my eating habits.</p>
<p>The main reason I need the gym, is what I&rsquo;ve touched on before.  At 51, I feel
my health slipping away a lot.  I have no energy. Things hurt that shouldn&rsquo;t.
And I&rsquo;m getting the occasional brief moments of dizziness from silly actions like
walking up stairs or carrying heavy stuff, and I feel some just basic exercise might
hold that off.</p>
<p>No idea what I&rsquo;m gonna do now though.  Exercise at home could be an option but
that comes with it&rsquo;s own motivational issues.  There IS a new gym opening that&rsquo;s
a bit more expensive, and is &ldquo;contract&rdquo;, so it might be a bit less packed. I&rsquo;ll
gonna think about it over the next few days, see what my daughter plans to do,
and make a decision.</p>
<h2 id="interesting-posts-read">Interesting Posts Read</h2>
<ul>
<li><a href="https://alexwlchan.net/2024/digital-decluttering/?utm_source=rss" target="_blank" >Digital Decluttering</a> -
Topical!  Because of link-rot and websites that vanish, I&rsquo;ve been keeping <a href="https://bocan.co.uk" target="_blank" >an archive</a> of internet things I want to keep
for nearly 20 years now - which I&rsquo;ll surely be sued for someday no doubt - but I&rsquo;ve got
decades (gigabytes) of photos and old MP3 files that I really need to clean up.
I should make a plan.</li>
</ul>
<h2 id="druid--charity-stuff">Druid / Charity Stuff</h2>
<p>At <a href="https://druidnetwork.org" target="_blank" >The Druid Network</a> this week I leaned in hard to
make some progress in building a new members-only forum with <a href="https://www.discourse.org/" target="_blank" >Discourse</a>.
I&rsquo;ve had it <em>installed</em> in a containerised environment in AWS for ages, but over
the last week I&rsquo;ve:</p>
<ul>
<li>Updated it.</li>
<li>Stripped it all out, wiped all the data, and reinstalled it with each piece
(Postgresql, Redis, etc) protected by passwords.</li>
<li>Enabled SSL/TLS Encryption.</li>
<li>Got the email working via AWS SES - which is what the rest of our charity
systems currently use. This reminds me that I&rsquo;ve never really discussed the
thorny topic of email with my fellow trustees.  There&rsquo;s no large email service
provider that isn&rsquo;t without ethical issues.  Google.  Microsoft.  Amazon. All
a bit evil in one way or another.</li>
<li>Searched for and tested a few themes, and enabled a dark/light button.</li>
<li>Had a play with creating a <strong>public</strong> category within the overall private
forum.  This didn&rsquo;t go so well.</li>
</ul>
<p>With some luck and motivation, I&rsquo;ll invite some of the other charity trustees to
play with it in the next few weeks.  This whole thing is just a proof of concept
so it might not end up being used.  Makes a great technical challenge though.</p>
<h2 id="speaking-of-email">Speaking of Email</h2>
<p>I&rsquo;m getting closer to going back to running my <strong>own</strong> mail server with <a href="https://github.com/docker-mailserver/docker-mailserver" target="_blank" >Docker Mailserver</a>.</p>
<p>It&rsquo;s &hellip; <strong>complicated</strong> in this day and age:</p>
<ul>
<li><a href="https://lwn.net/Articles/987566/" target="_blank" >A SpamAssassin Surprise</a></li>
<li><a href="https://proton.me/blog/private-email-server" target="_blank" >How to set up a private email server </a></li>
<li><a href="https://mailtrap.io/blog/setup-smtp-server/" target="_blank" >Set Up SMTP Server – A Step-By-Step Tutorial</a></li>
<li><a href="https://www.reddit.com/r/selfhosted/comments/tya4ky/is_it_worth_making_your_own_email_servers_and/" target="_blank" > Is It Worth Making Your Own Email Servers and Hosting </a></li>
</ul>
<h2 id="speaking-of-docker">Speaking of Docker</h2>
<p>It seemed to be a day for cancelling things as I also downgraded my
<a href="https://www.docker.com/" target="_blank" >Docker</a> subscription. A few days ago they announced an
<a href="https://www.docker.com/blog/november-2024-updated-plans-announcement/" target="_blank" >80% price jump</a> without any compelling added value.  That&rsquo;ll put me back on their free plan once
my current subscription expires in May 2025.</p>
<p>Thing is, I wanted to support them and I was happy to do so when they moved from
a totally free service to a paid model several years back.  But, whether from
greed or desperation, they&rsquo;re losing the plot!</p>
<p>There is no service they offer that you can&rsquo;t get for free elsewhere so, I&rsquo;ll
just use their free service for now, and start making the slow move to newer
workflows, and new places to store my Docker images in future.</p>
<p>Note: This has no effect on my TDN work or how I run my own tech stacks.  Docker
on a server is a different beast than Docker as I use on my laptop.  My
subscription only really affects how I locally develop things on the Macbook.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
