我想在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
工作;当然,关闭防火墙并不是一个吸引人的选择。
感谢任何帮助和指示,
答案 0 :(得分:1)
在被动模式下,客户端将通过第二个连接连接到服务器,该第二个连接用于传输“事物”(目录列表,文件)。就您而言:
227 Entering Passive Mode (192,168,0,7,219,202)
服务器请求客户端通过端口219 * 256 + 202 = 56266连接到它。
此端口由vsftpd动态选择,并且未在防火墙中打开。您必须将vsftpd固定到用于被动连接的固定端口,然后在防火墙中打开此连接。
vsftpd有两个配置选项可以设置:pasv_max_port
和pasv_min_port
。您应该可以在services.vsftpd.extraConfig
中进行设置。您可能想要打开一小部分端口,然后在防火墙中打开它们。
答案 1 :(得分:0)
要在防火墙中打开端口,请使用networking.firewall.allowedTCPPorts。例如:
networking.firewall.allowedTCPPorts = [ 21 ];
在NixOS中,防火墙配置不是自动的,因为这样会破坏控制允许的流量的目的。
某些服务提供了一个openFirewall
选项来简化此操作,但是vsftpd
模块似乎没有提供这种便利。
编辑:20用于客户端。只需打开21个即可。