14

我有一个设备需要连接到 tcp:80 上的互联网服务,但网络没有直接的互联网访问权限。所以我使用 squid 代理来解决这个问题。

该设备允许我输入代理服务器、端口、用户名和密码。

我发现,该设备使用 http CONNECT 而不是 http GET(在我的浏览器上运行良好)。

当设备尝试连接时,它会收到一个 http 错误 400。squid access.log 只给我这个:

1338885433.033 0 172.22.140.129 TCP_DENIED/400 1728 连接:0-无/-文本/html

所以我捕获了数据包以真正了解发生了什么:

来自设备的请求:

连接 mydomain.com:0 HTTP/1.0
用户代理:Sequencer/5.5.0.5539

鱿鱼的回答:

HTTP/1.0 400 错误请求
鱿鱼/2.7.STABLE9
X-Squid-错误:ERR_INVALID_URL 0
关

我的 squid.conf:

auth_param 基本程序 /usr/lib/squid/pam_auth
auth_param 基本儿童 5
auth_param 基本领域 Squid 代理缓存网络服务器
auth_param 基本凭据ttl 2 小时
auth_param 基本区分大小写关闭

acl 全部 src 全部
acl 管理器原型缓存对象
acl 本地主机 src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl localnet src 10.0.0.0/8 # RFC1918 可能的内部网络
acl localnet src 172.16.0.0/12 # RFC1918 可能的内部网络
acl localnet src 192.168.0.0/16 # RFC1918 可能的内部网络

acl SSL_ports 端口 443 # https
acl SSL_ports 端口 563 # 新闻
acl SSL_ports 端口 873 # rsync

acl Safe_ports 端口 80 # http
acl Safe_ports 端口 21 # ftp
acl Safe_ports 端口 443 # https
acl Safe_ports 端口 70 # gopher
acl Safe_ports 端口 210 # wais
acl Safe_ports port 1025-65535 #未注册的端口
acl Safe_ports 端口 280 # http-mgmt
acl Safe_ports 端口 488 # gss-http
acl Safe_ports 端口 591 # 文件生成器
acl Safe_ports port 777 #multiling http
acl Safe_ports 端口 631 # 杯子
acl Safe_ports 端口 873 # rsync
acl Safe_ports 端口 901 # SWAT

acl 吹扫方法 PURGE
acl CONNECT 方法 CONNECT
acl checkpw proxy_auth 需要

http_access 允许管理器本地主机
http_access 拒绝管理器
http_access 允许清除本地主机
http_access 拒绝清除
http_access 拒绝!Safe_ports
http_access 允许连接
http_access 允许本地网
http_access 允许本地主机
http_access 允许 checkpw 全部
http_access 全部拒绝

icp_access 允许本地网
icp_access 全部拒绝

http_port 3128

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log 鱿鱼

debug_options ALL,1 33,2 28,9

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern(发布|包(.gz)*)$ 0 20% 2880
刷新模式。0 20% 4320

acl 广播 rep_header X-HTTP09-First-Line ^ICY.[0-9]

upgrade_http0.9 拒绝直播

acl apache rep_header 服务器 ^Apache

broken_vary_encoding 允许 apache

extension_methods 报告合并 MKACTIVITY CHECKOUT

主机文件 /etc/hosts

forwarded_for 关闭

coredump_dir /var/spool/squid

有什么解决方案可以摆脱 ERR_INVALID_URL?我是否误解了 squid 代理的概念,或者来自设备的请求无效?

如果需要任何其他信息,请告诉我。

提前谢谢你,克里斯蒂安。

4

4 回答 4

25

我通过注释掉默认的 squid.conf 解决了同样的错误:

# Deny CONNECT to other than secure SSL ports
#http_access deny CONNECT !SSL_ports

默认情况下,Squid 设置为不允许 CONNECT 连接到非 SSL 端口。如果您想在没有 SSL 的情况下进行测试,您可以通过注释掉上面的行来禁用它。

于 2015-08-05T11:46:41.390 回答
4

如上所述,我允许非 SSL 端口连接,但忘记从我尝试访问的网络打开 acl。打开解决了这个问题:

acl localnet src 1.1.0.0/24     # <- My Internal network I am accessing from
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
于 2018-12-03T23:58:07.153 回答
1

对我来说,这与@peaxol正好相反:我定义了 acl,但没有定义http_access allow规则。我不得不添加它们:

acl vpn src xx.xx.xx.xx/xx
...
http_access allow vpn
于 2019-06-14T12:34:32.120 回答
0

我已经通过设备的产品支持解决了它。

他们向我展示了一种启用代理连接过程的更详细调试视图的方法。

日志文件中有一行“无法连接到中继 0.0.0.0”

所以我检查了设备的 dns 服务器设置,有一个错字。而已。

于 2012-06-06T06:51:26.550 回答