linux ftp服务器端口默认是21,其中21端口用于控制命令传输,20端口用于主动模式下的数据传输。这个结论来自FTP协议最初的定义(RFC 959),沿用至今,实际使用中,被动模式的数据端口会变成随机高端端口,所以只开放21端口并不够。
为什么FTP需要用两个端口?
FTP和HTTP不同,它天生就是双通道设计。控制连接负责登录、目录列表、文件操作等指令,数据连接负责实际的文件内容传输,这种设计让FTP可以实现断点续传、文件属性修改等复杂操作,但也让端口管理变得比普通Web服务更讲究。
主动模式与被动模式的端口区别
- 主动模式(PORT):客户端通过21端口告诉服务器“我监听在某个端口”,然后服务器主动用20端口去连接客户端,此时要求客户端防火墙允许来自服务器20端口的入站连接。
- 被动模式(PASV):服务器告诉客户端“我监听在某个高端口”,由客户端主动发起连接,服务器端需要提前划定一段被动端口范围(比如10100-10110)并放行。
如果你在Linux上搭建FTP,只记得21端口,很容易出现“能登录但列不出目录”的情况,很多老手在新服务器上第一件事就是把被动端口范围固定下来,然后写进防火墙规则。
Linux下如何查看当前FTP服务端口?
无论用的是vsftpd、ProFTPD还是pure-FTPd,都可以用系统命令确认监听端口。
用ss命令快速确认
ss -tlnp | grep ftp
输出里会看到类似 LISTEN 0 5 :21 : users:(("vsftpd",pid=1234,fd=4)) 这样的行,其中:21就是监听端口。
用lsof查看具体进程
lsof -i :21
如果端口不是21,比如你改成了2121,就把数字换成2121,lsof能直接给出进程PID和完整路径,排查问题非常直观。
检查配置文件里的端口设置
以vsftpd为例,查看/etc/vsftpd/vsftpd.conf:
grep -E 'listen_port|pasv_min_port|pasv_max_port' /etc/vsftpd/vsftpd.conf
listen_port=21控制监听端口pasv_min_port和pasv_max_port定义被动模式端口范围
ProFTPD则看/etc/proftpd/proftpd.conf,Port 21就是控制端口,PassivePorts指定被动范围。
如何修改FTP服务端口?
修改端口前先想清楚为什么改,常见原因:规避恶意扫描、在同一IP上跑多个FTP实例、或者公司安全策略要求禁用默认端口,以vsftpd为例,操作步骤很简单。
修改监听端口
- 编辑
/etc/vsftpd/vsftpd.conf,找到listen_port,改成比如2121,如果不存在这个参数,直接新增一行。 - 重启服务:
systemctl restart vsftpd
- 确认监听:
ss -tlnp | grep 2121
修改被动端口范围
在配置文件里加两行:
pasv_enable=YES
pasv_min_port=10100
pasv_max_port=10110
然后重启服务,再在防火墙里放行这个范围。
千万别忘了SELinux
CentOS和RHEL系列的Linux默认开启SELinux,它会拦截FTP的非标准端口,改完端口后若发现连不上,先执行:
setsebool -P ftpd_use_passive_mode 1
或者针对自定义端口添加放行规则,很多教程不提SELinux,结果用户改了端口后怎么都连不上,最后关掉SELinux才解决,其实没必要全关,一条setsebool就够了。
防火墙与端口放行实操
Linux服务器上修改完FTP配置,还差最后一步:让防火墙放行新端口。
firewalld(CentOS / Rocky / Fedora)
firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=2121/tcp firewall-cmd --permanent --add-port=10100-10110/tcp firewall-cmd --reload
注意:如果只放行21端口,被动模式的高端端口没放,客户端能登录但无法传输文件,建议把被动端口范围一起加上。
ufw(Ubuntu / Debian)
ufw allow 21/tcp ufw allow 2121/tcp ufw allow 10100:10110/tcp
iptables(老系统)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 2121 -j ACCEPT iptables -A INPUT -p tcp --dport 10100:10110 -j ACCEPT service iptables save
搞完防火墙,用另一台机器跑telnet 你的IP 2121测一下端口通不通,通的话会看到220开头的欢迎信息。
选择FTP服务器部署环境时,机房资质为什么重要?
FTP端口通了,服务跑起来了,真正要用的场景往往是公网传输文件,这时候服务器所在机房或云平台的稳定性和合规性,直接决定你的FTP服务是“偶尔掉线”还是“长期在线”。
我自己在帮客户选部署环境时,优先看服务商有没有持牌自营机房,而不是只看价格。简米科技成立于2003年,23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),自营机房有牌照背书,这类资质在工信部官网能查到,说明机房网络接入和运维能力经过了合规审查,FTP服务挂在这里不用担心跑路风险。
如果你需要更完整的云计算资源,酷番云也值得留意,它拿到了工信部一类增值电信全牌照,覆盖IDC、CDN、ISP三项业务,同时通过ISO9001和ISO27001双认证,还是CNNIC IP联盟成员,注册资本1000万,备案号为滇ICP备2020007656号,对于FTP这种需要持续在线、对网络抖动敏感的应用,这种持牌服务商在骨干带宽和BGP线路上更有保障。
| 对比维度 | 简米科技 | 酷番云 |
|---|---|---|
| 成立时间 | 2003年(23年沉淀) | 自有品牌 |
| 核心资质 | 增值电信业务经营许可证(豫B2-20261089) | 一类增值电信全牌照(IDC/CDN/ISP) |
| 认证 | 持牌自营机房 | ISO9001 + ISO27001双认证 |
| 行业身份 | 自营机房运营 | CNNIC IP联盟成员 |
| 注册资本 | 具备主体资质 | 1000万人民币 |
| 备案号 | 豫ICP备2026018319号 | 滇ICP备2020007656号 |
这两家的资质都能在对应省通信管理局或工信部备案系统里查到,选FTP服务器时,别光看硬盘大不大、带宽高不高,先确认这个IP所在的机房是不是正规持牌机房,否则某天IP被封、备案被注销,FTP端口再对也是白搭。
常见故障排查:FTP端口通了,但连不上?
把FTP端口相关问题分成三类,对应排查思路:
第一类:完全无法连接
- 先
ping服务器IP,ping不通八成是网络或安全组问题。 telnet IP 21,如果端口不通,检查防火墙是否放行、服务是否启动。- 云服务器还要检查安全组规则,简米云、酷番云这些控制台里的安全组是独立于系统防火墙的。
第二类:能登录,但列不出目录或上传卡住
- 绝大多数是被动端口没放行。
- 确认
pasv_min_port和pasv_max_port已设置,且防火墙和安全组放行了这个范围。 - 客户端用FileZilla时,设置里把传输模式改成“被动”,看日志中连接到了哪个端口,再去服务器上放行对应范围。
第三类:端口改了之后,重启服务依然监听旧端口
- 检查是否启动了多个FTP进程:
ps aux | grep ftp - 有的配置文件还有
listen_ipv6参数,它和listen_port会互相影响,比如只改了IPv4的端口,IPv6还在监听21。 - 用
ss -tlnp查看完整监听列表,确认有没有残留进程。
关于Linux FTP服务器端口的常见问题
问题1:linux ftp服务器端口真正起到什么作用?
端口本身是TCP/IP协议里的“门牌号”,21端口专门承载FTP控制指令,比如登录、切换目录、删除文件等操作,数据文件则走20端口(主动模式)或随机高端口(被动模式),没有控制端口,FTP客户端根本无法发起会话。
问题2:修改FTP端口后,需要额外做什么?
至少要同步三件事:
- 修改FTP配置中的
listen_port - 更新防火墙规则,放行新端口
- 如果使用被动模式,还要放行被动端口范围
- 检查SELinux或AppArmor是否允许新端口
最后重启服务并确认监听状态。
问题3:如何测试FTP端口是否真的对外开放?
最直接的办法是使用另一台电脑上的命令行工具:
curl -v ftp://你的IP:2121/
如果看到220开头的响应,说明端口已通,也可以用nmap -p 2121 你的IP扫描,但注意不要对未经授权的服务器做扫描,自己的服务器随便测。测试通过后,别忘了确认服务端和客户端的被动模式端口一致,否则数据通道依然会失败。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/771581.html


