在过去的几天里,我一直在 VMware 中设置 Windows Server 2008 R2。我使用Web 服务器 (IIS)-角色。
ftp://localhost
使用以下方式访问我的 FTP 站点一切正常火狐。我也可以通过当地的我的服务器的 IP。实际上,在我的 LAN 中一切正常。
但我的问题是:
我想使用外部 IP 或动态网络-URL。我有一个联讯- 我的服务器前面的路由器,因此我转发了所有重要的端口。
如果你现在想“这个白痴可能忘记了一些端口”,那我肯定让你失望了。它甚至可以访问我的服务器网站并搞乱一些 Web 接口。
问题是我的被动FTP(对我来说,主动工作)。我总是会遇到超时的情况,例如档案等待对命令的响应LIST
。我不明白的一件大事是,为什么我的服务器会向命令发送响应PASV
,命名一个端口,如40918,即使我限制了被动 FTP 的数据端口范围(在IIS 管理器) 至例如 [5000-5009]。
我只是不想打开和转发所有可能的数据端口!
还有一件事是,我无法指定静态外部 IP 地址对于我的服务器,因为我没有任何服务器。
我已经尝试过这些解决方案:
- - 编辑: - -
我的脑海中浮现出一个想法:
当我使用 FileZilla 通过被动模式连接时,我总是得到这样的信息:
227 Entering Passive Mode (192,168,1,102,160,86)
根据 Rhinosof 文章,FZ 尝试连接端口“160*256+86 =41046“,尽管我已经限制了数据端口(如上所述)。这可能是由路由器引起的吗?路由器不直接转发输出端口,而是使用不同的端口?
(--> 给出的 IP 地址是本地的,因为我无法在 IIS-Mgr 中定义静态外部)
--- 编辑2:---
dynamicportrange
我曾经有过改变via 的想法netsh interface
,但甚至没有给出帮助-text 本身就有效。我想我会放弃它,互联网信息服务-FTP 然后使用FileZilla 服务器结论:
你好,免费软件,再见“成本高,但效果好”-Windows *咳嗽*。
答案1
在 Windows 中更改动态端口范围不会有帮助。它唯一的作用是限制套接字连接的客户端将使用哪个端口。
您需要做的是限制 IIS 的 FTP 服务器使用的端口范围。有一个相当不错的博客文章有关 MSDN 上的信息,但重点如下:
如果您使用内置 FTP 服务器,则需要首先安装“IIS 6 元数据库兼容性”角色服务(以及相关的脚本工具),然后使用以下命令设置正确的元数据库属性:
adsutil.vbs 设置 /MSFTPSVC/PassivePortRange“5500-5525”
- 如果您使用的是 IIS 7.5 可下载的 FTP 模块(可从这页面)然后您需要打开服务器的配置编辑器并编辑 applicationHost.config 中“FTP 防火墙支持 > 数据通道端口范围”下的“数据通道端口范围”属性。
不管上述情况如何,您仍需要在 NAT 网关设备上对整个范围进行端口转发,以使外部连接正常工作。大多数防火墙/NAT 设备都包含用于 FTP 的协议助手,可让它们识别 PASV 命令并做出相应反应,但并非所有设备都这样做(如果您使用非标准端口作为 FTP 命令通道,它通常不起作用)。
PS 如果您位于 NAT 后面,则应考虑使用与 FTP 不同的协议:如果没有丑陋且危险的解决方法,您将无法使其正常工作。我建议您研究 SFTP 或 WebDAV。
答案2
您是否尝试过将 FTP 服务器放在路由器的 DMZ 中,只是为了查看是否是路由器丢弃了数据包?试一试。
另外,打开 Windows 防火墙日志记录(控制面板->管理工具->Windows 防火墙和高级安全,在控制台中右键单击“Windows 防火墙和高级安全”,转到属性,然后在那里启用丢弃数据包的日志记录)只是为了看看你的网络外的计算机是否能够请求正确的端口。
答案3
netsh advfirewall 设置全局 StatefulFtp 启用
netsh advfirewall 防火墙添加规则名称="FTP for IIS"服务 = ftpsvc 操作 = 允许协议 = TCP dir = in
答案4
对于使用 Microsoft Azure 云服务托管的 Windows 服务器的用户,如果您使用网络安全组,您还需要在那里创建一个入站规则,该规则与您在 IIS 中的 FTP 防火墙支持部分设置的端口范围相匹配。