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