问题标签 [transparentproxy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - Apache - 虚拟主机 - 代理 - https
我有一些带有 http 应用程序的服务器。现在我需要用 https 来保护它,但我不能单独做,它们都在同一个公共 IP 上。
所以我决定创建 HTTP 网关 - 透明代理服务器。我必须在 Windows Server 2016 上运行它。
我已经安装了 XAMPP 服务器和letsencrypt-simple。我已经成功申请并安装了证书,但是在访问网站时它仍然是“重定向太多”(并且它由 HTTPS 保护),没有代理它运行良好。
我的虚拟主机:
docker - 如何使用 Docker 而不是 Virtualbox 在 macOS 上制作透明代理?
有一个 github 项目VRouter,它将 Openwrt 图像制作为 macOS 上的 vbox,并将流量路由到虚拟机的 NIC 作为透明代理。我想知道用 docker 可以做这些事情吗?据我所知,docker for mac 实际上是在 mac 上的虚拟机中运行的,macOS 上没有 docker0 网卡。我找到了一个项目tuntaposx和一个用于 Docker for Mac docker-tuntap-osx的 tuntap 支持 shim 安装程序,这使得它可以从 macOS 访问虚拟机内的 docker 容器,而不是发布端口。但下一步是什么?我对网络问题感到很困惑。有人可以给我一个提示吗?
firewall - 具有内部和外部网络的透明代理 Squid
我有这样的网络设置与外部和内部网络。
我已经成功地让 squid 使用内部浏览器的代理运行,现在我想设置为透明但有一些问题。
网络
首先,我确实更改了“http_port 8080 intercept”,但在外部服务器上设置正确的 Iptables 时遇到了麻烦,因为数据包没有返回到 squid 盒。
据我所知,互联网在内部电脑上工作正常,但我不确定如何将 http 80 数据包重定向到 Squid 盒(10.10.1.254:8080
)
node.js - iptables TPROXY 被命中但不重定向到端口
我正在Debian 8
运行iptables
。
我有以下规则:
我只是想将通过目标端口 5000 的所有流量重定向到端口 4000。
该标准iptables
REDIRECT
在我的情况下不可用,因为它会更改数据包并更改原始目标端口。
看着iptables -t mangle -nvL
我可以看到被击中的规则:
但是我在端口上运行的服务4000
不会拦截数据包。
我有一个简单的NodeJS
应用程序侦听TCP
端口上的所有内容4000
,但没有得到任何内容packets
:
此外,在所有接口wireshark
上的TCP
端口 4000 上运行不会显示任何内容。
docker - 如何在多个 docker 容器和主机之间创建隧道?
我正在设置两个使用网桥连接的 docker 容器(比如 A (172.17.0.2) 和 B (172.17.0.3))。我希望将所有请求从主机容器路由到容器 A,然后是容器 B,然后再路由到 Internet。响应应遵循相反的路径。
到目前为止,我已经能够使用主机和一个容器(比如 A)来做到这一点。我已经在容器 A 上设置了以透明模式运行的 mitmproxy。我开始在端口 8080 上运行 mitmproxy(使用主机绑定,因此 A 上的端口 8080 绑定到主机上的端口 8081)。我能够通过 A 路由主机上的所有连接,然后再返回主机。我将端口 80 和 443 上的所有连接转发到 docker 容器上的端口 8080。
这些规则使用一个 docker 容器以非 root 用户身份完成路由。
我在容器 A 上尝试了类似的规则,方法是在端口 8500 上的容器 B 上以透明模式运行 mitmproxy。我认为这是正确的做法:
将端口 80/443 上的所有主机流量路由到容器 A 上的端口 8080 将端口 8080 上的所有容器 A 流量(此处所有流量都应该在此端口上)路由到容器 B 上的端口 8500 容器 B 应该向 Internet 发出实际请求,并且将响应发送回 A,A 将其发送回主机。
当我在容器 A 上设置如下规则时,我看到容器 B 上发出的 GET 请求无限循环
我认为这与 docker 在主机上设置的现有 iptables 规则有关,但我无法弄清楚如何让它工作。
感谢帮助!
c - 获取 UDP 目标地址:来自 TPROXY 流量的端口
我正在尝试从 iptables TPROXY 规则重定向的 UDP 数据包中获取原始目的地。然而,这样做的几种方法都失败了,并且使用原始套接字从 IP 标头中钓鱼似乎给了我乱码的数据包。
困惑真的是双重的。后一个小数据包是 SOCK_DGRAM 获得的 UDP 有效负载,但是将其更改为 SOCK_RAW 会返回此乱码,其中不包含有效负载的痕迹,也不包含 IP 标头。
错误的东西:
正确的有效载荷:Port: 0 -- ff ff ff ff 55 4b a1 d5 77 received 9 bytes
未受 TPROXY 影响的正确原始数据包如下所示:
这FF-FF-FF-FF-5x
是所需负载的开始,端口在 69CD 处。
由于 C# 似乎没有 TPROXY 工作显然需要的 IP_TRANSPARENT 标志,因此转移到 C/C++ 套接字代码后,我尝试为 IP_TRANSPARENT、IP_RECVORIGSTDADDR、IP_HDRINCL 设置套接字选项。
我从 recvfrom 更改为 recvmsg 和 msghdrs,以便尝试循环查看辅助数据以从 sockaddr_in 结果中获取 sin_port。我已经从不同的 SO 问题中拼凑了很多尝试,诚然我真的不知道在这个级别的套接字代码上发生了什么,像 cmsghdr、cmsg、msghdr、iovecs 等对我来说都是新的。这里似乎没有任何效果,无论 TPROXY 对这些数据包做什么,它们都无法使用。
这是抓取数据包,打印十六进制并尝试获取端口的内容(无论如何它都会导致 0)
iptables 规则将匹配十六进制字符串的数据包重定向到此套接字绑定到的端口:
我只需要获取目标地址:端口,以便转发流量以有条件地将其转发到它打算去的地方,并将结果发回。如果我可以使用 UDP 套接字执行此操作并以某种方式获取有效负载,然后从某些函数获取端口,fab。如果我必须获取原始数据包然后从 IP 标头中获取它,那也很好,但我不能,因为 TPROXY 似乎在混淆这些数据包。
node.js - nodejs 使用动态子域代理请求
我希望我的服务器充当客户端和另一台服务器之间的中间件,问题是目标服务器有一个动态子域,每次随机更改
我已经尝试过 http-proxy-middleware,它适用于非动态目标,但我不能做得更好
我需要一种方法来代理从 x1.myserver.com 到 x1.traget_server.com 和 x2.myserver.com 到 x2.traget_server.com 的请求,其中 x1,x2 应该在运行时工作并动态添加的随机值
docker - TPROXY 与 Docker 的兼容性
我试图了解 TPROXY 如何为 Docker 容器构建透明代理。
经过大量研究,我设法创建了一个网络命名空间,向其中注入了一个 veth 接口并添加了 TPROXY 规则。以下脚本在干净的 Ubuntu 18.04.3 上运行:
之后,我从Cloudflare 博客启动了一个玩具 Python 服务器:
最后通过运行,ip netns exec ns0 curl 1.2.4.8
我能够观察到来自192.168.3.2
to的连接1.2.4.8
并接收到“hello world”消息。
问题是它似乎与 Docker 存在兼容性问题。一切都在一个干净的环境中运行良好,但是一旦我启动 Docker,事情就开始出错了。似乎 TPROXY 规则不再有效。运行ip netns exec ns0 curl 192.168.3.1
给出“连接重置”并运行ip netns exec ns0 curl 1.2.4.8
超时(两者都应该产生“hello world”消息)。我尝试恢复所有 iptables 规则,删除 Docker 生成的 ip 路由和规则并关闭 Docker,但即使我没有配置任何网络或容器,也没有任何效果。
幕后发生了什么,我怎样才能让 TPROXY 正常工作?
linux - IP_TRANSPARENT SYN 未在 localhost 上获得 SYN+ACK 响应
我正在编写以下程序(尽管我认为这不是问题所在):
端口 7007 正在运行一个回显服务器,但这并不重要,因为那里的程序从不接收连接。
当我运行 tcpdump 时,我看到 SYN 使用正确的(编造的)源地址发送,但 SYN+ACK 既不是在环回上也不是在 eth0 上发出的:
如果我注释掉bind
,那么一切都会按预期进行。没有似乎相关的防火墙端口,并且rp_filter
在环回时设置为 0。
为什么连接不被接受?这是我的代码中的错误,还是与此配置相关?
python - 是否可以使用 UDP 进行透明代理?
我想知道是否有可能在 Python 中为 UDP 使用透明代理。我的套接字定义为:
在哪里
是常数。现在,我想获取该套接字的原始 IP 和端口。对于 TCP,它像这样sock.getsockname()
工作,但它不适用于 udp 套接字。当然,我先做这样的事情: