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

Nginx實(shí)現(xiàn)動(dòng)態(tài)封禁IP的步驟指南

 更新時(shí)間:2025年02月25日 11:11:42   作者:拾荒的小海螺  
在日常的生產(chǎn)環(huán)境中,網(wǎng)站可能會(huì)遭遇惡意請求、DDoS 攻擊或其他有害的訪問行為,為了應(yīng)對這些情況,動(dòng)態(tài)封禁 IP 是一項(xiàng)十分重要的安全策略,本篇博客將介紹如何通過 NGINX 實(shí)現(xiàn)動(dòng)態(tài)封禁 IP,從配置到自動(dòng)化的實(shí)現(xiàn)步驟,需要的朋友可以參考下

1、簡述

在日常的生產(chǎn)環(huán)境中,網(wǎng)站可能會(huì)遭遇惡意請求、DDoS 攻擊或其他有害的訪問行為。為了應(yīng)對這些情況,動(dòng)態(tài)封禁 IP 是一項(xiàng)十分重要的安全策略。本篇博客將介紹如何通過 NGINX 實(shí)現(xiàn)動(dòng)態(tài)封禁 IP,從配置到自動(dòng)化的實(shí)現(xiàn)步驟。

2、實(shí)現(xiàn)方式

NGINX 本身支持簡單的基于 IP 的訪問控制(如 deny 和 allow 指令),但要實(shí)現(xiàn)動(dòng)態(tài)封禁,通常結(jié)合以下幾種方案:

  • fail2ban:一個(gè)常用的自動(dòng)封禁工具,通過監(jiān)控日志發(fā)現(xiàn)惡意行為并自動(dòng)修改 NGINX 配置文件。
  • nginx 動(dòng)態(tài)模塊:如 ngx_http_limit_req_module 和 ngx_http_limit_conn_module,用于限制請求頻率和并發(fā)數(shù),結(jié)合腳本實(shí)現(xiàn) IP 封禁。
  • 基于 Redis 或數(shù)據(jù)庫的方案:可以通過 Lua 腳本或第三方模塊,從 Redis 或 MySQL 等存儲(chǔ)中動(dòng)態(tài)加載封禁的 IP 列表。

3、使用 fail2ban 動(dòng)態(tài)封禁

fail2ban 是一種常見的動(dòng)態(tài)封禁工具,通過監(jiān)控日志文件中的惡意行為自動(dòng)更新 NGINX 配置。下面是通過 fail2ban 實(shí)現(xiàn)動(dòng)態(tài)封禁的步驟。

3.1 安裝 fail2ban

sudo apt-get update
sudo apt-get install fail2ban

3.2 配置 NGINX 日志

確保 NGINX 配置中的日志能記錄惡意請求。以下是一個(gè)簡單的日志配置:

http {
    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;
}

3.3 配置 fail2ban 規(guī)則

創(chuàng)建 NGINX 的過濾規(guī)則,編輯 /etc/fail2ban/filter.d/nginx-http-auth.conf,加入以下規(guī)則來匹配日志中的惡意行為:

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

3.4 設(shè)置 fail2ban 的 jail 配置

在 /etc/fail2ban/jail.local 文件中,增加對 NGINX 的監(jiān)控配置:

[nginx-http-auth]
enabled  = true
port     = http,https
filter   = nginx-http-auth
logpath  = /var/log/nginx/access.log
maxretry = 5
  • logpath:指向 NGINX 的日志文件。
  • maxretry:設(shè)置多少次失敗后封禁 IP。

3.5 啟動(dòng) fail2ban

sudo service fail2ban restart

這樣,當(dāng)某個(gè) IP 連續(xù)訪問 5 次 403 頁面時(shí),它將被自動(dòng)封禁。

4、使用 NGINX 的 limit 模塊動(dòng)態(tài)限制

NGINX 自帶的 ngx_http_limit_req_module 和 ngx_http_limit_conn_module 可以用于動(dòng)態(tài)限制請求。通過設(shè)置請求頻率和并發(fā)連接數(shù),可以有效抵御惡意爬蟲和 DDoS 攻擊。

4.1 配置請求頻率限制

