Un servizo de comunicacións completo, privado, seguro e… case case… P2P!

A todo o mundo lle parece normal ter a contabilidade persoal ou da empresa nunha folla de cálculo gardada no propio computador. Hai anos que existe Google Sheets, pero, honestamente, non son capaz de entender que ninguén miminamente consciente dos riscos para a súa privacidade o utilice. E si, hai servizos semellantes mais respeituosos, cifrados de ponta a ponta -como Cryptpad ou Proton Sheets– pero a verdade é que nada nos dá tanta privacidade e control como ter as nosas contas nunha folla de LibreOffice Calc aloxada no disco duro cifrado do noso PC. Por qué non aplicamos a mesma lóxica a algo tan sensíbel como as nosas comunicacións?

Quen temos certa preocupación pola privacidade e a protección de datos amiúdo estamos procurando e probando alternativas aos servizos de Whatsapp, Zoom, Google Meet, etc. Neste campo, a alternativa que mais veces (e con mais razón) é citada é Signal: un servizo que permite facer facilmente todo o que ofrecen as apps de comunicación mais extendidas (mensaxes, envío de arquivos, notas de audio, videoconferencias, reunións de grupo, chamadas de voz…), mais que engade importantes garantías para a privacidade de quen o emprega: é open-source, utiliza criptografía de ponta a ponta, e é propiedade dunha fundación sen ánimo de lucro, que non dunha empresa que viva de perfilar os seus usuarios e vender os seus datos.

Porén, Signal non deixa de ser un servizo centralizado, e isto abre a posibilidade a determinadas situacións de risco. Por exemplo:

  • A app pode ser bloqueada ou prohibida en determinadas xurisdiccións.
  • A organización que a xestiona pode ser atacada e, ainda que non os contidos das comunicacións, o atacante podería ter acceso a moita información a través dos metadatos (quen se comunica con quen, quen fai parte dunha organización, quen administra ou dinamiza un grupo…). Non debemos esquecer que un problema que presenta Signal para determinados escenarios é a necesidade de identificarse cun número de teléfono.
  • O servizo pode instalar os seus servidores en xurisdiccións dubidosas, ou directamente incompatíbeis co RXPD.

A solución a estes inconvenientes – e o motivo polo que hoxe nos deu por escreber este artigo, claro- é levantar un servidor de comunicacións propio. A infraestrutura que propomos non é especialmente complicada para quen se manexe minimamente con Docker, Wireguard e iptables, e permite a calquera persoa, organización ou empresa ter fisicamente baixo o seu control un servidor de mensaxería cifrada de ponta a ponta, a través do cal poder enviar texto, facer chamadas de audio e video, e enviar anexos (incluídas imaxes e notas de voz). Soberanía dixital en estado puro!!

Snikket: servidor e cliente XMPP fácil e completo

O protocolo XMPP é para a mensaxería instantánea algo parecido ao que o SMTP é para o e-mail: un estándar aberto e federado que permite a calquera montar o seu servidor, e comunicarse con outros. Frente o costume actual de utilizar servizos nos que os usuarios só poden comunicarse con outros usuarios do mesmo servizo, XMPP crea unha rede distribuída onde cada persoa pode comunicarse con outra en calquera outro servidor do mundo, replicando o modelo de funcionamento do e-mail para chats, chamadas e envío de arquivos en tempo real, sen depender de monopolios tecnolóxicos.

Neste ecosistema, Snikket aparece como unha solución moderna que actualiza e simplifica radicalmente a implementación de XMPP. Snikket integra a posibilidade de realizar chamadas de audio e vídeo de alta calidade, ou grupos e salas de discusión, converténdose nunha alternativa perfectamente funcional ao teu cliente de mensaxería estadounidense ou ruso preferido. Pero a verdadeira revolución de Snikket é o facil que fai a instalación do servidor. Se durante décadas autoaloxar un servidor XMPP requeriu coñecementos técnicos avanzados, Snikket ofrece imaxes de contedores (Docker) preconfiguradas e unha interface administrativa intuitiva que nos permite levantar o servizo e crear usuarios en cuestión de minutos.

