FreeBSD jail中的FTP防火墙问题

我最近试图在我的一个FreeBSD服务器上设置jail,并且在尝试通过FTP下载FreeBSD软件包时遇到了奇怪的错误。

我在PF防火墙中有这些规则,允许在主机上下载软件包,它们工作的很好:

ext_if = "bge0" # Allow downloads pass out log on $ext_if proto tcp to any port {20, 21, 22, 80, 443} # Special exception for FTP. pass out log on $ext_if proto tcp to any port > 49151 keep state 

但是当我尝试从Jail内部安装软件包时,FTP连接就超时了。
我得到的错误消息是这样的:

 %pkg_add -vr bash [snipped FTP connection setup] >>> CWD pub/FreeBSD/ports/amd64/packages-8.1-release/Latest <<< 250 CWD command successful. >>> MODE S <<< 200 MODE S accepted. >>> TYPE I <<< 200 Type set to I. binding data socket >>> PORT 82,103,140,25,229,3 <<< 200 PORT command successful. initiating transfer >>> RETR bash.tbz <<< 425 Can't build data connection: Operation timed out. Error: Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/bash.tbz: Can't open data connection pkg_add: unable to fetch 'ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/bash.tbz' by URL pkg_add: 1 package addition(s) failed 

有我缺less的某种连接? 我希望我可以只configurationpkg_add使用HTTP而不是FTP(我不知道为什么FreeBSD仍然使用这个协议的抱歉原因),但似乎需要FTP来运行FreeBSDs包系统,我不知道如何做它与防火墙一起工作。 任何build议将受到欢迎:)

默认情况下,FTP使用所谓的“活动”模式进行数据传输,对防火墙不太友好。 在这种模式下,FTP服务器连接到客户端发送的PORT命令中指定的IP:端口(您的情况为82.103.140.25:58627)。

最简单的方法是从“Active”切换到“Passive”FTP传输模式。 对于使用fetch(1)进行文件检索的'pkg_add',通过设置环境variablesFTP_PASSIVE_MODE来完成。

您可以尝试使用带有anchor "ftp-proxy/*" ftp-proxy(8)

欲了解更多信息,请参阅这里http://www.openbsd.org/faq/pf/ftp.html