Howto update

This commit is contained in:
Vladimir Dubrovin 2026-04-05 00:44:44 +03:00
parent d27afd05cd
commit b0db65dfde
2 changed files with 89 additions and 26 deletions

View File

@ -536,8 +536,10 @@ 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 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). 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).
</p><p> </p><p>
The -c option is used to specify the level of TLS check: <b>Options:</b>
</p><pre> </p><pre>
-P &lt;port&gt; - destination port (default: 443)
-c &lt;level&gt; - TLS check level:
0 (default) - allow non-TLS traffic 0 (default) - allow non-TLS traffic
1 - require TLS, only check client HELLO packet 1 - require TLS, only check client HELLO packet
2 - require TLS, check both client and server HELLO 2 - require TLS, check both client and server HELLO
@ -545,13 +547,32 @@ proxy -p8080 -i192.168.2.1
4 - require mutual TLS, check that the server sends a certificate request and the client 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)
</pre> </pre>
<p> <p>
Configuration examples: <b>SNI Break (DPI Bypass):</b>
1. Port 1443 may be used to redirect traffic to destination port 143. SNI is used to find the destination host. <br>tlspr can be used as a parent with the "tls" type to implement SNI splitting for DPI bypass (similar to NoDPI/GoodByeDPI).
<pre> 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.
<br>To enable SNI break, use <code>parent ... tls 0.0.0.0 0</code> and the <code>-s</code> option on the listening service with TCP_NODELAY:
</p><pre>
auth iponly
allow *
parent 1000 tls 0.0.0.0 0
allow *
proxy -s -i127.0.0.1 -ocTCP_NODELAY -osTCP_NODELAY -p1443
</pre>
<p>
TCP_NODELAY is required to prevent the kernel from merging the split packets.
</p>
<p>
<b>Configuration examples:</b>
</p>
<p>
1. Standalone SNI proxy on port 1443 redirecting to destination port 443:
</p><pre>
tlspr -p1443 -P443 -c1 tlspr -p1443 -P443 -c1
</pre> </pre>
2. Used as a parent TLS proxy to detect the destination hostname from TLS in socks: <p>
<pre> 2. Using tlspr as parent in SOCKS to detect destination hostname from TLS (even when client connects by IP):
</p><pre>
allow * * * 80 allow * * * 80
parent 1000 http 0.0.0.0 0 parent 1000 http 0.0.0.0 0
allow * * * * CONNECT allow * * * * CONNECT
@ -559,6 +580,17 @@ parent 1000 tls 0.0.0.0 0
deny * * some.not.allowed.host deny * * some.not.allowed.host
allow * allow *
socks socks
</pre>
<p>
3. Using tlspr with HTTP proxy for TLS hostname-based ACL:
</p><pre>
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
</pre> </pre>
</p> </p>
<li><A NAME="AUTH">How to limit service access</A> <li><A NAME="AUTH">How to limit service access</A>

View File

@ -540,15 +540,16 @@
</p> </p>
<li><a name="TLSPR"><i>Как настроить SNI proxy (tlspr)</i></a></li> <li><a name="TLSPR"><i>Как настроить SNI proxy (tlspr)</i></a></li>
<p> <p>
SNI proxy может быть использован для транспарентного перенаправления любого TLS трафика (например HTTPS) на внешнем маршрутизаторе
SNI proxy может быть использовать для транспарентного перенаправления любого TLS трафика (например HTTPS) на внешнем маршрутизаторе
или локальными правилами. Так же можно использовать его для извлечения имени хоста из TLS хендшейка с целью логгирования или использования в ACL. или локальными правилами. Так же можно использовать его для извлечения имени хоста из TLS хендшейка с целью логгирования или использования в ACL.
Еще одна задача которую может решать модуль - требование наличия TLS или mTLS (mutual TLS). Еще одна задача которую может решать модуль - требование наличия TLS или mTLS (mutual TLS).
Если tlspr используется как отдельный сервис без исползования плагина Transparent, то необходимо задать порт назначения через опцию -T (по умолчанию 443), Если tlspr используется как отдельный сервис без использования плагина Transparent, то необходимо задать порт назначения через опцию -P (по умолчанию 443),
т.к. TLS хендшейк не содержит информации о порте назначения. т.к. TLS хендшейк не содержит информации о порте назначения.
</p><p> </p><p>
-c контролирует уровень требования к TLS: <b>Опции:</b>
</p><pre> </p><pre>
-P &lt;порт&gt; - порт назначения (по умолчанию: 443)
-c &lt;уровень&gt; - уровень проверки TLS:
0 (по умолчанию) - пропустить трафик без TLS 0 (по умолчанию) - пропустить трафик без TLS
1 - требовать TLS, проверять наличие client HELLO 1 - требовать TLS, проверять наличие client HELLO
2 - требовать TLS, проверять наличие client и server HELLO 2 - требовать TLS, проверять наличие client и server HELLO
@ -556,13 +557,32 @@
4 - требовать взаимный (mutual) TLS, проверять что сервер запрашивает сертификат и клиент его отправляет (не совместим с TLS 1.3+) 4 - требовать взаимный (mutual) TLS, проверять что сервер запрашивает сертификат и клиент его отправляет (не совместим с TLS 1.3+)
</pre> </pre>
<p> <p>
примеры конфигурации: <b>SNI Break (обход DPI):</b>
1. Порт 1443 можно использовать для перенаправления в него HTTPS трафика по порту 443 (например с внешнего маршрутизатора) <br>tlspr может использоваться как родительский прокси типа "tls" для реализации SNI-фрагментации (аналог NoDPI/GoodByeDPI).
<pre> Клиент отправляет первую часть TLS ClientHello, tlspr разбивает его на расширении SNI и отправляет двумя TCP-пакетами,
что позволяет обойти некоторые DPI-системы, ищущие заблокированные имена хостов в TLS-рукопожатиях.
<br>Для включения SNI break используйте <code>parent ... tls 0.0.0.0 0</code> и опцию <code>-s</code> на слушающем сервисе с TCP_NODELAY:
</p><pre>
auth iponly
allow *
parent 1000 tls 0.0.0.0 0
allow *
proxy -s -i127.0.0.1 -ocTCP_NODELAY -osTCP_NODELAY -p1443
</pre>
<p>
TCP_NODELAY необходим, чтобы ядро не объединяло разделенные пакеты.
</p>
<p>
<b>Примеры конфигурации:</b>
</p>
<p>
1. Отдельный SNI proxy на порту 1443 с перенаправлением на порт назначения 443:
</p><pre>
tlspr -p1443 -P443 -c1 tlspr -p1443 -P443 -c1
</pre> </pre>
2. tlspr используется как родительский прокси в SOCKS чтобы обнаруживать реальный hostname назначения (даже если запрашивается подклюение по IP адресу) <p>
<pre> 2. Использование tlspr как родительского прокси в SOCKS для обнаружения hostname из TLS (даже если клиент подключается по IP):
</p><pre>
allow * * * 80 allow * * * 80
parent 1000 http 0.0.0.0 0 parent 1000 http 0.0.0.0 0
allow * * * * CONNECT allow * * * * CONNECT
@ -570,6 +590,17 @@ parent 1000 tls 0.0.0.0 0
deny * * some.not.allowed.host deny * * some.not.allowed.host
allow * allow *
socks socks
</pre>
<p>
3. Использование tlspr с HTTP proxy для ACL по имени хоста TLS:
</p><pre>
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
</pre> </pre>
</p> </p>