我已经设置了一个透明代理,squid
监听 8080(http)8443(https),并且它可以工作。
另外,我设置了iptables来重定向请求。
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
如果我设置一个显式代理来替换 squid,http 仍然可以工作,但 https 不起作用(https 代理执行 MITM,并且我信任该证书)。
我想知道使用 iptables REDIRECT 和明确设置浏览器代理之间的区别。代理处理它的方式是否有所不同?
答案1
代理如何工作
透明代理的工作原理
浏览器认为它正在与 Web 服务器对话,代理会拦截该流量并执行其需要的任何任务。
显式代理的工作原理
浏览器知道它正在与代理通信,并要求代理加载它想要加载的站点。
每种类型的优点
透明的
- 无需在每个客户端上进行配置
- 可供无代理设置的软件使用
显式
- 更明显的是,流量正在受到监控
- 可以在透明代理可能破坏的地方工作
- 如果代理失败,更有可能给出有用的错误消息
答案2
CONNECT
浏览器的对话方式不同。使用显式代理时,每当需要通过 https 进行任何操作时,它都会发出特殊动词。使用透明代理时,它将发出正常GET
或POST
,但绝不会发出CONNECT
。
在不安全的 http 中不会发生这种特殊的差异。