# Networking & Infrastructure ## nftables Flush Ruleset on Remote Hosts On remote hosts, `nftables flush ruleset` followed by a failed rule load leaves the host with NO firewall. SSH survives only on existing connections — new connections are blocked or allowed depending on the default policy. **Always validate rules before applying:** `nft -c -f ` does a dry-run parse. For extra safety, deploy a cron-based auto-rollback timer that reverts rules unless explicitly confirmed (similar to `shutdown -c` pattern). ## systemd Socket Activation Overrides Config File Ports On modern Linux systems (Ubuntu 24.04+), systemd socket activation controls the listening port for services like SSH. Editing the service config file alone (e.g., `sshd_config Port 2222`) has no effect — the socket unit still binds the original port. **Check socket activation first:** `systemctl cat .socket` shows whether socket activation is in play. If so, override the socket unit's `ListenStream` directive, not the service config. ## Docker Sets iptables FORWARD Policy to DROP Docker sets the iptables FORWARD chain default policy to DROP. This affects ALL forwarding on the host, not just Docker traffic. Non-Docker forwarding (VPN, VM bridges, custom NAT) silently breaks. **Fix:** Add explicit ACCEPT rules in the `DOCKER-USER` chain for non-Docker forwarding needs. This chain is processed before Docker's own rules and persists across Docker restarts. ## HTTP Host Header vs TLS SNI Are Different Layers When proxying to a backend over HTTPS, two independent identifiers must be set correctly: - **TLS SNI** — sent during the TLS handshake, used for certificate selection. Missing SNI causes `x509: cannot validate certificate for `. - **HTTP Host header** — sent after TLS is established, used for virtual host routing. Missing or wrong Host header causes 404 from the backend. A reverse proxy must set both. They often need to be the same value, but they're configured independently. ## Wildcard Certs in Auto-Renewing Proxies Auto-renewing proxies (Caddy, Traefik with Let's Encrypt, etc.) that also support file-loaded certificates treat file-loaded certs as globally available. A wildcard cert loaded for one site block will match ALL matching subdomains, silently preventing automatic certificate issuance for other sites. **Rule:** Use automatic certificate management for all sites. Don't mix file-loaded and automatic certs unless you understand the matching priority.