Linux FTP PASV模式怎么配置,FTP被动模式端口如何开放?

FTP 被动模式 (PASV) 详解

在 Linux 环境下配置 FTP 服务时,被动模式 (Passive Mode) 是解决防火墙和 NAT(网络地址转换)导致连接失败的关键技术。

什么是 FTP 被动模式?

FTP 协议在传输数据时会建立两个独立的通道:

[java漫谈系列153]ftp主动模式和被动(PASV)模式
加载中
[java漫谈系列153]ftp主动模式和被动(PASV)模式
  • 命令通道 (Command Channel):用于发送指令(如 ls, get, put),默认使用 21 端口。
  • 数据通道 (Data Channel):用于实际传输文件内容或目录列表。

被动模式 (PASV) 下,数据通道的建立是由客户端主动发起的,客户端通过命令通道询问服务器:“请告诉我你应该在哪个端口接收数据?”服务器返回一个高位端口号,然后客户端连接该端口。

主动模式 (Active) vs 被动模式 (Passive)

特性 主动模式 (Active/PORT) 被动模式 (Passive/PASV)
数据连接发起方 服务器连接客户端

Linux FTP PASV模式怎么配置,FTP被动模式端口如何开放?

客户端连接服务器

客户端要求客户端必须开放端口并允许外部连接客户端只需能访问互联网
防火墙友好度对客户端防火墙极不友好对客户端非常友好
服务器要求服务器只需开放 21 端口服务器需开放 21 端口及一段随机端口范围

核心结论:在现代互联网环境下,由于大多数用户处于路由器(NAT)或防火墙之后,被动模式是目前最常用的连接方式


Linux (vsftpd) 配置被动模式步骤

以最常用的 vsftpd 为例,配置被动模式需要明确指定端口范围和服务器的公网 IP。

修改配置文件

编辑 /etc/vsftpd.conf 文件:

sudo vi /etc/vsftpd.conf

添加或修改以下参数

在文件中添加以下配置项:

Linux FTP PASV模式怎么配置,FTP被动模式端口如何开放?

  • 启用被动模式
    pasv_enable=YES
  • 设置被动模式端口范围(非常重要,用于防火墙放行):
    pasv_min_port=30000
    pasv_max_port=31000
  • 设置服务器的公网 IP(如果服务器在云端或 NAT 后):
    pasv_address=你的服务器公网IP
  • 强制使用被动模式(可选)
    pasv_addr_resolve=YES

重启服务

保存退出后,重启 vsftpd 使配置生效:

sudo systemctl restart vsftpd

防火墙配置

配置了被动模式端口范围后,必须在服务器的防火墙中放行这些端口,否则客户端会卡在“正在获取目录列表”或“连接超时”阶段。

使用 firewalld (CentOS/RHEL)

# 放行 FTP 命令端口
sudo firewall-cmd --permanent --add-service=ftp
# 放行被动模式定义的端口范围
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
# 重新加载防火墙
sudo firewall-cmd --reload

使用 ufw (Ubuntu/Debian)

# 放行 FTP 命令端口
sudo ufw allow 21/tcp
# 放行被动模式定义的端口范围
sudo ufw allow 30000:31000/tcp
# 重新加载防火墙
sudo ufw reload

Linux FTP PASV模式怎么配置,FTP被动模式端口如何开放?


常见问题排查

  • 现象:能登录,但执行 lsdir 时卡住/报错

    • 原因:命令通道连接成功,但数据通道被防火墙拦截
    • 检查点
      • 是否在 vsftpd.conf 中设置了 pasv_min_portpasv_max_port
      • 服务器防火墙(iptables/firewalld/ufw)是否放行了该范围?
      • 云服务器厂商(如简米云、AWS)的安全组是否放行了该范围?
  • 现象:报错 “Failed to retrieve directory listing”

    • 原因:服务器返回给客户端的 IP 地址是内网 IP,导致客户端无法连接。
    • 检查点
      • 必须在 vsftpd.conf 中配置 pasv_address=你的公网IP
  • 现象:连接超时

    • 检查点
      • 确认 21 端口是否正常工作。
      • 确认网络路径上是否存在拦截高位端口的中间设备。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/493474.html

(0)
搬瓦工限量版VPS补货了吗,搬瓦工CN2 GIA哪款最值得买?
上一篇 2026年7月14日 07:24
Linux各种Shell有什么区别,Bash和Zsh哪个更好用?
下一篇 2026年7月14日 07:27

