← Back to overview
πŸ”’ Reference Β· Security

Security as layers, not as a wall

Anything exposed to the open internet is scanned around the clock β€” that is not a threat scenario, it is the normal state. The answer is not a single wall but a chain of independent controls: filter before computing, check before rolling out, and look regularly for what was missed. This page describes the principles on purpose β€” the configuration stays inside.

Access & reverse proxy
🌐Internetone HTTPS entry
↓
πŸ”€Reverse proxywildcard TLS
↓
πŸ”‘SSO gatelogin required
PUBLIC Β· BEHIND SSO
ImmichNextcloudWiki.jsForgejoPaperless
INTERNAL ONLY Β· UNREACHABLE
PostgreSQL Γ—3RedisKroki
One entry, one login β€” internal services stay invisible.

πŸ§…Several independent layers

Every request passes edge filtering, transport encryption, the reverse proxy and the login gate in turn. None of those layers has to be perfect β€” they only have to fail independently, so a flaw in one does not carry the next one with it.

defense in depthindependentstaged

🚦Filter before computing

At the very front sit a rate limit and a reputation filter that turns away known scanner and attacker addresses before an application ever sees them. It was introduced first where a false positive costs nothing β€” and deliberately not where it could cut off the path to fixing it.

rate limitingreputation filterintroduced gradually

πŸ“œStrict rules in the browser

The browser is told what it may load at all: nothing from foreign servers, no embedded scripts. Fonts are therefore self-hosted on the same server β€” and as a side effect, opening this page discloses no IP address to a third party.

content security policyno CDNsself-hosted fonts

πŸ§ͺChecked before it ships

Every change runs through a pipeline that scans configuration and container images for known weaknesses automatically. The same inventory is scanned again while running β€” otherwise a weakness that only becomes known after the rollout would stay invisible.

checked at buildimage scanand at runtime

πŸ”‘Secrets do not belong in Git

Credentials live in the self-hosted password vault and are distributed from there into file-based secrets, instead of sitting as environment variables inside every container. Version control never holds a password, only the pointer to one.

vault as sourcefile-basednothing in Git

πŸ—ΊοΈMeasured, not guessed

The defensive posture is reviewed regularly against an established catalogue of defensive measures. What is missing becomes a tracked task β€” including the uncomfortable part of making blind spots visible in the first place.

catalogue reviewgaps as tasksrecurring
Measures in place
Defense in depthRate limitingReputation filteringStrict CSPVulnerability scanningFile-based secretsRecurring review