diff --git a/doc/html/howtoe.html b/doc/html/howtoe.html index cc1d077..60c9358 100644 --- a/doc/html/howtoe.html +++ b/doc/html/howtoe.html @@ -536,22 +536,43 @@ proxy -p8080 -i192.168.2.1 to extract hostnames from TLS to use in ACLs in combination with SOCKS or HTTP(s) proxy and/or the Transparent plugin. It can also be used to require TLS or mTLS between services. The TLS handshake contains no port information; if tlspr is used as a standalone service, the destination port may be either detected with the Transparent plugin or configured with the -P option (default 443).

- The -c option is used to specify the level of TLS check: + Options:

-0 (default) - allow non-TLS traffic
-1 - require TLS, only check client HELLO packet
-2 - require TLS, check both client and server HELLO
-3 - require TLS, check that the server sends a certificate (not compatible with TLS 1.3)
-4 - require mutual TLS, check that the server sends a certificate request and the client sends a certificate (not compatible with TLS 1.3)
+-P <port>  - destination port (default: 443)
+-c <level> - TLS check level:
+  0 (default) - allow non-TLS traffic
+  1 - require TLS, only check client HELLO packet
+  2 - require TLS, check both client and server HELLO
+  3 - require TLS, check that the server sends a certificate (not compatible with TLS 1.3)
+  4 - require mutual TLS, check that the server sends a certificate request and the client sends a certificate (not compatible with TLS 1.3)
 

-Configuration examples: -1. Port 1443 may be used to redirect traffic to destination port 143. SNI is used to find the destination host. -

+SNI Break (DPI Bypass):
+
tlspr can be used as a parent with the "tls" type to implement SNI splitting for DPI bypass (similar to NoDPI/GoodByeDPI). +The client sends the first part of the TLS ClientHello, tlspr splits it at the SNI extension and sends it in two TCP packets, +which can bypass some DPI systems that look for blocked hostnames in TLS handshakes. +
To enable SNI break, use parent ... tls 0.0.0.0 0 and the -s option on the listening service with TCP_NODELAY: +

+auth iponly
+allow *
+parent 1000 tls 0.0.0.0 0
+allow *
+proxy -s -i127.0.0.1 -ocTCP_NODELAY -osTCP_NODELAY -p1443
+
+

+TCP_NODELAY is required to prevent the kernel from merging the split packets. +

+

+Configuration examples: +

+

+1. Standalone SNI proxy on port 1443 redirecting to destination port 443: +

 tlspr -p1443 -P443 -c1
 
-2. Used as a parent TLS proxy to detect the destination hostname from TLS in socks: -
+

+2. Using tlspr as parent in SOCKS to detect destination hostname from TLS (even when client connects by IP): +

 allow * * * 80
 parent 1000 http 0.0.0.0 0
 allow * * * * CONNECT
@@ -559,6 +580,17 @@ parent 1000 tls 0.0.0.0 0
 deny * * some.not.allowed.host
 allow *
 socks
+
+

+3. Using tlspr with HTTP proxy for TLS hostname-based ACL: +

+allow * * * 80
+parent 1000 http 0.0.0.0 0
+allow * * * 443
+parent 1000 tls 0.0.0.0 0
+deny * * blocked.example.com
+allow *
+proxy
 

  • How to limit service access diff --git a/doc/html/howtor.html b/doc/html/howtor.html index aef87d1..1be2b14 100644 --- a/doc/html/howtor.html +++ b/doc/html/howtor.html @@ -540,29 +540,49 @@

  • Как настроить SNI proxy (tlspr)
  • - - SNI proxy может быть использовать для транспарентного перенаправления любого TLS трафика (например HTTPS) на внешнем маршрутизаторе + SNI proxy может быть использован для транспарентного перенаправления любого TLS трафика (например HTTPS) на внешнем маршрутизаторе или локальными правилами. Так же можно использовать его для извлечения имени хоста из TLS хендшейка с целью логгирования или использования в ACL. Еще одна задача которую может решать модуль - требование наличия TLS или mTLS (mutual TLS). - Если tlspr используется как отдельный сервис без исползования плагина Transparent, то необходимо задать порт назначения через опцию -T (по умолчанию 443), + Если tlspr используется как отдельный сервис без использования плагина Transparent, то необходимо задать порт назначения через опцию -P (по умолчанию 443), т.к. TLS хендшейк не содержит информации о порте назначения. -

    - -c контролирует уровень требования к TLS: +

    + Опции:

    -0 (по умолчанию) - пропустить трафик без TLS
    -1 - требовать TLS, проверять наличие client HELLO
    -2 - требовать TLS, проверять наличие client и server HELLO
    -3 - требовать TLS, проверять наличие серверного сертификата (не совместим с TLS 1.3+)
    -4 - требовать взаимный (mutual) TLS, проверять что сервер запрашивает сертификат и клиент его отправляет (не совместим с TLS 1.3+)    
    +-P <порт>  - порт назначения (по умолчанию: 443)
    +-c <уровень> - уровень проверки TLS:
    +  0 (по умолчанию) - пропустить трафик без TLS
    +  1 - требовать TLS, проверять наличие client HELLO
    +  2 - требовать TLS, проверять наличие client и server HELLO
    +  3 - требовать TLS, проверять наличие серверного сертификата (не совместим с TLS 1.3+)
    +  4 - требовать взаимный (mutual) TLS, проверять что сервер запрашивает сертификат и клиент его отправляет (не совместим с TLS 1.3+)
     

    -примеры конфигурации: -1. Порт 1443 можно использовать для перенаправления в него HTTPS трафика по порту 443 (например с внешнего маршрутизатора) -

    +SNI Break (обход DPI):
    +
    tlspr может использоваться как родительский прокси типа "tls" для реализации SNI-фрагментации (аналог NoDPI/GoodByeDPI). +Клиент отправляет первую часть TLS ClientHello, tlspr разбивает его на расширении SNI и отправляет двумя TCP-пакетами, +что позволяет обойти некоторые DPI-системы, ищущие заблокированные имена хостов в TLS-рукопожатиях. +
    Для включения SNI break используйте parent ... tls 0.0.0.0 0 и опцию -s на слушающем сервисе с TCP_NODELAY: +

    +auth iponly
    +allow *
    +parent 1000 tls 0.0.0.0 0
    +allow *
    +proxy -s -i127.0.0.1 -ocTCP_NODELAY -osTCP_NODELAY -p1443
    +
    +

    +TCP_NODELAY необходим, чтобы ядро не объединяло разделенные пакеты. +

    +

    +Примеры конфигурации: +

    +

    +1. Отдельный SNI proxy на порту 1443 с перенаправлением на порт назначения 443: +

     tlspr -p1443 -P443 -c1
     
    -2. tlspr используется как родительский прокси в SOCKS чтобы обнаруживать реальный hostname назначения (даже если запрашивается подклюение по IP адресу) -
    +

    +2. Использование tlspr как родительского прокси в SOCKS для обнаружения hostname из TLS (даже если клиент подключается по IP): +

     allow * * * 80
     parent 1000 http 0.0.0.0 0
     allow * * * * CONNECT
    @@ -570,6 +590,17 @@ parent 1000 tls 0.0.0.0 0
     deny * * some.not.allowed.host
     allow *
     socks
    +
    +

    +3. Использование tlspr с HTTP proxy для ACL по имени хоста TLS: +

    +allow * * * 80
    +parent 1000 http 0.0.0.0 0
    +allow * * * 443
    +parent 1000 tls 0.0.0.0 0
    +deny * * blocked.example.com
    +allow *
    +proxy