Create: infrastructure/ana-colo-security-issues.md
This commit is contained in:
@@ -0,0 +1,161 @@
|
|||||||
|
---
|
||||||
|
created: '2026-04-16T00:45:34+00:00'
|
||||||
|
id: fd7ea587-115c-4dfd-85d6-64a71da67f98
|
||||||
|
keywords:
|
||||||
|
- DNS amplification
|
||||||
|
- hardcoded secrets
|
||||||
|
- plaintext credentials
|
||||||
|
- no firewall
|
||||||
|
- no health checks
|
||||||
|
- no resource limits
|
||||||
|
- no monitoring
|
||||||
|
- traefik debug
|
||||||
|
- portainer outdated
|
||||||
|
- rustdesk outdated
|
||||||
|
- UTM stale
|
||||||
|
links: []
|
||||||
|
modified: '2026-04-16T00:45:34+00:00'
|
||||||
|
summary: All 23 security and quality issues found during the ana-colo infrastructure
|
||||||
|
survey on 2026-04-15, organized by severity with remediation notes.
|
||||||
|
tags:
|
||||||
|
- infrastructure
|
||||||
|
- ana-colo
|
||||||
|
- security
|
||||||
|
- issues
|
||||||
|
- remediation
|
||||||
|
title: Ana Colo — Security and Quality Issues
|
||||||
|
---
|
||||||
|
|
||||||
|
# Ana Colo — Security and Quality Issues
|
||||||
|
|
||||||
|
> **Survey date:** 2026-04-15
|
||||||
|
> **Total findings:** 23 (3 critical, 7 medium, 13 low)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔴 Critical
|
||||||
|
|
||||||
|
### 1. DNS exposed to the internet (FortiGate policy 61)
|
||||||
|
|
||||||
|
- **Policy:** wan1 → internal DNS ALLOW ALL
|
||||||
|
- **Risk:** DNS amplification attack vector — anyone on the internet can query the internal DNS resolver
|
||||||
|
- **Fix:** Restrict DNS source to internal zones and known VPN subnets only
|
||||||
|
|
||||||
|
### 2. Hardcoded secrets in Docker compose files
|
||||||
|
|
||||||
|
- **Affected files:**
|
||||||
|
- `synapse/compose.yaml` — Postgres password
|
||||||
|
- `seafile/compose.yaml` — MySQL root password (also duplicated in .env)
|
||||||
|
- `gitea/compose.yaml` — DB password
|
||||||
|
- **Risk:** Secrets committed to git, visible to anyone with compose file access
|
||||||
|
- **Fix:** Move all secrets to `.env` files with 600 permissions; never commit secrets to version control
|
||||||
|
|
||||||
|
### 3. Plaintext secrets in config files
|
||||||
|
|
||||||
|
- **Affected files:**
|
||||||
|
- `synapse/homeserver.yaml` — DB password, registration secret, macaroon key, form secret, appservice tokens
|
||||||
|
- `mattermost/config.json` — SendGrid API key, SMTP password, encryption keys, salts
|
||||||
|
- `mailrise/mailrise.conf` — SendGrid API key, Mattermost webhook tokens
|
||||||
|
- **Risk:** Credentials stored in version-controllable files, exposed to anyone with read access
|
||||||
|
- **Fix:** Externalize to `.env` or a secrets manager; add config files to `.gitignore`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🟡 Medium
|
||||||
|
|
||||||
|
### 4. Disabled but present ollama VIP + open policy
|
||||||
|
|
||||||
|
- **Details:** VIP "ollama-in" is disabled (good) but firewall policy 31 still allows :11434 from WAN
|
||||||
|
- **Fix:** Remove both the VIP and the policy
|
||||||
|
|
||||||
|
### 5. WebDAV without TLS
|
||||||
|
|
||||||
|
- **Details:** Port 8444 to NAS — raw TCP; NAS may not serve TLS
|
||||||
|
- **Fix:** Route through Traefik for TLS termination, or verify NAS is serving TLS
|
||||||
|
|
||||||
|
### 6. No health checks on most services
|
||||||
|
|
||||||
|
- **Details:** 13 of 20 containers have no health checks configured
|
||||||
|
- **Fix:** Add `healthcheck` directives to all compose files
|
||||||
|
|
||||||
|
### 7. No resource limits on any container
|
||||||
|
|
||||||
|
- **Details:** 20 containers sharing 16GB RAM with no memory or CPU limits
|
||||||
|
- **Fix:** Add `deploy.resources.limits` to all compose files
|
||||||
|
|
||||||
|
### 8. No monitoring stack
|
||||||
|
|
||||||
|
- **Details:** No Prometheus, Grafana, Loki, or log aggregation deployed
|
||||||
|
- **Fix:** Deploy monitoring (separate task)
|
||||||
|
|
||||||
|
### 9. No backup automation visible
|
||||||
|
|
||||||
|
- **Details:** Restic server exists but no client backup jobs found
|
||||||
|
- **Fix:** Define and deploy backup schedules for all critical data
|
||||||
|
|
||||||
|
### 10. FortiGate UTM features stale
|
||||||
|
|
||||||
|
- **Details:** Virus DB: 2018, IPS DB: 2015
|
||||||
|
- **Fix:** Update subscriptions or confirm this is intentional
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🟢 Low
|
||||||
|
|
||||||
|
### 11. Traefik debug logging in production
|
||||||
|
|
||||||
|
- **Details:** `--log.level=DEBUG` is running in production
|
||||||
|
- **Fix:** Set to INFO or WARN
|
||||||
|
|
||||||
|
### 12. Traefik dashboard unprotected on :8380
|
||||||
|
|
||||||
|
- **Fix:** Add basic auth or restrict to internal sources
|
||||||
|
|
||||||
|
### 13. Stale commented-out configs in traefik.yml
|
||||||
|
|
||||||
|
- **Details:** Old Route53 DNS challenge, multiple cert resolvers
|
||||||
|
- **Fix:** Clean up
|
||||||
|
|
||||||
|
### 14. Portainer CE 3 years old + agent 2 years old
|
||||||
|
|
||||||
|
- **Fix:** Update images or remove (Dockge is the replacement)
|
||||||
|
|
||||||
|
### 15. RustDesk image 13 months old
|
||||||
|
|
||||||
|
- **Fix:** Update image
|
||||||
|
|
||||||
|
### 16. IT Tools image 13 months old
|
||||||
|
|
||||||
|
- **Fix:** Update image
|
||||||
|
|
||||||
|
### 17. Dockge backup uses untagged custom image (9392b1d81976)
|
||||||
|
|
||||||
|
- **Fix:** Tag the image or document its source
|
||||||
|
|
||||||
|
### 18. Firewall policy named "DELETE"
|
||||||
|
|
||||||
|
- **Details:** Policy 50: internal → mgmt ALLOW ALL
|
||||||
|
- **Fix:** Remove or rename
|
||||||
|
|
||||||
|
### 19. Redundant firewall policies
|
||||||
|
|
||||||
|
- **Details:** Policies 1 and 6 both do internal → wan1 ALLOW ALL
|
||||||
|
- **Fix:** Consolidate into a single policy
|
||||||
|
|
||||||
|
### 20. wan2 has no IP (DHCP failed/disabled)
|
||||||
|
|
||||||
|
- **Fix:** Configure the interface or disable it
|
||||||
|
|
||||||
|
### 21. Inconsistent restart policies across stacks
|
||||||
|
|
||||||
|
- **Details:** Some use `unless-stopped`, some have none
|
||||||
|
- **Fix:** Standardize to `unless-stopped`
|
||||||
|
|
||||||
|
### 22. No logging configuration on any container
|
||||||
|
|
||||||
|
- **Fix:** Add logging driver options (`max-size`, `max-file`)
|
||||||
|
|
||||||
|
### 23. Several services exposed on direct ports instead of through Traefik
|
||||||
|
|
||||||
|
- **Affected:** SillyTavern :8100, Open WebUI :3100, Dockge :5001, Portainer :9000/:9001, IT Tools :8780, Mailrise :8025
|
||||||
|
- **Note:** Some may be intentional (admin tools). Document the reason for each or add Traefik routing.
|
||||||
Reference in New Issue
Block a user