服务器开FTP需要开什么端口?答案是:控制连接走21端口,数据连接看模式主动模式额外开20端口,被动模式额外开放一段高端口(比如40000-45000)。如果只开了21,客户端能登录但传不了文件,这个坑不少人踩过,下面把端口这件事掰开揉碎讲清楚。
服务器开FTP需要开什么端口?21和20都得开吗
FTP这协议有点特殊,它不像HTTP那样只用一个端口,一个完整的FTP会话要拆成两条连接:控制连接和数据连接,控制连接固定用21端口,负责传用户名、密码、各种命令和响应,数据连接才是真正传文件的那条路,它的端口由当前工作模式决定。
主动模式:21和20都要开
主动模式下,客户端告诉服务器“你主动连我”,于是服务器用20端口去连客户端随机开的一个临时端口,这里有个关键点:服务器端必须开放20端口,同时客户端那侧也要允许来自服务器的入站连接,现实中很多内网客户端因为NAT或者防火墙,根本接不住,所以主动模式现在用得少。
主动模式流程可以简单记成:
- 客户端 → 服务器21:建立控制连接
- 客户端 → 服务器:发送PORT命令,告诉服务器自己的临时端口
- 服务器20 → 客户端临时端口:建立数据连接
被动模式:只要21,但需要一段高端口范围
被动模式就是服务器说“你别连我,我自己开个口”,服务器随机挑一个1024以上的高端口,告诉客户端,客户端主动连过来,所以服务器端只要求21端口对外放行,但被动模式下还需要把高端口范围也放行。
如果服务器没有配置固定范围,vsftpd这类服务会随机分配高端口,安全组和防火墙就不好放行,所以正规做法是手动指定一个范围,比如40000-45000,然后在这套环境里把这个范围开放。
| 模式 | 控制连接端口 | 数据连接端口 | 服务器需开放 |
|---|---|---|---|
| 主动 | 21 | 服务器20 | 21和20 |
|
被动 | 21 | 服务器指定高端口范围 | 21和高端口范围 |
行业共识认为,被动模式更适合现代网络环境,因为客户端只需要顺向连服务器,不出现在NAT穿透难题,实际搭建时,绝大多数人用被动模式。
简米云服务器FTP端口怎么开?安全组规则实操
以简米云为例,买来的ECS服务器默认安全组是收紧的,你就算在系统里启动了FTP,外网也连不上,第一步先去管理控制台配安全组。
添加入方向规则
找到“安全组” → “管理规则” → “入方向” → “手动添加”,协议选TCP,端口范围填你需要的端口。
如果打算用被动模式,同时把21和高端口范围加进去:
- 授权对象:0.0.0.0/0表示所有人可访问,或者填你公司的出口IP
- 端口范围:21/21
- 端口范围:40000/45000
如果你就想用主动模式,那端口范围写20/21,有一点要留意,简米云安全组不支持像“21,40000-45000”这样混写,只能一条规则一个端口段,所以干脆拆成两条,更清晰。
安全组放行后还连不上?查实例防火墙
安全组只管网络层的通道,系统里的iptables或者firewalld是另一道闸,简米云Linux服务器默认firewalld可能没启动,但有些镜像预装iptables服务,命令查一下:
systemctl status firewalld iptables -L -n
如果发现系统防火墙开着,记得放行所需端口,这里踩坑的人太多,安全组加了规则,系统防火墙没放行,客户端卡在登录或者列表那一步。
被动模式下,别忘了指定端口范围
简米云服务器有公网IP,但网卡上看到的往往是内网IP,vsftpd如果不配置pasv_address,会告诉客户端一个内网地址,客户端去连内网IP当然失败,所以要在/etc/vsftpd/vsftpd.conf里这样设:
pasv_enable=YES pasv_min_port=40000 pasv_max_port=45000 pasv_address=你的公网IP地址
改完重启vsftpd,再测一下被动模式,这一步很多经验帖会写,但跟着做的人仍然经常漏掉

