Windows 防火墙拦截 FTP 连接的放行方法
为什么会被拦截
Windows Defender 防火墙(Windows 10/11 默认开启)有一套严格的入站连接规则——默认只放行经过 Microsoft 认证的服务端口。FTP 协议使用的端口(标准端口 20 和 21,Filetransfer 用的 2121)不在默认放行列表里,所以电脑向外发起 FTP 连接时,防火墙会把响应拦掉。
典型表现:
- 资源管理器输入 FTP 地址后一直转圈,最后提示"无法访问"或"网络路径未找到"
- CMD 里
ping手机能通,但 FTP 客户端连不上 - 关掉防火墙后立刻能连上(这就是确认是防火墙问题的最快方法)
方法一:Windows 安全中心界面操作(推荐)
步骤一:打开防火墙设置
按 Win + I 打开设置 → 搜索"防火墙" → 点"Windows Defender 防火墙"。或者直接按 Win + R 输入 wf.msc 回车打开高级防火墙管理。
步骤二:添加入站规则
在高级防火墙窗口左侧:
- 点"入站规则"
- 右侧操作栏点"新建规则"
- 选择"端口"作为规则类型 → 下一步
- 选择"TCP",在"特定本地端口"里输入 Filetransfer 使用的端口号(默认 2121,如果改了端口就填改后的)
- 选择"允许连接" → 下一步
- 勾选所有配置文件(域、专用、公用都勾上)→ 下一步
- 给规则起个名字,比如"Filetransfer FTP 2121"→ 完成
步骤三:添加出站规则(可选)
一般只需要入站规则就够了,但如果还是不行,也给出站加一条:
- 同样步骤,在"出站规则"里新建
- 选择"允许连接"
方法二:命令行一键添加(最快)
以管理员身份打开 PowerShell 或 CMD,运行:
netsh advfirewall firewall add rule name="Filetransfer FTP" dir=in action=allow protocol=TCP localport=2121
如果改了端口号,把 2121 换成你实际用的端口。
如果用了 SFTP 模式,再加一条 SFTP 的端口放行:
netsh advfirewall firewall add rule name="Filetransfer SFTP" dir=in action=allow protocol=TCP localport=50050
确认规则添加成功,会显示"确定"。
方法三:临时关闭防火墙测试
为了快速确认是不是防火墙的问题,临时关掉试试:
Windows 10/11
- 设置 → 更新和安全 → Windows 安全中心
- 点"防火墙和网络保护"
- 点"当前网络的防火墙状态"(通常是专用网络)
- 把"Microsoft Defender 防火墙"的开关暂时关掉
然后回到资源管理器重新尝试连接 FTP。如果关掉防火墙后立刻能连上,说明确认是防火墙拦截。
测试完记得立刻重新打开防火墙——关掉防火墙会让电脑暴露在网络攻击中,只是用来做排查验证,不能长期关着。
确认规则已生效
添加完放行规则后,重新打开高级防火墙管理(wf.msc),在入站规则列表里应该能看到刚才添加的规则。规则的状态应该是"已启用",操作是"允许连接"。
防火墙冲突:第三方安全软件
如果你装了第三方杀毒软件或防火墙(如 360、火绒、Comodo 等),它们可能会接管 Windows 防火墙。这种情况下:
- 第三方软件的防火墙规则会优先于 Windows 防火墙
- 你在 Windows 防火墙里加的规则可能不生效
- 需要到第三方安全软件的防火墙设置里单独配置 FTP 放行
更简单的替代:用被动模式
如果配置防火墙规则太麻烦,尝试让 FTP 客户端用被动模式(PASV)连接:
- FileZilla/WinSCP 等客户端可以在设置里勾选"使用被动模式"
- 被动模式下客户端主动发起数据连接,更容易穿透防火墙
- Windows 资源管理器默认就是被动模式,所以资源管理器用户一般不需要额外配置
实际上 Windows 资源管理器连接 FTP 时本身就能穿透绝大多数防火墙,只有极个别严格的网络环境才需要手动放行。先试试资源管理器能不能连上,再考虑加防火墙规则。
Mac 上的防火墙
Mac 上 FTP 连接被拦截的情况较少——macOS 的应用层防火墙默认只拦截入站连接,不拦出站。但如果开了 FileVault 或启用了"隐身模式",可能有影响。系统设置 → 网络 → 防火墙 → 关掉"隐身模式"即可。