Esta é uma Mirageos Unikernel que aceita conexões TLS através da interface de rede pública (Serviço) no frontend-port e as proxy usando o TCP através da interface de rede privada para back-end-IP e backend-port. Um cliente que se conecta ao TLSTUNnel deve estabelecer uma conexão TLS, cuja carga útil é encaminhada ao serviço de back -end via TCP.
O TLSTUNnel pode ser usado para balanceamento de carga-usando múltiplos tlstunnel no front-end fazendo operações de criptografia caras (apertos de mão assimétricos TLS e criptografia simétrica) com um único (ou múltiplo) serviços de back-end que se comunicam via TCP simples.
Em termos de segurança, apenas o TLStunnel precisa de acesso à chave privada dos certificados X.509. Quando o TLSTUNnel é configurado para fazer autenticação do cliente, apenas clientes válidos podem acessar o serviço de back -end, limitando drasticamente a superfície de ataque.
A execução do TLStunnel requer dois endereços IP: um é o público que um, o outro está na rede privada (onde as conexões TCP são encaminhadas). A configuração pode ser feita por meio de um utilitário de linha de comando na rede privada. O certificado X.509 deve estar disponível via DNS (consulte DNS-Primary-Git e DNS-LetSencrypt-secundário).
Vamos considerar seu endereço IP público ser 1.2.3.4/24 (com o Gateway padrão 1.2.3.1). Você usa 192.168.0.4/24 como sua rede privada. Seu servidor DNS é 1.2.3.5 com a chave 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=
Agora, uma vez que o TLSTUNnel conseguiu obter um certificado via DNS, você já pode se conectar a https://1.2.3.4 e deve ver o certificado:
$ openssl s_client -connect 1.2.3.4:443
$ curl https://1.2.3.4
Para configurar o encaminhamento do TLStunnel, onde um nome de host especificado será encaminhado para um endereço IP e um par de portas, você deve usar o tlstunnel-client
binário da subpasta client
. A comunicação é autenticada usando o segredo compartilhado aprovado para tlstunnel ( --key=secret
).
A configuração é mantida no dispositivo de bloco (de uma maneira robusta, ou seja, altere primeiro os novos dados e depois o Superblock é atualizações).
$ 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 esse unikernel da fonte, você precisa ter opam (> = 2.0.0) e OCAML (> = 4.08.0) instalado. Além disso, é necessário miragem (> = 4.5.0). Siga as instruções de instalação.
As etapas a seguir clonarão este repositório Git e compilarão o Unikernel:
$ git clone https://github.com/robur-coop/tlstunnel.git
$ cd tlstunnel/unikernel && mirage configure -t < your-favourite-target >
$ make depend
$ make build
Os binários estão disponíveis nas compilações reproduzíveis do Opam, consulte a implantação de Mirageos Unikernels e o Mirageos Unikernel reproduzível construções para obter detalhes.
Abra um problema se tiver dúvidas, solicitações de recursos ou comentários.