在nixos上运行ftp服务器
我想在nixos主机上运行ftp服务器。我使用的是vsftpd,不过如果这会有所不同的话,我还可以使用其他东西 ftp在本地主机上运行良好,但防火墙阻止我远程使用。我允许TCP端口21,但这还不够 我应该如何配置防火墙以允许ftp连接(包括写入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 =
{
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;}];}代码>到我的配置,这就完成了业务。