You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

vsftpd统一530错误响应配置及结合fail2ban抵御暴力破解与用户名枚举的技术咨询

vsftpd统一530错误响应配置及结合fail2ban抵御暴力破解与用户名枚举的技术咨询

兄弟,你这个思路太精准了!vsftpd默认的登录失败响应确实会泄露用户是否存在的关键信息,刚好结合fail2ban就能把暴力破解和用户名枚举这两个安全风险一起堵住,我给你一步步捋清楚怎么操作:

先明确你碰到的两种场景,方便咱们对标解决:

  • 场景1(有效用户user1):用户已在/etc/vsftpd.allowed_users和/etc/passwd中注册(采用UNIX系统认证)

    $ ftp myftp.example.com
    Connected to myftp.example.com.
    220 Welcome FTP user.
    Name (myftp.example.com:user1): user1
    331 Please specify the password.
    Password: 
    530 Login incorrect.
    ftp: Login failed.
    
  • 场景2(无效用户user2):用户未在/etc/vsftpd.allowed_users中登记(可能在/etc/passwd中存在或不存在)

    $ ftp myftp.example.com
    Connected to myftp.example.com.
    220 Welcome FTP user.
    Name (myftp.example.com:user2): user2
    530 Login incorrect.
    ftp: Login failed.
    

一、让vsftpd对所有登录失败返回完全一致的530响应

核心就是抹平有效用户和无效用户的认证流程差异,不让攻击者通过响应步骤判断用户是否存在:

  1. 修改vsftpd主配置文件(一般路径是/etc/vsftpd.conf),添加或确保以下参数生效:

    # 隐藏用户邮箱信息,减少泄露点
    hide_email_enable=YES
    # 登录失败后的超时时间,辅助统一响应节奏
    auth_fail_timeout=60
    # 保留你原来的白名单配置
    userlist_enable=YES
    userlist_deny=NO
    userlist_file=/etc/vsftpd.allowed_users
    # 确保使用PAM认证
    pam_service_name=vsftpd
    
  2. 修改PAM认证配置(路径/etc/pam.d/vsftpd),这是统一响应的关键。把原有的认证行替换成以下内容:

    auth    required        pam_unix.so nullok_secure try_first_pass
    auth    required        pam_deny.so
    

    这个配置的作用是:不管用户是否存在,都会先要求输入密码,然后统一返回530错误,彻底堵死用户名枚举的可能。

  3. 重启vsftpd服务让配置生效:

    systemctl restart vsftpd
    

    现在再测试,不管输入有效还是无效用户,都会先弹出331 Please specify the password.的提示,输入密码后统一返回530 Login incorrect.,完美抹平差异!

二、配置fail2ban拦截暴力破解攻击

接下来给vsftpd加上fail2ban的防护,自动封禁多次登录失败的IP:

  1. 先确保fail2ban已经安装(没装的话用对应包管理器安装,比如Debian/Ubuntu用apt install fail2ban,CentOS/RHEL用yum install fail2ban)。

  2. 复制默认配置文件做自定义修改(避免系统更新覆盖你的配置):

    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  3. 编辑/etc/fail2ban/jail.local,找到[vsftpd]区块,修改成以下配置(根据你的需求调整参数):

    [vsftpd]
    enabled = true
    # 覆盖所有FTP相关端口(明文+加密)
    port = ftp,ftp-data,ftps,ftps-data
    # 使用默认的vsftpd日志过滤规则
    filter = vsftpd
    # 指定vsftpd的日志路径,根据你的系统可能是/var/log/messages或/var/log/syslog,要确认正确
    logpath = /var/log/vsftpd.log
    # 登录失败3次就封禁
    maxretry = 3
    # 封禁时长1小时(单位秒,86400就是24小时)
    bantime = 3600
    
  4. 重启fail2ban服务:

    systemctl restart fail2ban
    

    可以用fail2ban-client status vsftpd查看当前封禁状态,确认是否正常工作。

备注:内容来源于stack exchange,提问作者Nexus1138

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:33:04