Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Web服务器-Nginx的访问控制(二)

Web服务器-Nginx的访问控制(二)

作者头像
运维小路
发布于 2025-04-10 08:51:42
发布于 2025-04-10 08:51:42
13100
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。

我们上个小节介绍了通过设置账号密码来保护的我们的后端服务,但是Nginx作为作为一个Web服务器,其主要功能还是对外提供服务,所以我们Nginx服务只要暴露到公网,就会被人扫描和攻击。这个和前面说的SSH实际上一样的情况。但是SSH可以通过修改端口,使用密钥,禁止root登录等方式来保护我们的服务器。甚至可以只开放我们自己IP,但是Nginx作为Web服务器是在如何对外提供服务的同时保证我们不受恶意攻击和扫描呢?

基于 IP 的访问控制

使用 ngx_http_access_module 模块,通过 allowdeny 指令控制客户端 IP 访问。

白名单模式,允许特定 IP,拒绝其他所有。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    listen 80;
    server_name example.com;

    location /admin {
        # 允许指定 IP 或网段
        allow 192.168.1.100;
        allow 10.0.0.0/24;
        deny all;  # 拒绝其他所有 IP

        # 反向代理或静态文件配置
        proxy_pass http://backend;
    }
}
黑名单模式,拒绝特定IP,允许钞所有。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location /api {
    deny 203.0.113.5;   # 拒绝单个 IP
    deny 45.33.0.0/16;  # 拒绝网段
    allow all;           # 允许其他 IP

    proxy_pass http://api_backend;
}

