我已经有一段时间没有使用鱿鱼了,所以如果我关闭配置我不会感到惊讶。但本质上,我正在尝试使用 Squid 设置代理服务器,以便我可以执行以下操作:
客户端(我的本地PC)-> Squid代理服务器-> FTP服务器(foo.bar.net)
我在网上看了一些教程,事情看起来非常简单。我这里有我的部分配置:
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
acl ftp proto FTP
acl ftp_port port 21
acl SSL_ports port 443 21
acl Safe_ports port 20 # ftp port
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 280 # http-mgmt
acl CONNECT method CONNECT
acl ftp_port port 21
http_access allow ftp ftp_port
http_access allow ftp_port CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
http_port 21
acl local-servers dstdomain foo.bar.net
always_direct allow local-servers
acl FTP proto FTP
always_direct allow FTP
当我重新加载服务时,我看到它绑定到配置的端口。但是当我在本地 PC 上使用 CyberDuck 进行连接时,squid 的 access_log 中没有记录任何内容。这并没有让我对配置是否正确充满信心,因为它没有记录任何类型的对 FTP 服务器的尝试访问。我做错了什么吗?
答案1
来自鱿鱼常见问题:
我可以让我的常规 FTP 客户端使用 Squid 缓存吗?
不,这是不可能的。 Squid 只接受 HTTP 请求。它在服务器端使用 FTP,但在客户端则不使用。
非常酷的
wget
将通过 Squid(可能还有任何其他代理缓存)下载 FTP URL。
尽管“代理”一词在 HTTP 上下文中最常被提及,并且许多其他协议可以通过允许使用 HTTP CONNECT 方法的 HTTP 代理来传递,但 HTTP 代理仍然不是“一切代理”。
为了与像 Cyberduck 这样的实际 FTP 客户端一起使用,您将需要一个专用的 FTP 代理,就像 Debian 中提供的代理一样ftp 代理包(如果您想保护/提供对有限数量的 FTP 服务器的访问),或 SOCKS 代理(如果您的 FTP 客户端支持 SOCKS,并且您希望客户端能够连接到世界上任何 FTP 服务器)。
SSH 实际上可以提供 SOCKS 代理,但其主要目的是通过 SSH 连接来隧道化代理应用程序的连接。
首先,您必须在启用 SOCKS 代理的情况下建立 SSH 连接,告诉支持 SOCKS 的客户端应用程序使用localhost
并在 SSH 客户端配置中指定的 SOCKS 端口作为 SOCKS 代理,然后只要 SSH 正常,您就可以正常使用该应用程序。连接处于活动状态。客户端应用程序的连接将从 SSH 客户端通过隧道传输到 SSH 服务器,并从那里传输到应用程序指定的目的地。从应用程序服务器的角度来看,连接的起始点将是 SSH 服务器,而不是应用程序(或 SSH 客户端)实际所在的主机。
答案2
我以前没有配置过鱿鱼,所以更精通的人可以帮助你。
在你的 .ssh/config 中,你有 ProxyCommand 行吗?我还记得有一次需要安装 netcat。
我在 .ssh/config 中的行如下所示:
Host sftp.example.com
ProxyCommand ssh [email protected] nc %h %p