-
released this
2026-06-20 11:13:27 +00:00 | 28 commits to main since this releaseA large hardening, operability, and polish cycle: the mirror now runs rootless and
self-hardens the host, thedeploy.shstatus/management UX was rebuilt, and the repo
was reorganised intosrc/+config/+doc/.Added
- System hardening (
deploy.sh harden, also during install; opt out with--no-harden):
guarded key-only SSH, fail2ban, hourly automatic security updates with auto-reboot,
Docker-safe sysctl tuning, firewall least-privilege, and enforced filesystem permissions.
Interactive enable/disable/re-apply per measure. Documented indoc/SYSTEM-HARDENING.md. - Web-tier abuse protection: fail2ban
caddy-floodjail (firewall-bans HTTP 429 floods from
the access log) +recidivejail; an optional SSH never-ban whitelist (PM_SSH_WHITELIST). - Security response headers (
web.security_headers):nosniff,X-Frame-Options: DENY,
Referrer-Policy,Serverbanner removed, and HSTS on HTTPS. - Management subcommands:
status,start/stop/restart/down,logs,refresh,
harden,set-fqdn,set-mirror-auth,set-mirror-creds,set-goaccess-creds,
open-goaccess, andclear-config [data](uninstall/reconfigure). - Status dashboard: boxed, colour-coded sections (System, Security, Services, Mirror,
Mirror config, Content, Sync) with live sync progress, "last sweep X ago", blocked-IP count,
effective rate limit, the outbound User-Agent, and the running version + commit ref. - Operator identity (
operator.{name,email}): shown in the page footer and sent in the
outbound User-Agent so MikroTik can contact whoever runs the mirror. - Timezone support (
TZ): release/modified dates render in the operator's timezone in
RFC 5322 format;deploy.shprompts for and sets the host timezone. - Configurable TLS renewal window (
web.tls.renewal_window_ratio). config/env.examplereference; repository-layout and disk-sizing docs in the README.
Changed
- Repository layout:
deploy.sh,sync/,web/,monitor/moved undersrc/;
example config underconfig/; docs underdoc/. Compose build contexts updated. - Containers run rootless (
uid:gid 1000,no-new-privileges); Caddy keeps
NET_BIND_SERVICEto bind 80/443. Host-bound data is owned by1000:1000. - Rate limiting now defaults to all routes at 600 r/m (was feed-only at 60 r/m); tunable.
- Download phase runs with parallel workers (default 2); release dates parsed from CHANGELOG.
- Footer year is dynamic; redundant author link removed in favour of the repo link + version.
Fixed
- Completed architectures now skip all fetches/probes on later sweeps — no more per-sweep
CDN hammering for files MikroTik doesn't offer (steady-state sweep dropped from minutes to seconds). - In-progress versions/architectures and
*.partfiles are hidden until fully mirrored. - fail2ban requires the firewalld backend to actually enforce bans (ordered first, warned otherwise);
re-applying an already-enabled measure now refreshes its config. - Real-time GoAccess board WebSocket fixed end-to-end (path, protocol, public port).
Security
- See Added — host hardening, rootless containers, web-tier abuse protection, and security
headers are the headline of this release. Seedoc/SYSTEM-HARDENING.md.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- System hardening (