Nginx Proxy Manager配置Web WAF应用防火墙

 更新时间:2025年02月12日 09:41:21   作者:码手Lion  
Nginx Proxy Manager是一款功能强大的开源软件,配置Web应用防火墙,可以防止常见的web攻击,本文就来介绍一下Nginx Proxy Manager配置Web WAF应用防火墙,感兴趣的可以了解一下

Nginx Proxy Manager (NPM) 是一款功能强大的开源软件,它提供了一个用户友好的界面,让用户可以轻松地管理 Nginx 反向代理配置。通过 NPM,你可以快速搭建高性能、安全的反向代理服务器,实现负载均衡、SSL 证书自动申请、自定义配置,配置 Web 应用防火墙,防止常见的 Web 攻击等功能。

一、安装

首先,确保已经安装了 Docker 和 Docker Compose,然后通过以下步骤来启动 nginx-proxy-manager 服务。

1、创建文件

# 创建所需的文件夹
mkdir -p /home/docker/npm
# 进入安装目录
cd /home/docker/npm
# 创建 docker-compose.yml 文件
vim docker-compose.yml

在文件中,添加以下配置:

# 默认登陆名和密码
# Email:    admin@example.com
# Password: changeme
services:
  app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - /home/docker/npm/data:/data
      - /home/docker/npm/letsencrypt:/etc/letsencrypt

配置完成后,保存并退出编辑器(按下 i 进入编辑模式,按下 Esc 退出编辑模式,输入 :wq 保存并退出)。

2、启动服务

你可以通过以下命令启动服务:

docker-compose up -d

这样,nginx-proxy-manager 就会在后台启动,默认通过 admin@example.com 和 changeme 作为登录凭证。

3、中文镜像

  • 英文镜像jc21/nginx-proxy-manager
  • 中文镜像chishin/nginx-proxy-manager-zh

你可以根据需求切换镜像,中文镜像为中文界面,适合中文用户。

二、配置

Nginx Proxy Manager 允许你通过挂载自定义配置文件来定制 Nginx 配置。以下是一些常见的自定义配置文件路径和使用方法:

1、配置路径

在 Nginx Proxy Manager 中,你可以在 /data/nginx/custom 文件夹中添加自定义配置文件,按需引入到主配置文件中:

/data/nginx/custom/root_top.conf          # 包含在 nginx.conf 的顶部
/data/nginx/custom/root.conf              # 包含在 nginx.conf 的最末尾
/data/nginx/custom/http_top.conf          # 包含在 http 块的顶部
/data/nginx/custom/http.conf              # 包含在 http 块的末尾
/data/nginx/custom/events.conf            # 包含在 events 块的末尾
/data/nginx/custom/stream.conf            # 包含在 stream 块的末尾
/data/nginx/custom/server_proxy.conf      # 包含在代理服务器块的末尾
/data/nginx/custom/server_redirect.conf   # 包含在重定向服务器块的末尾
/data/nginx/custom/server_stream.conf     # 包含在流服务器块的末尾
/data/nginx/custom/server_stream_tcp.conf # 包含在 TCP 流服务器块的末尾
/data/nginx/custom/server_stream_udp.conf # 包含在 UDP 流服务器块的末尾
  • 配置文件示例
# Nginx 主配置文件

# ==========================
# 1. 全局配置:root_top.conf
# ==========================
# 包含全局的基础配置(如模块加载、日志路径等)
include /data/nginx/custom/root_top.conf;

# ==========================
# 2. 事件配置:events.conf
# ==========================
events {
    include /data/nginx/custom/events.conf;
}

# ==========================
# 3. 主 HTTP 配置块:http_top.conf 和 http.conf
# ==========================
http {
    include /data/nginx/custom/http_top.conf;

    server_tokens off;
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    # 服务器配置
    server {
        listen 80;
        server_name proxy.example.com;
        include /data/nginx/custom/server_proxy.conf;
    }

    server {
        listen 80;
        server_name redirect.example.com;
        include /data/nginx/custom/server_redirect.conf;
        return 301 https://$host$request_uri;
    }

    include /data/nginx/custom/http.conf;
}

# ==========================
# 5. 主流配置:stream.conf
# ==========================
stream {
    include /data/nginx/custom/stream.conf;

    server {
        listen 3306;
        proxy_pass backend_tcp_servers;
        include /data/nginx/custom/server_stream.conf;
    }

    server {
        listen 3307;
        proxy_pass backend_tcp_servers;
        include /data/nginx/custom/server_stream_tcp.conf;
    }

    server {
        listen 53 udp;
        proxy_pass backend_udp_servers;
        include /data/nginx/custom/server_stream_udp.conf;
    }
}

# ==========================
# 9. 全局配置末尾:root.conf
# ==========================
include /data/nginx/custom/root.conf;

2、图床配置防盗链

为了防止未经授权的外部站点直接引用你的图像资源,可以在 Nginx 配置中启用防盗链。以下是一个简单的图床防盗链配置示例:

