nginx黑名單詳解

在網絡安全領域,黑名單指的是一種記錄著不允許訪問或操作的對象列表,通常用於限制網絡攻擊,過濾非法請求。Nginx是一種高性能的、開源的Web服務器軟件,因其簡單、靈活、高效等特點被廣泛應用於互聯網行業,而其黑名單功能也是其保障網絡安全的重要一環。下面,我們將從多個方面闡述nginx黑名單的實現。

一、IP黑名單

IP黑名單是nginx中一個常用的安全性配置,可以用於攔截不可信的網絡請求。其實現方式是使用ngx_http_access_module模塊中的deny指令,下面是一個實現IP黑名單的代碼例子:

location / {
    deny 192.168.1.1;
    deny 192.168.1.0/24;
    allow all;
}

上面的代碼中,deny指令用於限制指定IP或IP段的訪問,allow指令表示允許其它IP訪問該位置。可以一次性指定多個deny指令,每行一個。除了針對具體的IP限制,我們還可以使用一些第三方模塊實現更複雜的IP黑名單策略,例如使用ngx_http_geoip_module實現基於地理位置的IPv4黑名單和IPv6黑名單,使用lua腳本實現自定義黑名單邏輯。

二、User-Agent黑名單

User-Agent是HTTP請求頭的一部分,記錄了發送該請求的客戶端的應用程序類型、操作系統、軟件廠商等信息。攻擊者可以使用虛假的User-Agent信息隱藏自己的真實身份及攻擊目標,因此對User-Agent進行限制也是黑名單的一種應用場景。實現User-Agent黑名單的方式為在nginx.conf中添加如下代碼:

http {
    map $http_user_agent $bad_user_agent {
        default         0;
        ~*curl           1;
        ~*wget           1;
        ~*Unicornscan    1;
        ~*sqlmap         1;
        ~*nessus         1;
        ~*netsparker     1;
    }
    ...
    server {
        ...
        if ($bad_user_agent) {
            return 444;
        }
        ...
    }
}

上面的代碼首先使用map指令定義了一個變量$bad_user_agent,該變量將User-Agent信息與預定義的惡意User-Agent信息進行匹配,匹配成功則變量值為1,否則為默認值0。接着使用if指令判斷變量$bad_user_agent的值,若為1,則返回444狀態碼,即連接被關閉,可以達到屏蔽該HTTP請求的效果。

三、Referer黑名單

HTTP Referer指的是頁面請求的來源地址,攻擊者通過偽造Referer信息來進行一些攻擊,例如盜鏈、惡意防火牆繞過、CSRF等。因此,對Referer信息進行限制也是黑名單的一種應用場景。實現Referer黑名單的方式為在nginx.conf中添加如下代碼:

http {
    map $http_referer $bad_referer {
        default         0;
        ~*evil\.com     1;
        ~*xxx\.com      1;
        ~*yyy\.com      1;
    }
    ...
    server {
        ...
        if ($bad_referer) {
            return 403;
        }
        ...
    }
}

上面的代碼首先使用map指令定義了一個變量$bad_referer,該變量將Referer信息與預定義的惡意Referer信息進行匹配,匹配成功則變量值為1,否則為默認值0。接着使用if指令判斷變量$bad_referer的值,若為1,則返回403狀態碼,即禁止訪問,可以達到屏蔽該HTTP請求的效果。

四、請求頻率黑名單

黑客可以通過發送大量請求來模擬各種攻擊,在一定時間內發送的請求達到某個閾值後則會被判定為惡意請求。實現請求頻率限制也是黑名單的一種應用場景。可以使用nginx的ngx_http_limit_req_module模塊實現請求頻率限制,下面是一個實現60秒內最多5次請求的限制的例子:

limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
server {
    ...
    limit_req zone=perip burst=10 nodelay;
    ...
}

上面的代碼首先使用limit_req_zone指令在內存中分配了一個10MB的共享內存區域,用於保存每個客戶端的頻率限制狀態,同時限制了每秒最多5次請求。接着,在server塊中使用limit_req指令將請求處於計數限制區域(perip)的客戶端請求限制在5次內,當超過5次則自動返回503狀態碼,從而實現請求頻率的限制。

五、SSL/TLS協議黑名單

SSL/TLS協議是一種網絡安全協議,用於保護網絡通信過程中的數據安全。對SSL/TLS協議進行限制也是黑名單的一種應用場景。可以使用nginx的ngx_http_ssl_module模塊和ngx_stream_ssl_module模塊實現SSL/TLS協議的限制。下面是一個實現本地(localhost)禁止使用SSLv2和SSLv3協議的例子:

http {
    ...
    server {
        ...
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ...
    }
    ...
}
stream {
    ...
    server {
        ...
        ssl_protocols TLSv1.1 TLSv1.2;
        ...
    }
    ...
}

上面的代碼中,通過在nginx.conf中添加ssl_protocols指令,限制了HTTP和TCP連接中使用的協議版本,只允許使用TLSv1、TLSv1.1和TLSv1.2協議版本,而禁止使用SSLv2和SSLv3協議版本,實現了SSL/TLS協議的限制。

六、總結

本文從IP黑名單、User-Agent黑名單、Referer黑名單、請求頻率黑名單、SSL/TLS協議黑名單等多個方面闡述了nginx黑名單的實現,希望可以幫助各位開發人員掌握網絡安全相關知識,保護網絡安全。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/303075.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相關推薦

  • Java如何從Nginx下載文件

    本文將從以下幾個方面詳細介紹如何使用Java從Nginx下載文件。 一、準備工作 在Java中下載文件需要使用到Apache HttpClient庫,這個庫是一個基於Java的HT…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論