如何配置Pure-Ftpd FTP服务器以实现被动连接支持?

更新于
2026-08-17 07:42:39
2阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

一、问题概述

在实际使用 Pure‑FTPd 时常见的阻碍点包括:

  • 客户端只能使用主动模式,而在 NAT/防火墙环境下经常连接失败。按理说,
  • 开启被动模式后出现 425 Can't open data connection导致目录读取失败文件上传/下载中断。
  • Pure‑FTPd 默认不启用被动端口范围导致 PASV 命令没有返回可用端口。
  • 防火墙或云安全组未放行被动端口,使得即使配置正确也仍然超时
  • MySQL 关联配置错误时虚拟使用者无法登录或权限异常。

二、准备工作

1. 环境要求

- Linux - root 或 sudo 权限 - 已安装 gcc、make、libssl-dev、libpam0g-dev

如何配置Pure-Ftpd FTP服务器以实现被动连接支持?

2. 下载 Pure‑FTPd 源码

步骤 1:获取最新稳定版压缩包 wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.50.tar.gz

3. 解压与编译安装

步骤 2:解压源码

步骤 3:编译并安装

三、创建虚拟使用者

a) 本地 PureDB 使用者:

# 创建数据库文件
pure-pw mkdb /etc/pure-ftpd/pureftpd.pdb
# 添加使用者
pure-pw useradd ftpuser -u ftp -d /home/ftpusers/ftpuser
pure-pw mkdb /etc/pure-ftpd/pureftpd.pdb

b) MySQL 虚拟使用者

# 编辑 MySQL 配置文件
vim /etc/pure-ftpd/pureftpd-mysql.conf
# 示例内容
MYSQLServer 127.0.0.1
MYSQLPort 3306
MYSQLUser ftpmysql
MYSQLPassword yourpassword
MYSQLDatabase ftpmysql
# …其它查询语句,

# 去除 pure‑ftpd.conf 中对应行前的 #

四、主要:开启并配置被动模式支持

a) 指定被动端口范围

Pain Point:若未设置此项,客户端发送 PASV 时服务器根本不返回端口,引发 425 Can't open data connection

# 编辑主配置文件
vim /etc/pure-ftpd/pure-ftpd.conf
# 添加或取消注释以下两行
PassivePortRange 45000 50000 # 推荐范围:45000‑50000
ForcePassiveIP your.server.ip # 替换为实际公网 IP

b) 必要的兼容性开关

# 在同一配置文件中加入:
BrokenClientsCompatibility yes # 对部分老旧 FTP 客户端兼容性提高
DontResolve yes # 禁止 DNS 反向解析。加快连接速度
VerboseLog yes # 开启详细日志,便于排查问题
MaxIdleTime 15 # 空闲超时时间,可自行调整
ChrootEveryone yes # 强制所有使用者进入 chroot 环境,提高安全性

五、防火墙与云安全组放行端口

a) 本地 iptables / firewalld 配置示例

# 放行 FTP 控制端口 21
firewall-cmd --permanent --add-service=ftp
# 放行被动数据端口段
firewall-cmd --permanent --add-port=45000-50000/tcp
# 重载防火墙规则
firewall-cmd --reload

b) 云主机安全组设置要点

  • ECS 实例 → 网络与安全 → 安全组 → 入方向规则 → 添加 TCP 协议;端口范围填写 45000‑50000** 和 **21**。
  • CIDR 建议设为 0.0.0.0/0 或根据业务需求限制 IP 段。
  • 保存后确认状态为 “已生效”。

六、使用宝塔较快完成配置

a) 安装 Pure‑FTPd 插件:

如何配置Pure-Ftpd FTP服务器以实现被动连接支持?
  • 登录宝塔 → 应用商店 → 搜索 “Pure‑FTPd” → 点击安装。
  • 安装完成后在左侧菜单找到 “Pure‑FTPd 设置”。

