池tls包装器
ptw的Python项目详细描述
工作票
池tls包装器
接受侦听端口上的TCP连接,并将其转发到目标端口(用TLS包装)。ptw
维护新建立的tls连接池,有效地消除了tls握手造成的延迟。
ptw可以作为stunnel或haproxy的替代品,用于tcp连接的安全隧道。因此,它打算与服务器端的stunnel或haproxy一起使用,接受tls连接并将它们转发给socks代理。在这种配置中,请确保服务器超时足够长,以允许空闲客户端TLS会话的生存期(-T
选项)。
ptw
可用于自定义ca和/或具有证书的相互tls身份验证。
功能
- 基于经验证的TLS安全性,并与著名的服务器端守护进程一起工作,用于TLS终止,如haproxy和stunnel。
- 防火墙和dpi证明:连接与https通信没有区别。有关webserver伪装代理的完整示例,请参见config_examples目录中的
haproxy.cfg
。 - 由于每个TCP连接都有单独的TLS会话,与涉水解决方案的其他TCP通信量相比,具有更高的实际性能。
- 使用连接池隐藏TLS连接延迟。
- 支持透明代理模式。
- 支持TLS SNI(服务器名称指示)欺骗-在防火墙中绕过基于SNI的筛选器可能很有用。
- 跨平台:在Linux、MacOS、Windows和其他类Unix系统上运行。
要求
- Python3.5.3+
安装
pip3 install ptw
用法
有关简单的tls证书生成器,请参见quickcerts。
socks/http代理的包装器
ptw -c mycert.pem -k mykey.pem -C ca.pem -n 50 -T 300 example.com 1443
服务器上相应的最小haproxy配置:
...
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000
timeout check 5000
timeout client 600000
timeout server 600000
timeout tunnel 600000
frontend socks-proxy
bind *:1443 ssl crt /etc/haproxy/server.combined.pem ca-file /etc/haproxy/ca.pem verify required
default_backend socks-proxy
backend socks-proxy
server localsocks 127.0.0.1:1080
此命令将接受端口57800上的TCP连接,将它们包装在TLS中,并将它们转发到example.com主机的端口1443,保持至少50个TLS连接的池不超过300秒。有关客户端TLS身份验证,请参见-c
和-k
选项。
有关haproxy和danted的完整配置文件,请参见config_examples目录。
TCP连接的透明代理
在路由器上运行:
ptw -a 0.0.0.0 -c mycert.pem -k mykey.pem -C ca.pem -n 50 -T 300 -P v1 example.com 2443
向iptables添加以下规则:
iptables -I PREROUTING 1 -t nat -p tcp -s 192.168.0.0/16 '!' -d 192.168.0.0/16 -j REDIRECT --to 57800
假设您的本地网络被前缀192.168.0.0/16
覆盖。
相应的haproxy配置部分:
frontend tls-wrapper
bind *:2443 ssl crt /etc/haproxy/server.combined.pem ca-file /etc/haproxy/ca.pem verify required
default_backend strip-proxy
backend strip-proxy
server strip-proxy 127.0.0.1:41718
frontend strip-proxy
bind 127.0.0.1:41718 accept-proxy
default_backend passthrough
backend passthrough
server direct *
此安装程序将重定向网络中的所有TCP连接。如果您的服务器支持代理协议版本2,您也可以使用它(选项-P v2
)。
通用单倍体结构
您还可以在单个外部端口上共享代理协议、SOCKS协议侦听器和诱饵Web服务器。请参阅config_examples目录中的haproxy.cfg
。
概要
$ ptw --help
usage: ptw [-h] [-v {debug,info,warn,error,fatal}] [-l FILE]
[--disable-uvloop] [-a BIND_ADDRESS] [-p BIND_PORT]
[-P {none,v1,v2}] [-n POOL_SIZE] [-B BACKOFF] [-T TTL] [-w TIMEOUT]
[-c CERT] [-k KEY] [-C CAFILE]
[--no-hostname-check | --tls-servername TLS_SERVERNAME]
dst_address dst_port
Pooling TLS wrapper
positional arguments:
dst_address target hostname
dst_port target port
optional arguments:
-h, --help show this help message and exit
-v {debug,info,warn,error,fatal}, --verbosity {debug,info,warn,error,fatal}
logging verbosity (default: info)
-l FILE, --logfile FILE
log file location (default: None)
--disable-uvloop do not use uvloop even if it is available (default:
False)
listen options:
-a BIND_ADDRESS, --bind-address BIND_ADDRESS
bind address (default: 127.0.0.1)
-p BIND_PORT, --bind-port BIND_PORT
bind port (default: 57800)
-P {none,v1,v2}, --proxy-protocol {none,v1,v2}
transparent mode: prepend all connections with proxy-
protocol data (default: none)
pool options:
-n POOL_SIZE, --pool-size POOL_SIZE
connection pool size (default: 25)
-B BACKOFF, --backoff BACKOFF
delay after connection attempt failure in seconds
(default: 5)
-T TTL, --ttl TTL lifetime of idle pool connection in seconds (default:
30)
-w TIMEOUT, --timeout TIMEOUT
server connect timeout (default: 4)
TLS options:
-c CERT, --cert CERT use certificate for client TLS auth (default: None)
-k KEY, --key KEY key for TLS certificate (default: None)
-C CAFILE, --cafile CAFILE
override default CA certs by set specified in file
(default: None)
--no-hostname-check do not check hostname in cert subject. This option is
useful for private PKI and available only together
with "--cafile" (default: False)
--tls-servername TLS_SERVERNAME
specifies hostname to expect in server TLS certificate
(default: None)