Skip to content

CircusVOIP Server V0.1.1

Choose a tag to compare

@kainann kainann released this 15 May 21:36
· 11 commits to main since this release
f28f935

Changelog v0.1.1 — Serveur

Nouveautes

Securite renforcee

  • TLS auto-signe active par defaut : le serveur genere automatiquement
    un certificat cert.pem + key.pem au premier demarrage et accepte
    uniquement les connexions chiffrees wss://. Plus de tokens en clair
    sur le reseau. Aucune configuration requise cote utilisateur. Les
    fichiers cert sont reutilises aux demarrages suivants (si supprimes,
    ils sont regeneres).

  • Auth partagee positions/audio : un client doit d'abord
    s'authentifier sur le serveur positions, qui lui remet un ticket
    temporaire pour acceder au serveur audio. Impossible de se connecter
    directement a l'audio en contournant les checks du serveur positions.

  • Anti-bruteforce serveur audio : 5 echecs d'authentification en
    60s declenchent un ban de 600s sur l'IP fautive. Le serveur positions
    avait deja cette protection en v0.1.0.

  • Rate limiting : limite le nombre de messages par seconde qu'un
    client deja authentifie peut envoyer (50/100 msg/s cote positions,
    60/120 trames/s cote audio). Protege contre un membre malveillant ou
    un client bogue qui floode le serveur.

Nouveau fichier source

  • circusvoip_security.py : module commun regroupant la logique
    d'authentification (lockout, rate limit, registre de tickets) et la
    generation du certificat TLS. Importe par les deux serveurs et par
    le client.

Compatibilite

Le serveur v0.1.1 N'EST PAS compatible avec les clients v0.1.1. Le
client v0.1.1 essaie de se connecter en ws:// non chiffre, le serveur
v0.1.1 ne repond qu'en wss://. Les joueurs doivent installer le
client v0.1.2 en meme temps que tu mets a jour ton serveur.

Dependances ajoutees

Le serveur a maintenant besoin de deux dependances Python (au lieu
d'une seule auparavant) :

pip install websockets cryptography

cryptography est utilise pour generer le certificat TLS auto-signe.

Mise a jour depuis v0.1.0

Avec l'installeur (Windows)

Telecharger CircusVOIP_Server_Setup_v0.1.1.exe et le lancer. L'install
detecte la v0.1.0 et propose la mise a jour. Le token et les channels
sont preserves.

A la main (Linux)

Si tu hebergeas depuis le code source (clone Git) :

cd CircusVOIP/server
git pull
# Dans un venv :
./venv/bin/pip install websockets cryptography
# Ou en systeme (Ubuntu 22+/24+ requiert --break-system-packages) :
# sudo pip3 install websockets cryptography --break-system-packages

Puis redemarrer les services :

systemctl restart circusvoip-server circusvoip-audio

(adapter selon ton setup ; si tu n'utilises pas systemd, kill puis
relance les python3 circusvoip_*_server.py --headless)

Securite : ce qui est protege et ce qui ne l'est pas

Protege

  • Sniffing passif : les tokens et conversations transitent
    chiffres. Un attaquant qui ecoute le reseau (Wi-Fi public, etc.) ne
    voit rien d'exploitable.
  • Bruteforce du token : 5 essais ratees suffisent pour un ban de
    10 minutes sur l'IP.
  • Flood applicatif : un client malveillant ne peut pas saturer le
    serveur de messages.

Pas protege

  • MITM cible : le certificat auto-signe chiffre mais
    n'authentifie pas l'identite du serveur. Un attaquant determine
    qui se ferait passer pour le serveur pourrait theoriquement
    intercepter, a condition d'avoir aussi le token.
  • Compromission du PC qui heberge : si le serveur tourne sur ton PC
    perso, un attaquant qui exploite une faille de Python ou des libs
    accede a tout le PC. Heberger sur un VPS dedie (3-5 EUR/mois) limite
    les degats en cas de souci.
  • Saturation reseau : si quelqu'un cible ton IP avec un DDoS, le
    rate limiting applicatif ne couvre pas la bande passante. Seul ton
    hebergeur peut filtrer ce niveau.

Pour un usage plus serieux

Si tu publies a un cercle plus large et veux un certificat valide CA :

  1. Avoir un nom de domaine (ex: voip.monsite.fr)
  2. Mettre Caddy ou nginx devant ton serveur Python
  3. Caddy gere Let's Encrypt automatiquement
  4. Le client se connecte en wss://voip.monsite.fr avec verification
    d'identite stricte

Le code actuel reste compatible : il suffit de pointer le reverse
proxy vers 127.0.0.1:8888 cote serveur Python, et de ne pas exposer
les ports 8888/8889 sur Internet ouvert (seul 443 du reverse proxy
est public).