pasv_address,导致外网能登录、不能传数据。
Linux服务器FTP端口开放:iptables和firewalld实操
不同Linux发行版防火墙工具不一样,CentOS 7以上默认firewalld,Ubuntu常用ufw,老一点的CentOS 6则是iptables,分别看下。
firewalld下放行端口
firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=40000-45000/tcp firewall-cmd --reload
查看是否生效:
firewall-cmd --list-ports
应该输出21/tcp 40000-45000/tcp,如果你的FTP服务主动模式也得用20端口,再加一条--add-port=20/tcp。
iptables下放行端口
iptables -A INPUT -p tcp --dport 21 --syn -j ACCEPT iptables -A INPUT -p tcp --dport 40000:45000 --syn -j ACCEPT service iptables save
注意iptables规则写在INPUT链上,同时检查有没有DROP规则排在前面。--syn只匹配新连接握手包,数据回包会走ESTABLISHED相关规则,不需要单独开20端口,实际测试中用iptables -I INPUT -p tcp --dport 21 -j ACCEPT插到最前面,能避免已有DROP规则干扰。
搭好后验证端口状态
在服务器本机看FTP服务是否在监听:
netstat -tlnp | grep :21
看到LISTEN说明服务正常,从另一台机器访问端口:
telnet 你的服务器IP 21
能出现FTP欢迎信息就代表端口通了,若卡住没反应,优先查安全组和防火墙,其次看服务是否绑定在公网可访问的网卡上。
FTP端口连不上?主动模式打不开多半是客户端NAT的问题
很多人把端口全放开了,外网还是连不上,其实问题不在服务器,而是主动模式遇上NAT,比如你在公司电脑上用FlashFXP默认“主动”模式,服务器拿20端口去连你电脑的临时端口,可你电脑藏在路由器后面,路由器没有把那个临时端口映射进来,结果就是连接超时,解决办法是客户端里改成“被动”模式。

FTP端口21和20打不开,还有一个原因是端口被换掉了。出于安全考虑有些人会修改默认21端口,比如改成2121,客户端连接地址就写成ftp://服务器IP:2121,如果只改了FTP配置,但防火墙和安全组没有同步放行新端口,那也是白搭,换个不常见端口确实能降低被扫描的概率,但说到底FTP本身不够安全,靠换端口不解决根本问题。
服务器FTP端口安全建议:能用有加密的协议就别用明文FTP
FTP的21端口和控制连接是明文传输,用户名、密码、文件内容都暴露在网络上,业内专家指出,多数服务器被入侵的起点就是FTP弱口令加裸奔端口,所以如果只是临时传文件,直接用:
- SFTP:基于SSH,默认22端口,加密传输,Linux服务器开启SSH后基本自带,无需额外装软件
- FTPS:FTP over SSL/TLS,控制连接和部分被动数据连接加密,vsftpd可以配置启用
如果业务必须用普通FTP,至少做到两点:限制可访问IP段,端口不要长期暴露在公网;设置强密码并开启日志审计。
常见问题:服务器开FTP和防火墙端口相关答疑
问:FTP的主动和被动模式,端口区别到底在哪里?
答:主动模式服务器用20端口连客户端,被动模式服务器随机开一个高端口等客户端来连,客户端模式配置错,最常见的现象是能认证但列出目录超时。
问:服务器只开了21端口,为什么能登录但不能下载?
答:因为数据连接端口没放行,被动模式下数据端口是高端口范围,主动模式下是20端口,只开放21端口,控制连接正常,数据连接建立不成功,所以传不了东西。
问:简米云服务器FTP端口怎么从外网访问,具体要配置哪几个端口?
答:先在安全组放行21端口,再根据vsftpd等服务的pasv_min_port和pasv_max_port放行对应的被动端口段,如果可用端口范围是40000-45000,安全组与系统防火墙都放行这段即可,最后确认pasv_address填成公网IP,否则客户端拿到内网地址一样连不上。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/878928.html


评论列表(3条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是端口部分,给了我很多新的思路。感谢分享这么好的内容!