Comezando polo básico: Snikket nun servidor convencional

Se tes un servidor propio ou un VPS, montar Snikket nel é tan fácil como seguir os 4 pasos que se indican na súa web. Necesitarás ter un dominio e saber configurar os seus rexistros DNS, instalar Docker no servidor, e pouco mais. En poucos minutos terás un servizo de mensaxería completamente funcional, ao que podes acceder a través de calquera cliente XMPP (o propio Snikket para móbil, e Dino para PC, funcionan moi ben).

O principal problema co que nos vamos encontrar se temos o servidor na nosa casa (ou nunha oficina cunha conexión a internet doméstica, non empresarial) é lidiar coas IP dinámicas. Acontece que, se tes contratada unha conexión a internet normal, a túa IP pública non é fixa, senon que cambiará regularmente. E isto é un inconveniente á hora de facer que o teu domínio aponte cara ela. Nestes casos o problema resólvese a través de servizos de DNS dinámico, como se especifica na web de Snikket.

A cousa ponse mais difícil se vives nunha das moitas aldeas do noso país que non ten acceso a fibra, e a túa conexión à internet funciona a través dunha rede móbil ou via satélite. Nesta caso, a tua IP estará por detrás dun NAT, o que impedirá que os servizos de DNS dinámica sirvan para acceder á túa máquina desde o exterior (continúa a ler, que mais adiante che explicamos como resolver isto!).

Por outra banda, a nivel de seguridade e privacidade, instalar Snikket nun VPS non soluciona case ningun dos problemas que presentan os servizos centralizados. Todos os metadatos das nosas comunicacións están fisicamente no servidor baixo control do noso provedor de hosting, e sabe Deus baixo qué xurisdicción. Para iso, talvez paga a pena quedar con Signal!

Agora si: o noso servidor de comunicacións, completamente nas nosas maos, independentemente de onde estemos

Vamos expór unha solución testada para ter o servidor XMPP fisicamente baixo o noso control, sen ter que lidiar con DNS dinámicos e coa posibilidade de utilizalo en calquera parte, mesmo conectándoo a través do noso teléfono móbil. A solución pasa por utilizar un servidor VPN dedicado como saída ao exterior, configurándoo de tal xeito que Snikket sexa o seu único cliente, e redirecionando todo o tráfico do un para o outro. Con este apoio, veremos como é posíbel ter o servidor de comunicación nunha Raspberry Pi que poder levar a calquera parte, ou mesmo nunha máquina virtual no noso propio computador.

1. O servidor VPN

Montar un servidor VPN propio é facil e barato. A maneira mais simple e económica é alugar un dos VPS mais simpliños, instalar Debian, e correr este comando (é un script feito para simplificar a instalación dun servidor VPN nunha Raspberry Pi, pero funciona en calquera servidor Debian):

curl -L https://install.pivpn.io | bash

O script levanta o servidor VPN en menos de 5 minutos. Por simplicidade e velocidade, é recomendábel escoller Wireguard como protocolo (o script permite tamén escoller OpenVPN). Unha vez lista a VPN, crearemos o noso primeiro (e único) cliente, e copiaremos os seus datos de configuración para despois importalos no servidor Snikket.

Agora ven, talvez, o paso mais traballoso. Só queremos o VPS para que lle proporcione unha IP fixa ao noso servidor XMPP, así que necesitamos configuralo para que todo o tráfico que chegue a el sexa redirixido inmediatamente para Snikket. Dado que Snikket será, agora, un cliente wireguard do VPS, debemos engadir no servidor determinadas regras de encamiñamento. Para este exemplo imaxinaremos que 10.77.33.2 é o enderezo IP que Wireguard dá ao cliente xerado, e que eth0 e wg0 son os nomes das interfaces de rede do noso VPS. Sendo así, debemos establecer que todo o tráfico que chegue á interface eth0 do VPS polas portas tcp 80, 443 (tráfico web), 5222 e 5269 (tráfico propio do protocolo XMPP), sexa redirixido para a interface wg0 e, unha vez ali, para a IP 10.77.33.2. Tamén deberemos facer o mesmo co tráfico que chega polas portas udp 49152 a 65535, que é o rango utilizado para as chamadas de voz e vídeo.

