Files
wish-pool/IP-WHITELIST-README.md
2025-08-01 13:17:32 +08:00

5.1 KiB
Raw Permalink Blame History

IP 白名單功能說明

概述

IP白名單功能允許你限制只有特定IP地址的用戶才能訪問你的網站。這是一個強大的安全功能特別適用於內部工具或需要限制訪問的應用程式。

功能特點

  • 智能IP檢測自動檢測真實客戶端IP支援代理伺服器
  • 多種IP格式支援單一IP、IP範圍CIDR、多個IP
  • 地理位置信息可選的IP地理位置檢測
  • 調試工具內建IP檢測調試頁面
  • 靈活配置:可隨時啟用/禁用白名單功能

快速開始

1. 配置環境變數

複製 env.template.env.local 並配置以下變數:

# 允許的IP地址用逗號分隔
ALLOWED_IPS=114.33.18.13,125.229.65.83,60.248.164.91

# 是否啟用IP白名單檢查
ENABLE_IP_WHITELIST=true

2. 本地開發配置

在本地開發時,建議使用以下配置:

# 允許本地訪問
ALLOWED_IPS=127.0.0.1,192.168.1.0/24

# 或者完全禁用IP檢查
ENABLE_IP_WHITELIST=false

3. 測試IP檢測

訪問 /test/ip-debug 頁面來測試IP檢測功能查看

  • 檢測到的真實IP地址
  • 所有可能的IP來源
  • 地理位置信息
  • 白名單狀態

IP 地址格式

支援的格式

  1. 單一IP地址

    192.168.1.100
    114.33.18.13
    
  2. IP範圍CIDR格式

    192.168.1.0/24    # 192.168.1.0 - 192.168.1.255
    10.0.0.0/8        # 10.0.0.0 - 10.255.255.255
    172.16.0.0/12     # 172.16.0.0 - 172.31.255.255
    
  3. 多個IP地址

    192.168.1.100,10.0.0.50,172.16.0.0/16
    

實際範例

使用 allowed_ips.txt 中的IP地址

ALLOWED_IPS=114.33.18.13,125.229.65.83,60.248.164.91,220.132.236.89,211.72.69.222,219.87.170.253,125.228.50.228

智能IP檢測

系統會自動檢測真實的客戶端IP地址支援以下情況

代理伺服器支援

  • Cloudflare (cf-connecting-ip)
  • Nginx (x-real-ip)
  • Apache (x-forwarded-for)
  • 其他常見代理頭

自動過濾

  • 排除本地回環地址 (127.0.0.1, ::1)
  • 優先選擇公網IP地址
  • 處理IPv6格式的IPv4地址

使用場景

1. 內部工具限制

# 只允許公司內部網路訪問
ALLOWED_IPS=192.168.1.0/24,10.0.0.0/8
ENABLE_IP_WHITELIST=true

2. 特定客戶訪問

# 只允許特定客戶IP訪問
ALLOWED_IPS=203.0.113.1,198.51.100.50
ENABLE_IP_WHITELIST=true

3. 開發環境

# 開發時允許所有IP
ENABLE_IP_WHITELIST=false

4. 生產環境安全

# 生產環境嚴格限制
ALLOWED_IPS=114.33.18.13,125.229.65.83
ENABLE_IP_WHITELIST=true

調試和故障排除

1. 使用調試頁面

訪問 /test/ip-debug 查看詳細的IP檢測信息。

2. 常見問題

問題IP顯示為 127.0.0.1

  • 解決方案:在本地開發時,將 127.0.0.1 加入白名單或禁用IP檢查

問題:無法訪問網站

  • 檢查確認你的IP地址在白名單中
  • 檢查:確認 ENABLE_IP_WHITELIST=true 設置正確

問題:代理伺服器環境

  • 系統會自動檢測代理轉發的真實IP
  • 如果仍有問題,檢查代理伺服器配置

3. 日誌查看

在瀏覽器開發者工具中查看網路請求,或檢查服務器日誌。

安全建議

  1. 定期更新IP列表定期檢查和更新允許的IP地址
  2. 監控訪問日誌:監控被拒絕的訪問嘗試
  3. 備用訪問方式考慮設定VPN或其他備用訪問方式
  4. 測試環境在測試環境中充分測試IP白名單功能
  5. 文檔記錄記錄所有允許的IP地址和用途

API 端點

GET /api/ip

返回當前客戶端的IP檢測信息

{
  "ip": "203.0.113.1",
  "isAllowed": true,
  "enableIpWhitelist": true,
  "allowedIps": ["114.33.18.13", "125.229.65.83"],
  "timestamp": "2024-01-01T12:00:00.000Z",
  "debug": {
    "allIpSources": {
      "x-forwarded-for": "203.0.113.1",
      "x-real-ip": null,
      // ... 其他IP來源
    },
    "environment": "production",
    "host": "example.com",
    "referer": "https://example.com/"
  },
  "location": {
    "country": "Taiwan",
    "city": "Taipei",
    "isp": "Chunghwa Telecom"
  }
}

部署注意事項

Vercel 部署

  1. 在 Vercel 項目設置中配置環境變數
  2. 確保 ENABLE_IP_WHITELIST 設置正確
  3. 測試IP檢測功能是否正常工作

其他平台

  1. 確保環境變數正確配置
  2. 測試代理伺服器IP轉發是否正常
  3. 檢查防火牆和網路配置

相關文件

  • allowed_ips.txt - IP地址清單文件
  • lib/ip-utils.ts - IP檢測工具函數
  • middleware.ts - IP白名單中間件
  • app/api/ip/route.ts - IP檢測API
  • app/test/ip-debug/page.tsx - IP調試頁面

技術實現

核心組件

  • IP檢測lib/ip-utils.ts 中的 getClientIp() 函數
  • 白名單檢查isIpAllowed() 函數支援CIDR範圍
  • 中間件middleware.ts 在請求處理前檢查IP
  • API端點/api/ip 提供IP檢測服務

安全機制

  • 服務器端檢查,客戶端無法繞過
  • 支援多種代理伺服器配置
  • 自動過濾無效IP地址
  • 詳細的訪問日誌記錄