在 NGINX 配置中加入以下代碼來限制每個(gè) IP 的請求頻率:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location / {
            limit_req zone=one burst=5;
        }
    }
}
  • limit_req_zone:定義一個(gè)共享內(nèi)存區(qū)域,用于記錄請求速率。
  • rate=1r/s:每個(gè) IP 限制為每秒最多 1 次請求。

4.2 動(dòng)態(tài)調(diào)整限制

要用 Redis 和 Lua 實(shí)現(xiàn)動(dòng)態(tài)封禁惡意 IP 的功能,可以借助 Redis 的計(jì)數(shù)和過期特性。在 Redis 中,可以用 Lua 腳本來動(dòng)態(tài)檢測某個(gè) IP 的請求頻率,一旦超過設(shè)定的閾值,就對該 IP 進(jìn)行封禁。

以下是一個(gè) Lua 腳本的樣例,用于封禁惡意 IP。假設(shè)我們會(huì)在 Redis 中記錄每個(gè) IP 的請求次數(shù),并在達(dá)到限制后進(jìn)行封禁。以下 Lua 腳本實(shí)現(xiàn)了上述邏輯,設(shè)定了一個(gè)限制:IP 在 60 秒內(nèi)請求 10 次以上會(huì)觸發(fā)封禁,封禁持續(xù) 3600 秒(1 小時(shí)):

-- Lua 腳本實(shí)現(xiàn)動(dòng)態(tài)封禁惡意IP
local ip = KEYS[1]                -- 傳入的 IP 地址
local max_requests = tonumber(ARGV[1]) -- 最大請求次數(shù)
local ban_time = tonumber(ARGV[2])     -- 封禁持續(xù)時(shí)間
local expire_time = tonumber(ARGV[3])  -- IP 計(jì)數(shù)的過期時(shí)間

-- 構(gòu)建 Redis 鍵
local ip_key = "ip:" .. ip
local ban_key = "ban:" .. ip

-- 檢查 IP 是否已封禁
if redis.call("EXISTS", ban_key) == 1 then
    return {false, "IP 已封禁"}
end

-- 增加 IP 請求計(jì)數(shù)
local count = redis.call("INCR", ip_key)

-- 如果是首次請求,設(shè)置請求計(jì)數(shù)的過期時(shí)間
if count == 1 then
    redis.call("EXPIRE", ip_key, expire_time)
end

-- 檢查請求次數(shù)是否超過最大請求限制
if count > max_requests then
    -- 達(dá)到限制,封禁 IP 并設(shè)置封禁時(shí)間
    redis.call("SET", ban_key, "1")
    redis.call("EXPIRE", ban_key, ban_time)
    return {false, "已達(dá)請求限制,IP 已封禁"}
end

-- 如果請求未超限,返回當(dāng)前請求計(jì)數(shù)
return {true, count}

要在 Redis 中執(zhí)行這個(gè) Lua 腳本,你可以通過 Redis 客戶端執(zhí)行 EVAL 命令。假設(shè) IP 地址是 192.168.0.1,請求限制為 10 次,封禁時(shí)間為 3600 秒,計(jì)數(shù)過期時(shí)間為 60 秒:

EVAL "<LUA_SCRIPT>" 2 192.168.0.1 10 3600 60

5、總結(jié)

通過以上方法,可以實(shí)現(xiàn) NGINX 下的動(dòng)態(tài)封禁 IP,從而有效保護(hù)網(wǎng)站免受惡意攻擊。在實(shí)際應(yīng)用中,可以根據(jù)需求選擇 fail2ban 或 NGINX 自帶的模塊,甚至結(jié)合數(shù)據(jù)庫方案實(shí)現(xiàn)更復(fù)雜的動(dòng)態(tài)封禁機(jī)制。

這篇博客為初學(xué)者提供了 NGINX 實(shí)現(xiàn)動(dòng)態(tài)封禁 IP 的思路和具體配置示例。你可以根據(jù)業(yè)務(wù)場景靈活調(diào)整參數(shù),提升系統(tǒng)安全性。

