帮助中心 > 关于云服务器 > 香港云服务器限制恶意请求的操作流程
香港云服务器限制恶意请求的操作流程
时间 : 2026-10-08 14:39:17
编辑 : Jtti

  香港云服务器面对恶意请求,单靠一种手段往往防不住。攻击者可能用大量分散的IP发起低频请求来绕过频率限制,也可能用少量IP发起高频CC攻击来打满连接数。真正有效的做法是把三层机制串起来:Nginx做应用层的第一道闸,安全组/防火墙做网络层的硬拦截,Fail2ban做日志驱动的自动封禁闭环。 三者各管一段,互相补位。

  第一层:Nginx 速率限制

  Nginx 自带的 limit_req 和 limit_conn 模块,是应用层最直接的限流手段。

  请求频率限制 解决的是“单个IP单位时间内请求太多”的问题。核心配置分两步,先在 http 块里定义限流区域,再在 location 里应用:

http {
    # 按客户端IP限流,共享内存10MB,速率设为每秒5个请求
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=5r/s;

    server {
        location / {
            # burst=10:允许瞬间突发10个请求排队
            # nodelay:突发请求立即处理,不额外延迟
            limit_req zone=req_zone burst=10 nodelay;
        }
    }
}

  burst 参数很关键。如果只设 rate=5r/s 而不设 burst,用户刷新一次页面触发了6个请求,第6个就会被直接拒绝,体验很差。加上 burst=10 之后,超出的请求会进入队列短暂等待,而不是立刻报错。

  并发连接数限制 解决的是“单个IP同时占用太多连接”的问题,对下载站、图片站这类容易被多线程下载工具盯上的场景特别有用:

http {
    limit_conn_zone $binary_remote_addr zone=conn_zone:10m;

    server {
        location /download/ {
            # 每个IP最多同时保持5个连接
            limit_conn conn_zone 5;
        }
    }
}

  一个容易被忽略的坑:如果你的香港服务器前面挂了CDN或者反向代理,$binary_remote_addr 拿到的是CDN节点的IP,不是真实用户IP。这时候限流会变成“按CDN节点限流”,效果完全走偏。正确做法是用 $http_x_forwarded_for 或者配置 real_ip 模块来还原真实客户端IP。

  第二层:安全组与防火墙黑名单

  Nginx 限流是“软限制”,超过阈值返回503。但对于已知的恶意IP,更彻底的做法是在网络层直接拒绝,不给它到达Nginx的机会。

  云平台安全组是第一道硬墙。登录香港云服务商的控制台,在安全组入方向规则里添加“拒绝”策略,源地址填要封禁的IP或IP段。安全组变更示例里特别强调了一点:网段范围不要填太大。如果只想封两个攻击IP,来源填 172.21.10.0/24 会把整个子网都误伤,只填具体IP更安全。

  系统防火墙是第二道。如果服务器上跑着 firewalld 或 ufw,可以用富规则直接拒绝特定来源:

# firewalld 封禁单个IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="123.45.67.89" reject'
sudo firewall-cmd --reload

  安全组和系统防火墙的关系是“两层独立的过滤”,两边都要配。只改安全组不改系统防火墙,或者反过来,都可能留下缺口。

  第三层:Fail2ban 日志联动自动封禁

  手动加黑名单适合处理已知的、固定的攻击源。但香港服务器每天被扫描和试探的次数太多,靠人工一条条加IP不现实。Fail2ban 的价值就是把“看日志”和“封IP”这两个动作自动化。

  Fail2ban 的工作原理不复杂:它持续监控日志文件,用正则表达式匹配“可疑行为”,当同一个IP在设定时间窗口内触发次数超过阈值,就自动调用防火墙把它封掉。

  针对 SSH 暴力破解的配置是最基础的,/etc/fail2ban/jail.local 里加:

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 86400

  含义是:10分钟内登录失败5次,封禁24小时。bantime 设长一点很重要,短封禁(比如10分钟)对自动化攻击脚本几乎没有威慑力,它等一会儿就继续试了。

  针对 Nginx 恶意请求的联动是香港云服务器更需要的。Fail2ban 可以监控 Nginx 的 access.log 或 error.log,识别频繁的401、403、404,或者特定URL的异常访问模式:

[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600

  如果 Nginx 因为 limit_req 触发了503,或者因为 limit_conn 返回了限制状态,这些记录会出现在 error.log 里。Fail2ban 捕捉到之后,直接把来源IP封禁一小时。这样就形成了一个闭环:Nginx 做第一层过滤,Fail2ban 把反复触发的IP拉进黑名单,后续请求连Nginx都到不了。

  白名单必须配。ignoreip 里把公司办公IP、监控系统IP、你自己的常用IP都加进去,否则调试或者正常办公的时候可能把自己封了。

  一个实用的排查动作

  如果怀疑服务器正在被恶意请求,先在 Nginx access.log 里按IP统计一下:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

  这个命令列出请求量最高的前20个IP。如果某个IP的请求数远超正常用户,把它加入安全组黑名单,或者在 Fail2ban 里手动封禁:

fail2ban-client set nginx-limit-req banip 123.45.67.89

  香港云服务器的恶意请求防护,Nginx限流管“频率”,安全组管“已知黑名单”,Fail2ban管“动态封禁”。三者配合,大部分CC攻击和爬虫刷量都能被压下去。但要注意,如果攻击流量本身已经超过了服务器带宽(比如几百Gbps的DDoS),这些手段都没用,需要走云清洗或者高防IP。

相关内容

日本云服务器适合用来做什么?跨境电商 or 游戏业务? Jtti VPS 计费模式、续费、暂停扣费与删除机器完整指南 高性价比日本VPS怎么选?2026年VPS购买教程与Jtti机型实测 美国服务器线路大盘点2026:CN2 GIA、BGP、9929究竟怎么选?附Jtti产品实测 常用NTP服务器有哪些?2026年选择指南与配置建议 证书吊销列表访问异常,将引发SSL证书校验失败——原因分析与排查指南 建站服务器挑选:从配置陷阱到服务商选择的完整原则指南 IP被墙服务商到底能支持换几次?要不要钱?完整影响分析与规避指南 低至每月$3.90!超值美国VPS推荐与Jtti洛杉矶CN2 GIA线路VPS评测 VPS服务器IP泄露检测途径:从DNS到WebRTC的完整排查指南
返回

24/7/365 全天候支持我们时刻恭候您

帮助中心