最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Nginx中實(shí)現(xiàn)動(dòng)態(tài)封禁IP的三種主流方案

 更新時(shí)間:2025年11月11日 08:44:42   作者:程序員1970  
在運(yùn)維和安全實(shí)踐中,經(jīng)常需要根據(jù)實(shí)時(shí)情況封禁某些惡意 IP,但傳統(tǒng)的Nginx 配置是靜態(tài)的,一旦寫死deny 1.2.3.4;,就必須重啟或重載服務(wù)才能生效,那么,有沒有辦法實(shí)現(xiàn)動(dòng)態(tài)、實(shí)時(shí)、可編程的IP封禁呢,所以本文給大家介紹了在Nginx中實(shí)現(xiàn)動(dòng)態(tài)封禁IP的三種主流方案

引言

在運(yùn)維和安全實(shí)踐中,經(jīng)常需要根據(jù)實(shí)時(shí)情況封禁某些惡意 IP。但傳統(tǒng)的Nginx 配置是靜態(tài)的——一旦寫死 deny 1.2.3.4;,就必須重啟或重載服務(wù)才能生效。那么,有沒有辦法在不中斷服務(wù)的前提下,實(shí)現(xiàn)動(dòng)態(tài)、實(shí)時(shí)、可編程的 IP 封禁呢?

一、方案對(duì)比

