• 微信
    咨询
    微信在线咨询 服务时间:9:00-18:00
    纵横数据官方微信 使用微信扫一扫
    马上在线沟通
  • 业务
    咨询

    QQ在线咨询 服务时间:9:00-18:00

    选择下列产品马上在线沟通

    纵横售前-老古
    QQ:519082853 售前电话:18950029581
    纵横售前-江夏
    QQ:576791973 售前电话:19906048602
    纵横售前-小李
    QQ:3494196421 售前电话:19906048601
    纵横售前-小智
    QQ:2732502176 售前电话:17750597339
    纵横售前-燕子
    QQ:609863413 售前电话:17750597993
    纵横值班售后
    QQ:407474592 售后电话:18950029502
    纵横财务
    QQ:568149701 售后电话:18965139141

    售前咨询热线:

    400-188-6560

    业务姚经理:18950029581

  • 关注

    关于纵横数据 更多优惠活动等您来拿!
    纵横数据官方微信 扫一扫关注官方微信
  • 关闭
  • 顶部
  • 您所在的位置 : 首页 > 新闻公告 > Nginx如何限制恶意User-Agent?

    Nginx如何限制恶意User-Agent?

    在网站服务器运行过程中,管理员经常会遇到一种情况:网站访问量突然增加,CPU负载升高,Nginx连接数异常增长,但查看访问来源后发现,大量请求并不像真实用户访问,而是来自一些异常User-Agent。

    User-Agent是HTTP请求中的一个重要信息,用于标识访问客户端类型,例如浏览器、搜索引擎爬虫、自动化脚本等。Nginx可以读取请求中的User-Agent内容,并根据规则进行过滤、限制或拦截。通过分析和限制异常User-Agent,可以有效减少恶意爬虫、扫描工具、自动化攻击程序对服务器资源的消耗。Nginx本身支持基于请求头信息进行判断,也可以结合日志和安全策略进行更细致的访问控制。

    不过需要注意,User-Agent并不是绝对可靠的安全依据,因为攻击者可以伪造浏览器标识。因此,在实际防护过程中,需要结合访问频率、IP行为、请求路径等多个因素综合判断。

    一、什么是User-Agent?为什么需要限制?

    User-Agent是客户端发送给服务器的请求头信息,用来说明访问者使用的工具类型。

    例如:

    正常用户访问网站时,可能显示:

    Chrome浏览器;

    Edge浏览器;

    Safari浏览器。

    搜索引擎访问时,可能显示:

    Googlebot;

    Bingbot;

    其他搜索引擎爬虫。

    而恶意程序可能显示:

    python-requests;

    curl;

    扫描器名称;

    空User-Agent。

    这些异常请求如果数量较少,通常不会造成影响。

    但是,当攻击者利用自动化工具大量访问网站时,就可能产生严重影响。

    例如:

    某企业官网部署在Nginx服务器上,平时访问稳定,但突然出现:

    CPU持续升高;

    网站打开缓慢;

    PHP-FPM进程占满。

    管理员查看Nginx日志后发现,大量请求来自:

    python-requests;

    Go-http-client;

    某未知Bot。

    进一步分析发现,这些请求并不是正常用户访问,而是自动化程序不断抓取网站页面。

    通过限制异常User-Agent,并结合访问频率控制后,服务器压力明显降低。

    二、哪些User-Agent可能属于恶意访问?

    判断User-Agent是否异常,不能只看名称,但以下几类需要重点关注。

    1. 自动化脚本工具

    例如:

    curl;

    wget;

    python-requests;

    Java程序。

    这些工具本身并不是恶意软件。

    例如:

    管理员测试接口时,也可能使用curl。

    但是,如果服务器日志中出现:

    大量相同User-Agent;

    短时间访问大量页面;

    请求路径重复。

    就需要考虑是否属于自动化攻击。

    2. 扫描工具User-Agent

    攻击者在寻找网站漏洞时,经常使用扫描工具。

    例如:

    扫描CMS漏洞;

    扫描后台入口;

    扫描敏感文件。

    访问日志中可能出现:

    scanner;

    crawler;

    sqlmap;

    nikto。

    如果发现这些标识大量出现,需要及时处理。

    3. 空User-Agent请求

    正常浏览器通常都会携带User-Agent。

    如果大量请求没有User-Agent,可能来自:

    攻击脚本;

    简单爬虫;

    异常程序。

    对于企业网站来说,可以适当限制这类请求。

    三、如何通过Nginx限制恶意User-Agent?

    Nginx可以通过配置文件中的请求头变量判断User-Agent。

    其中:

    $http_user_agent

    代表客户端提交的User-Agent信息。

    方法一:直接拦截指定User-Agent

    例如:

    if ($http_user_agent ~* "python-requests|curl|wget") {
        return 403;
    }

    配置含义:

    如果请求中的User-Agent包含:

    python-requests;

    curl;

    wget。

    则返回403拒绝访问。

    这种方式适合处理:

    明确的恶意工具;

    大量异常请求来源。

    例如:

    某网站遭遇大量接口扫描。

    日志显示:

    User-Agent全部为python-requests。

    管理员添加限制规则后,大量无效请求被Nginx直接拦截,不再进入PHP处理流程。

    这样可以降低:

    PHP-FPM压力;

    数据库查询压力;

    服务器CPU消耗。

    方法二:限制空User-Agent

    部分攻击程序不会发送User-Agent。

    可以增加:

    if ($http_user_agent = "") {
        return 403;
    }

    这样可以拒绝没有客户端标识的请求。

    不过需要注意:

    部分监控程序、内部接口也可能没有User-Agent。

    实际应用中,需要根据业务情况调整。

    四、使用map方式管理User-Agent规则

    如果需要管理大量规则,不建议在配置文件中写大量if。

    可以使用Nginx的map模块。

    例如:

    map $http_user_agent $bad_bot {
        default 0;
        ~*python-requests 1;
        ~*curl 1;
        ~*wget 1;
        ~*scanner 1;
    }

    然后:

    server {
    
        if ($bad_bot = 1) {
            return 403;
        }
    
    }

    这种方式结构更加清晰,后期维护更加方便。

    例如:

    网站运营时间较长后,可能积累大量异常User-Agent。

    通过map集中管理:

    新增规则更方便;

    排查问题更容易;

    减少配置混乱。

    五、限制User-Agent不能只依赖名称

    很多管理员在防护时容易进入一个误区:

    看到某个User-Agent异常,就直接永久封禁。

    实际上,这种方式存在局限。

    原因是:

    攻击者可以伪造User-Agent。

    例如:

    攻击程序可以伪装成:

    Mozilla/5.0

    Chrome浏览器。

    如果只判断User-Agent,就可能无法识别真实攻击。

    因此,更合理的方法是结合:

    访问频率;

    请求路径;

    访问时间;

    IP行为。

    例如:

    一个User-Agent显示Chrome。

    但是:

    一分钟访问几千个页面;

    大量访问不存在文件;

    集中请求后台接口。

    这种行为依然可能属于攻击。

    六、结合Nginx日志发现异常User-Agent

    限制User-Agent之前,建议先分析日志。

    Nginx访问日志通常包含:

    访问IP;

    访问时间;

    请求地址;

    状态码;

    User-Agent。

    可以通过日志统计异常来源。

    例如:

    awk -F '"' '{print $6}' access.log | sort | uniq -c | sort -nr | head

    查看访问量较高的User-Agent。

    如果发现:

    某个User-Agent出现几十万次;

    访问集中在短时间;

    请求页面异常。

    就需要进一步处理。

    例如:

    某论坛网站发现访问速度越来越慢。

    查看日志后发现:

    某未知Bot每天凌晨大量访问所有文章页面。

    由于每次请求都会触发PHP程序查询数据库,导致PHP-FPM负载升高。

    最终通过:

    限制该User-Agent;

    增加页面缓存;

    调整访问频率。

    解决服务器压力问题。

    七、结合限流提高防护效果

    单纯封禁User-Agent并不能解决所有问题。

    更完善的方式是:

    User-Agent过滤;

    访问频率限制;

    IP限制。

    共同使用。

    例如:

    Nginx可以通过:

    limit_req

    限制单位时间请求数量。

    对于正常用户:

    保持正常访问速度。

    对于异常机器人:

    降低请求频率。

    这样可以减少误封,同时保护服务器资源。

    例如:

    一个资讯网站每天都有搜索引擎爬虫访问。

    如果全部禁止,会影响网站收录。

    通过区分:

    正常搜索引擎;

    异常爬虫;

    攻击工具。

    再采用不同策略,效果更好。

    八、使用WAF进一步识别恶意请求

    对于业务量较大的网站,仅依靠Nginx规则可能不足。

    可以结合:

    Web应用防火墙;

    安全防护平台;

    日志分析系统。

    WAF通常会结合:

    User-Agent;

    请求行为;

    IP信誉;

    攻击特征。

    进行综合判断。部分Nginx安全方案也支持基于User-Agent和请求特征识别机器人行为。

    例如:

    同一个IP:

    第一次访问正常页面;

    随后大量扫描后台;

    提交异常参数。

    这种行为单纯看User-Agent很难发现,但结合行为分析可以更准确识别。

    九、限制恶意User-Agent后的注意事项

    配置规则后,需要测试网站正常访问。

    重点检查:

    搜索引擎是否正常抓取;

    接口调用是否正常;

    第三方服务是否受影响。

    例如:

    支付接口;

    监控系统;

    内部API。

    如果误封,需要调整规则。

    同时建议:

    定期查看日志;

    更新黑名单;

    清理无效规则。

    因为攻击方式会不断变化,长期维护比一次配置更加重要。

    总结

    Nginx限制恶意User-Agent是网站安全防护中的一种有效方法,可以帮助管理员减少自动化攻击、恶意扫描和异常爬虫带来的资源消耗。

    实际操作过程中,需要:

    分析访问日志;

    识别异常User-Agent;

    配置Nginx过滤规则;

    结合访问频率限制;

    配合WAF进行综合防护。

    但需要注意,User-Agent只是判断访问行为的一个参考因素,不能作为唯一安全依据。真正有效的网站防护,需要结合服务器性能、业务特点、访问规律以及安全策略进行整体优化。

    做好Nginx访问控制,可以减少无效请求进入后端程序,提高服务器稳定性,让网站在面对复杂访问环境时保持良好的运行状态。

    纵横云服务器租赁,欢迎随时联系,客服联系方式:QQ3494196421,手机微信19906048601。



    最新推荐


    微信公众帐号
    关注我们的微信