<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>selinux – apt-upgrade.me – Homelab, Linux &amp; DevSecOps</title><link>https://www.apt-upgrade.me/tag/selinux/</link><description>One nerd's homelab: Linux, Kubernetes, security, and the occasional disaster.</description><language>en-US</language><lastBuildDate>Fri, 06 Nov 2026 18:03:29 +0100</lastBuildDate><atom:link href="https://www.apt-upgrade.me/tag/selinux/index.xml" rel="self" type="application/rss+xml"/><item><title>This Blog Now Runs on Hugo: No WordPress, No Kubernetes, and Stable HTTP/3</title><link>https://www.apt-upgrade.me/2026/11/06/this-blog-now-runs-on-hugo-no-wordpress-no-kubernetes-and-stable-http-3/</link><pubDate>Fri, 06 Nov 2026 18:03:29 +0100</pubDate><guid>https://www.apt-upgrade.me/2026/11/06/this-blog-now-runs-on-hugo-no-wordpress-no-kubernetes-and-stable-http-3/</guid><description>&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; This blog no longer runs on WordPress and Kubernetes. It now consists of finished files that nginx serves from a hardened AlmaLinux 10. In the &lt;a href="https://www.apt-upgrade.me/2026/11/05/do-i-even-need-wordpress-and-kubernetes-for-this-blog-a-hugo-experiment-real-numbers-and-what-a-migration-would-take/"&gt;Hugo experiment&lt;/a&gt; a few days ago nothing was decided yet; on November 6, 2026 I made the switch. All posts in four languages keep their old addresses, Grafana and the hardening stayed, PHP, the database and the cluster are gone. And HTTP/3, which I &lt;a href="https://www.apt-upgrade.me/2026/11/03/http-3-for-my-blog-and-nextcloud-one-switch-two-hidden-brakes-and-what-the-measurements-show/"&gt;switched off&lt;/a&gt; only this week, is running again.&lt;/p&gt;</description></item><item><title>Do I Even Need WordPress and Kubernetes for This Blog? A Hugo Experiment, Real Numbers, and What a Migration Would Take</title><link>https://www.apt-upgrade.me/2026/11/05/do-i-even-need-wordpress-and-kubernetes-for-this-blog-a-hugo-experiment-real-numbers-and-what-a-migration-would-take/</link><pubDate>Thu, 05 Nov 2026 21:57:56 +0100</pubDate><guid>https://www.apt-upgrade.me/2026/11/05/do-i-even-need-wordpress-and-kubernetes-for-this-blog-a-hugo-experiment-real-numbers-and-what-a-migration-would-take/</guid><description>&lt;p&gt;&lt;strong&gt;Update of November 6, 2026:&lt;/strong&gt; It has since been decided and done: this blog now runs on Hugo. &lt;a href="https://www.apt-upgrade.me/2026/11/06/this-blog-now-runs-on-hugo-no-wordpress-no-kubernetes-and-stable-http-3/"&gt;What happened along the way is here.&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; This blog is mostly text and images, yet it runs on Kubernetes with a database, a PHP pool, a cache and ten plugins. So I rebuilt a part of it as a static site with Hugo and compared the two. The result surprised me in both directions: for readers, the speed gain is smaller than expected. For maintenance, the gain is much larger. &lt;strong&gt;The decision is not made. This blog still runs on WordPress.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Deep Dive: AIDE and rkhunter on a K3s Host – Integrity Checks Without Drowning in False Alarms</title><link>https://www.apt-upgrade.me/2026/11/05/deep-dive-aide-and-rkhunter-on-a-k3s-host-integrity-checks-without-drowning-in-false-alarms/</link><pubDate>Thu, 05 Nov 2026 08:36:43 +0100</pubDate><guid>https://www.apt-upgrade.me/2026/11/05/deep-dive-aide-and-rkhunter-on-a-k3s-host-integrity-checks-without-drowning-in-false-alarms/</guid><description>&lt;p&gt;An integrity checker is only as good as the mails it sends. If it reports hundreds of changes every morning, nobody reads them after a week – and the one real finding gets lost with them. That was my problem with AIDE and rkhunter on three K3s hosts: both worked, but mostly they reported things I had caused myself.&lt;/p&gt;&#10;&lt;p&gt;This deep dive shows what the two tools do, where the noise comes from on a Kubernetes host, and how the baseline follows every intended change.&lt;/p&gt;</description></item><item><title>The Ansible Tour, Part 5: IT Security – Firewall, SSH, fail2ban, Hardening, SELinux and Detection</title><link>https://www.apt-upgrade.me/2026/10/19/ansible-tour-part-5-security/</link><pubDate>Mon, 19 Oct 2026 20:34:02 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/10/19/ansible-tour-part-5-security/</guid><description>&lt;p&gt;&lt;em&gt;Part 5 of the &lt;a href="https://www.apt-upgrade.me/2026/10/14/ansible-tour-part-1-framework/"&gt;Ansible Tour&lt;/a&gt;. After the platform, the blog and Nextcloud, this part gathers all security roles in one place, across both stacks. The series describes release &lt;a href="https://github.com/aptupgrademe/www_k3s/tree/v3.3.0"&gt;v3.3.0&lt;/a&gt;, with later changes added as updates.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Security here comes from layers: each one catches what the previous one missed. From the outside in, these are the firewall, the SSH login, the reaction to attacks in the logs (fail2ban), the hardening of the operating system, containment by SELinux, and detection by auditd, AIDE, rkhunter and ClamAV. The code is public, so an attacker can read it too. That is fine: the protection has to come from keys, layers and alerts, not from secrecy. Exact thresholds still stay vague here.&lt;/p&gt;</description></item><item><title>Defense in Depth: Nine Layers Between the Internet and My Servers</title><link>https://www.apt-upgrade.me/2026/10/13/defense-in-depth-nine-layers/</link><pubDate>Tue, 13 Oct 2026 21:30:35 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/10/13/defense-in-depth-nine-layers/</guid><description>&lt;p&gt;A blog and two Nextcloud servers for local organisations: nothing on them is worth a targeted attack, and that is exactly why they get attacked. Not by someone who wants &lt;em&gt;my&lt;/em&gt; data, but by scanners that try every IP address on the internet, every hour, with the same handful of tricks. Most of them give up after the first locked door. The question is what happens with the ones that don&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Germany Only: Geo-Fencing SSH with nftables and Ansible (and What My Logs Said About Bots and Readers)</title><link>https://www.apt-upgrade.me/2026/10/01/geo-fencing-ssh-with-nftables-and-ansible/</link><pubDate>Thu, 01 Oct 2026 13:51:27 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/10/01/geo-fencing-ssh-with-nftables-and-ansible/</guid><description>&lt;p&gt;After moving two &lt;a href="https://nextcloud.com/"&gt;Nextcloud&lt;/a&gt; instances to new servers this week, I asked a simple question: &lt;em&gt;do my three servers - this blog and the two Nextclouds - attract different kinds of attackers?&lt;/em&gt; The answer was mostly &amp;ldquo;no, it&amp;rsquo;s the same background noise everywhere&amp;rdquo;. Except for one line that bugged me: &lt;strong&gt;SSH&lt;/strong&gt;. It runs on a non-standard port, accepts keys only, and fail2ban watches it. And yet the blog alone logged around &lt;strong&gt;16 connection attempts per hour&lt;/strong&gt; to the SSH daemon, from all over the world.&lt;/p&gt;</description></item><item><title>One Year Later: I Finally Open-Sourced My Homelab K3s Stack</title><link>https://www.apt-upgrade.me/2026/05/17/one-year-later-i-finally-open-sourced-my-homelab-k3s-stack/</link><pubDate>Sun, 17 May 2026 19:34:12 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/05/17/one-year-later-i-finally-open-sourced-my-homelab-k3s-stack/</guid><description>&lt;p&gt;In a few of my recent posts I mentioned that I was trying to figure out how to publish my homelab automation code *without accidentally open-sourcing my entire infrastructure along with it* 😅&lt;/p&gt;&#10;&lt;p&gt;Turns out that&amp;rsquo;s a surprisingly non-trivial problem when your Ansible inventory looks like a cyberpunk treasure chest full of vaults, secrets and host-specific variables. 🔐🐉&lt;/p&gt;&#10;&lt;p&gt;After a bit of trial, error, caffeine and questionable life choices… I finally found a setup that works beautifully:&lt;/p&gt;</description></item><item><title>git log –since=”1 year ago”: One Year of apt-upgrade.me &amp;&amp; Publishing the Ansible Playbooks for Nextcloud on K3s</title><link>https://www.apt-upgrade.me/2026/05/15/git-log-since1-year-ago-one-year-of-apt-upgrade-me-publishing-the-ansible-playbooks-for-nextcloud-on-k3s/</link><pubDate>Fri, 15 May 2026 14:18:55 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/05/15/git-log-since1-year-ago-one-year-of-apt-upgrade-me-publishing-the-ansible-playbooks-for-nextcloud-on-k3s/</guid><description>&lt;p&gt;There comes a point in every homelab journey where you look at your pile of&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;bash scripts&lt;/strong&gt;, hand-crafted config files, and sticky notes that say things like&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&amp;ldquo;remember to chown /data before starting&amp;rdquo;&lt;/em&gt; — and you decide:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;enough.&lt;/strong&gt; 😅&lt;/p&gt;&#10;&lt;p&gt;This is that post. Today I&amp;rsquo;m publishing the Ansible playbooks I&amp;rsquo;ve been using to deploy&lt;/p&gt;&#10;&lt;p&gt;and operate &lt;strong&gt;Nextcloud&lt;/strong&gt; ☁️ and &lt;strong&gt;WordPress&lt;/strong&gt; 📝 on a&lt;/p&gt;&#10;&lt;p&gt;single-node K3s cluster running on AlmaLinux 9.&lt;/p&gt;&#10;&lt;p&gt;Everything is &lt;strong&gt;infrastructure-as-code&lt;/strong&gt;, fully &lt;em&gt;idempotent&lt;/em&gt;,&lt;/p&gt;</description></item><item><title>From Debian to AlmaLinux to K3s: Or How I Accidentally Built a Mini Cloud 🚀</title><link>https://www.apt-upgrade.me/2026/03/30/from-debian-to-almalinux-to-k3s-or-how-i-accidentally-built-a-mini-cloud-%F0%9F%9A%80/</link><pubDate>Mon, 30 Mar 2026 20:02:37 +0200</pubDate><guid>https://www.apt-upgrade.me/2026/03/30/from-debian-to-almalinux-to-k3s-or-how-i-accidentally-built-a-mini-cloud-%F0%9F%9A%80/</guid><description>&lt;p&gt;If you’ve stumbled across my previous post&lt;/p&gt;&#10;&lt;a href="https://www.apt-upgrade.me/2026/02/26/%f0%9f%a7%a0-operating-community-nextcloud-instances-with-ansible-almalinux-selinux-and-a-podman-based-collabora-stack/" target="_blank" rel="noopener"&gt; &#10;&lt;p&gt;“Operating Community Nextcloud Instances with Ansible, AlmaLinux, SELinux and a Podman-based Collabora Stack”&lt;/p&gt;&#10;&lt;p&gt;&lt;/a&gt;,&lt;/p&gt;&#10;&lt;p&gt;you already know this started as a totally reasonable idea.&lt;em&gt;(Narrator voice: It was not a totally reasonable idea.)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="the-original-plan-leave-debian-embrace-selinux"&gt;The Original Plan™: Leave Debian, Embrace SELinux&lt;/h2&gt;&#10;&lt;p&gt;At some point I thought: “Hey, why not move from Debian to AlmaLinux?”&lt;/p&gt;&#10;&lt;p&gt;Main reason? &lt;strong&gt;SELinux&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Because nothing says “fun weekend project” like debugging security contexts at 2 AM.&lt;/p&gt;</description></item><item><title>🧠 Operating Community Nextcloud Instances with Ansible, AlmaLinux, SELinux and a Podman-based Collabora Stack</title><link>https://www.apt-upgrade.me/2026/02/26/%F0%9F%A7%A0-operating-community-nextcloud-instances-with-ansible-almalinux-selinux-and-a-podman-based-collabora-stack/</link><pubDate>Thu, 26 Feb 2026 15:27:38 +0100</pubDate><guid>https://www.apt-upgrade.me/2026/02/26/%F0%9F%A7%A0-operating-community-nextcloud-instances-with-ansible-almalinux-selinux-and-a-podman-based-collabora-stack/</guid><description>&lt;p&gt;I currently operate multiple &lt;strong&gt;Nextcloud instances&lt;/strong&gt; for two local community organizations in a purely voluntary capacity.&lt;/p&gt;&#10;&lt;p&gt;The original motivation was twofold: &lt;strong&gt;enabling digital sovereignty&lt;/strong&gt; while turning the entire setup into a personal &lt;strong&gt;learning sandbox&lt;/strong&gt;. 🚀The initial deployments were provisioned using &lt;strong&gt;Ansible&lt;/strong&gt;. However, the automation pipeline never reached full end-to-end maturity; smaller adjustments and operational tweaks were still executed manually. 🔧Historically, each Nextcloud instance had its own dedicated playbook. While functional, this architecture revealed structural weaknesses over time — particularly when &lt;strong&gt;synchronized or centralized changes&lt;/strong&gt; across both environments became necessary. ⚙️&lt;/p&gt;</description></item></channel></rss>