nginx公网通用防护

Nginx 公网防护够用版

如果只是想先防住大部分常见恶意,请先做两件事:

  1. 限流
  2. 隐藏敏感路径和文件

一、隐藏敏感路径和文件

放在对应网站的 server {} 里:

location ~ /\. {
deny all;
access_log off;
log_not_found off;
}

location ~* \.(bak|old|sql|tar|gz|zip|swp)$ {
deny all;
}

什么意思:

  • 第一段:禁止访问隐藏文件,比如 .git.env
  • 第二段:禁止访问常见备份和压缩文件,比如 .bak.sql.zip

作用:

  • 防止别人扫你的敏感文件
  • 防止误把备份文件暴露到公网

二、限流

先放在 http {} 里:

limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

再放在登录或接口的 location {} 里:

location /login/ {
limit_req zone=req_limit_per_ip burst=10 nodelay;
proxy_pass http://backend;
}

什么意思:

  • limit_req_zone:定义一条按 IP 限流的规则
  • rate=5r/s:每个 IP 每秒最多 5 个请求
  • burst=10:允许短时间多出来 10 个请求
  • nodelay:在突发范围内直接处理,不排队

作用:

  • 防止别人一直刷登录
  • 防止接口被高频乱打
  • 能挡住一部分爆破和低级攻击

三、放哪里

  • limit_req_zone ...http {}
  • 两个 location ... deny all;server {}
  • limit_req ... 放要保护的 location {}

最简单理解:

  • 全局规则放 http {}
  • 某个网站规则放 server {}
  • 某个接口规则放 location {}

四、改完后要做

先检查:

nginx -t

再重载:

systemctl reload nginx

如果出问题,就看:

tail -f /var/log/nginx/error.log

五、一句话

够用版就记住这件事:拦掉敏感文件,再给登录和接口加限流。