skills: fleet map, default-deny standard, modded-app and vuln-scan skills
- server-fleet-map: add gringo row - bastille-jail-provisioning: elevate default-deny-outbound to the standard for every new jail; reference gringo's live pf.conf - modded-app-update-pattern: new skill, fork/rebase pattern for locally patched apps; uses tailnetatlas on gringo as the concrete example - dependency-vuln-scanning: new skill, npm audit / pip-audit / osv-scanner cadence for deployments and monthly thereafter
This commit is contained in:
@@ -130,6 +130,33 @@ curl -H 'Host: <domain>' http://<jail-ip>/
|
||||
Only switch to testing via the host's `127.0.0.1` (or the public domain)
|
||||
once the `sites-enabled` vhost for this specific site actually exists.
|
||||
|
||||
## Default-deny outbound is the standard for every new jail
|
||||
|
||||
**This is no longer an incident workaround — it is the default posture for
|
||||
any jail created on any Bastille host in this fleet.** Most jails are
|
||||
reverse-proxied inbound-only services and do not need outbound internet
|
||||
access. Denying it by default limits blast radius if a jail is compromised
|
||||
(fewer callback/exfil paths, no unexpected update pings).
|
||||
|
||||
When you finish provisioning a new jail, it must land in the `block out`
|
||||
ruleset, not the `pass out` ruleset. Only add it to the allowed list if its
|
||||
actual function genuinely requires external reach, and document the reason
|
||||
in `pf.conf` next to the IP:
|
||||
|
||||
```
|
||||
# Jails that need real outbound internet access (function confirmed):
|
||||
table <outbound_allowed> { 10.20.0.14, 10.20.0.22, ... }
|
||||
nat on $ext_if from <outbound_allowed> to any -> ($ext_if)
|
||||
pass out quick on $ext_if from <outbound_allowed> to any keep state
|
||||
block out quick on $ext_if from 10.20.0.0/24 to any
|
||||
```
|
||||
|
||||
The live reference implementation is gringo's `/etc/pf.conf` (tracked in
|
||||
`infra/gringo/pf/pf.conf`). Before considering any new jail complete, verify
|
||||
its IP is either in the deny block or explicitly listed with a comment
|
||||
explaining why it needs outbound access. "Might need it later" is not a
|
||||
reason.
|
||||
|
||||
## Every jail needs a dedicated NPM-facing port, not just `listen 80`
|
||||
|
||||
**Confirmed real gap, 2026-08-07**: on jail hosts fronted by a shared
|
||||
|
||||
Reference in New Issue
Block a user