Это Mirageos Unikernel, принимающий подключения TLS через общественный сетевой интерфейс (сервис) на фронтальном порту, и прокси, используя TCP через частную сетевую интерфейс для бэкэнд-IP и бэкэнд-порт. Клиент, подключающийся к TLStunnel, должен установить соединение TLS, которое полезное нагрузка передается в сервисную службу через TCP.
TLStunnel может использоваться для балансировки нагрузки-используя несколько TLStunnel на фронте, выполняющих дорогие крипто-операции (асимметрические рукопожатия TLS и симметричная криптография) с одним (или несколькими) бэкэнд-сервисами, которые общаются через простые TCP.
С точки зрения безопасности только TLStunnel нуждается в доступе к частному ключу сертификата X.509. Когда TLStunnel настроен на аутентификацию клиента, только действующие клиенты могут получить доступ к бэкэнд -сервису, резко ограничивая поверхность атаки.
Выполнение TLStunnel требует двух IP -адресов: один - это публика, с которой сталкиваются один, другой находится в частной сети (где соединения TCP пересылаются). Конфигурация может быть выполнена с помощью утилиты командной строки в частной сети. Сертификат X.509 должен быть доступен через DNS (см. DNS-Primary-GIT и DNS-letsEncrypt-Secondator).
Давайте рассмотрим ваш публичный IP -адрес 1.2.3.4/24 (с шлюзом по умолчанию 1.2.3.1). Вы используете 192.168.0.4/24 в качестве личной сети. Ваш DNS -сервер составляет 1.2.3.5 с ключом tlstunnel._update.example.org.
Начало 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=
Теперь, как только Tlstunnel удалось получить сертификат через DNS, вы уже можете подключиться к https://1.2.3.4 и должны увидеть сертификат:
$ openssl s_client -connect 1.2.3.4:443
$ curl https://1.2.3.4
Чтобы настроить перенаправление TLStunnel, когда указанное имя хоста будет перенаправлено на IP-адрес и пару портов, вы должны использовать двоичный tlstunnel-client
из подпапки client
. Коммуникация аутентифицируется с использованием общего секрета, переданного Tlstunnel ( --key=secret
).
Конфигурация хранится в блочном устройстве (надежным образом, то есть на изменении Сначала записываются новые данные, а затем Superblock - это обновления).
$ 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
Чтобы установить этот Unikernel из источника, вам необходимо установить OPAM (> = 2,0.0) и OCAML (> = 4.08.0). Также требуется мираж (> = 4.5.0). Пожалуйста, следуйте инструкциям по установке.
Следующие шаги будут клонировать этот репозиторий GIT и составить Unikernel:
$ git clone https://github.com/robur-coop/tlstunnel.git
$ cd tlstunnel/unikernel && mirage configure -t < your-favourite-target >
$ make depend
$ make build
Двоичные файлы доступны в воспроизводимых сборках Opam, см. Развертывание бинарных Mirageos Unikernels и воспроизводимые сборки Mirageos Unikernel для деталей.
Пожалуйста, откройте проблему, если у вас есть вопросы, запросы функций или комментарии.