#!/bin/bash # Script para configurar UDP de forma segura según el caso de uso set -e # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}🔧 Configuración segura de puertos UDP para LiveKit${NC}" echo "" # Preguntar caso de uso echo "¿Cuál es tu caso de uso?" echo "1) Solo red local (recomendado y seguro)" echo "2) Acceso desde internet (complejo y riesgoso)" echo "3) Mostrar configuración actual" echo "" read -p "Selecciona opción (1-3): " OPTION case $OPTION in 1) echo -e "${GREEN}✅ Configurando para RED LOCAL únicamente${NC}" # Configurar firewall para solo red local if command -v ufw &> /dev/null; then echo "Configurando UFW para red local..." # Permitir desde red local sudo ufw allow from 192.168.0.0/16 to any port 50000:60000 proto udp comment "LiveKit UDP (red local)" sudo ufw allow from 192.168.0.0/16 to any port 7880 proto tcp comment "LiveKit API (red local)" sudo ufw allow from 192.168.0.0/16 to any port 80 proto tcp comment "HTTP (red local)" # DENEGAR acceso externo a UDP sudo ufw deny 50000:60000/udp comment "BLOQUEAR UDP externo" echo -e "${GREEN}✅ Firewall configurado para red local${NC}" sudo ufw status numbered else echo -e "${YELLOW}⚠️ UFW no disponible. Configurar manualmente:${NC}" echo "- Permitir UDP 50000-60000 desde 192.168.x.x" echo "- BLOQUEAR UDP desde internet" fi echo "" echo -e "${GREEN}🔒 CONFIGURACIÓN SEGURA APLICADA:${NC}" echo "- UDP 50000-60000: Solo red local" echo "- Acceso web: http://192.168.1.19" echo "- Sin port forwarding necesario" echo "- Máxima seguridad" ;; 2) echo -e "${RED}⚠️ CONFIGURACIÓN PARA ACCESO PÚBLICO${NC}" echo "" echo -e "${YELLOW}RIESGOS:${NC}" echo "- 10,000 puertos UDP expuestos" echo "- Posibles ataques de red" echo "- Configuración compleja" echo "- Problemas con NAT/CGNAT" echo "" echo -e "${BLUE}ALTERNATIVAS RECOMENDADAS:${NC}" echo "1. LiveKit Cloud (sin UDP local)" echo "2. VPN para usuarios remotos" echo "3. TURN server para NAT traversal" echo "" read -p "¿Continuar con configuración pública? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo -e "${RED}Configurando acceso público...${NC}" if command -v ufw &> /dev/null; then # Abrir UDP para todo el mundo (PELIGROSO) sudo ufw allow 50000:60000/udp comment "LiveKit UDP PUBLICO" sudo ufw allow 7880/tcp comment "LiveKit API PUBLICO" sudo ufw allow 80/tcp comment "HTTP PUBLICO" echo -e "${RED}❌ UDP EXPUESTO PÚBLICAMENTE${NC}" fi echo "" echo -e "${RED}⚠️ CONFIGURACIÓN APLICADA (RIESGOSA):${NC}" echo "- UDP 50000-60000: PÚBLICO" echo "- Configurar port forwarding en router" echo "- Usar IP pública en livekit.yaml" echo "- Considerar VPN o LiveKit Cloud" else echo -e "${GREEN}✅ Configuración pública cancelada${NC}" fi ;; 3) echo -e "${BLUE}📊 Configuración actual:${NC}" # Verificar puertos UDP echo "" echo "Puertos UDP en uso:" if command -v ss &> /dev/null; then ss -ulnp | grep -E ":(5[0-9]{4})" | head -10 fi # Verificar firewall echo "" echo "Reglas de firewall:" if command -v ufw &> /dev/null; then sudo ufw status numbered | grep -E "(50000|7880|80)" fi # Verificar IP externa echo "" echo "IP externa detectada:" curl -s ifconfig.me || echo "No disponible" echo "" echo "IP local:" hostname -I | awk '{print $1}' ;; *) echo -e "${RED}❌ Opción inválida${NC}" exit 1 ;; esac echo "" echo -e "${BLUE}💡 RECOMENDACIÓN FINAL:${NC}" echo "Para máxima seguridad y simplicidad:" echo "- Usar solo en red local" echo "- Para acceso remoto: VPN o LiveKit Cloud" echo "- NO exponer 10,000 puertos UDP públicamente"