方案是否需 reload實(shí)時(shí)性技術(shù)棧適用場(chǎng)景
geo + map + 文件是(nginx -s reload秒~分鐘級(jí)原生 Nginx手動(dòng)或定時(shí)腳本封禁
OpenResty + Lua毫秒級(jí)OpenResty(Nginx + Lua)自動(dòng)化、高并發(fā)、API 化管理
fail2ban + 日志分析否(系統(tǒng)級(jí)封禁)秒級(jí)fail2ban + iptables安全防護(hù)、日志驅(qū)動(dòng)型封禁

二、方案一:原生 Nginx + 外部文件(簡(jiǎn)單可靠)

適用于不需要極高實(shí)時(shí)性的場(chǎng)景,比如每天批量封禁一批掃描 IP。

1. 創(chuàng)建封禁 IP 列表文件

# /etc/nginx/conf.d/blockips.conf
192.168.1.100 1;
203.0.113.5    1;

格式為:IP 值;,值通常設(shè)為 1 表示“命中”。

2. 在 nginx.conf 中配置

http {
    # 從外部文件加載黑名單
    geo $block_ip {
        default 0;
        include /etc/nginx/conf.d/blockips.conf;
    }

    map $block_ip $deny_ip {
        1 "denied";
        0 "";
    }

    server {
        listen 80;

        if ($deny_ip = "denied") {
            return 403;
        }

        location / {
            # 正常業(yè)務(wù)
        }
    }
}

3. 動(dòng)態(tài)更新方式

  • 修改 blockips.conf
  • 執(zhí)行平滑重載:
nginx -s reload

? 優(yōu)點(diǎn):無需額外依賴,配置簡(jiǎn)單。
?? 缺點(diǎn):每次更新需 reload,不適合高頻操作。

三、方案二:OpenResty + Lua(推薦用于自動(dòng)化)

如果你需要通過 API 實(shí)時(shí)封禁 IP(例如 WAF、風(fēng)控系統(tǒng)調(diào)用),OpenResty 是最佳選擇。它基于 Nginx,嵌入 Lua 腳本引擎,支持共享內(nèi)存,無需 reload 即可生效。

1. 安裝 OpenResty

# Ubuntu 示例
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
echo "deb http://openresty.org/package/debian $(lsb_release -sc) openresty" | sudo tee /etc/apt/sources.list.d/openresty.list
sudo apt update && sudo apt install openresty

2. 配置 nginx.conf

http {
    lua_shared_dict ip_blacklist 10m;  # 共享內(nèi)存存儲(chǔ)黑名單

    server {
        listen 80;

        # 【核心】訪問前檢查 IP
        access_by_lua_block {
            local ip = ngx.var.remote_addr
            if ngx.shared.ip_blacklist:get(ip) then
                ngx.log(ngx.WARN, "Blocked IP: ", ip)
                ngx.exit(403)
            end
        }

        # 動(dòng)態(tài)封禁接口(建議加 IP 白名單保護(hù))
        location = /ban {
            content_by_lua_block {
                local args = ngx.req.get_uri_args()
                local ip = args.ip
                local seconds = tonumber(args.seconds) or 3600

                if not ip or not ip:match("^%d+%.%d+%.%d+%.%d+$") then
                    ngx.status = 400
                    ngx.say("Invalid or missing 'ip'")
                    return
                end

                ngx.shared.ip_blacklist:set(ip, true, seconds)
                ngx.say("Banned ", ip, " for ", seconds, "s")
            }
        }

        # 解封 & 查詢接口
        location / { echo "Hello! Your IP: $remote_addr"; }
    }
}

3. 使用示例

# 封禁 IP 5 分鐘
curl "http://your-server/ban?ip=1.2.3.4&seconds=300"

# 測(cè)試是否被封
curl http://your-server/  # 返回 403

? 優(yōu)點(diǎn):毫秒級(jí)生效、支持 TTL 自動(dòng)過期、可集成到自動(dòng)化系統(tǒng)。
?? 安全提示:務(wù)必限制 /ban 接口的訪問來源!

四、方案三:fail2ban + Nginx 日志(自動(dòng)防御)

適用于防御暴力 破解、高頻 404 掃描等行為。fail2ban 會(huì)監(jiān)控日志,自動(dòng)封禁異常 IP。

1. 確保 Nginx 記錄詳細(xì)日志

log_format main '$remote_addr - $remote_user [$time_local] "$request" $status ...';
access_log /var/log/nginx/access.log main;

2. 創(chuàng)建過濾器 /etc/fail2ban/filter.d/nginx-bad-request.conf

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*" 404 .*
ignoreregex =

3. 配置 jail(/etc/fail2ban/jail.local)

[nginx-bad-request]
enabled  = true
port     = http,https
filter   = nginx-bad-request
logpath  = /var/log/nginx/access.log
maxretry = 10      # 10 次失敗
findtime = 600     # 在 10 分鐘內(nèi)
bantime  = 3600    # 封 1 小時(shí)
action   = iptables-multiport[name=nginx, port="http,https"]

4. 啟動(dòng)并查看狀態(tài)

sudo systemctl start fail2ban
sudo fail2ban-client status nginx-bad-request

? 優(yōu)點(diǎn):全自動(dòng)、成熟穩(wěn)定、社區(qū)支持好。
?? 注意:默認(rèn)使用 iptables 封禁,影響整個(gè)服務(wù)器,非僅 Nginx。

五、如何選擇?

  • 只想偶爾手動(dòng)封幾個(gè) IP? → 用 方案一(原生 Nginx)。
  • 需要程序自動(dòng)封禁、支持 API 調(diào)用? → 用 方案二(OpenResty)。
  • 想自動(dòng)防御掃描、爆破? → 用 方案三(fail2ban)。

進(jìn)階技巧:可讓 fail2ban 調(diào)用 OpenResty 的 /ban 接口,實(shí)現(xiàn)“僅封 Nginx + 自動(dòng)過期”的完美組合。

以上就是在Nginx中實(shí)現(xiàn)動(dòng)態(tài)封禁IP的三種主流方案的詳細(xì)內(nèi)容,更多關(guān)于Nginx動(dòng)態(tài)封禁IP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nginx?403?forbidden錯(cuò)誤的原因以及解決方法

    Nginx?403?forbidden錯(cuò)誤的原因以及解決方法

    yum安裝nginx,安裝一切正常,但是訪問時(shí)報(bào)403 forbidden,下面這篇文章主要給大家介紹了關(guān)于Nginx?403?forbidden錯(cuò)誤的原因以及解決方法,需要的朋友可以參考下
    2022-08-08
  • nginx中proxy_set_header參數(shù)的實(shí)現(xiàn)

    nginx中proxy_set_header參數(shù)的實(shí)現(xiàn)

    本文詳細(xì)介紹了Nginx中proxy_set_header指令的用法,通過設(shè)置不同的請(qǐng)求頭信息,可以實(shí)現(xiàn)更靈活的反向代理功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Nginx中報(bào)錯(cuò):Permission denied與Connection refused的解決

    Nginx中報(bào)錯(cuò):Permission denied與Connection refused的解決

    這篇文章主要給大家介紹了在Nginx中報(bào)錯(cuò):13: Permission denied與111: Connection refused的解決方法,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • nginx基礎(chǔ)配置說明一則

    nginx基礎(chǔ)配置說明一則

    nginx基礎(chǔ)配置說明一則,有需要的朋友可以參考下
    2013-02-02
  • nginx中的日志切割詳解

    nginx中的日志切割詳解

    Nginx日志切割是定期將訪問日志和錯(cuò)誤日志分割成多個(gè)文件,以優(yōu)化性能、便于管理和分析,常見的實(shí)現(xiàn)方法包括使用logrotate工具和編寫自定義腳本,解決常見的問題如Nginx不再寫入新日志和權(quán)限問題,需要確保正確的信號(hào)發(fā)送和權(quán)限設(shè)置
    2025-11-11
  • nginx對(duì)http請(qǐng)求處理的各個(gè)階段詳析

    nginx對(duì)http請(qǐng)求處理的各個(gè)階段詳析

    這篇文章主要給大家介紹了關(guān)于nginx對(duì)http請(qǐng)求處理的各個(gè)階段分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Nginx環(huán)境下WordPress的多站點(diǎn)功能配置詳解

    Nginx環(huán)境下WordPress的多站點(diǎn)功能配置詳解

    WordPress的多站點(diǎn)功能允許安裝一個(gè)WordPress程序的情況下,實(shí)現(xiàn)多個(gè)站點(diǎn)也就是一套程序,可以綁定多個(gè)域名或子域名,本文詳細(xì)介紹了在Nginx環(huán)境下WordPress的多站點(diǎn)功能配置方法
    2018-10-10
  • nginx配置靜態(tài)資源的訪問的實(shí)現(xiàn)

    nginx配置靜態(tài)資源的訪問的實(shí)現(xiàn)

    本文主要介紹了nginx配置靜態(tài)資源的訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • 利用nginx實(shí)現(xiàn)動(dòng)靜分離的負(fù)載均衡集群實(shí)戰(zhàn)教程

    利用nginx實(shí)現(xiàn)動(dòng)靜分離的負(fù)載均衡集群實(shí)戰(zhàn)教程

    這篇文章介紹了利用nginx實(shí)現(xiàn)動(dòng)靜分離的負(fù)載均衡集群實(shí)戰(zhàn),本次用到的操作系統(tǒng)及服務(wù),本次實(shí)驗(yàn)一共需要3臺(tái)服務(wù)器,一臺(tái)nginx做為負(fù)載均衡分發(fā)器和動(dòng)靜分離的分發(fā)器,兩臺(tái)apache做為后端服務(wù)器,使用nginx實(shí)現(xiàn)兩臺(tái)apache服務(wù)器的負(fù)載均衡和動(dòng)靜分離,需要的朋友可以參考下
    2023-03-03
  • 基于域名、端口和IP搭建nginx虛擬主機(jī)

    基于域名、端口和IP搭建nginx虛擬主機(jī)

    本文給大家分享基于域名、端口和IP搭建nginx虛擬主機(jī)的內(nèi)容,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11

最新評(píng)論

镇巴县| 澄江县| 红安县| 英德市| 防城港市| 长武县| 荃湾区| 施甸县| 万荣县| 囊谦县| 宁津县| 梅河口市| 冀州市| 通城县| 汽车| 常宁市| 永年县| 洛宁县| 精河县| 靖宇县| 天门市| 新建县| 江陵县| 河池市| 澄江县| 阜阳市| 太康县| 琼结县| 英吉沙县| 双江| 门头沟区| 涿州市| 富顺县| 盐山县| 甘洛县| 万州区| 资兴市| 新民市| 乌兰县| 潜山县| 西藏|