在nixos上运行ftp服务器

时间:2019-07-15 10:52:23

标签: 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工作;当然,关闭防火墙并不是一个吸引人的选择。

感谢任何帮助和指示,

2 个答案:

答案 0 :(得分:1)

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

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中进行设置。您可能想要打开一小部分端口,然后在防火墙中打开它们。

答案 1 :(得分:0)

要在防火墙中打开端口,请使用networking.firewall.allowedTCPPorts。例如:

networking.firewall.allowedTCPPorts = [ 21 ];

在NixOS中,防火墙配置不是自动的,因为这样会破坏控制允许的流量的目的。

某些服务提供了一个openFirewall选项来简化此操作,但是vsftpd模块似乎没有提供这种便利。

编辑:20用于客户端。只需打开21个即可。