b) 在面板中打开被动模式设置:

  1. Select “设置” → 找到 “PassivePortRange”。填入 45000-50000.
  2. Select “ForcePassiveIP”,填入服务器公网 IP.
  3. .
  4. SE 并重新启动按钮。
  5. PaaS 防火墙 → 放通相同端口段。
  6. .

七、测试连接与排错技巧

a) 使用 FileZilla 验证

  • *站点管理* → 新建站点 → 协议选择 *FTP - 文件传输协议*。
  • *加密* 选 *仅使用明文 FTP*。
  • *传输模式* 切换为 *被动*。
  • *主机* 填写服务器 IP,*使用者名/密码* 填写上一步创建的虚拟使用者。
  • /var/log/pureftpd.log 或 /var/log/messages .

b) 常见错误对应方法

Pain Point 可能原因 解决办法
`425 Can't open data connection` - 被动端口未放行 - 防火墙阻拦 - ForcePassiveIP 配置错误 - 确认 PassivePortRange 已启用并放行 - 检查云安全组和本地防火墙规则 - 确保 ForcePassiveIP 为外网可达 IP
`530 Login auntication failed` - MySQL 配置错误或密码错误 - PureDB 文件未更新 - 检查 pureftpd-mysql.conf 中字段对应表名/列名是否匹配 - 执行 `pure-pw mkdb` 更新本地数据库
`Directory listing failed` - chroot 权限不足 - 使用者根目录权限错误 - 确认使用者拥有根目录读写权限 - 若开启 ChrootEveryone,确保根目录下只有该使用者拥有访问权
`Connection timed out` - 防火墙只打开了 21 而未打开被动段 - NAT 路由未转发 PASV IP/端口 - 同时放行 PassivePortRange 所在段 - 如在路由器后请做 DNAT 转发或使用 ForcePassiveIP 指定公网 IP
`Pure‑FTPd not starting` - 配置文件语法错误 - 缺少必要依赖库 - 查看 `systemctl status pure-ftpd` 与日志;修正冲突项 - 确保 libssl、pam 等依赖已安装

八、完整流程回顾

  1. 下载 & 编译 pure‑ftpd;确认二进制已安装到 /usr/local/sbin/pure‑ftpd*.
  2. Create 虚拟使用者,并生成对应数据库文件。
  3. Edit /etc/pure-ftpd/pure-ftpd.conf:

  • `PassivePortRange 45000 50000`。
  • `ForcePassiveIP your.public.ip`。老实说,
  • `BrokenClientsCompatibility yes` 、`DontResolve yes` 等推荐项。

