安全的 FTP 访问;最佳实践

信息安全 防御 ftp
2021-08-11 14:16:59

我们有几个 Web 应用程序(B2B、B2C 电子商务),开发人员可以访问这些应用程序来上传文件。

我需要确保 FTP 部分非常安全。

最好的方法是什么?

目前,我有:

  • 更改了端口号,以及
  • 为上传设置静态 IP(仅限我们的本地 IP)

这足以使 FTP 访问安全吗?

3个回答

尽管@mahbubut-r-aaman 顺便提到了它,但我想我会扩展一下关于 SSH 的内容。我要说的保护 FTP 的答案是不要使用 FTP。原因是它(默认情况下)以明文形式发送用户名和密码,这不被认为是一种非常安全的方法。

相反,您可以查看 SFTP(使用 SSH 协议)或使用带有 SSL 的 FTP 协议进行加密的 FTP(S)。

此外,我建议查看类似fail2ban的解决方案,以帮助阻止密码猜测尝试。

更改它侦听的端口有助于避免随机攻击日志中的噪音,但您不应该依赖它。

如果可行的话,锁定对特定源 IP 地址的访问是一个好主意,因为它会限制谁可以尝试访问该站点。

标准FTP的问题

标准的 FTP 协议是不安全的。网络上的任何人(所谓的“中间人”,可以读取和/或修改连接上的数据)都可以看到您发送的内容,并修改发送的数据。典型的 FTP 登录如下所示:

* TCP connection is made to the server
220 Welcome to this FTP server!
USER <username>
331 Password required for <username>
PASS <password>
<a positive or negative response>

如您所见,密码没有任何保护。由于网络上的任何人都可以阅读此内容,因此攻击者可以使用被盗的用户名和密码轻松登录。

有多种方法可以解决此问题。您可以使用 FTP 以外的其他东西,但由于这不是这里的主题,所以我不会讨论这个。FTP 本身知道两个流行的安全版本:FTPS 和 SFTP。您可以按如下方式将它们分开:FTPS 的末尾有一个 S,就像 HTTPS 一样。事实上,它的工作方式与 HTTPS 完全相同,后者是通过 SSL/TLS 协议实现的。SFTP,前缀为 S,使用 SSH 连接,在 Linux 服务器上比较流行。

在这篇文章中,我将重点介绍 FTPS。

关于您迄今为止采取的措施

首先,您积极寻求确保这一点是一件好事。很多人根本不在乎!

  • 更改端口号

    这有两个方面的帮助,尽管两者都不值得。

    1. 使用备用端口会使它的 FTP 流量变得不那么明显,但是当有人主动试图入侵您并可以监控您的网络时,注意到它仍然是微不足道的。
    2. 我经常看到人们在端口 21 上扫描随机服务器以查看是否有不安全的帐户处于活动状态,但是他们已经猜不到像“1Q3XX”这样的密码(他们主要进行字典攻击)。因此,如果您的密码比“admin”或“123456”更好,那么更改端口并不是很有利。
  • 可以从固定(我们的本地)IP 完成上传

    这会有所帮助,但也会限制您。如果您在家并注意到您的网站存在巨大的安全漏洞,则需要开车过去。使用合适的密码,不需要限制 IP,特别是如果您的服务器支持在多次无效登录尝试后自动禁止。

    您可以设置一个 VPN 来避免开车过来,但如果您可以简单地选择一个强 FTP 密码,那又有什么意义呢?

软件建议

由于您没有提到它,我假设您对任何操作系统可用的任何 FTP 客户端和服务器实现开放。

虽然我没有测试过很多 FTP 服务器,但FileZilla Server非常适合我的目的,而且我想它适用于任何小型组织。特点包括:

  • 多个用户和用户组
  • 允许或拒绝来自给定 IP 的访问,包括每个用户和全局的服务器
  • FTPS。就像 HTTPS 是安全的 HTTP,FTPS 是安全的 FTP。它完全通过 SSL/TLS 工作并保护正在发送的数据。中间人(例如公共 wifi 网络上的黑客,甚至您的政府或 ISP)无法读取或更改数据(登录名和代码)。您可以简单地安装自己的证书。
  • 您可以强制每个用户使用 FTPS,也可以强制发送加密文件(某些客户端只加密登录数据)
  • 无效登录次数过多后自动封禁(封禁IP一段时间,可设置)
  • 支持日志记录,您可以设置日志的存储时间、日志的大小等。
  • 更多与安全无关的功能,例如速度限制/限制、限制并发客户端的数量、设置它侦听的端口、设置欢迎消息等。
  • 配置是 XML 格式,有一个管理面板(管理面板可以远程连接,并且有密码保护)。这意味着您还可以根据需要自动将用户添加到 XML 文件。
  • 一个缺点是它仅适用于 Windows。

如果您使用的是 Linux 服务器,您可以寻找具有类似选项的 FTP 服务器。到目前为止,要在服务器中寻找的最重要的功能是 FTPS 或 SFTP,以及强制执行此功能的可能性,这样任何人都不会在没有加密的情况下意外连接。除此之外,自动禁止和日志记录非常重要。

然后对于客户端,我再次认为 FileZilla 是一个非常好的选择。

  • 它支持 FTPSSFTP,甚至支持客户端证书进行身份验证。
  • 您必须明确信任服务器发送的证书,可选择存储和信任证书。如果证书是由黑客伪造的,你就会知道,因为它再次询问你“你想信任这个未知的证书吗?”。
  • 多平台(在 Windows、Mac 和 Linux 上运行)
  • 更多选项,如同步目录浏览、站点管理器(存储不同服务器的登录名)、根据大小和修改日期比较本地和远程目录列表中的文件、限制速度和并发传输等。

以下步骤将帮助您保护 FTP 访问

  • 禁用匿名访问
  • 将您的 FTP 站点设置为 Blind Put
  • 启用磁盘配额
  • 使用登录时间限制
  • 通过 IP 限制访问
  • 审核登录事件
  • 启用强密码要求
  • 启用帐户锁定和帐户锁定阈值
  • 强制 SSH 访问

编辑 :

编辑:实施示例

编辑:我喜欢@Rory McCune 的回答。很好很好的解释。

如果您可以查看 SFTP(使用 SSH 协议)或使用带有 SSL 的 FTP 协议进行加密的 FTP(S),而不是使用 FTP,那就更好了。

fail2ban是一个很好的解决方案,可以帮助阻止密码猜测尝试。

更改它侦听的端口有助于避免随机攻击日志中的噪音。

编辑:我更喜欢@Rook 的评论

don't use ftp! Your password and your code in in plain text!