Skip to content

[EPIC] this round of heinzel changes — order, shared files, open decisions #27

Description

@jpawlowski

16 open PRs, a little under 5 hours of review in total, split into four rounds. Each round stands on its own: stop after any of them. Start with round 1; it fixes things that go wrong on main today.

Round 1: fixes for today's main (≈ 45 min)

PR What goes wrong today Review
#43 A short name like host01 does not resolve with dig, so the blacklist and read-only checks by IP are skipped. 10m
#29 OpenSSH 10.4 prints PermitRootLogin instead of permitrootlogin, so the audits no longer see sshd's settings. Also reads Include files and -f daemons. 10m
#13 The taboo guard lets writes to sshd_config and host keys through on FreeBSD, OPNsense and pfSense, where they live outside /etc/ssh. 5m
#15 heinzel knows no SSH port but 22: such hosts rely on ~/.ssh/config, and a firewall change opens only 22 and can lock heinzel out. 15m
#45 A second host01 in another search domain gets the first one's server memory. Records the FQDN; mails use it as sender. 1m
#47 A .local name answered by both mDNS and an old DNS zone can make the alias check link two different servers or report a migration that never happened. 5m

Round 2: SSH certificates (≈ 40 min)

PR What it adds Review
#14 Host and user certificates, expiry, principals, revocation, work across all servers of an existing SSH CA. Contains #29. 30m
#31 Whether an SSH CA hands out certificates too freely (anyone, any principal, root, long lifetimes). Contains #14. 10m

Decision, nothing waits for it: #18 – may heinzel write the four SSH CA directives into its own sshd_config.d file, or does all of sshd_config stay taboo?

Round 3: security and network (≈ 1 h 40 min)

PR What it adds Review
#23 A host filtering with plain nftables is reported as "no active firewall"; ports Docker publishes past the host firewall go unnoticed. 30m
#16 heinzel misreads sudo -n and falls back to root SSH where sudo would work; records where accounts and sudo rules come from. 20m
#22 Mesh VPNs (Tailscale, NetBird, …), heinzel's own access path, SSH servers that bypass sshd. 20m
#20 A network profile per host, checked for drift. 30m

Decision in #20: should every first contact run a network check (one SSH call on Linux) and create a network.md per host?

Round 4: new capabilities (≈ 1 h 35 min)

PR What it adds Review
#37 Run one task on several servers in one call (bin/heinzel-fanout). 20m
#40 Containers and VMs as servers; reach a guest through its host. 30m
#41 The guard asks before a guest is stopped or deleted. After #40, whose rule it enforces. 15m
#34 Own rules for Proxmox VE, OPNsense, pfSense and Home Assistant OS. 30m

Decisions:

Afterwards

One small PR adds the links between the new rule files. They are left out for now so that every PR can merge on its own.

Status

Checked on 2026-09-19: every pair of these PRs merges cleanly, and so do all 16 together in any order; the guard's test suite passes on the result (743 passed, 0 failed). Notes for the PR authors are in a comment below.

An AI agent wrote this text in my name. I know that is problematic.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions