summaryrefslogtreecommitdiff
path: root/fw/doc/design.md
diff options
context:
space:
mode:
Diffstat (limited to 'fw/doc/design.md')
-rw-r--r--fw/doc/design.md11
1 files changed, 11 insertions, 0 deletions
diff --git a/fw/doc/design.md b/fw/doc/design.md
index 1c78db1..c45c86b 100644
--- a/fw/doc/design.md
+++ b/fw/doc/design.md
@@ -114,6 +114,17 @@ stays an ordered list and not a lookup. An unrecognised attribute is
fatal: silently ignoring `prot=tcp` would leave a rule matching every
protocol, and a typo that fails open is not something a firewall may do.
+**Named, not filtered.** What the synthetic `/net` contains is a list
+of what is served, not a list of what to hide. A list of things to deny
+was wrong twice: `trans` installs kernel address translations and devip
+gates it with `iseve()`, which through a proxy is *fw's* identity and
+not the caller's; and `log`, a trace of every connection on the machine,
+had only its write refused when reading it was the leak. Both times the
+bug was an omission from a list, which is a kind of bug a whitelist
+cannot have. A protocol nobody thought to name is a protocol nobody can
+reach — the same direction the rule parser fails in when it meets an
+attribute it does not know.
+
**First match wins, default deny.** Firewall matching is a solved
interface. Being different about it would be cost for its own sake.