池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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何随机分配一个分散的ArrayList?   java 6×6数组验证   JAVAlang.ClassNotFoundException:com。低密度脂蛋白。vision86。商业拦截器。登录接收器   java树映射按值排序错误   java C#with Xamarin:检查Whatsapp是否发送了消息   java在注释中传递方法   java线程局部区域(TLA)和线程堆栈大小(Xss)之间有什么区别?   java未从youtube数据api获取JSON响应   玻璃鱼3爪哇。尼奥。频道。ClosedChannel异常客户端关闭SSL   java以数组的形式从int返回素因子作为输入   java从数据库获取空列表和异步任务   两个泛型参数具有相同上限时的java Unchecked cast警告   java使用jquery在文本字段中显示servlet结果   java Tomcat确实使用在上下文中配置的驱动程序。xml