SQUID 可以工作但是在 VM 上不透明吗?

SQUID 可以工作但是在 VM 上不透明吗?

它是一个带有slackware的虚拟机

eth0 桥接器从网络 10.0.0.0/24 上的主交换机(连接到互联网链接)接收互联网,其中网关为 10.0.0.254,其接收的 IP 为 10.0.0.19

eth1 是使用 192.168.1.0/24 的内部网络,eth1 的 ip 是 192.168.1.254

路线-n的输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         10.0.0.254      0.0.0.0         UG    202    0        0 eth0

我已经安装了 named(bind) 并将转发设置为 10.0.0.254,并将我的服务器名称服务器设为 192.168.1.254,这似乎运行良好,没有任何问题。

我已经安装了 squid 2.7 和 3.1,--enable-linux-netfilter并在 iptables 上遵循规则(仅发布相关的规则,但由于它可以用于浏览,所以我不认为问题可能出在这里):

# deny all traffic
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP

# Use stateful inspection feature to only allow incoming connections
# related to connections I have already established myself
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# allow all traffic on lo interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# allow squid access
$IPT -A INPUT -i eth1 -p tcp --dport 3128 -m conntrack --ctstate NEW -j ACCEPT

# redirect requests to squid 
# both rules worked just fine
#$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.254:3128
$IPT -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j REDIRECT --to-port 3128

# share internet access
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这是我用于 SQUID 的测试配置(仅用于测试透明代理的默认规则):

http_port 3128 transparent

hierarchy_stoplist cgi-bin ?

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 192.168.1.0/24

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet
http_access deny all

always_direct allow all

有了以上所有功能,我可以正常导航,但透明代理从未出现过,我通过访问此页面进行测试http://stuff.dan.cx/php/testproxy.php,如果我直接从服务器访问它而不使用代理,一切都会顺利,如果我使用代理,它会立即检测到代理。

虽然我不认为下面的做法是最好的,但我可以使用以下配置隐藏版本 2.7 上的代理:

header_access Via deny all
header_access Forwarded-For deny all
header_access X-Forwarded-For deny all

问题:

  • 为什么透明代理在 3.1.8 上不起作用?
  • 我还可以验证什么来发现问题?

我一直在互联网和论坛上搜索,但没有找到任何能帮助我的东西。

我尝试过 Squid 页面,但目前还没有得到任何答案。

答案1

我刚刚发现了在 3.1.8 上要添加哪些规则才能使代理无法被检测到,对我来说,这更像是一种解决方案,而不是透明代理的真正方法。

我必须遵循的规则是:

request_header_access Via deny all
request_header_access X-Forwarded-For deny all

我将把它标记为答案,因为没有其他人有任何想法可以帮助我,但我仍然期待如何解决这个问题,并希望得到可能对问题有帮助的意见,如果另一个答案解决了我的问题,我会把它作为答案。

相关内容