我正在为最终用户设计一个将文件上传到 FTP 服务器的过程。关键要求是确保与服务器的连接是安全的。
我知道许多 FTP 客户端应用程序可以创建安全的 FTP 连接(例如 FTPES 或 SFTP - 是的 FTP 服务器确实支持这些),但它是客户端中的一个可选设置。换句话说,我们可以要求人们创建安全的 FTP 连接,但我们不能强迫他们这样做。
我应该在这里提到 FTP 服务器属于第三方提供商,如果有服务器设置强制执行 FTPES 或 SFTP 连接,我们无法启用这些。
所以,问题是 - 有没有办法强制执行安全的 FTP 连接?这里有一些猜测:
也许有一个 FTP 客户端强制使用安全的 FTP 连接,我告诉最终用户这是他们可以使用的唯一客户端。这有点蹩脚!
也许有一个 FTP 客户端可以从远程服务器(即我控制的服务器)获取其 FTP 连接详细信息(url、协议和登录),因此我可以指定它们,而最终用户永远不会看到它们。
也许我可以建立某种“2 跳”连接,用户最初连接到我控制的需要安全连接的服务器,但(对用户透明)连接实际上被重定向到真正的 FTP 服务器。
您的第三个想法似乎最有希望:考虑一个FTP 代理服务器。您的用户使用您设置的连接要求(例如加密)连接到代理,并且代理服务器使用您配置的参数连接到目标服务器。
除非您可以强制执行或审核策略,否则您无法让用户遵循它。安全框架的强大取决于其最薄弱的环节。
这种情况对我来说似乎很奇怪 - 您需要通过加密数据流量来满足保密性要求,但您正在与不满足此要求的第三方合作。也可能需要在管理旗杆上解决问题。
一种可能的方法 - 为他们设置自己的服务器以在内部保存内容,然后设置脚本以将数据镜像到远程站点。这意味着您要负责在设定的时间安全地传输数据,而不是将其留给用户(这甚至可以为您消除一些麻烦,除非您需要远程服务器上的数据立即可用)。
除非服务器可以设置为只允许安全连接,否则我不知道有什么方法可以真正 100% 确保用户正在做他们应该做的事情,而且你已经说过你不能重新配置第三方服务器。
这种方法的另一个好处是您有一种 FTP 数据的“备份”,并且可以更快地在本地访问数据,而不是通过 webbertubes 访问它。拥有这个“ftp 代理”可以节省您的带宽。
如果您想进一步研究它,您甚至可以有一个过程,您的服务器有一个脚本可以由用户触发以上传到远程站点,或者可能有一个 cron 作业可以简单地每五分钟检查一次文件上载目录中的更改将触发到远程站点的上载过程。
我认为只有多跳方法才能真正起作用。
也许您可以为服务器设置防火墙,使其不接受标准 ftp 端口上的连接?
在远离带宽/存储的地方购买虚拟机,然后按照 Bart 的建议进行操作。
(通过 sftp 我假设您的意思是与 ssh 相关的 sftp。)
如果只允许与服务器的安全连接,则可以强制他们使用安全连接。如果他们不使用安全连接,那么他们就无法进入,他们会打电话给您,您告诉他们配置他们的 FTP 客户端以使用安全连接。问题解决了。
我假设,特别是因为您指的是第三方 ftp 服务器,ftp 和 sftp 服务在它们各自的默认端口上运行,这些端口是不同的。您是否能够将防火墙配置为停止与该服务器的 ftp 连接,但允许 sftp/ssh 传输?