Innovate, disrupt, code the future. đŸ’»đŸ”đŸš€

Build a Safe PF Firewall Baseline on FreeBSD

The old IP Filter article in this archive reflects an earlier FreeBSD firewall workflow. For a new FreeBSD host, start with PF and make the first policy deliberately small: retain console access, permit only the services the host provides, and validate the rules before enabling them at boot.

This is a documentation-verified baseline, not a copy-and-paste production policy. Interface names, management networks, service ports, IPv6 needs, and routing requirements vary by host. Apply it first from a console or an out-of-band management path so a typo does not strand an SSH-only system.

2026-07-25

Rename a Local FreeBSD User Account Safely

Renaming a FreeBSD account is more than changing a login name. A safe change preserves the numeric UID where possible, updates the primary group when appropriate, moves the home directory, repairs ownership, and checks files or scheduled jobs that still reference the old name.

Plan the change during a maintenance window. Do not rename an account that is actively logged in, owns a running service, or is the only administrative access path to the host. Keep a root or separate administrator console session open until the new account has been tested.

2026-07-25

Run a FreeBSD Guest with bhyve on a Current FreeBSD Host

bhyve is part of the FreeBSD base system and remains a practical choice when a FreeBSD host needs to run a small number of FreeBSD, Linux, OpenBSD, or Windows guests. This article updates the older FreeBSD 10.1 walkthrough with the workflow documented in the current FreeBSD Handbook. It deliberately uses the base-system example script rather than presenting an untested production framework.

The outcome is a FreeBSD guest connected to the same Layer-2 network as the host through a tap device and bridge. The commands are documentation-verified examples. Substitute the physical interface, guest name, disk location, memory, CPU count, and ISO release for your host.

2026-07-25

Patch etcd and Verify the Recovery Path

The 23 July etcd patch release fixed a watch authorization problem that could disclose events outside a user’s RBAC key range. The fix is available in v3.7.1, v3.6.14, and v3.5.33. This is a good reason to patch, but the release is also a useful reminder that an etcd maintenance window should prove more than a new binary starts.

This guide is for an administrator of a self-managed, TLS-enabled three-member etcd cluster. The finished result is a patched cluster with a verified endpoint health check, a recorded member view, and an off-node snapshot whose integrity has been checked. The commands are documentation-verified examples, not output from a production cluster. Replace the certificate paths, endpoint addresses, service name, package method, and backup location with values from your own installation.

2026-07-25

Hardening GitHub Actions Checkouts for Pull Requests

A pull request workflow often needs two things that should be kept separate: untrusted code to test and trusted repository credentials to comment, label, publish, or update a status. GitHub’s June 2026 actions/checkout changes made one dangerous combination harder to enable by accident, but they do not turn every pull request workflow into a safe deployment workflow.

This guide builds a review workflow that tests pull-request code with the least useful token possible, then shows the narrow case where pull_request_target is appropriate. The successful result is easy to inspect: a pull request runs the contributor’s code without repository write permissions, while a trusted follow-up job can add a label without checking out that code.

2026-07-24

Adding GPS Signal Fix Status to Grafana with Telegraf and InfluxDB

If you’re running a Raspberry Pi-based time server or GPS-equipped system and want visibility into the GPS signal status (2D, 3D fix, or no lock), you can use a simple Bash script and Telegraf to bring that data into your InfluxDB time series database — and visualize it in Grafana.

In this post, we’ll walk through how to:

  • Create a lightweight GPS fix monitoring script
  • Use Telegraf’s inputs.exec plugin to ingest the data
  • Store it in InfluxDB
  • Visualize GPS lock status in Grafana

🚀 Why Monitor GPS Fix Status?

When using GPS for time synchronization (especially with chrony or ntpd), it’s useful to know whether the GPS module actually has a signal lock:

2025-04-02

DNS Exfiltration With Python

In this post, we dive into the mechanics behind a DNS exfiltration tool written in Python. This project demonstrates how data can be covertly transmitted via DNS queries. I built this client‑server system to study DNS exfiltration techniques in a controlled, educational environment. Below, I detail the architecture, key design decisions, and provide annotated code snippets from both the client and server implementations.


1. Overview and Architecture

The project is divided into two main components:

2025-04-01

Understanding Dependency Injection in Python

Dependency Injection (DI) is a software design pattern that helps create loosely coupled, testable, and maintainable code. Instead of having classes create their own dependencies, those dependencies are “injected” from the outside. This blog post will walk you through a concrete Python example that demonstrates DI, along with alternate techniques like the Service Locator and Factory patterns.

What Is Dependency Injection?

At its core, dependency injection involves passing (or “injecting”) an object’s dependencies rather than instantiating them internally. The main benefits include:

2025-03-30

Stratum‑1 NTP Server on Raspberry Pi 5

This guide explains how to transform a fresh installation of Raspberry Pi OS into a stratum‑1 NTP server. The project leverages a GPIO‑based GPS module with PPS, the PTP hardware timestamping capability of the Ethernet interface, Chrony for NTP synchronization, and Telegraf with InfluxDB for monitoring.


1. Overview

In this project you’ll build a stratum‑1 NTP server using:

  • Raspberry Pi 5 as the host.
  • A GPS module (via the serial UART port) for an absolute time reference.
  • A PPS (Pulse Per Second) signal from the same GPS for sub-microsecond timing accuracy.
  • The PTP hardware timestamping on the Ethernet interface for improved precision on PTP packets.
  • Chrony for NTP time synchronization.
  • gpsd to interface with your GPS receiver.
  • Telegraf for monitoring various metrics (including Chrony statistics) sent to an InfluxDB backend.

2. Prerequisites and Required Hardware

Before you begin, ensure you have the following:

2025-03-28