location ~* \.(gif|jpg|png|bmp)$ {
    valid_referers none blocked mslion.top *.mslion.top ~\.google\. ~\.bing\. ~\.baidu\.;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass https://blog.mslion.top;
}
  • 匹配规则:此配置会匹配所有 .gif.jpg.png 和 .bmp 文件。
  • 合法引用者:指定哪些来源是合法的,非法来源会返回 403 Forbidden
  • 代理转发:符合规则的请求将被转发到 https://blog.mslion.top 进行处理。

3、防止恶意查询参数

为了增强安全性,以下是防止恶意查询参数的配置示例:

  • http_top.conf 文件中添加:
# 定义恶意查询模式
map $query_string $blocked {
	default 0;
	# XSS 防御
    "~*(alert\(|<script>|</script>|on\w+=|javascript:|<img\s+src=|<svg\s+οnlοad=)" 1;
    # SQL 注入防御
    "~*(--|or\s1=1|union\sselect|select\s.*from|drop\s+table|insert\s+into|update\s+set|delete\s+from|;--|#|0x|char\(|unhex\()" 1;
    # 文件包含攻击防御
    "~*(/etc/passwd|/proc/self/environ|php://input|php://filter|file\://|ftp://|http://)" 1;
    # 命令注入防御
    "~*(\|&|\&\||;|`|exec\(|system\(|passthru\(|shell_exec\(|popen\()" 1;
    # Webshell 特征防御
    "~*(base64_encode\(|eval\(|gzinflate\(|gzuncompress\(|assert\(|create_function\(|function_exists\()" 1;
    # 禁止恶意 User-Agent 或 Referer
    "~*(bot|spider|crawl|wget|curl|nmap|nikto|sqlmap|libwww|httrack)" 1;
    # 命令执行关键字防御
    "~*(rm\s-rf|chmod\s777|chown\s|chgrp\s)" 1;
}
  • server_proxy.conf 文件中添加:
if ($blocked) {
    return 405;
}

4、限制区域

为了限制特定国家/地区的访问,你可以使用 GeoIP2 模块进行地理位置限制。以下是配置示例:

  • root_top.conf 文件中启用 GeoIP2 模块:
load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so;
load_module /usr/lib/nginx/modules/ngx_stream_geoip2_module.so;
  • http_top.conf 文件中加载 GeoLite2 数据库(数据库得自已下载,并上传到对应的目录):
geoip2 /data/nginx/custom/GeoLite2-Country.mmdb {
    $geoip2_data_country_code country iso_code;
    $geoip2_data_country_name country names en;
}
  • server_proxy.conf 文件中根据 IP 限制访问(例如仅允许中国 IP):
if ($geoip2_data_country_code != "CN") {
    return 403;
}
  • 也可在 Proxy Host 面板的 Advanced 配置中,添加类似的限制:
if ($geoip2_data_country_code != "CN") {
    return 403;
}

测试输出

为了确保 GeoIP2 模块和其他防护措施正常工作,可以通过配置一个测试 URL 来验证是否按预期限制了访问。以下是输出测试的示例配置:

  • root_top.conf:启用 GeoIP2 模块(已在前面配置):
load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so;
load_module /usr/lib/nginx/modules/ngx_stream_geoip2_module.so;
  • http_top.conf:配置日志格式并加载 GeoLite2 数据库:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$geoip2_data_country_code" "$geoip2_data_country_name"';

geoip2 /data/nginx/custom/GeoLite2-Country.mmdb {
    $geoip2_data_country_code country iso_code;
    $geoip2_data_country_name country names en;
}
  • server_proxy.conf:添加一个 /show-geoip 路由,用于输出地理位置信息,仅允许来自中国的请求访问:
location /show-geoip {
    # 仅允许中国的 IP 地址访问
    if ($geoip2_data_country_code != "CN") {
        return 403;  # 如果不是中国 IP,返回 403 禁止访问
    }

    default_type text/plain;
    echo "Country Code: $geoip2_data_country_code";
    echo "Country Name: $geoip2_data_country_name";
}
  • 通过访问 http://your-server-ip/show-geoip,你应该能够看到类似如下的输出(如果你的请求来自中国):
Country Code: CN
Country Name: China

如果请求来自其他国家,Nginx 会返回 403 Forbidden 错误,确保只有符合地理位置要求的用户能够访问该页面。

三、其它

除了上面的 GeoIP2 地理位置限制和恶意查询防护,Nginx 还可以通过其他措施来增强安全性。以下是一些额外的防护和优化建议:

1、禁用不必要的 HTTP 方法

server {
    listen 80;
    server_name example.com;

    if ($request_method !~ ^(GET|POST|HEAD|OPTIONS)$) {
        return 405;
    }

    # 其他配置...
}

2、启用 HTTP 安全头

配置一些 HTTP 安全头来增强网站的安全性,防止 XSS、Clickjacking 等攻击:

