# IP 白名單功能說明 ## 概述 IP白名單功能允許你限制只有特定IP地址的用戶才能訪問你的網站。這是一個強大的安全功能,特別適用於內部工具或需要限制訪問的應用程式。 ## 功能特點 - ✅ **智能IP檢測**:自動檢測真實客戶端IP,支援代理伺服器 - ✅ **多種IP格式**:支援單一IP、IP範圍(CIDR)、多個IP - ✅ **地理位置信息**:可選的IP地理位置檢測 - ✅ **調試工具**:內建IP檢測調試頁面 - ✅ **靈活配置**:可隨時啟用/禁用白名單功能 ## 快速開始 ### 1. 配置環境變數 複製 `env.template` 為 `.env.local` 並配置以下變數: ```env # 允許的IP地址(用逗號分隔) ALLOWED_IPS=114.33.18.13,125.229.65.83,60.248.164.91 # 是否啟用IP白名單檢查 ENABLE_IP_WHITELIST=true ``` ### 2. 本地開發配置 在本地開發時,建議使用以下配置: ```env # 允許本地訪問 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地址: ```env 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. 內部工具限制 ```env # 只允許公司內部網路訪問 ALLOWED_IPS=192.168.1.0/24,10.0.0.0/8 ENABLE_IP_WHITELIST=true ``` ### 2. 特定客戶訪問 ```env # 只允許特定客戶IP訪問 ALLOWED_IPS=203.0.113.1,198.51.100.50 ENABLE_IP_WHITELIST=true ``` ### 3. 開發環境 ```env # 開發時允許所有IP ENABLE_IP_WHITELIST=false ``` ### 4. 生產環境安全 ```env # 生產環境嚴格限制 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檢測信息: ```json { "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地址 - 詳細的訪問日誌記錄