|
|
|
|
@@ -17,54 +17,54 @@ import (
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
|
|
|
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/aggregator"
|
|
|
|
|
chronyrender "git.netcell-it.de/projekte/edgeguard-native/internal/chrony"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/cluster"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/cluster/clustertls"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/cluster/jointoken"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/database"
|
|
|
|
|
firewallrender "git.netcell-it.de/projekte/edgeguard-native/internal/firewall"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/haproxy"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/handlers"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/license"
|
|
|
|
|
licsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/license"
|
|
|
|
|
chronyrender "git.netcell-it.de/projekte/edgeguard-native/internal/chrony"
|
|
|
|
|
squidrender "git.netcell-it.de/projekte/edgeguard-native/internal/squid"
|
|
|
|
|
unboundrender "git.netcell-it.de/projekte/edgeguard-native/internal/unbound"
|
|
|
|
|
wgrender "git.netcell-it.de/projekte/edgeguard-native/internal/wireguard"
|
|
|
|
|
kearender "git.netcell-it.de/projekte/edgeguard-native/internal/kea"
|
|
|
|
|
radiusrender "git.netcell-it.de/projekte/edgeguard-native/internal/freeradius"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/handlers"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/handlers/response"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/haproxy"
|
|
|
|
|
kearender "git.netcell-it.de/projekte/edgeguard-native/internal/kea"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/license"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/acme"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/alerts"
|
|
|
|
|
aptsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/apt"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/audit"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/backends"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/backendservers"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/backup"
|
|
|
|
|
backupremote "git.netcell-it.de/projekte/edgeguard-native/internal/services/backup/remote"
|
|
|
|
|
dnssvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/dns"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/aggregator"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/cluster/clustertls"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/cluster/jointoken"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/clusterjoin"
|
|
|
|
|
aptsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/apt"
|
|
|
|
|
dhcpsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/dhcp"
|
|
|
|
|
dnssvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/dns"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/domainheaders"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/domains"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/firewall"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/firewalllog"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/syslogs"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/forwardproxy"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/ipaddresses"
|
|
|
|
|
licsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/license"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/networkifs"
|
|
|
|
|
ntpsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/ntp"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/routingrules"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/secrets"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/staticroutes"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/session"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/setup"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts"
|
|
|
|
|
wgsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/wireguard"
|
|
|
|
|
dhcpsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/dhcp"
|
|
|
|
|
oidcsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/oidc"
|
|
|
|
|
radiussvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/radius"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/routingrules"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/secrets"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/session"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/setup"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/staticroutes"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/syslogs"
|
|
|
|
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts"
|
|
|
|
|
usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users"
|
|
|
|
|
wafsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/waf"
|
|
|
|
|
wgsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/wireguard"
|
|
|
|
|
squidrender "git.netcell-it.de/projekte/edgeguard-native/internal/squid"
|
|
|
|
|
unboundrender "git.netcell-it.de/projekte/edgeguard-native/internal/unbound"
|
|
|
|
|
wgrender "git.netcell-it.de/projekte/edgeguard-native/internal/wireguard"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var version = "1.2.35"
|
|
|
|
|
@@ -287,7 +287,7 @@ func main() {
|
|
|
|
|
// reload haproxy. Wird in Domains/Backends/RoutingRules-Handler
|
|
|
|
|
// injiziert, damit jede Änderung ohne expliziten render-config-
|
|
|
|
|
// Aufruf live geht. Errors werden geloggt, nicht failed
|
|
|
|
|
// (Row schon committed, Operator kann manuell re-triggern).
|
|
|
|
|
// (Row schon committed, Operator kann manuell re-triggering).
|
|
|
|
|
// Maintenance-Endpoints brauchen den Reloader — späte Wiring
|
|
|
|
|
// nachdem haproxyReloader-closure existiert.
|
|
|
|
|
haproxyReloaderForLater := func(ctx context.Context) error {
|
|
|
|
|
@@ -296,18 +296,18 @@ func main() {
|
|
|
|
|
systemHdl.WithMaintenance(setupStore, haproxyReloaderForLater)
|
|
|
|
|
|
|
|
|
|
// Audit-Wiring (Phase Polish): Settings + Auth-Mutationen
|
|
|
|
|
// landen jetzt im audit_log. Nodes-id ist die persistente
|
|
|
|
|
// landen jetzt im audit_log. Nodes-id ist die persistence
|
|
|
|
|
// /var/lib/edgeguard/node-id.
|
|
|
|
|
systemHdl.WithAudit(auditRepo, nodeID)
|
|
|
|
|
systemHdl.WithDB(pool)
|
|
|
|
|
systemHdl.WithConfigPreviewers(map[string]func(context.Context) (string, error){
|
|
|
|
|
"haproxy": haproxy.New(pool).RenderToString,
|
|
|
|
|
"nftables": firewallrender.New(pool).RenderToString,
|
|
|
|
|
"squid": squidrender.New(pool).RenderToString,
|
|
|
|
|
"unbound": unboundrender.New(pool).RenderToString,
|
|
|
|
|
"chrony": chronyrender.New(pool).RenderToString,
|
|
|
|
|
"wireguard": wgrender.New(pool, secretsBox).RenderToString,
|
|
|
|
|
})
|
|
|
|
|
"haproxy": haproxy.New(pool).RenderToString,
|
|
|
|
|
"nftables": firewallrender.New(pool).RenderToString,
|
|
|
|
|
"squid": squidrender.New(pool).RenderToString,
|
|
|
|
|
"unbound": unboundrender.New(pool).RenderToString,
|
|
|
|
|
"chrony": chronyrender.New(pool).RenderToString,
|
|
|
|
|
"wireguard": wgrender.New(pool, secretsBox).RenderToString,
|
|
|
|
|
})
|
|
|
|
|
setupHdl.WithAudit(auditRepo, nodeID)
|
|
|
|
|
setupHdl.WithClusterSupport(clusterStore, func(ctx context.Context) error {
|
|
|
|
|
return firewallrender.New(pool).Render(ctx)
|
|
|
|
|
@@ -411,7 +411,7 @@ func main() {
|
|
|
|
|
// services whose state feeds the auto-FW-rule generator (DNS
|
|
|
|
|
// listen-IPs, Squid ACL count, WG listen-port, NTP serve-clients).
|
|
|
|
|
// Service-Reload-Errors propagieren; FW-Errors werden nur
|
|
|
|
|
// geloggt (DB-Row ist commited, FW kann nachgezogen werden).
|
|
|
|
|
// geloggt (DB-Row ist committed, FW kann nachgezogen werden).
|
|
|
|
|
withFW := func(svc func(context.Context) error) func(context.Context) error {
|
|
|
|
|
return func(ctx context.Context) error {
|
|
|
|
|
if err := svc(ctx); err != nil {
|
|
|
|
|
@@ -449,14 +449,14 @@ func main() {
|
|
|
|
|
handlers.NewForwardProxyHandler(fwdProxyRepo, auditRepo, nodeID, withFW(squidReloader)).Register(authed)
|
|
|
|
|
|
|
|
|
|
// Unbound DNS reload — re-render edgeguard.conf + restart
|
|
|
|
|
// unbound. Listen-IPs triggern Auto-FW-Rule für udp/tcp 53.
|
|
|
|
|
// unbound. Listen-IPs triggering Auto-FW-Rule für udp/tcp 53.
|
|
|
|
|
unboundReloader := func(ctx context.Context) error {
|
|
|
|
|
return unboundrender.New(pool).Render(ctx)
|
|
|
|
|
}
|
|
|
|
|
handlers.NewDNSHandler(dnsRepo, auditRepo, nodeID, withFW(unboundReloader)).Register(authed)
|
|
|
|
|
|
|
|
|
|
// Chrony NTP reload — re-render edgeguard.conf + restart chrony.
|
|
|
|
|
// Listen-IPs + serve_clients triggern Auto-FW-Rule für udp/123.
|
|
|
|
|
// Listen-IPs + serve_clients triggering Auto-FW-Rule für udp/123.
|
|
|
|
|
chronyReloader := func(ctx context.Context) error {
|
|
|
|
|
return chronyrender.New(pool).Render(ctx)
|
|
|
|
|
}
|
|
|
|
|
@@ -502,7 +502,7 @@ func main() {
|
|
|
|
|
// Startup-Render nftables: stellt sicher dass Template-Änderungen
|
|
|
|
|
// aus einem Update (z.B. neue WireGuard forward-Chain-Auto-Regel)
|
|
|
|
|
// sofort nach dem API-Restart aktiv werden — ohne dass der
|
|
|
|
|
// Operator manuell eine Mutation triggern müsste. nft -f ist
|
|
|
|
|
// Operator manuell eine Mutation triggering müsste. nft -f ist
|
|
|
|
|
// idempotent und atomar; kein Dienst wird neu gestartet.
|
|
|
|
|
go func() {
|
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
|
|
|
|
|