CircusVOIP Server V0.1.1
Changelog v0.1.1 — Serveur
Nouveautes
Securite renforcee
-
TLS auto-signe active par defaut : le serveur genere automatiquement
un certificatcert.pem+key.pemau premier demarrage et accepte
uniquement les connexions chiffreeswss://. 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 :
- Avoir un nom de domaine (ex:
voip.monsite.fr) - Mettre Caddy ou nginx devant ton serveur Python
- Caddy gere Let's Encrypt automatiquement
- Le client se connecte en
wss://voip.monsite.fravec 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).