阿里云安全组策略
配置FTP最常见的坑是阿里云安全组(相当于云防火墙)没有放行对应的端口,FTP默认使用21端口(控制端口) 和被动模式下的数据端口,你需要在阿里云控制台的ECS实例安全组规则里放行这些端口。
1、安装 vsftpd 服务
2、配置 vsftpd(重点:设置为被动模式并指定端口范围)
3、创建 FTP 用户(出于安全考虑,不建议直接使用 root)
4、配置防火墙(firewalld 或 iptables)
5、配置阿里云安全组
6、测试连接
- 你已经拥有一台阿里云 ECS(云服务器),并已通过 SSH 连接上。
- 操作系统:CentOS 7/8(其他发行版命令略有差异,但配置文件思路相同)。
- 你有sudo 或root 权限。
更新 yum 源 sudo yum update -y 安装 vsftpd sudo yum install -y vsftpd 启动 vsftpd 服务并设置为开机自启 sudo systemctl start vsftpd sudo systemctl enable vsftpd 检查服务状态 sudo systemctl status vsftpd
我们需要修改配置文件/etc/vsftpd/vsftpd.conf。强烈建议先备份:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak sudo vim /etc/vsftpd/vsftpd.conf
确保文件中有以下配置项(没有则添加,有则取消注释并修改),这是为了开启被动模式并指定一个范围的数据端口,方便我们固定放行防火墙和安全组。
禁止匿名用户登录 anonymous_enable=NO 允许本地用户登录(即系统用户) local_enable=YES 允许用户写入文件 write_enable=YES 本地用户新建文件的 umask 值 local_umask=022 使用 UTF-8 编码支持中文文件名 utf8_filesystem=YES ---------- 被动模式关键配置 ---------- 开启被动模式(默认可能已开启) pasv_enable=YES 指定被动模式端口范围(阿里云安全组必须放行这个范围) pasv_min_port=30000 pasv_max_port=31000 重要:设置为服务器公网 IP 或 0.0.0.0(如果是一台有公网 IP 的服务器) 如果你的服务器是经典网络,请填写你的公网 IP 如果是 vpc 网络(大多数情况),可以留空或填 0.0.0.0,客户端会自动适配 pasv_address=你的服务器公网IP
>注意:pasv_address 如果不是空,则需要填写阿里云控制台看到的公网 IP,如果不想填,可以留空,但某些被动模式连接情况下客户端可能无法获取正确地址。
保存并退出(vim 中按Esc,输入:wq 回车)。
步骤3:创建 FTP 用户(推荐专用用户)
为了安全,不要直接用root,新建一个系统用户给 FTP 使用:
添加用户 ( ftpuser) sudo useradd -m -s /sbin/nologin ftpuser 设置密码 sudo passwd ftpuser 输入密码并确认
-m:自动创建 home 目录 (/home/ftpuser)
-s /sbin/nologin:禁止该用户通过 SSH 登录,只能用于 FTP。
(可选)限制用户只能访问自己的目录(chroot)
修改配置文件vsftpd.conf,添加或确认以下行:
禁止用户访问 home 目录之外的目录 chroot_local_user=YES 允许对 chroot 目录进行写操作(vsftpd 2.3.5 后默认拒绝写入,需要添加) allow_writeable_chroot=YES
步骤4:配置服务器内部防火墙(firewalld)
如果你的服务器开启了 firewalld(大多数 CentOS 7+ 默认),需要放行 FTP 相关端口。
放行 21 端口(控制端口) sudo firewall-cmd --permanent --add-port=21/tcp 放行我们指定的被动模式端口范围 sudo firewall-cmd --permanent --add-port=30000-31000/tcp 重新加载防火墙规则 sudo firewall-cmd --reload 检查规则是否生效 sudo firewall-cmd --list-all
如果使用的是iptables,命令类似但不同(此处不展开)。
步骤5:配置阿里云安全组(最关键的外部网络访问)
这一步在阿里云控制台操作,而不是在服务器上。
1、 登录阿里云控制台,进入ECS 实例列表。
2、 找到你的服务器,点击实例名称 进入详情页。
3、 点击左侧安全组 标签(如果没有,需要在实例页面右侧找到“安全组”入口)。
4、 找到当前实例绑定的安全组,点击配置规则。
5、 点击入方向 ->手动添加。
授权策略:允许
协议类型:自定义 TCP
端口范围:21/21
授权对象:0.0.0.0/0(允许所有来源,或根据需要缩小范围)
描述:FTP 控制端口
6、 再次点击入方向 ->手动添加。
授权策略:允许
协议类型:自定义 TCP
端口范围:30000/31000
授权对象:0.0.0.0/0
描述:FTP 被动数据端口
>注意:必须添加两个规则,很多用户只开放了21端口,导致连接后卡在“列目录”或“数据传输”阶段。
sudo systemctl restart vsftpd
测试方法:
使用命令行(Linux/Mac):
ftp 你的服务器公网IP # 输入用户名: ftpuser # 输入密码 # 然后尝试 ls 或 put/get 文件
使用图形客户端(FileZilla / WinSCP):
- 主机:你的服务器公网IP
- 协议:FTP(不是SFTP,也不是FTPS)
- 加密:如果需要纯文本连接,选“只使用普通FTP”(不安全),或选择“使用显式FTP over TLS”(需要额外配置SSL证书,略复杂)
- 登录类型:正常
- 用户:ftpuser
- 密码:你设置的密码
- 传输设置:被动模式(默认通常是,如果不行则手动切换)
1、连接不上,提示“连接被拒绝”:
- 检查阿里云安全组是否放通21端口。
- 检查服务器防火墙(firewalld)是否放通21端口。
- 检查vsftpd 服务是否启动 (systemctl status vsftpd)。
2、能连接成功,但执行ls 或上传下载时卡住:
这是最典型的问题,原因通常是被动模式数据端口没有放通。
- 确认vsftpd.conf 里是否配置了pasv_min_port 和pasv_max_port。
- 确认阿里云安全组是否放通了对应的端口范围(30000-31000)。
- 确认服务器防火墙是否放通了该范围。
3、登录成功,但无法上传文件:
- 检查write_enable=YES 是否已设置。
- 检查用户对 FTP 目录的写权限。
sudo chown ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser4、连接成功后提示“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”:
- 你开启了chroot_local_user=YES,同时允许了写入,需要在配置文件最末尾添加:
allow_writeable_chroot=YES然后重启服务。
5、Windows FTP 命令行连接乱码:
- 建议使用 FileZilla 等支持 UTF-8 的客户端。
避免使用明文 FTP:在任何公网场景下,强烈建议升级为FTPS(FTP over SSL/TLS) 或SFTP(SSH File Transfer Protocol),FTP 的密码是明文传输的。
限制访问IP:在阿里云安全组中,尽量将授权对象 从0.0.0.0/0 改为你公司或家庭的固定公网IP。
使用专用用户:不要给 FTP 用户sudo 权限,并且使用-s /sbin/nologin 限制 shell。
按照以上步骤操作,你应该能成功在阿里云上配置并使用 FTP 服务器,如果还有问题,请告诉我具体的错误信息,我可以帮你进一步分析。
文章摘自:https://idc.huochengrm.cn/fwq/25466.html
评论