2. O servidor Snikket nunha Raspberry Pi

Configurado o VPS para ser, grazas a Wireguard, a IP pública e estábel de calquera dispositivo conectado a el, podemos xá pasar a configurar o servidor de comunicacións propiamente dito, seguindo a guia de Snikket. Só debemos recordar que, no momento de configurar o noso dominio, debemos apuntalo cara a IP do VPS, independentemente de cal sexa a IP do dispositivo no que o estexamos a montar.

Unha primeira opción é levantar Snikket nunha Raspberry Pi ou algo semellante. Nós podemos confirmar que nun modelo 3 B+ vai perfectamente. Unicamente cumpre instalarlle o RaspberryOS mais lixeiriño, e meterlle Docker e Wireguard. Unha vez feito, importamos o cliente wireguard creado no VPS, e configurámolo para que se conecte automaticamente en cada inicio do sistema. Coa ligación VPN activa, instalamos Snikket seguindo as instruccións mencionadas, e enpoucos minutos o servizo estará plenamente funcional. A instalación en Docker configura varios containers, incluindo un para habilitar un certificado SSL con Let’s Encrypt, polo que é fundamental que o redirecionamento no VPS estexa ben feito e a Raspberry Pi e a internet podan comunicarse en ambos os sentidos sen problemas.

Un dispositivo pequeno e portátil ten ventaxas evidentes. Para empezar, o seu consumo enerxético é moito menor que o de un servidor ou un PC de sobremesa, polo que podemos mantelo funcional as 24 horas do dia a un custo razonábel. Pero, ademais, a sua portabilidade permítenos levalo con nós, ou cambialo de casa ou de local, sen grandes dificuldades. Por último, en escenarios nos que a confidencialidade e seguridade das comunicacións é crucial (por exemplo disidentes ou activistas pro dereitos civis en contextos dictatoriais), desfacerse de todos os metadatos almacenados no servidor de comunicacións é tan simple como destruir unha tarxeta microSD.

3. O servidor Snikket nunha máquina virtual

Algúns escenarios poderían facer cómodo e conveniente ter o servidor montado no propio computador. Imaxinemos unha psicóloga que ofrece sesións de terapia por videoconferencia. A lexislación en materia de protección de datos exíxelle ser especialmente cuidadosa coas informacións que se transmiten nesas sesións en remoto, e por profesionalidade ela quere que os seus pacientes se sintan cómodos e seguros, ofrecendo as máximas garantias de confidencialidade no momento de iniciar unha terapia por internet. Neste escenario, utilizar un servizo de terceiros ubicado nun país extranxeiro (non digamos xa un servizo-anzol dunha tecnolóxica dedicada á venda de datos!) non é a mellor opción.

Pero acontece tamén que esta psicóloga do noso exemplo non necesita un servizo en funcionamento 24/7. Simplemente necesita que, cando ten unha sesión online, isto é, cando ela encende o seu portátil, o servizo funcione. Para un escenario como este, instalar o servidor Snikket nunha máquina virtual correndo no propio computador, pode ser unha excelente opción.

Se a máquina virtual é Debian, os pasos para a instalación son os mesmos que na Raspberry Pi. Dado que isto instala o servidor na mesma máquina desde a que falamos (e o noso interlocutor accede directamente a ese servizo aloxado na nosa máquina virtual), o sistema de comunicación acaba sendo practicamente P2P! Ademais, o feito de que a saida de Snikket ao exterior sexa sempre através do túnel wireguard, permite que o servidor funcione independentemente de onde teñamos o portátil e da conexión de rede que utilicemos: funciona desde a casa, pero tamén desde a oficina, ou desde unha cafeteria compartindo a conexión de datos do noso móbil.

Un servidor de comunicacións controlado tanto física como administrativamente por nós mesmos, para realizar desde calquera lugar chats e videochamadas cifradas de ponta a ponta, e que nos garante que ninguén mais que nós terá acceso aos metadatos xerados polas conversas entre os usuarios.

Scroll ao inicio