我正在尝试设置代理来过滤互联网流量。为此,我得到了以下组合:客户端 -> Openvpn -> squidproxy -> 互联网 Squid 代理和 openvpn 已安装在同一个 ubuntu 服务器上。虽然安装了 openvpn这个 Digital Ocean 教程。Openvpn 目前正在运行,并将流量正确路由到互联网。但我无法强制请求通过 squid 代理,即使在将其设置为透明路由并添加一些 iptables 配置之后也是如此。
我还添加了此配置帖子,其中端口 80 上的 http 请求不会到达互联网,也不会到达 squid 代理(http_port 3128 transparent
定义squid.conf
为透明拦截请求)
-A PREROUTING -i tun0 -p tcp --dport 80 -j DNAT --to 10.0.2.15:3128
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
答案1
看看你所做的事情,我看不出有什么问题 - 尽管存在一些明显的差距。
越来越多的网络只在 HTTPS 上运行。我希望 Whatsapp 等应用程序对所有流量都使用 SSL。虽然可以在代理服务器上中继 SSL 流量(使用简单的端口转发器,如 socat),但如果您需要监控正在交换的数据的能力,那么这是一个更复杂的提议。Squid 确实有能力动态生成 SSL 证书,从而解密/重新加密流量。但这要求在客户端设备上安装您使用的根 CA - 这在未植根的移动设备上很难做到。
答案2
我想您正尝试使用这种组合将不同的用户连接到互联网,对吗?您的客户端和服务器是否在同一个网络中?
我不明白为什么你需要为此使用 OpenVPN 服务器。为什么不直接在服务器中设置 Squid,然后让客户端直接将其用作代理服务器?如果他们具有可见性,并且你配置到 Squid 中的端口未被防火墙过滤,它应该可以工作。如果需要,你甚至可以配置 Squid 将请求转发到第二个代理。
如果您仍想使用 OpenVPN 加密从客户端到服务器的流量,您仍需要在客户端中配置 Squid 代理作为代理服务器。否则,它们将直接使用 VPN 连接进行连接。
答案3
我使用相同的指南设置了 VPN Squid 代理以连接到互联网。经过多日的尝试,我终于弄明白了为什么我的 squid 访问日志是空的,经过一番研究,我得出结论:Ubuntu 上的 dnat 和重定向不起作用。在谷歌上搜索了 Ubuntu 上的 nat 不起作用似乎是一个问题,这证实了这一点。
我切换到 CentOS 来重试,这仍然需要大量工作重新安装和重新配置 penvpn 服务器,因此在遇到使用 socat 进行端口转发后,我决定在现有的 Ubuntu 安装上使用 socat 来挽回一些失去的时间。
关于每个客户端证书的评论,这是一个漂亮而优雅的解决方案,可以过滤到移动用户的流量,尤其是使用 openvpn 的统一 ovpn 客户端文件,该文件嵌入了服务器和客户端密钥(包括 hmac 密钥)。一个提示:最终获得了统一格式,可以使用来自网络的名为 ovpn gen 的脚本。