运行 nixos 上的 ftp 服务器
Running an ftp server on nixos
我想在 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。例如:
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 中的防火墙配置不是自动的,因为那样会破坏控制允许的流量的目的。
一些服务有一个 openFirewall
选项来使这更容易,但 vsftpd
模块似乎没有提供这种便利。
编辑:20 是给客户端的。只需要打开21个。
编辑:加上被动模式连接的范围。
在被动模式下,客户端将通过第二个连接连接到服务器,用于传输"things"(目录列表、文件)。在你的情况下:
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
中设置它们。您可能想打开一小部分端口并在防火墙中打开这些端口。
我想在 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。例如:
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 中的防火墙配置不是自动的,因为那样会破坏控制允许的流量的目的。
一些服务有一个 openFirewall
选项来使这更容易,但 vsftpd
模块似乎没有提供这种便利。
编辑:20 是给客户端的。只需要打开21个。 编辑:加上被动模式连接的范围。
在被动模式下,客户端将通过第二个连接连接到服务器,用于传输"things"(目录列表、文件)。在你的情况下:
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
中设置它们。您可能想打开一小部分端口并在防火墙中打开这些端口。