ftp - 在 nixos 上运行 ftp 服务器

标签 ftp firewall nixos vsftpd

我想在 nixos 主机上运行一个 ftp 服务器。我正在使用 vsftpd,但如果这会有所作为,我可以使用其他东西。

ftp 在 localhost 上运行良好,但防火墙阻止我远程使用。我已经允许 TCP 端口 21,但这还不够。

我应该如何配置防火墙以允许 ftp 连接(包括写入 ftp 服务器)?

这是我目前拥有的代码:

{
networking.firewall = { allowedTCPPorts = [ 20 21 ];
#                        connectionTrackingModules = [ "ftp" ];
                      };

  services.vsftpd = {
    enable = true;
#   cannot chroot && write
#    chrootlocalUser = true;
    writeEnable = true;
    localUsers = true;
    userlist = [ "martyn" "cam" ];
    userlistEnable = true;
  };
}

根据上述情况,从主机外使用 ftp 的任何操作都会失败:

ftp> put dead.letter
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.

使用被动模式(例如,使用 ftp -p)在这里似乎没有帮助:

ftp> put dead.letter
227 Entering Passive Mode (192,168,0,7,219,202).
ftp: connect: Connection timed out

在禁用防火墙的一次性主机上进行测试

networking.firewall.enable = false;

允许 ftp -p 工作;虽然当然关闭防火墙不是一个有吸引力的选择。

感谢您的帮助和指点,

最佳答案

在被动模式下,客户端将通过第二个连接连接到服务器,该连接用于传输“事物”(目录列表、文件)。在你的情况下:

227 Entering Passive Mode (192,168,0,7,219,202)

服务器请求客户端连接到它的端口 219 * 256 + 202 = 56266。

此端口由 vsftpd 动态选择,并且未在您的防火墙中打开。您必须将 vsftpd 修复为被动连接的固定端口,并在防火墙中打开此连接。

vsftpd 有两个配置选项来设置它:pasv_max_portpasv_min_port。您应该可以在 services.vsftpd.extraConfig 中设置它们。您可能希望打开一小部分端口并在防火墙中打开这些端口。

关于ftp - 在 nixos 上运行 ftp 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038205/

相关文章:

ftp - PhpStorm 无法通过 FTP 传输文件

c# - 如何在无人干预的情况下自动连续轮询FTP服务器

linux - 如何将外部传入流量从一个端口重定向到另一个端口? (Linux/iptables/ufw)

firewall - iptables 阻止对端口 8000 的访问(IP 地址除外)

virtualbox - 在 configuration.nix 中从 nixos-unstable 安装 virtualbox 模块

swift - 如何在 NixOS 上构建 Swift 项目?

powershell - 将文件复制到 FTP 并使用今天的日期存档

linux - 检查防火墙是否打开,没有像 iptables 这样的包

nix - node2nix 覆盖;包裹程序 : command not found

linux - 如何在浏览器中下载 FTP 服务器上的文件?