He pulled up the man page on his laptop. pf.conf(5) . There it was, buried in the "Migration Notes" for 7.5: The from <list> syntax has been deprecated for non-route-related filter rules. Use an anchor or table for multiple source prefixes. Direct lists in a pass in rule will now raise a fatal syntax error. A fatal error. Not a warning. Not a "this might break." A stone-cold, refuse-to-start fatal error.
pfctl -sr pfctl: DIOCGETRULES: Device not configured Not configured? That meant PF wasn’t even running. He checked the logs.
OpenBSD 7.5-current (GENERIC) #5
He never trusted -current again.
“Firewall node gw-04-dfw in CARP backup state. Packet filter service failed to start.” pf configuration incompatible with pf program version
He wrote his post-mortem at dawn. Title: "PF_CONFIG_VERSION vs. PF_PROGRAM_VERSION: A Case of Silent Deprecation."
Julian leaned back. The problem wasn't malice. It wasn't a hacker. It was a ghost in the machine: a mismatch between the intent of a config (written for a forgiving world) and the reality of a program (now pedantic, unforgiving). He pulled up the man page on his laptop
His stomach turned to ice. Current. Not -release . Not -stable . Someone—a junior with a cowboy hat and a cron job—had pointed their package repository to the bleeding-edge snapshots. And the new PF, the one in 7.5-current , had changed.