abril 19, 2024

VPN simple, rápida y moderna que utiliza criptografía de vanguardia.

0
Comparte en redes sociales

WireGuard es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de vanguardia . Su objetivo es ser más rápido , más simple , más delgado y más útil que IPsec, al tiempo que evita el dolor de cabeza masivo. Pretende ser considerablemente más eficiente que OpenVPN. WireGuard está diseñado como una VPN de propósito general para ejecutarse tanto en interfaces integradas como en supercomputadoras, aptas para muchas circunstancias diferentes. Inicialmente lanzado para el kernel de Linux, ahora es multiplataforma (Windows, macOS, BSD, iOS, Android) y ampliamente desplegable. Actualmente está bajo un fuerte desarrollo, pero ya podría considerarse como la solución VPN más segura, más fácil de usar y más simple en la industria.

WireGuard pretende ser tan fácil de configurar e implementar como SSH. Una conexión VPN se realiza simplemente intercambiando claves públicas muy simples, exactamente como intercambiar claves SSH, y todo el resto se maneja de forma transparente por WireGuard. Incluso es capaz de roaming entre direcciones IP, como Mosh . No hay necesidad de administrar conexiones, preocuparse por el estado, administrar demonios o preocuparse por lo que hay debajo del capó. WireGuard presenta una interfaz extremadamente básica pero potente.

WireGuard utiliza criptografía de vanguardia, como el marco de protocolo Noise , Curve25519 , ChaCha20 , Poly1305 , BLAKE2 , SipHash24 , HKDF y construcciones seguras de confianza. Toma decisiones conservadoras y razonables y ha sido revisado por criptógrafos.

WireGuard ha sido diseñado teniendo en cuenta la facilidad de implementación y la simplicidad. Está destinado a implementarse fácilmente en muy pocas líneas de código, y fácilmente auditable por vulnerabilidades de seguridad. En comparación con gigantes como * Swan / IPsec u OpenVPN / OpenSSL, en los que auditar las bases de código gigantescas es una tarea abrumadora incluso para grandes equipos de expertos en seguridad, WireGuard debe ser revisado de manera exhaustiva por individuos individuales.

Una combinación de primitivas criptográficas de extremadamente alta velocidad y el hecho de que WireGuard vive dentro del kernel de Linux significa que la red segura puede ser de muy alta velocidad. Es adecuado tanto para pequeños dispositivos integrados como teléfonos inteligentes y enrutadores troncales completamente cargados. WireGuard es el resultado de un proceso académico largo y minuciosamente considerado, que da como resultado el documento técnico , un trabajo de investigación académica que define claramente el protocolo y las intensas consideraciones que se tomaron en cada decisión.

WireGuard encapsula de forma segura los paquetes IP a través de UDP. Agrega una interfaz WireGuard, la configura con su clave privada y las claves públicas de sus pares, y luego envía paquetes a través de ella. Todos los problemas de distribución de claves y configuraciones enviadas están fuera del alcance de WireGuard; estos problemas son mucho mejores para otras capas, no sea que terminemos con la hinchazón de IKE u OpenVPN. Por el contrario, imita más el modelo de SSH y Mosh; ambas partes tienen las claves públicas del otro, y luego simplemente pueden comenzar a intercambiar paquetes a través de la interfaz.

WireGuard funciona agregando una interfaz de red (o múltiple), como eth0 o wlan0 , llamada wg0 (o wg1 , wg2 , wg3 , etc.). Esta interfaz de red se puede configurar normalmente usando ifconfig(8) o ip-address(8) , con rutas agregadas y eliminadas usando route(8) o ip-route(8) , y así sucesivamente con todas las utilidades de red ordinarias . Los aspectos específicos de WireGuard de la interfaz se configuran utilizando la herramienta wg(8) . Esta interfaz actúa como una interfaz de túnel.

WireGuard asocia las direcciones IP de túnel con claves públicas y puntos finales remotos. Cuando la interfaz envía un paquete a un par, hace lo siguiente:

  1. Este paquete está destinado a 192.168.30.8. ¿Qué par es ese? Déjame mirar … Está bien, es para el compañero ABCDEFGH . (O si no es para ningún par configurado, descarte el paquete).
  2. Cifre todo el paquete IP utilizando la clave pública del par ABCDEFGH .
  3. ¿Cuál es el punto final remoto del par ABCDEFGH ? Déjame mirar … Bien, el punto final es el puerto UDP 53133 en el host 216.58.211.110.
  4. Envíe bytes encriptados desde el paso 2 a través de Internet a 216.58.211.110:53133 usando UDP.

Cuando la interfaz recibe un paquete, esto sucede:

  1. Acabo de recibir un paquete del puerto UDP 7361 en el host 98.139.183.24. ¡Descifrémoslo!
  2. Se descifró y se autenticó correctamente para LMNOPQRS pares. Bien, recordemos que el punto final de Internet más reciente de LMNOPQRS es 98.139.183.24:7361 usando UDP.
  3. Una vez descifrado, el paquete de texto plano es de 192.168.43.89. ¿Se permite que los pares LMNOPQRS nos envíen paquetes como 192.168.43.89?
  4. Si es así, acepte el paquete en la interfaz. Si no, déjalo caer.

Detrás de escena, están sucediendo muchas cosas para proporcionar la privacidad, la autenticidad y el secreto perfecto, utilizando la criptografía de vanguardia.

En el corazón de WireGuard hay un concepto llamado Cryptokey Routing , que funciona asociando las claves públicas con una lista de direcciones IP de túnel que están permitidas dentro del túnel. Cada interfaz de red tiene una clave privada y una lista de pares. Cada par tiene una clave pública. Las claves públicas son cortas y simples, y las usan los pares para autenticarse entre sí. Se pueden transmitir para su uso en archivos de configuración mediante cualquier método fuera de banda, de forma similar a cómo se puede enviar su clave pública SSH a un amigo para acceder a un servidor shell.

Por ejemplo, una computadora servidor podría tener esta configuración:

 [Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

Y una computadora cliente podría tener esta configuración más simple:

[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0

En la configuración del servidor, cada par (un cliente) podrá enviar paquetes a la interfaz de red con una IP de origen que coincida con su lista correspondiente de IP permitidas. Por ejemplo, cuando el servidor recibe un paquete del par gN65BkIK... , después de ser descifrado y autenticado, si su IP de origen es 10.10.10.230, entonces se permite en la interfaz; de lo contrario se cae.

En la configuración del servidor, cuando la interfaz de red quiere enviar un paquete a un par (un cliente), mira la IP de destino de ese paquete y lo compara con la lista de IP permitidas de cada par para ver a qué par enviarlo. Por ejemplo, si se le pide a la interfaz de red que envíe un paquete con una IP de destino de 10.10.10.230, lo cifrará utilizando la clave pública del par gN65BkIK... , y luego lo enviará al punto final de Internet más reciente de ese par.

En la configuración del cliente, su único par (el servidor) podrá enviar paquetes a la interfaz de red con cualquier IP de origen (ya que 0.0.0.0/0 es un comodín). Por ejemplo, cuando se recibe un paquete del par HIgo9xNz... , si descifra y autentica correctamente, con cualquier IP de origen, entonces se permite en la interfaz; de lo contrario se cae.

En la configuración del cliente, cuando la interfaz de red desea enviar un paquete a su único par (el servidor), cifrará los paquetes para el único par con cualquier dirección IP de destino (ya que 0.0.0.0/0 es un comodín). Por ejemplo, si se le pide a la interfaz de red que envíe un paquete con cualquier IP de destino, lo cifrará con la clave pública del HIgo9xNz... y luego lo enviará al punto final de Internet más reciente del mismo.

En otras palabras, cuando se envían paquetes, la lista de IP permitidas se comporta como una especie de tabla de enrutamiento, y cuando se reciben paquetes, la lista de IP permitidas se comporta como una especie de lista de control de acceso.

Esto es lo que llamamos una Tabla de enrutamiento de Cryptokey : la asociación simple de claves públicas e IP permitidas.

Se puede usar cualquier combinación de IPv4 e IPv6 para cualquiera de los campos. WireGuard es totalmente capaz de encapsular uno dentro del otro si es necesario.

Debido a que todos los paquetes enviados en la interfaz WireGuard están encriptados y autenticados, y debido a que existe un acoplamiento tan estrecho entre la identidad de un par y la dirección IP permitida de un par, los administradores del sistema no necesitan extensiones de firewall complicadas, como en el caso de IPsec, sino que simplemente pueden coincidir en «¿es de esta IP? ¿En esta interfaz?», y tener la seguridad de que es un paquete seguro y auténtico. Esto simplifica enormemente la administración de la red y el control de acceso, y proporciona una mayor seguridad de que sus reglas de iptables realmente están haciendo lo que usted pretendía.

La configuración del cliente contiene un punto final inicial de su único par (el servidor), de modo que sepa a dónde enviar los datos cifrados antes de recibirlos. La configuración del servidor no tiene puntos finales iniciales de sus pares (los clientes). Esto se debe a que el servidor descubre el punto final de sus pares examinando desde dónde se originan los datos autenticados correctamente. Si el propio servidor cambia su propio punto final y envía datos a los clientes, los clientes descubrirán el nuevo punto final del servidor y actualizarán la configuración de la misma manera. Tanto el cliente como el servidor envían datos cifrados al punto final IP más reciente para el que descifraron datos de forma auténtica. Por lo tanto, hay itinerancia IP completa en ambos extremos.

WireGuard envía y recibe paquetes cifrados utilizando el espacio de nombres de red en el que se creó originalmente la interfaz WireGuard . Esto significa que puede crear la interfaz WireGuard en el espacio de nombres de su red principal, que tiene acceso a Internet, y luego moverla a un espacio de nombres de red que pertenezca a un contenedor Docker como la única interfaz de ese contenedor. Esto garantiza que la única forma posible de que el contenedor pueda acceder a la red es a través de un túnel WireGuard cifrado seguro.

Wireguard debido a su sencillez y versatilidad es el futuro de las VPN y en cuanto a criptografía se refiere esta a la vanguardia del sector de software de VPN.

Más información y descarga de Wireguard:

https://www.wireguard.com/

Deja un comentario