【问题标题】:Unable to run FTP commands from AWS AMI无法从 AWS AMI 运行 FTP 命令
【发布时间】:2019-02-16 00:45:49
【问题描述】:

我想使用 PHP 连接到 FTP 以上传生成的报告。根据远程服务器,FTP 需要处于 ACTIVE 模式。

这是我的代码:

ini_set('display_errors', '1');
error_reporting(E_ALL);

$conn_id = ftp_connect('myftpserver.com', 21);

if($conn_id)
{
    // login with username and password
    $login_result = ftp_login($conn_id, 'mysuer', 'password');

    $passive = ftp_pasv($conn_id,FALSE);

    echo "is active?<br/>";
    var_dump($passive);

    echo 'Login Result:';
    var_dump($login_result);

    $files_list = ftp_nlist($conn_id, '/MyFolder/');

    echo "<br/>files list ";

    var_dump($files_list);
}
else
{
    var_dump('Unable to connect to FTP Server');
}

当我从本地计算机或普通共享服务器运行它时,我可以获取列表,但我无法从我的 AWS AMI 实例运行脚本。出于测试目的,我什至也打开了所有入站流量。仍然没有运气。另外,关键是如果我尝试使用其他一些 ftp 详细信息,我能够得到ftp_nlist 的响应。但不是为了这个。到目前为止,我在 3 个 AWS 实例上进行了尝试。产生了相同的结果。

我只能说这是我的服务器安全组/防火墙的问题所在。但想不通。请帮忙。

我从服务器得到的响应:

is active
bool(true) 
Login Result:bool(true)
files list bool(false) 

【问题讨论】:

  • 可能相关:stackoverflow.com/questions/8219322/…。在被动模式下,数据连接由客户端发起,而不是由服务器发起。如果客户端位于防火墙后面,则可能需要它。
  • 嗨@jarmod,感谢您的回复。我一定会使用主动模式。事实是我能够在我的本地 ubuntu (LAMP) 和 Windows 系统 (XAMPP) 上正确运行它。但不是在 AWS 上。所以,我觉得代码是正确的。我在安全设置或防火墙中遗漏了一些东西。
  • telnet myftpserver.com 21 来自问题服务器。通常完全允许出站连接,除非 VPC 没有网关连接。如果没有网关连接,ping google.com 也会失败。然后使用适当的路由表将“Internet 网关”添加到您的 VPC。 route table
  • [ec2-user@ip-172-31-40-119 ~]$ telnet myftpserver.com 21 Trying xxx.xx.xx.xx... Connected to myftpserver.com. Escape character is '^]'. 220 Marketplace ready... 我使用 telnet 命令收到的响应。让我检查一下我的路由表。
  • 你的网络看起来不错。不知道是什么问题。

标签: php amazon-web-services firewall amazon-ami aws-security-group


【解决方案1】:

使用 FTP 主动模式对 AWS 安全组有问题。

要使主动模式正常工作,您必须打开 1023 以上的所有入站端口。如果您的客户端支持限制范围,请执行此操作。您还需要同时打开端口 20 和端口 21 入站和出站。

问题在于 FTP 客户端选择了它要监听的端口。然后 FTP 客户端将这个端口号通知给 FTP 服务器。 FTP 服务器然后连接到此端口。这违背了正常的 AWS 安全组设计,这意味着只允许打开特定的端口。您可以通过暂时打开所有端口、测试您的 FTP 客户端然后关闭所有端口来验证这一点。

主动模式对 FTP 客户端不安全。被动模式对 FTP 服务器不安全(但更好的选择)。

注意:经常轮换您的 FTP 凭据。您的登录名和密码以明文形式发送,未加密。

FTP 是一种遗留技术,仍然很流行,应该存放在阁楼里。

【讨论】:

  • 谢谢约翰!完全同意你说的。我已经通过打开我的安全组中的所有端口进行了测试。根据对该主题的更多研究,它可能与 NAT 有关。它将私有 IP 地址更改为公共 IP,因此无法获得响应。我更喜欢编程,只是无法弄清楚这一切是什么。 :)
  • 根据客户端软件,您可能永远无法在活动模式下使用它。 AWS NAT 网关和家用互联网路由器之间有一个重要区别。家庭式设备将查看 FTP 数据包并使用正确的公共 IP 地址修改它们,并记下正在使用的 FTP 端口。 AWS NAT 网关没有。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 2020-02-12
  • 2019-01-28
相关资源
最近更新 更多