Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在nixos上运行ftp服务器_Ftp_Firewall_Nixos_Vsftpd - Fatal编程技术网

在nixos上运行ftp服务器

在nixos上运行ftp服务器,ftp,firewall,nixos,vsftpd,Ftp,Firewall,Nixos,Vsftpd,我想在nixos主机上运行ftp服务器。我使用的是vsftpd,不过如果这会有所不同的话,我还可以使用其他东西 ftp在本地主机上运行良好,但防火墙阻止我远程使用。我允许TCP端口21,但这还不够 我应该如何配置防火墙以允许ftp连接(包括写入ftp服务器) 以下是我目前拥有的代码: { networking.firewall = { allowedTCPPorts = [ 20 21 ]; # connectionTrackingModules =

我想在nixos主机上运行ftp服务器。我使用的是vsftpd,不过如果这会有所不同的话,我还可以使用其他东西

ftp在本地主机上运行良好,但防火墙阻止我远程使用。我允许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
工作;当然,关闭防火墙不是一个有吸引力的选择


感谢您的帮助和指点,

要打开防火墙中的端口,请使用。例如:

networking.firewall.allowedTCPPorts = [ 21 ];
services.vsftpd.extraConfig = ''
  pasv_enable=Yes
  pasv_min_port=51000
  pasv_max_port=51999
'';
networking.firewall.allowedTCPPortRanges = [ { from = 51000; to = 51999; } ];
在NixOS中,防火墙配置不是自动的,因为这会破坏控制允许的流量的目的

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

编辑:20代表客户。只需要打开21个。
编辑:外加被动模式连接的范围。

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

227 Entering Passive Mode (192,168,0,7,219,202)
服务器请求客户端在端口219*256+202=56266上连接到它

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


vsftpd有两个配置选项来设置此选项:
pasv\u max\u port
pasv\u min\u port
。您应该能够在
services.vsftpd.extraConfig
中设置它们。您可能希望打开一小部分端口,并在防火墙中打开这些端口。

NixOS在这里用作配置管理工具,就像问题是使用Nix编程语言与Nix模块系统对话一样,这是一个用于表示、组合和内省系统配置的库,除此之外。谢谢你的建议,我已经在问题中添加了我当前的代码。如果你在活动模式下有问题,那么是本地防火墙阻止了连接。同样,这不是一个编程问题。或者使用更好的FTP客户端,它支持被动模式(除了Windows内置的
FTP
),其他都支持。遗憾的是,被动模式也不起作用(上面添加的示例)谢谢@robert hensing。不幸的是,添加端口20似乎无法解决此问题。我四处搜索了其他人做同样事情的例子,但没有找到任何结果。端口20是一个传入端口(与本地机器一样)。它必须在本地计算机上启用,而不是在服务器上启用。谢谢。我已经尝试过(通过设置networking.firewall.allowedTCPPorts,如上所述,在客户端主机上启用端口20);还是没有骰子。你到底是怎么做到的?你甚至可以用你的nixos脚本控制本地防火墙吗?向我们展示问题中的完整脚本。您是以主动模式还是被动模式开始传输。FTP需要两个连接。第一个连接是controll并使用端口21。第二个连接使用不同的端口,具体取决于客户端或服务器启动的模式。也就是说,在被动模式下,你必须打开服务器上的其他端口,在主动模式下,你必须打开客户端的端口。宾果,谢谢你分享。对于记录,我添加了
extraConfig=“pasv\u min\u port=56250\npasv\u max\u port=56260”
networking.firewall={allowedTCPPortRanges=[{from=56250;to=56260;}];}到我的配置,这就完成了业务。