.

  • If using systemd: systemctl enable pure-ftpd && systemctl restart pure-ftpd.
  • Add firewall rules:21 与 45000‑50000 TCP 同时放通。
  • If using Baota panel: 在插件设置里同步上述参数,并点击“一键重启”。
  • T​est with FileZilla or any FTP client in passive mode;verify log output for PASV response.
  • If any step fails,refer to “常见错误对应方法” table above.
  • \end{ol>

    九、参考资源 & 常用命令速查表 

    • pure-config.pl –list: 查看当前运行时参数。
    • pure-pw list: 列出所有 PureDB 虚拟使用者。不过,
    • systemctl status pure-ftpd: 检查服务状态。
    • tail -f /var/log/pureftpd.log: 实时看日志,定位 PASV/EPRT 错误信息。li>官方文档:https://download.pureftpd.org/pub/pure-ft pd/doc/ li>宝塔社区讨论帖:Pure‑FTPd 被动模式配置详解。li>常见防火墙命令示例:

    iptables -A INPUT -p tcp --dport 45000:50000 -j ACCEPT
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    service iptables save
    firewall-cmd --add-port=45000-50000/tcp --permanent
    firewall-cmd --reload
    code>

    li> li>如需更改监听地址,可在启动参数加入 -i your.ip.address。li>若使用 SELinux,需要添加策略: setsebool -P ftpd_full_access on li> li>祝您顺利实现 Pure‑FTPd 被动模式连通!

    标签:宝塔

    一、问题概述

    在实际使用 Pure‑FTPd 时常见的阻碍点包括:

    • 客户端只能使用主动模式,而在 NAT/防火墙环境下经常连接失败。按理说,
    • 开启被动模式后出现 425 Can't open data connection导致目录读取失败文件上传/下载中断。
    • Pure‑FTPd 默认不启用被动端口范围导致 PASV 命令没有返回可用端口。
    • 防火墙或云安全组未放行被动端口,使得即使配置正确也仍然超时
    • MySQL 关联配置错误时虚拟使用者无法登录或权限异常。

    二、准备工作

    1. 环境要求

    - Linux - root 或 sudo 权限 - 已安装 gcc、make、libssl-dev、libpam0g-dev

    如何配置Pure-Ftpd FTP服务器以实现被动连接支持?

    2. 下载 Pure‑FTPd 源码

    步骤 1:获取最新稳定版压缩包 wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.50.tar.gz

    3. 解压与编译安装

    步骤 2:解压源码

    步骤 3:编译并安装

    三、创建虚拟使用者

    a) 本地 PureDB 使用者:

    # 创建数据库文件
    pure-pw mkdb /etc/pure-ftpd/pureftpd.pdb
    # 添加使用者
    pure-pw useradd ftpuser -u ftp -d /home/ftpusers/ftpuser
    pure-pw mkdb /etc/pure-ftpd/pureftpd.pdb
    

    b) MySQL 虚拟使用者

    # 编辑 MySQL 配置文件
    vim /etc/pure-ftpd/pureftpd-mysql.conf
    # 示例内容
    MYSQLServer 127.0.0.1
    MYSQLPort 3306
    MYSQLUser ftpmysql
    MYSQLPassword yourpassword
    MYSQLDatabase ftpmysql
    # …其它查询语句,

    # 去除 pure‑ftpd.conf 中对应行前的 #

    四、主要:开启并配置被动模式支持

    a) 指定被动端口范围

    Pain Point:若未设置此项,客户端发送 PASV 时服务器根本不返回端口,引发 425 Can't open data connection

    # 编辑主配置文件
    vim /etc/pure-ftpd/pure-ftpd.conf
    # 添加或取消注释以下两行
    PassivePortRange 45000 50000 # 推荐范围:45000‑50000
    ForcePassiveIP your.server.ip # 替换为实际公网 IP
    

    b) 必要的兼容性开关

    # 在同一配置文件中加入:
    BrokenClientsCompatibility yes # 对部分老旧 FTP 客户端兼容性提高
    DontResolve yes # 禁止 DNS 反向解析。加快连接速度
    VerboseLog yes # 开启详细日志,便于排查问题
    MaxIdleTime 15 # 空闲超时时间,可自行调整
    ChrootEveryone yes # 强制所有使用者进入 chroot 环境,提高安全性
    

    五、防火墙与云安全组放行端口

    a) 本地 iptables / firewalld 配置示例

    # 放行 FTP 控制端口 21
    firewall-cmd --permanent --add-service=ftp
    # 放行被动数据端口段
    firewall-cmd --permanent --add-port=45000-50000/tcp
    # 重载防火墙规则
    firewall-cmd --reload
    

    b) 云主机安全组设置要点

    • ECS 实例 → 网络与安全 → 安全组 → 入方向规则 → 添加 TCP 协议;端口范围填写 45000‑50000** 和 **21**。
    • CIDR 建议设为 0.0.0.0/0 或根据业务需求限制 IP 段。
    • 保存后确认状态为 “已生效”。

    六、使用宝塔较快完成配置

    a) 安装 Pure‑FTPd 插件:

    如何配置Pure-Ftpd FTP服务器以实现被动连接支持?
    • 登录宝塔 → 应用商店 → 搜索 “Pure‑FTPd” → 点击安装。
    • 安装完成后在左侧菜单找到 “Pure‑FTPd 设置”。

    b) 在面板中打开被动模式设置:

    1. Select “设置” → 找到 “PassivePortRange”。填入 45000-50000.
    2. Select “ForcePassiveIP”,填入服务器公网 IP.
    3. .
    4. SE 并重新启动按钮。
    5. PaaS 防火墙 → 放通相同端口段。
    6. .

    七、测试连接与排错技巧

    a) 使用 FileZilla 验证

    • *站点管理* → 新建站点 → 协议选择 *FTP - 文件传输协议*。
    • *加密* 选 *仅使用明文 FTP*。
    • *传输模式* 切换为 *被动*。
    • *主机* 填写服务器 IP,*使用者名/密码* 填写上一步创建的虚拟使用者。
    • /var/log/pureftpd.log 或 /var/log/messages .

    b) 常见错误对应方法

    Pain Point 可能原因 解决办法
    `425 Can't open data connection` - 被动端口未放行 - 防火墙阻拦 - ForcePassiveIP 配置错误 - 确认 PassivePortRange 已启用并放行 - 检查云安全组和本地防火墙规则 - 确保 ForcePassiveIP 为外网可达 IP
    `530 Login auntication failed` - MySQL 配置错误或密码错误 - PureDB 文件未更新 - 检查 pureftpd-mysql.conf 中字段对应表名/列名是否匹配 - 执行 `pure-pw mkdb` 更新本地数据库
    `Directory listing failed` - chroot 权限不足 - 使用者根目录权限错误 - 确认使用者拥有根目录读写权限 - 若开启 ChrootEveryone,确保根目录下只有该使用者拥有访问权
    `Connection timed out` - 防火墙只打开了 21 而未打开被动段 - NAT 路由未转发 PASV IP/端口 - 同时放行 PassivePortRange 所在段 - 如在路由器后请做 DNAT 转发或使用 ForcePassiveIP 指定公网 IP
    `Pure‑FTPd not starting` - 配置文件语法错误 - 缺少必要依赖库 - 查看 `systemctl status pure-ftpd` 与日志;修正冲突项 - 确保 libssl、pam 等依赖已安装

    八、完整流程回顾

    1. 下载 & 编译 pure‑ftpd;确认二进制已安装到 /usr/local/sbin/pure‑ftpd*.
    2. Create 虚拟使用者,并生成对应数据库文件。
    3. Edit /etc/pure-ftpd/pure-ftpd.conf:

    • `PassivePortRange 45000 50000`。
    • `ForcePassiveIP your.public.ip`。老实说,
    • `BrokenClientsCompatibility yes` 、`DontResolve yes` 等推荐项。

    .

  • If using systemd: systemctl enable pure-ftpd && systemctl restart pure-ftpd.
  • Add firewall rules:21 与 45000‑50000 TCP 同时放通。
  • If using Baota panel: 在插件设置里同步上述参数,并点击“一键重启”。
  • T​est with FileZilla or any FTP client in passive mode;verify log output for PASV response.
  • If any step fails,refer to “常见错误对应方法” table above.
  • \end{ol>

    九、参考资源 & 常用命令速查表 

    • pure-config.pl –list: 查看当前运行时参数。
    • pure-pw list: 列出所有 PureDB 虚拟使用者。不过,
    • systemctl status pure-ftpd: 检查服务状态。
    • tail -f /var/log/pureftpd.log: 实时看日志,定位 PASV/EPRT 错误信息。li>官方文档:https://download.pureftpd.org/pub/pure-ft pd/doc/ li>宝塔社区讨论帖:Pure‑FTPd 被动模式配置详解。li>常见防火墙命令示例:

    iptables -A INPUT -p tcp --dport 45000:50000 -j ACCEPT
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    service iptables save
    firewall-cmd --add-port=45000-50000/tcp --permanent
    firewall-cmd --reload
    code>

    li> li>如需更改监听地址,可在启动参数加入 -i your.ip.address。li>若使用 SELinux,需要添加策略: setsebool -P ftpd_full_access on li> li>祝您顺利实现 Pure‑FTPd 被动模式连通!

    标签:宝塔