到此這篇關(guān)于Nginx實(shí)現(xiàn)動(dòng)態(tài)封禁IP的步驟指南的文章就介紹到這了,更多相關(guān)Nginx動(dòng)態(tài)封禁IP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問題

    Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問題

    這篇文章主要介紹了Nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)地址解決跨域問題的方法,文中介紹的很詳細(xì),對大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 解決nginx+lua搭建文件上傳下載服務(wù)問題

    解決nginx+lua搭建文件上傳下載服務(wù)問題

    這篇文章主要介紹了nginx+lua搭建文件上傳下載服務(wù),涉及到nginx安裝配置方法,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-12-12
  • 檢查 Nginx 是否啟動(dòng)的幾種方法

    檢查 Nginx 是否啟動(dòng)的幾種方法

    本文主要介紹了檢查 Nginx 是否啟動(dòng)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • Nginx負(fù)載均衡健康檢查性能提升

    Nginx負(fù)載均衡健康檢查性能提升

    這篇文章主要為大家介紹了Nginx負(fù)載均衡健康檢查性能提升,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Nginx路由器匹配規(guī)則的實(shí)現(xiàn)示例

    Nginx路由器匹配規(guī)則的實(shí)現(xiàn)示例

    本文主要介紹了Nginx路由器匹配規(guī)則的實(shí)現(xiàn)示例,涵蓋精確匹配、正則匹配等,通過合理配置解決沖突,優(yōu)化反向代理與靜態(tài)資源處理,提升性能與穩(wěn)定性,感興趣的可以了解一下
    2025-05-05
  • Nginx使用upstream后端接口報(bào)?400

    Nginx使用upstream后端接口報(bào)?400

    本文主要介紹了Nginx使用upstream后端接口報(bào)?400,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • nginx的安裝以及簡單配置教程

    nginx的安裝以及簡單配置教程

    這篇文章主要給大家介紹了關(guān)于nginx的安裝以及簡單配置的相關(guān)資料,以下是nginx在各種環(huán)境條件下的安裝與配置過程,其中還分析了中間遇到的坑以及處理方式,需要的朋友可以參考下
    2023-08-08
  • Nginx實(shí)現(xiàn)精準(zhǔn)IP訪問控制的方法全攻略

    Nginx實(shí)現(xiàn)精準(zhǔn)IP訪問控制的方法全攻略

    在日常服務(wù)器運(yùn)維、前后端聯(lián)調(diào)、測試環(huán)境部署中,精準(zhǔn)控制訪問權(quán)限是高頻且核心的需求,Nginx?作為當(dāng)下最流行的?Web?服務(wù)器和反向代理工具,本文將從基礎(chǔ)用法入手,結(jié)合實(shí)際測試場景,拆解?Nginx?IP?訪問控制的核心指令、實(shí)用技巧、常見坑點(diǎn),需要的朋友可以參考下
    2026-03-03
  • Nginx、Tomcat等項(xiàng)目部署問題以及解決流程

    Nginx、Tomcat等項(xiàng)目部署問題以及解決流程

    本文總結(jié)了項(xiàng)目部署中常見的 four 類問題及其解決方法:Nginx 未按預(yù)期顯示結(jié)果、端口未開啟、日志分析的重要性以及開發(fā)環(huán)境與生產(chǎn)環(huán)境運(yùn)行結(jié)果不一致的問題,通過提供詳細(xì)的解決方案和思路,希望開發(fā)者能夠更好地應(yīng)對部署過程中的挑戰(zhàn),確保項(xiàng)目順利上線
    2024-12-12
  • nginx.pid打開失敗以及失效的解決方案

    nginx.pid打開失敗以及失效的解決方案

    在我們平常使用nginx的時(shí)候,經(jīng)常有可能會(huì)發(fā)現(xiàn)我們的pid找不到了,本文就介紹了nginx.pid打開失敗以及失效的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12

最新評(píng)論

车致| 缙云县| 开阳县| 满洲里市| 东海县| 宜兴市| 全椒县| 阳朔县| 玉溪市| 遵义县| 长垣县| 东安县| 芒康县| 自治县| 布拖县| 宝丰县| 邹平县| 南阳市| 卢湾区| 德令哈市| 长治市| 贞丰县| 苍山县| 民丰县| 中方县| 房产| 竹溪县| 河曲县| 永宁县| 塔河县| 广昌县| 灵丘县| 吴江市| 彭阳县| 壤塘县| 江口县| 永宁县| 昌都县| 天气| 慈溪市| 海安县|