我花了很长时间才解决这个问题,昨晚我让它正常工作了。今天早上上班时它就停止工作了(我是唯一的 IT 支持人员,我没有做任何更改)。
我已经在 aws 上配置了防火墙,如下图所示。
该服务器是由 aws 托管的 bitnami/ubuntu 服务器。
我已经配置了 vsftpd.conf,如下所示
# 示例配置文件 /etc/vsftpd.conf # # 默认编译设置相当偏执。此示例文件 # 稍微放松一些,以使 ftp 守护进程更加可用。 # 请参阅 vsftpd.conf.5 了解所有默认编译内容。 # # 阅读此内容:此示例文件并非 vsftpd 选项的详尽列表。 # 请阅读 vsftpd.conf.5 手册页以全面了解 vsftpd 的 # 功能。 # # # 独立运行? vsftpd 可以从 inetd 运行,也可以作为独立程序运行 # 守护进程从启动脚本启动。 听=否 #被动设置 #listen=yes # # 此指令启用对 IPv6 套接字的监听。默认情况下,监听 # IPv6 上的“任何”地址 (::) 将接受来自 IPv6 的连接 # 和 IPv4 客户端。没有必要同时监听 IPv4 和 IPv6 # 套接字。如果您想要这样做(可能是因为您想监听特定的 # 地址)那么您必须运行两个 vsftpd 副本并采用两种配置 # 个文件。 listen_ipv6=是 # # 允许匿名 FTP?(默认禁用)。 匿名启用=否 # # 取消注释以允许本地用户登录。 本地启用=是 # # 取消注释此内容以启用任何形式的 FTP 写入命令。 写入启用=是 # # 本地用户的默认 umask 是 077。您可能希望将其更改为 022, # 如果您的用户期望(大多数其他 ftpd 使用 022) #本地_umask=022 # # 取消注释以允许匿名 FTP 用户上传文件。这仅 # 在上述全局写入启用激活时才会生效。此外,您还将 # 显然需要创建一个 FTP 用户可写的目录。 #匿名上传启用=是 # # 如果您希望匿名 FTP 用户能够创建 # 个新目录。 #anon_mkdir_write_enable=是 # # 激活目录消息 - 当远程用户 # 进入某个目录。 dirmessage_enable=是 # # 如果启用,vsftpd 将显示带有时间的目录列表 # 以您所在地区的时区显示。默认显示 GMT。 #MDTM FTP 命令返回的时间也受此影响 # 选项。 使用本地时间=是 # # 激活上传/下载日志记录。 xferlog_enable=YES # # 确保 PORT 传输连接源自端口 20 (ftp-data)。 连接端口 20=是 # # 如果你愿意,你可以安排上传的匿名文件归 # 不同的用户。注意!使用“root”上传文件不是 # 受到推崇的! #chown_uploads=是 #chown_用户名=whoever # # 您可以根据需要更改日志文件的存放位置。默认显示 # 以下。 xferlog_file=/var/log/vsftpd.log # # 如果您愿意,您可以将日志文件保存为标准 ftpd xferlog 格式。 # 请注意,在这种情况下,默认日志文件位置是 /var/log/xferlog。 #xferlog_std_format=是 # # 您可以更改空闲会话超时的默认值。 #空闲会话超时=600 # # 您可以更改数据连接超时的默认值。 #数据连接超时=120 # # 建议您在系统上定义一个唯一的用户, # ftp 服务器可以作为完全隔离且非特权的用户使用。 #nopriv_user=ftpsecure # # 启用此功能,服务器将识别异步 ABOR 请求。不 # 出于安全考虑,建议使用(代码并不简单)。不启用它, # 然而,可能会使旧的 FTP 客户端感到困惑。 #异步_abor_enable=是 # # 默认情况下,服务器会假装允许 ASCII 模式,但实际上会忽略 # 请求。打开以下选项,让服务器实际执行 ASCII # 在 ASCII 模式下对文件进行修改。 # 请注意,在某些 FTP 服务器上,ASCII 支持允许拒绝服务 # 通过 ASCII 模式下的命令“SIZE /big/file”进行攻击(DoS)。 vsftpd # 预测了这次袭击,并且一直很安全,报告了 # 原始文件。 # ASCII 混淆是该协议的一个糟糕的特性。 #ascii_upload_enable=是 #ascii_download_enable=是 # # 您可以完全自定义登录横幅字符串: #ftpd_banner=欢迎使用 blah FTP 服务。 # # 您可以指定一个不允许匿名电子邮件地址的文件。显然 # 对于抵御某些 DoS 攻击很有用。 #deny_email_enable=是 #(默认如下) #banned_email_file=/etc/vsftpd.banned_emails # # 您可以将本地用户限制在其主目录中。请参阅常见问题解答 # 在使用 chroot_local_user 或之前可能存在的风险 下面的#chroot_list_enable。 #chroot_local_user=是 # # 您可以指定一个明确的本地用户列表,以便 chroot() 到他们的主目录 # 目录。如果 chroot_local_user 为 YES,则此列表将成为 # 用户不要 chroot()。 #(警告!chroot 非常危险。如果使用 chroot,请确保 # 用户没有顶级目录的写权限 #chroot) #chroot_local_user=是 #chroot_list_enable=是 #(默认如下) #chroot_list_file=/etc/vsftpd.chroot_list # # 您可以激活内置 ls 的“-R”选项。此功能被禁用 # 默认避免远程用户能够对大型系统造成过多的 I/O # 站点。但是,一些损坏的 FTP 客户端(如“ncftp”和“mirror”)假设 #“-R”选项的存在,因此有强有力的理由启用它。 #ls_recurse_enable=是 # # 定制 # # 一些 vsftpd 的设置不符合文件系统布局 # 默认。 # # 此选项应为空目录的名称。此外, # 目录不应由 ftp 用户写入。此目录用于 # 作为安全的 chroot() 监狱,vsftpd 有时不需要文件系统 # 使用权。 secure_chroot_dir=/var/run/vsftpd/空 # # 此字符串是 vsftpd 将使用的 PAM 服务的名称。 pam_service_name=ftp # # 此选项指定用于 SSL 的 RSA 证书的位置 # 加密连接。 rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=否 # # 取消注释以表明 vsftpd 使用 utf8 文件系统。 #utf8_文件系统=是 #用户限制 用户列表文件=/etc/vsftpd.用户列表 用户列表启用=YES 用户列表拒绝=否 # 被动/主动模式配置 #端口启用=是 pasv_enable=是 pasv_min_port=1200 pasv_max_port=1250 pasv_address=xx.xx.xx.xx # 如果 pasv_address_resolve=YES,pasv_address 应该是一个名称,例如 ftp.blah.com #pasv_addr_resolve=是 seccomp_sandbox=否
这是 filezilla 显示的内容:
状态:连接到 xx.xx.xx.xx:21... 状态:连接已建立,正在等待欢迎消息…… 状态:服务器不支持非 ASCII 字符。 状态:已登录 状态:正在检索目录列表... 命令:PWD 响应:257 “/home/username”是当前目录 命令:TYPE I 响应:200 切换到二进制模式。 命令:PASV 错误:无法从套接字读取:ECONNRESET - 对等方重置连接 错误:与服务器断开连接 错误:无法检索目录列表
cmd 提示符的输出:
[电子邮件保护]:~$ sudo ftp 本地主机 已连接到本地主机。 220(vsFTPd 3.0.3) 名称(localhost:bitnami):用户名 331 请指定密码。 密码: 230 登录成功。 远程系统类型为 UNIX。 使用二进制模式传输文件。 ftp> ls 200 PORT 命令成功。请考虑使用 PASV。 150 以下是目录列表。 -rw-rw-r-- 1 1002 1004 415 2月 08 15:30 1 226 目录发送成功。 ftp>被动 被动模式开启。 ftp> ls 227 进入被动模式 (0,0,0,0,4,224)。 150 以下是目录列表。 -rw-rw-r-- 1 1002 1004 415 2月 08 15:30 1 226 目录发送成功。 ftp>退出 221 再见。 [电子邮件保护]:~$
我真的很感激任何帮助,因为我很困惑。
它在主动模式下工作,但第三方只能在被动模式下进行 ftp,所以我需要它。
提前致谢!
答案1
配置pasv_address
(和pasv_addr_resolve
选项:
pasv_地址
使用此选项可覆盖 vsftpd 响应 PASV 命令时公布的 IP 地址。提供一个数字 IP 地址,除非启用了 pasv_addr_resolve,在这种情况下,您可以提供一个主机名,该主机名将在启动时为您进行 DNS 解析。
默认值:(无 - 地址取自传入的连接套接字)
pasv_addr_resolve
如果您想在 pasv_address 选项中使用主机名(而不是 IP 地址),请设置为 YES。
默认值:NO
(从http://vsftpd.beasts.org/vsftpd_conf.html)
上周我一直在研究这个问题。症状:
- 在主动模式下使用 FileZilla 效果很好
- 使用自动或被动模式会导致连接超时或被拒绝
- 被动地址打印
0,0,0,0
在日志中
设置pasv_address
为 IP,或者设置为 FQDNpassv_addr_resolve
可以yes
解决此问题,因为它允许客户端连接到正确的目的地。