要限制指定IP地址访问FTP服务器上的存储桶,核心方法是配置FTP服务本身的IP白名单,并结合系统防火墙规则,对于云存储桶,直接使用其内置的IP白名单功能,两种方式都能有效控制访问来源,降低数据泄露风险。
为什么需要限制IP访问FTP服务器
FTP协议默认不加密,传输过程中账号密码容易被截获,如果FTP服务器暴露在公网,暴力破解是常见威胁,业内专家指出,大部分FTP攻击来自未知IP的持续扫描,限制IP访问能直接减少攻击面,避免未授权IP尝试登录,对于存储敏感数据的桶(目录或云存储桶),更应该只允许固定IP或网段访问,这一策略在中小企业和个人站长中广泛应用,是基础安全配置的一部分。
怎么限制IP访问FTP服务器:三种主流方法
下面介绍三种具体实现方式,分别适用于不同场景。
FTP服务器设置IP白名单
以最常见的vsftpd为例,利用系统tcp_wrappers组件实现IP白名单,操作路径如下:
- 编辑
/etc/hosts.allow,添加一行:vsftpd: 192.168.1.100(允许的IP地址) - 编辑
/etc/hosts.deny,添加一行:vsftpd: ALL(拒绝其他所有IP) - 重启vsftpd服务:
systemctl restart vsftpd
注意:vsftpd编译时需要支持tcp_wrappers,大多数Linux发行版默认开启,如果使用其他FTP服务(如ProFTPD),也可通过类似方式配置,此方法优点在于配置简单,只需修改两个文件即可生效,但缺点是无法精确到用户级别,白名单内IP可以访问所有FTP用户。
使用系统防火墙控制IP访问
通过iptables或firewalld限制FTP端口(默认为21)的访问来源,适用于所有FTP服务。
iptables示例:
- 允许指定IP:
iptables -A INPUT -p tcp --dport 21 -s 192.168.1.100 -j ACCEPT - 拒绝其他所有IP:
iptables -A INPUT -p tcp --dport 21 -j DROP - 保存规则:
iptables-save > /etc/iptables/rules.v4
firewalld示例:
- 使用富规则:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="21" accept' - 重新加载:
firewall-cmd --reload
如果FTP使用被动模式,还需要开放被动端口范围(如iptables -A INPUT -p tcp --dport 30000-31000 -j ACCEPT),防火墙规则的优点在于独立于FTP服务,即使更换FTP软件,规则依然生效,但需注意规则顺序,避免被其他规则覆盖。
限制指定IP访问桶(云存储桶的IP白名单)
如果桶是云存储(如简米云OSS、酷番云COS),直接使用其内置的IP白名单功能,无需自建服务器。
操作路径(以简米云OSS为例):
- 登录OSS控制台,进入目标Bucket的“权限管理” > “读写权限”。
- 在“IP白名单”区域,输入允许的IP地址或网段,多个IP用逗号隔开。
- 保存后,白名单外的IP通过任何方式(包括FTP、API、控制台)访问该Bucket都会被拒绝。
酷番云COS操作路径:
- 进入存储桶的“权限管理” > “访问策略” > “添加策略”。
- 选择“允许访问”,指定IP条件为
SourceIp,再添加允许的IP。 - 保存后即时生效。
云存储的IP白名单通常支持最多1000条规则,且生效时间在5分钟以内,此方法最直接,适合没有自建FTP服务器、直接使用云存储FTP功能的用户,但需注意,云存储的FTP服务可能会额外收费,且白名单只能控制桶级别,无法细分到桶内目录。
自己搭建FTP服务器安全设置:IP限制与桶权限结合
对于需要自建FTP服务器并挂载云存储桶的用户,可以将FTP服务器设为中转,再配合桶的IP白名单,具体步骤如下:
- 在服务器上安装vsftpd,配置chroot,将用户根目录指向云存储桶的本地挂载点(如
/mnt/bucket)。 - 使用防火墙限制IP访问vsftpd服务端口,只允许特定IP连接。
- 在云存储桶的控制台中,设置IP白名单为FTP服务器的公网IP(因为客户端必须通过FTP服务器访问桶,桶只信任服务器IP)。
- 这样,只有白名单中的客户端IP能连接FTP服务器,且FTP服务器只能访问桶(桶的IP白名单仅允许服务器IP),实现双重防护。
注意:如果桶的IP白名单只包含FTP服务器IP,客户端IP无法直接传递到桶,因此桶无法识别客户端真实IP,这种架构适合对桶的访问来源有严格限制的场景,比如只允许内网服务器访问桶。
FTP服务器地址怎么设置IP限制
无论使用哪种方法,都需要明确FTP服务器地址(IP或域名),然后针对该地址配置限制,操作路径如下:
- 确认FTP服务器地址:
ip addr或curl ifconfig.me获取公网IP。 - 选择限制方式:tcp_wrappers、防火墙或云服务设置。
- 添加允许的IP:将需要访问的客户端IP加入白名单。
- 测试:使用允许的IP通过FTP客户端连接,检查是否成功;使用其他IP连接,应被拒绝。
如果FTP服务器地址是动态IP,建议使用DDNS改为固定域名,再在防火墙中通过域名规则限制(部分防火墙支持),静态IP则直接使用IP地址。
常见问题与解答
Q1:FTP服务器设置IP白名单后,为什么其他IP还能连接?
A:首先检查tcp_wrappers是否生效,运行ldd /usr/sbin/vsftpd | grep wrap确认vsftpd编译时包含libwrap,如果使用防火墙,检查规则顺序,确保拒绝规则在允许规则之后,并且防火墙服务已重新加载,如果FTP服务通过SELinux,可能需要执行setsebool -P ftpd_use_tcpwrappers 1才能启用tcp_wrappers支持。
Q2:限制指定IP访问桶,在简米云OSS上如何操作?
A:进入OSS控制台,选择目标Bucket,点击“权限管理”>“读写权限”,在“IP白名单”中添加允许的IP地址,格式如168.1.0/24,保存后约5分钟生效,白名单最多支持1000条,且修改后原有访问规则会被覆盖,如果桶同时开启了防盗链,IP白名单优先级高于防盗链。
Q3:自己搭建的FTP服务器,能否让不同IP访问不同桶?
A:可以,创建多个FTP用户,每个用户设置不同的根目录(桶目录),然后通过pam_access模块或自定义脚本,在用户登录时检查其IP与用户名的映射关系,但配置较复杂,生产环境推荐使用vsftpd的user_config_dir结合pam_listfile实现,更简单的方法是启动多个FTP服务实例,每个实例监听不同端口,再通过防火墙限制每个端口的IP来源,这样不同IP只能访问对应端口的桶。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/540537.html