相关推荐

  • linux翻译工具怎么用?linux下免费好用的翻译软件推荐

    在Linux环境下,最推荐的翻译工具组合是DeepL API配合终端脚本,或本地部署的Llama 3大模型,前者追求极致准确率与速度,后者注重数据隐私与离线可用性,对于开发者和技术人员而言,Linux不仅是服务器操作系统,更是日常工作的核心阵地,面对海量的英文文档、代码注释或技术论坛,翻译效率直接决定了工作流的……

    2026年7月9日
    9500
  • linux特效软件哪个好用?linux系统视频剪辑特效插件推荐

    3D视觉与动态图形:BlenderBlender不仅是Linux上的3D建模标杆,其内置的几何节点和粒子系统也使其成为强大的动态图形工具,核心优势与适用场景全功能集成:集建模、雕刻、绑定、动画、渲染、合成于一体,无需切换软件,几何节点系统:类似Houdini的程序化建模方式,适合生成复杂的抽象视觉和动态背景,E……

    2026年7月4日
    23400
  • linux显卡驱动卡死怎么解决?linux显卡驱动安装失败怎么办

    在Linux系统中,显卡驱动安装失败或性能异常通常源于内核版本不匹配、专有驱动未正确加载或开源驱动Nouveau冲突,通过禁用Nouveau、安装专有驱动并验证CUDA环境即可解决绝大多数问题,Linux下的显卡生态远比Windows复杂,尤其是面对NVIDIA和AMD这两大阵营时,策略截然不同,很多用户在初次……

    2026年7月8日
    6800
  • Linux Nginx状态怎么查?nginx查看服务状态命令

    查看Nginx状态的核心在于通过访问nginx_status模块接口或使用systemctl status nginx命令,前者提供详细的实时流量与连接数数据,后者仅展示服务进程的生命周期状态,二者结合使用才能全面掌握服务器健康状况,在2026年的运维环境中,Nginx依然是绝大多数Web服务器和反向代理的首选……

    2026年7月4日
    14900
  • Linux变量加减怎么做?Linux变量加减运算方法

    在Linux系统中,变量加减主要通过算术扩展或expr命令实现,推荐优先使用,因其执行效率高且支持原生整数运算,无需额外调用外部进程,很多刚接触Linux的朋友在处理脚本逻辑时,常常会被变量运算卡住,明明在Windows的批处理或者Shell的简单赋值里很顺手,一到Linux Bash里就报错,Linux的变量……

    2026年7月6日
    3400
  • Linux Python如何发布?python发布项目到pypi

    在Linux环境下发布Python项目,核心在于构建隔离的虚拟环境、使用Docker容器化部署或配置Nginx+Gunicorn反向代理,以确保生产环境的稳定性与安全性,很多开发者在本地调试完美后,一上Linux服务器就报错,往往是因为环境差异、依赖缺失或权限配置不当,Linux作为服务器的主流操作系统,其稳定……

    2026年7月6日
    7300
  • linux如何并行执行命令?linux并行执行任务最佳实践

    Linux并行执行的核心在于利用多核CPU资源,通过后台运行、GNU Parallel、Xargs或分布式工具如Slurm,将耗时任务拆解并同时处理,从而大幅缩短整体运行时间,在服务器运维和大数据处理场景中,单线程执行往往意味着资源的浪费,想象一下,如果让一个人同时做十件事,他必须来回切换,效率极低;但如果让十……

    2026年7月4日
    10400
  • Linux 0.00版本到底是什么,Linux内核源码应该怎么学习?

    Linux 从 0 到 1 入门指南由于您输入的是 “linux0.00″,我将其理解为您希望从零基础开始了解 Linux 系统,Linux 是一个强大的开源操作系统,广泛应用于服务器、云计算、嵌入式设备以及开发者工作站,什么是 Linux?Linux 严格来说是一个内核 (Kernel),它是操作系统的核心……

    2026年7月12日
    6500
  • cmake编译linux出错怎么办?linux下cmake编译教程

    CMake 是 Linux 下构建 C/C++ 项目的标准工具,通过编写 CMakeLists.txt 配置文件,结合 cmake 和 make 命令,即可实现跨平台、自动化的工程编译与链接,在 Linux 开发环境中,面对错综复杂的依赖关系和庞大的代码库,手动编写 Makefile 往往让人头疼,CMake……

    2026年7月4日
    17600
  • Linux下SSH和Telnet有什么区别?如何安全配置SSH服务

    在2026年的Linux运维环境中,SSH是保障远程管理安全性的绝对首选,而Telnet因明文传输已被主流安全规范淘汰,仅在极老旧或特定隔离内网中作为最后手段存在,对于绝大多数现代服务器管理员而言,选择远程连接协议不再是一个“二选一”的开放性讨论,而是一个基于安全合规的必答题,随着网络安全法规的日益严格,特别是……

    2026年7月12日
    4000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注