虽然可以通过以上两个方式实现控制,但是这个是需要手工配置,在实际的环境中是没办法保护自己的Web服务器的,如果要实现则需要把这个操作实现自动化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
# 配置参数
LOG_PATH="/var/log/nginx/access.log"   # Nginx 访问日志路径
DENY_CONF="/etc/nginx/conf.d/deny.conf" # 黑名单配置文件
WHITE_LIST=("192.168.1.100" "8.8.8.8")  # 白名单 IP 列表
THRESHOLD=100                          # 请求阈值(1分钟内请求超过该值封禁)
LOCK_FILE="/tmp/deny_ip.lock"          # 防止重复执行锁文件
# 异常检测函数:提取1分钟内请求超过阈值的 IP
find_abnormal_ips() {
    local start_time=$(date -d "1 minute ago" +"%d/%b/%Y:%H:%M:%S")
    awk -v start="$start_time" -v threshold="$THRESHOLD" '
    $4 > "["start {
        ip_count[$1]++
    }
    END {
        for (ip in ip_count) {
            if (ip_count[ip] > threshold) {
                print ip
            }
        }
    }' "$LOG_PATH"
}
# 主流程
main() {
    # 避免重复执行
    if [ -f "$LOCK_FILE" ]; then
        exit 0
    fi
    touch "$LOCK_FILE"
    # 获取异常 IP 列表(过滤白名单)
    mapfile -t BAD_IPS < <(find_abnormal_ips | grep -vF "${WHITE_LIST[*]}")
    # 更新黑名单配置
    for ip in "${BAD_IPS[@]}"; do
        if ! grep -q "deny ${ip};" "$DENY_CONF"; then
            echo "deny ${ip};" >> "$DENY_CONF"
            echo "$(date) - Deny IP: $ip" >> /var/log/deny_ip.log
        fi
    done
    # 重载 Nginx 配置(如果黑名单有更新)
    if [ ${#BAD_IPS[@]} -gt 0 ]; then
        nginx -t && nginx -s reload
    fi
    rm -f "$LOCK_FILE"
}
main

当然这个阈值是很不好控制的,真实的环境开始的时候是一般不会启用该控制功能,而是随着暴露出去服务被攻击以后才会逐步开始配置,然后根据实际情况调整阈值。

而且我们还可以衍生高级的功能,比如封禁的ip自动解封,基于geoip模块进行封禁,防止sql注入等封禁。然后还可以进行封禁告警等,这些都是要根据实际情况来实现的。

下图就是模拟测试,然后执行脚本,测试请求的IP被拒绝。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#日志也从200变成403
127.0.0.1 - - [08/Apr/2025:00:12:41 +0800] "GET / HTTP/1.1" 200 703 "-" "curl/7.29.0" "-"
127.0.0.1 - - [08/Apr/2025:00:12:42 +0800] "GET / HTTP/1.1" 200 703 "-" "curl/7.29.0" "-"
127.0.0.1 - - [08/Apr/2025:00:12:43 +0800] "GET / HTTP/1.1" 403 153 "-" "curl/7.29.0" "-"
127.0.0.1 - - [08/Apr/2025:00:12:44 +0800] "GET / HTTP/1.1" 403 153 "-" "curl/7.29.0" "-"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx防盗链、访问控制、PHP解析、服务器代理
说明: “location ~* ^.+”在此0“ * ”的作用是后面匹配的内容不区分大小写。
阿dai学长
2019/04/03
9890
12.14 Nginx访问控制
Nginx访问控制目录概要 需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下: location /admin/ { allow 192.168.74.129; allow 127.0.0.1; deny all; } mkdir /data/wwwroot/test.com/admin/ echo “test,test”>/data/wwwroot/test.com/admin/1.html -t && -s reload curl -x127.0.0.1:80
运维小白
2018/02/06
3K0
Web服务器-Nginx反向代理(一)
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/04/05
2400
Web服务器-Nginx反向代理(一)
Web服务器-Nginx负载均衡
作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/04/07
3100
Web服务器-Nginx负载均衡
linux使用DenyHosts阻止SSH服务器攻击(暴力破解)
DenyHosts 是一个开源且免费的基于日志的入侵防御安全程序. 它旨在通过阻止发起方来监视和分析 SSH 服务器日志中的无效登录尝试、基于字典的攻击和暴力攻击。IP 通过添加条目到地址 /etc/hosts.deny 服务器上的文件,并防止 IP 地址进行任何进一步的此类登录尝试。 如何在Linux中安装DenyHosts 默认情况下 DenyHosts Linux 系统中不包含该工具,使用以下yum 命令安装软件包。 # yum install -y denyhosts denyhosts配置文件说
入门笔记
2022/06/02
8140
访问控制
这个功能的实现依靠nginx的access模块,这个模块在我们编译nginx时会默认编译进nginx的二进制文件中。
用户8639654
2021/08/30
1.2K0
linux学习第四十六篇:Nginx防盗链,Nginx访问控制,Nginx解析php相关配置,Nginx代理
Nginx防盗链 vim /usr/local/nginx/conf/vhost/test.com.conf 配置如下,可以和上面的配置结合起来: location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ { expires 7d; valid_referers none blocked server_names *.test.com ; //定义白名单 if ($invalid_re
用户1215343
2018/02/05
1.7K0
linux学习第四十六篇:Nginx防盗链,Nginx访问控制,Nginx解析php相关配置,Nginx代理
Nginx + Lua + Redis:打造智能 IP 黑名单系统
在Web服务中,为了防止恶意用户或爬虫对服务器造成不必要的负载和潜在的安全威胁,我们可以通过设置动态IP黑名单来拒绝来自这些IP的请求。本文将详细介绍如何使用Nginx配合Lua脚本及Redis数据库实现这一功能,并允许为每个被封禁的IP设定失效时间。
凯哥Java
2024/10/26
2290
Nginx + Lua + Redis:打造智能 IP 黑名单系统
服务器配置黑名单白名单的方法
服务器配置黑名单(Blacklist)和白名单(Whitelist)是一种常见的访问控制策略,用于管理对服务器的访问权限。这两种列表分别代表了不同的安全策略:
用户11163528
2024/12/19
9110
Web服务器-Nginx请求的11个阶段
我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。
运维小路
2025/04/20
1450
Web服务器-Nginx请求的11个阶段
CentOS服务器安全防护实例
可以限制瞬间连接数过大的恶意IP(比如web应用防护,但不适用于LVS+Keepalived集群环境) 防护指令如下
用户1685462
2021/07/17
1K0
Nginx防盗链,Nginx访问控制,,Nginx解析php相关配置,Nginx代理
vim /usr/local/nginx/conf/vhost/test.com.conf
端碗吹水
2020/09/23
1.9K0
Nginx防盗链,Nginx访问控制,,Nginx解析php相关配置,Nginx代理
Nginx防盗链+Nginx访问控制+Nginx解析php相关配置+Nginx 代理
一、Nginx防盗链: 1.1 打开配置文件: /usr/local/nginx/conf/vhost/haha.com.conf 增加如下配置文件: location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ { expires 7d; valid_referers none blocked server_names *.haha.com ; if ($invalid_referer) {
老七Linux
2018/05/09
1.1K0
一文从原理到实践教你使用Nginx_lua实现WAF
过去企业通常会采用防火墙,作为安全保障的第一道防线;当时的防火墙只是在第三层(网络层)有效的阻断一些数据包;而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含较高的价值,成为主要的被攻击目标(第七层应用层)而传统防火墙在阻止利用应用程序漏洞进行的攻击方面,却没有办法;在此背景下,WAF(Web Application Firewall)应运而生。
公众号: 云原生生态圈
2022/02/16
2.9K0
Centos7安装openresty实现WAF防火墙功能
OpenResty® 是一个结合了 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
星哥玩云
2022/05/30
2.5K0
Centos7安装openresty实现WAF防火墙功能
Nginx防盗链,Nginx访问控制,Nginx解析php相关配置, Nginx代理
Nginx防盗链: vim /usr/local/nginx/conf/vhost/test.com.conf    = 默认虚拟主机配置防盗链 #防盗链核心配置 location ~* ^.+\.(
叶瑾
2018/06/14
7860
怎么防护才能避免WEB服务器被CC攻击呢?
CC攻击是什么?那怎么做防护才能避免WEB服务器被CC攻击呢?今天墨者安全给大家分享下对CC攻击的见解吧!
墨者安全筱娜
2019/04/26
3.5K0
怎么防护才能避免WEB服务器被CC攻击呢?
20步打造最安全的Nginx Web服务器
Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器。它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows。Nginx是少数能处理C10K问题的服务器之一。跟传统的服务器不同,Nginx不依赖线程来处理请求。相反,它使用了更多的可扩展的事件驱动(异步)架构。Nginx为一些高流量的网站提供动力,比如WordPress,人人网,腾讯,网易等。这篇文章主要是介绍如何提高运行在Linux或UNIX系统的Nginx Web服务器的安全性。 默认配置文件和Nginx端口
后端技术探索
2018/08/09
1.6K0
配置防盗链,访问控制Directory,访问控制FilesMatch
防盗链能限制不认识的referer的访问,能够禁止别人的服务器引用或转发我服务器上的内容,这样可以防止别人盗用我服务器上的资源,服务器的资源被盗用会导致网络带宽的使用量上升。
端碗吹水
2020/09/23
1.1K0
配置防盗链,访问控制Directory,访问控制FilesMatch
Web服务器-Nginx的访问控制(一)
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/04/10
1010
Web服务器-Nginx的访问控制(一)
推荐阅读
相关推荐
nginx防盗链、访问控制、PHP解析、服务器代理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验