防范nginx被用作恶意请求中转站,核心是切断非法代理链路、限制非授权转发行为、杜绝开放式反向代理配置;须禁用泛用代理规则、校验host头、限制代理路径与来源、禁用危险http方法,并加强日志监控与限流阻断。

防范 Nginx 服务器被用作恶意请求中转站,核心是**切断非法代理链路、限制非授权转发行为、杜绝开放式反向代理配置**。Nginx 本身不是代理服务提供商,一旦配置不当(如无条件 proxy_pass + 任意 host 头),就极易沦为攻击者跳板——用于隐藏真实 IP、发起 CC 攻击、扫描内网或绕过目标网站访问控制。
关闭开放代理能力
Nginx 默认不开启代理功能,但若在 location 块中直接使用 proxy_pass 且未校验请求头或来源,就可能被滥用。必须确保:
- 不配置泛用型代理规则(如
location / { proxy_pass http://$host; })——这是最危险的写法,等于把 Nginx 变成公共 HTTP 代理 - 所有
proxy_pass指令必须指向明确、可信的后端地址(如http://127.0.0.1:8080或固定域名),禁止拼接用户输入的变量($host、$request_uri、$args等) - 禁用
proxy_redirect default或模糊重定向,防止响应头被篡改为指向第三方站点
严格校验 Host 与请求头
攻击者常通过伪造 Host 头触发 Nginx 转发到任意目标。需主动拦截非常规 Host 请求:
- 在 server 块中显式定义合法 Host:
server_name example.com www.example.com;,并设置默认 server 拒绝未知 Host - 添加 Host 头白名单检查(配合 map 模块):
map $host $invalid_host {
default 1;
example.com 0;
www.example.com 0;
}
server {
if ($invalid_host) { return 444; }
} - 清除或覆盖可能被利用的请求头:
proxy_set_header Host $host;改为proxy_set_header Host backend.example.com;,避免透传原始 Host
限制代理来源与路径权限
即使业务需要代理,也应最小化暴露面:
- 只对特定路径启用代理(如
location /api/),而非location / - 结合 IP 白名单控制谁可发起代理请求:
location /api/ {
allow 192.168.10.0/24;
allow 2001:db8::/32;
deny all;
proxy_pass http://backend;
} - 禁用非必要 HTTP 方法(如 CONNECT、TRACE),防止隧道化滥用:
if ($request_method = CONNECT) { return 405; }
if ($request_method = TRACE) { return 405; }
监控与主动阻断异常代理行为
仅靠静态配置不够,需建立反馈闭环:
- 开启详细 access_log,记录
$host、$request、$upstream_addr,定期筛查非常规 Host 或高频不同后端目标的请求 - 对疑似中转流量(如 User-Agent 为 curl/wget、无 Referer、大量 301/302 跳转)设置独立限流区:
limit_req_zone $binary_remote_addr zone=proxy_scan:10m rate=2r/s;
并在日志中匹配后触发limit_req - 发现恶意代理行为时,立即加入 IP 封禁列表(可用
deny或配合 fail2ban 自动处理)











