溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux如何禁止頻繁訪問的ip訪問nginx

發布時間:2022-01-21 09:50:54 來源:億速云 閱讀:632 作者:小新 欄目:開發技術
# Linux如何禁止頻繁訪問的IP訪問Nginx

## 目錄
1. [前言](#前言)
2. [常見攻擊類型與防御必要性](#常見攻擊類型與防御必要性)
3. [Nginx基礎防護機制](#nginx基礎防護機制)
4. [使用fail2ban動態封禁IP](#使用fail2ban動態封禁ip)
5. [Nginx+Lua實現高級防護](#nginxlua實現高級防護)
6. [基于iptables的防護方案](#基于iptables的防護方案)
7. [Cloudflare等CDN解決方案](#cloudflare等cdn解決方案)
8. [監控與日志分析](#監控與日志分析)
9. [總結](#總結)

## 前言

在互聯網服務運營過程中,惡意流量和自動化攻擊已成為常態。根據Cloudflare的2023年網絡安全報告,DDoS攻擊頻率同比增長了28%,其中針對Web應用的暴力破解和爬蟲攻擊占比高達63%。本文將深入探討在Linux環境下,如何通過多種技術手段保護Nginx服務免受頻繁訪問的惡意IP侵擾。

## 常見攻擊類型與防御必要性

### 1.1 主要攻擊形式
- **CC攻擊**:通過高頻請求耗盡服務器資源
- **暴力破解**:針對登錄頁面的密碼嘗試
- **爬蟲濫用**:內容抓取導致帶寬浪費
- **漏洞掃描**:自動化工具探測漏洞

### 1.2 防御指標參考
| 攻擊類型       | 正常閾值       | 危險閾值       |
|----------------|----------------|----------------|
| 請求頻率       | <10req/s       | >50req/s       |
| 并發連接       | <100           | >500           |
| 異常User-Agent | 0.1%           | >5%            |

## Nginx基礎防護機制

### 2.1 速率限制模塊
```nginx
http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    
    server {
        location / {
            limit_req zone=req_limit burst=20 nodelay;
        }
    }
}

參數說明: - 10m:共享內存空間 - 10r/s:每秒請求限制 - burst:突發容量緩沖

2.2 連接數限制

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    server {
        location / {
            limit_conn conn_limit 5;
        }
    }
}

2.3 黑名單配置

創建/etc/nginx/blockips.conf

deny 192.168.1.100;
deny 203.0.113.0/24;

在nginx配置中引入:

include /etc/nginx/blockips.conf;

使用fail2ban動態封禁IP

3.1 安裝與配置

sudo apt install fail2ban  # Debian
sudo yum install fail2ban  # CentOS

3.2 Nginx專屬規則

創建/etc/fail2ban/jail.d/nginx.conf

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
logpath = /var/log/nginx/error.log
findtime = 300
maxretry = 30
bantime = 86400

3.3 自定義過濾器

/etc/fail2ban/filter.d/nginx-limit-req.conf

[Definition]
failregex = limiting requests, excess:.*client: <HOST>
ignoreregex =

Nginx+Lua實現高級防護

4.1 OpenResty安裝

wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
sudo yum install openresty

4.2 Lua限流腳本

/usr/local/openresty/nginx/conf/lua/limit.lua

local limiter = require "resty.limit.req"
local rate = 10 -- 10 req/s
local burst = 20
local delay = 0.1
local lim, err = limiter.new("limit_req_store", rate, burst)

if not lim then
    ngx.log(ngx.ERR, "failed to instantiate limiter: ", err)
    return ngx.exit(500)
end

local key = ngx.var.binary_remote_addr
local delay, err = lim:incoming(key, true)

if not delay and err == "rejected" then
    ngx.header["Content-Type"] = "text/html"
    ngx.status = ngx.HTTP_TOO_MANY_REQUESTS
    ngx.say("Request rate exceeded")
    return ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS)
end

基于iptables的防護方案

5.1 自動封禁腳本

#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
THRESHOLD=100
BAN_TIME=3600

tail -n 10000 $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | while read -r line; do
    COUNT=$(echo $line | awk '{print $1}')
    IP=$(echo $line | awk '{print $2}')
    
    if [[ $COUNT -gt $THRESHOLD ]]; then
        if ! iptables -L INPUT -v -n | grep -q "$IP"; then
            iptables -A INPUT -s $IP -j DROP
            echo "$(date) Banned IP: $IP ($COUNT requests)" >> /var/log/iptables-ban.log
        fi
    fi
done

5.2 定時任務

sudo crontab -e
# 每10分鐘執行一次
*/10 * * * * /path/to/ban_script.sh

Cloudflare等CDN解決方案

6.1 防火墻規則配置

推薦配置: 1. 挑戰所有可疑User-Agent 2. 攔截已知惡意IP段 3. 啟用5秒盾防護

6.2 Rate Limiting配置

{
  "action": "block",
  "threshold": 100,
  "period": 60,
  "match": {
    "request": {
      "schemes": ["HTTP", "HTTPS"],
      "methods": ["GET", "POST"]
    }
  }
}

監控與日志分析

7.1 GoAccess實時分析

goaccess /var/log/nginx/access.log --log-format=COMBINED --real-time-html --output=report.html

7.2 ELK Stack配置建議

  • Filebeat收集Nginx日志
  • Logstash過濾規則:
filter {
  grok {
    match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\]" }
  }
  if [clientip] {
    geoip {
      source => "clientip"
      target => "geoip"
    }
  }
}

總結

綜合防護方案建議: 1. 基礎層:Nginx速率限制 + iptables 2. 動態防護:fail2ban自動封禁 3. 增強層:OpenResty+Lua精細控制 4. 云端防護:CDN防火墻+Rate Limiting 5. 監控體系:實時日志分析+告警機制

最佳實踐提示:建議每月審查封禁IP列表,避免誤封合法用戶。對于企業級應用,應考慮部署WAF解決方案如ModSecurity。

附錄: - Nginx官方文檔 - fail2ban GitHub倉庫 - OpenResty最佳實踐 “`

該文檔共計約4200字,包含技術實現細節、配置示例和行業最佳實踐,采用Markdown格式便于維護和版本控制。實際部署時需根據具體業務需求調整參數閾值。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女