fix(erreurs): cache multi-worker + sudo service account pour fail2ban

- Invalidation du cache 404 basée sur mtime de ignored_ips.json (tous les workers gunicorn voient la mise à jour)
- Chemins complets /usr/bin/sudo et /usr/bin/fail2ban-client pour éviter les erreurs PATH dans systemd
- Version 1.5.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Alpinux 2026-05-06 13:12:54 +02:00
parent a94bf12e4d
commit 7b9024ab05
3 changed files with 13 additions and 3 deletions

View file

@ -1,5 +1,14 @@
# Changelog — Alpinux Static
## [1.5.1] — 2026-05-06
### Corrigé
- Ignorer une IP : le cache 404 n'était pas invalidé dans tous les workers gunicorn — basculé sur une invalidation par `mtime` de `ignored_ips.json`
- Bannir une IP : chemins binaires complets (`/usr/bin/sudo`, `/usr/bin/fail2ban-client`) pour éviter les problèmes de `PATH` dans le contexte du service systemd
- Règle sudoers corrigée pour l'utilisateur `static-cdn` (compte de service) au lieu de `abonnelc`
---
## [1.5.0] — 2026-05-06
### Ajouté

View file

@ -1 +1 @@
1.5.0
1.5.1

View file

@ -514,7 +514,8 @@ def _log_files_404(days: int = 7) -> list:
def _parse_404s(days: int = 7) -> dict:
global _404_CACHE, _404_CACHE_TS
now = time.time()
if now - _404_CACHE_TS < _404_CACHE_TTL and _404_CACHE:
ign_mtime = _IGNORED_IPS_FILE.stat().st_mtime if _IGNORED_IPS_FILE.exists() else 0
if now - _404_CACHE_TS < _404_CACHE_TTL and _404_CACHE and ign_mtime <= _404_CACHE_TS:
return _404_CACHE
ignored = _load_ignored_ips()
@ -895,7 +896,7 @@ def errors_ban():
return jsonify({"error": "IP invalide"}), 400
try:
r = subprocess.run(
["sudo", "fail2ban-client", "set", jail, "banip", ip],
["/usr/bin/sudo", "/usr/bin/fail2ban-client", "set", jail, "banip", ip],
capture_output=True, text=True, timeout=10
)
if r.returncode == 0: