Esta es un Mirageos Unikernel que acepta las conexiones TLS a través de la interfaz de red pública (servicio) en el puerto frontend, y las proxen usar TCP a través de la interfaz de red privada para backend-ip y backend-port. Un cliente que se conecta a TLSTUnnel tiene que establecer una conexión TLS, que la carga útil se reenvía al servicio de backend a través de TCP.
TlStunnel se puede usar para el equilibrio de carga: utilizando múltiples tlstunnel en el interfaz que realiza operaciones de criptogueo costosas (apretones de manos TLS de asimétricos y criptografía simétrica) con un solo (o múltiple) servicio de backend que se comunican a través de TCP simple.
En cuanto a la seguridad, solo el tlstunnel necesita acceso a la clave privada de los certificados X.509. Cuando TLStunnel está configurado para hacer autenticación del cliente, solo los clientes válidos pueden acceder al servicio de backend, limitando drásticamente la superficie de ataque.
La ejecución de tlstunnel requiere dos direcciones IP: una es la que se enfrenta al público, el otro está en la red privada (donde se reenvían las conexiones TCP). La configuración se puede realizar a través de una utilidad de línea de comandos en la red privada. El certificado X.509 debe estar disponible a través de DNS (ver DNS-Primary-Git y DNS-LetsenCrypt-Secundary).
Consideremos que su dirección IP pública es 1.2.3.4/24 (con la puerta de enlace predeterminada 1.2.3.1). Utiliza 192.168.0.4/24 como su red privada. Su servidor DNS es 1.2.3.5 con la clave tlstunnel._update.example.org.
Iniciando tlstunnel:
$ truncate -s 1m /var/db/tlstunnel
$ solo5-hvt --net:service=tap0 --net:private=tap10 --block:storage=/var/db/tlstunnel --
tlstunnel/unikernel/dist/tlstunnel.hvt --ipv4=1.2.3.4/24 --ipv4-gateway=1.2.3.1
--private-ipv4=192.168.0.4/24 --domains=example.org
--dns-server=1.2.3.5 --dns-key=tlstunnel._update.example.org:SHA256:m2gls0y3ZMN4DVKx37x/VoKEdll4J2A9qNIl6JIz2z4=
--key-seed=ROkD8o/Xrc4ScDdxM8cV1+4eQiWUEul+3I1twW+I15E=
--key=9Fe92fogykIAPBJZU4FUsmpRsAy6YDajIkdSRs650zM=
Ahora, una vez que Tlstunnel logró obtener un certificado a través de DNS, ya puede conectarse a https://1.2.3.4 y debe ver el certificado:
$ openssl s_client -connect 1.2.3.4:443
$ curl https://1.2.3.4
Para configurar el reenvío de Tlstunnel, donde se reenviará un nombre de host especificado a una dirección IP y un par de puertos, debe usar el Binario tlstunnel-client
desde la subcarpeta client
. La comunicación se autentica utilizando el secreto compartido aprobado a tlstunnel ( --key=secret
).
La configuración se mantiene en el dispositivo de bloque (de manera robusta, es decir, el cambio primero se escriben los nuevos datos y luego el Superblock es actualizaciones).
$ cd tlstunnel/client
$ dune build
# Listing all configured hostnames:
$ _build/install/default/bin/tlstunnel-client list --key=9Fe92fogykIAPBJZU4FUsmpRsAy6YDajIkdSRs650zM= -r 192.168.0.4:1234
# Adding a new forward:
$ _build/install/default/bin/tlstunnel-client add --key=9Fe92fogykIAPBJZU4FUsmpRsAy6YDajIkdSRs650zM= -r 192.168.0.4:1234 test.example.org 192.168.0.42 80
# Removing a foward:
$ _build/install/default/bin/tlstunnel-client remove --key=9Fe92fogykIAPBJZU4FUsmpRsAy6YDajIkdSRs650zM= -r 192.168.0.4:1234 test.example.org
Para instalar este Unikernel desde la fuente, debe tener Opam (> = 2.0.0) y Ocaml (> = 4.08.0) instalado. Además, se requiere Mirage (> = 4.5.0). Siga las instrucciones de instalación.
Los siguientes pasos clonarán este repositorio de git y compilarán el Unikernel:
$ git clone https://github.com/robur-coop/tlstunnel.git
$ cd tlstunnel/unikernel && mirage configure -t < your-favourite-target >
$ make depend
$ make build
Los binarios están disponibles en las compilaciones reproducibles de OPAM, vea la implementación de Binary Mirageos Unikernels y las compilaciones de unikernel Mirageos reproducibles para más detalles.
Abra un problema si tiene preguntas, solicitudes de funciones o comentarios.