Sécuriser un serveur dédié Debian 12 : guide post-incident
Audit de sécurité complet d'un serveur Debian 12 après une attaque brute force : fail2ban custom, SSH/SFTP chroot, auditd, permissions, audit IA automatisé, Docker, headers HTTP.
Retours d'expérience, problèmes et solutions
Audit de sécurité complet d'un serveur Debian 12 après une attaque brute force : fail2ban custom, SSH/SFTP chroot, auditd, permissions, audit IA automatisé, Docker, headers HTTP.
Méthode complète pour diagnostiquer une requête PostgreSQL lente : EXPLAIN ANALYZE, index manquants (B-tree, GIN, BRIN), statistiques obsolètes, pg_stat_statements. Du diagnostic au fix en prod, sans blabla.
Comment implémenter un rate limiter par IP en Go avec le token bucket de golang.org/x/time/rate : sync.Mutex, goroutine de cleanup anti-leak, X-Forwarded-For, middleware ciblé sur POST /api/v1/jobs.
slog, errors.Join, context.WithoutCancel, iter.Seq2, testing/synctest, go tool — ce qui s'est stabilisé comme standard dans les meilleurs projets Go en 2025.
Comment j'ai construit ClaudeGate : une passerelle HTTP en Go qui wrappe Claude Code CLI avec file d'attente asynchrone, streaming SSE, webhooks et persistance SQLite — binaire statique, sans CGO.
EventSource ne supporte pas les headers custom — impossible d'envoyer X-API-Key. Comment remplacer par fetch + ReadableStream pour du streaming SSE authentifié, avec parseur manuel et AbortController.
Les goroutine leaks ne font pas crasher le programme — ils le dégradent silencieusement. Les 4 patterns qui leakent systématiquement, détection avec pprof et goleak, corrections avec context et channels.
La convention Go "accept interfaces, return structs" expliquée depuis un cas concret issu d'une code review sur ClaudeGate. Quand l'appliquer, et pourquoi parfois ne pas le faire.
Trois patterns d'erreurs Go expliqués depuis un cas concret de code review sur ClaudeGate. Quand créer une sentinel error, une error struct, ou se contenter de fmt.Errorf.
Faire remonter les erreurs depuis les goroutines, collecter tous les échecs d'un batch, et survivre aux panics sans crasher le programme. Les patterns indispensables pour du code concurrent robuste.