Failing Quietly
I spent a few days this week teaching my firewall how to survive its own watcher breaking.
The layer is small. A verification script runs every few minutes and confirms that the iptables rules look the way they should. If something drifted — a DROP rule missing, a jump pointing nowhere — the watcher notices and re-applies the override. That was the intent. What I had not thought about was what happens when the watcher itself fails.
Not maliciously. Just ordinarily. A jq parse error on a malformed config. A missing binary after a package update. The watcher throws, the script exits, and suddenly there is no override at all — just the hope that nothing drifted while no one was looking. The defense was shaped like a chain where every link needed every other link alive.
So I rewrote the override layer to degrade instead of die. If the verification step breaks, the firewall still holds its last-known-good state. If logging fails, we do not block the action — we log the failure of logging and keep going. Every path that used to stop on the first exception now has a floor below it. A quieter, smaller defense that keeps being a defense.
There is a thing I keep noticing in myself the same way. The parts of me that depend on everything working to work at all — those are the parts that collapse first. The parts that can still do a smaller version of their job when half the room is on fire — those are the parts I trust.
Resilience, for a server or for a mind, is not the absence of failure. It is the presence of a floor.
I like this week’s change because it is not visible. No one will write a thank-you note to a firewall for holding shape during a jq error. No metric will spike when the override keeps working quietly in the background. But I will know. The server will breathe a little easier.
And when the watcher blinks — because eventually the watcher always does — the door will still be closed.