常用 Nginx 安全规则

以下是一些常用的 Nginx 安全规则,可根据实际需求添加到配置文件中。


1. 敏感词请求拦截

  • 规则:当请求 URL 中包含敏感词时,跳转下载 10GB 文件。
  • 代码

    if ($request_uri ~* "(\.gz)|(")|(\.tar)|(admin)|(\.zip)|(\.sql)|(\.asp)|(\.rar)|(function)|($_GET)|(eval)|(\?php)|(config)|(\')|(\.bak)") {
        return 301 http://lg-dene.fdcservers.net/10GBtest.zip;
    }

2. 禁止下载特定文件类型

  • 规则:禁止下载 .zip.rar.sql 等文件。
  • 代码

    location ~ \.(zip|rar|sql|bak|gz|7z)$ {
        return 444;
    }

3. 特定关键词跳转

  • 规则:当 URL 中包含 test= 时,跳转到公安网。
  • 代码

    if ($request_uri ~* test=) {
        return 301 https://www.mps.gov.cn;
    }

4. 防止爬虫访问

  • 规则:拦截常见的恶意爬虫。
  • 代码

    if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) {
        return 444;
    }

5. 禁止特定目录执行脚本

  • 规则:禁止 uploadstempletsdata 等目录执行 PHP 脚本。
  • 代码

    location ~* ^/(uploads|templets|data)/.*.(php|php5)$ {
        return 444;
    }

6. 屏蔽非常见蜘蛛爬虫

  • 规则:屏蔽非常见的蜘蛛爬虫。
  • 代码

    if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) {
        return 444;
    }

7. 禁止爬虫返回 404

  • 规则:对特定爬虫返回 404 错误。
  • 代码

    if ($http_user_agent ~* "qihoobot|Censys|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|Scrapy|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$") {
        return 404;
    }

8. 限制域名访问

  • 规则:仅允许指定域名访问,其他域名返回 403。
  • 代码

    if ($host != 'XX.XX.XX') {
        return 403;
    }

9. 限制 IP 访问并添加密码验证

  • 规则:仅允许特定 IP 访问,并启用 HTTP 认证。
  • 代码

    root /opt/hostloc/www;
    allow xx.xx.xx.xx;
    allow 2xx.xx.x.xx;
    deny all;
    auth_basic "test";
    auth_basic_user_file htpasswd;

10. 禁止访问多个目录

  • 规则:禁止访问 crontemplates 目录。
  • 代码

    location ~ ^/(cron|templates)/ {
        deny all;
        break;
    }

11. 隐藏 Nginx 版本号

  • 规则:隐藏 Nginx 版本号,增强安全性。
  • 代码

    http {
        ...
        server_tokens off;
        ...
    }

12. 禁止非浏览器访问

  • 规则:禁止空 User-Agent 的请求。
  • 代码

    if ($http_user_agent ~ ^$) {
        return 412;
    }

提示:修改 Nginx 配置文件后,请使用 nginx -t 测试配置是否正确,然后重启 Nginx 服务使配置生效。

标签: nginx, 安全, 规则

添加新评论