server {
    listen 443 ssl;
    server_name example.com;

    # 防止 Clickjacking
    add_header X-Frame-Options "SAMEORIGIN" always;

    # 防止 XSS 攻击
    add_header X-XSS-Protection "1; mode=block" always;

    # 防止 MIME 类型嗅探
    add_header X-Content-Type-Options "nosniff" always;

    # 禁止缓存敏感内容
    add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;

    # 启用严格传输安全 (HSTS)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # 其他配置...
}

3、限制请求速率(Rate Limiting)

为了防止暴 力破 解和 DDoS 攻击,可以配置请求速率限制:

http {
    # 定义一个限制规则
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;

    server {
        listen 80;
        server_name example.com;

        # 启用速率限制
        limit_req zone=one burst=10 nodelay;

        # 其他配置...
    }
}

这将限制每个 IP 地址每分钟最多能发起 30 次请求,超过此限制的请求将被拒绝。

4、启用 SSL/TLS 加密

确保你的 Nginx 配置启用了 SSL/TLS 加密,以确保所有流量是加密的,防止中间人攻击(MITM)。以下是启用 SSL 的基础配置:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    # 强制 HTTPS 重定向
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }

    # 其他配置...
}

四、总结

通过以上的配置和步骤,你可以有效地配置和优化你的 nginx-proxy-manager,增强系统的安全性和性能。关键步骤包括:

  • GeoIP2 限制:通过加载 GeoIP2 数据库来限制访问来源,仅允许来自特定国家的请求访问。
  • 恶意查询防护:使用 Nginx 的 map 和 if 指令,防止恶意的查询参数(如 XSS、SQL 注入等)。
  • 防盗链:配置图床防盗链,确保只有合法来源的请求能够访问你的静态资源。
  • SSL/TLS 加密:启用 HTTPS 加密流量,确保数据安全。
  • HTTP 安全头:配置 HTTP 安全头,防止常见的 Web 攻击。
  • 请求速率限制:防止暴 力破 解和 DDoS 攻击。

通过这些优化措施,你能够提升你的反向代理服务器的安全性,保护你的网络资产免受恶意攻击,同时提升访问性能。

到此这篇关于Nginx Proxy Manager配置Web WAF应用防火墙的文章就介绍到这了,更多相关Nginx Proxy Manager配置防火墙内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 服务器的负载均衡nginx+tomcat实现动静分离

    服务器的负载均衡nginx+tomcat实现动静分离

    这篇文章主要为大家介绍了服务器的负载均衡nginx+tomcat实现动静分离的案例实施步骤以及环境详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • CentOS 4.0安装配置Nginx的方法

    CentOS 4.0安装配置Nginx的方法

    这篇文章主要介绍了CentOS 4.0安装配置Nginx的方法,需要的朋友可以参考下
    2014-11-11
  • Nginx 日志格式的实现

    Nginx 日志格式的实现

    本文主要介绍了Nginx 日志格式的实现,包括访问日志、错误日志和配置方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • nginx 与后台端口冲突的解决

    nginx 与后台端口冲突的解决

    这篇文章主要介绍了nginx 与后台端口冲突的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 关于nginx没有跳转到upstream地址的解决

    关于nginx没有跳转到upstream地址的解决

    这篇文章主要介绍了关于nginx没有跳转到upstream地址的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 阿里云部署Ubuntu 1.4 Flask + WSGI + Nginx 详解

    阿里云部署Ubuntu 1.4 Flask + WSGI + Nginx 详解

    本文解决的是 Flask 最后一公里的问题:Linux 部署,需要的朋友可以参考下
    2017-12-12
  • Linux下给nginx安装waf模块

    Linux下给nginx安装waf模块

    ngx_lua_waf是一个基于ngx_lua的web应用防火墙。代码很简单,开发初衷主要是使用简单,高性能和轻量级。下面我们来看看如何在为nginx安装waf模块
    2016-08-08
  • HAProxy和Nginx搭建负载均衡器的实现

    HAProxy和Nginx搭建负载均衡器的实现

    负载均衡器是一个常用于分布式计算和网络应用中的系统组件,主要用于将客户端的请求分发到多个后端服务器上,以实现高可用性、高性能和可扩展性,本文主要介绍了HAProxy和Nginx搭建负载均衡器的实现,感兴趣的可以了解一下,感兴趣的可以了解一下
    2023-11-11
  • Nginx如何配置Http、Https、WS、WSS的方法步骤

    Nginx如何配置Http、Https、WS、WSS的方法步骤

    这篇文章主要介绍了Nginx如何配置Http、Https、WS、WSS的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 在Nginx中配置image filter模块来实现动态生成缩略图

    在Nginx中配置image filter模块来实现动态生成缩略图

    这篇文章主要介绍了在Nginx中配置image filter模块来实现动态生成缩略图的方法,包括缩略图尺寸的设置等方面的介绍,需要的朋友可以参考下
    2015-12-12

最新评论