Squid 代理服务器(不透明)在端口 3128 和 80 上工作

Squid 代理服务器(不透明)在端口 3128 和 80 上工作

我有一个 Squid 代理服务器(Debian),可以完美地进行身份验证:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd

我还希望尝试使用代理作为网关(端口 80)获取网页的客户端能够重定向到端口 3128。

我已经尝试过 iptables:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

没有运气,因为在这种情况下我的 80 端口客户端会收到错误:

The following error was encountered:

Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:

Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed

所以我决定简单地让 squid 监听两个端口,修改 squid.conf:3128 和 80

http_port 80
http_port 3128

会发生什么?

定期连接到 3128 的客户端必须输入密码,而未配置代理的客户端(因此在端口 80 上工作,因为 squid 也是我们小型网络的防火墙/路由器和网关)无需输入用户/密码即可上网。

我该如何解决这个问题?

Iptables 或 squid.conf 我不在乎。

答案1

让透明代理监听 3129 端口,并将每个来自 80 端口的请求重定向到它:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

Squid.conf:

http_port 3128
http_port 3129 transparent

这样,透明代理将成为默认选项,并且使用它进行身份验证的人必须在其浏览器上配置代理:3128。

相关内容