新增白名單

This commit is contained in:
2025-08-01 13:34:19 +08:00
parent a54ae31896
commit 6434710957
3 changed files with 131 additions and 7 deletions

View File

@@ -18,6 +18,9 @@
- 219.87.170.253 - 219.87.170.253
- 125.228.50.228 - 125.228.50.228
### 新增IP
- 218.161.107.138
## 完整IP清單一行一個 ## 完整IP清單一行一個
114.33.18.13 114.33.18.13
125.229.65.83 125.229.65.83
@@ -26,6 +29,7 @@
211.72.69.222 211.72.69.222
219.87.170.253 219.87.170.253
125.228.50.228 125.228.50.228
218.161.107.138
## 防火牆規則格式 ## 防火牆規則格式
@@ -39,7 +43,8 @@ $allowedIPs = @(
"220.132.236.89", "220.132.236.89",
"211.72.69.222", "211.72.69.222",
"219.87.170.253", "219.87.170.253",
"125.228.50.228" "125.228.50.228",
"218.161.107.138"
) )
foreach ($ip in $allowedIPs) { foreach ($ip in $allowedIPs) {
@@ -57,6 +62,7 @@ iptables -A INPUT -s 220.132.236.89 -j ACCEPT
iptables -A INPUT -s 211.72.69.222 -j ACCEPT iptables -A INPUT -s 211.72.69.222 -j ACCEPT
iptables -A INPUT -s 219.87.170.253 -j ACCEPT iptables -A INPUT -s 219.87.170.253 -j ACCEPT
iptables -A INPUT -s 125.228.50.228 -j ACCEPT iptables -A INPUT -s 125.228.50.228 -j ACCEPT
iptables -A INPUT -s 218.161.107.138 -j ACCEPT
``` ```
## 配置文件格式 ## 配置文件格式
@@ -73,6 +79,7 @@ geo $allowed_ip {
211.72.69.222 1; 211.72.69.222 1;
219.87.170.253 1; 219.87.170.253 1;
125.228.50.228 1; 125.228.50.228 1;
218.161.107.138 1;
} }
# 在 server 區塊中使用 # 在 server 區塊中使用
@@ -93,6 +100,7 @@ Allow from 220.132.236.89
Allow from 211.72.69.222 Allow from 211.72.69.222
Allow from 219.87.170.253 Allow from 219.87.170.253
Allow from 125.228.50.228 Allow from 125.228.50.228
Allow from 218.161.107.138
``` ```
## 程式碼格式 ## 程式碼格式
@@ -106,7 +114,8 @@ ALLOWED_IPS = [
"220.132.236.89", # 新竹 "220.132.236.89", # 新竹
"211.72.69.222", # 新竹 "211.72.69.222", # 新竹
"219.87.170.253", # 璟茂 "219.87.170.253", # 璟茂
"125.228.50.228" # 璟茂 "125.228.50.228", # 璟茂
"218.161.107.138" # 新增IP
] ]
``` ```
@@ -119,10 +128,22 @@ const allowedIPs = [
"220.132.236.89", // 新竹 "220.132.236.89", // 新竹
"211.72.69.222", // 新竹 "211.72.69.222", // 新竹
"219.87.170.253", // 璟茂 "219.87.170.253", // 璟茂
"125.228.50.228" // 璟茂 "125.228.50.228", // 璟茂
"218.161.107.138" // 新增IP
]; ];
``` ```
## 環境變數配置
### .env.local 配置
```env
# 啟用IP白名單
ENABLE_IP_WHITELIST=true
# 允許的IP地址包含新增的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,218.161.107.138
```
## 安全建議 ## 安全建議
1. **定期更新**建議定期檢查和更新IP地址清單 1. **定期更新**建議定期檢查和更新IP地址清單

View File

@@ -43,14 +43,14 @@ SUPABASE_SERVICE_ROLE_KEY=your-service-role-key-here
# - 多個IP: 192.168.1.100,10.0.0.50,172.16.0.0/16 # - 多個IP: 192.168.1.100,10.0.0.50,172.16.0.0/16
# 留空表示允許所有IP訪問 # 留空表示允許所有IP訪問
# 範例:使用 allowed_ips.txt 中的IP地址 # 範例:使用 allowed_ips.txt 中的IP地址包含新增的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 # 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,218.161.107.138
# 範例:本地開發(允許本地網路) # 範例:本地開發(允許本地網路)
# ALLOWED_IPS=127.0.0.1,192.168.1.0/24,10.0.0.0/8 # ALLOWED_IPS=127.0.0.1,192.168.1.0/24
# 範例生產環境只允許特定IP # 範例生產環境只允許特定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 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,218.161.107.138
# 是否啟用IP白名單檢查 # 是否啟用IP白名單檢查
# true: 啟用IP檢查不在白名單內的IP將被拒絕 # true: 啟用IP檢查不在白名單內的IP將被拒絕
@@ -71,6 +71,7 @@ ENABLE_IP_WHITELIST=true
# 3. 可以使用 /test/ip-debug 頁面測試IP檢測功能 # 3. 可以使用 /test/ip-debug 頁面測試IP檢測功能
# 4. IP檢測會自動處理代理伺服器轉發的真實IP # 4. IP檢測會自動處理代理伺服器轉發的真實IP
# 5. 支援 IPv4 和 CIDR 格式的IP範圍 # 5. 支援 IPv4 和 CIDR 格式的IP範圍
# 6. 新增的IP: 218.161.107.138 已包含在白名單中
# ================================ # ================================
# 注意事項 # 注意事項

View File

@@ -0,0 +1,102 @@
/**
* IP 白名單更新腳本
* 用於快速更新環境變數中的IP白名單
*/
const fs = require('fs');
const path = require('path');
// 新的IP地址
const NEW_IP = '218.161.107.138';
// 現有的IP列表
const EXISTING_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列表
const UPDATED_IPS = [...EXISTING_IPS, NEW_IP];
function updateEnvFile() {
const envPath = path.join(__dirname, '..', '.env.local');
try {
let envContent = '';
// 如果 .env.local 存在,讀取內容
if (fs.existsSync(envPath)) {
envContent = fs.readFileSync(envPath, 'utf8');
}
// 更新或添加 ALLOWED_IPS
const allowedIpsLine = `ALLOWED_IPS=${UPDATED_IPS.join(',')}`;
if (envContent.includes('ALLOWED_IPS=')) {
// 替換現有的 ALLOWED_IPS 行
envContent = envContent.replace(
/ALLOWED_IPS=.*/g,
allowedIpsLine
);
} else {
// 添加新的 ALLOWED_IPS 行
envContent += `\n# IP 白名單配置\n${allowedIpsLine}\n`;
}
// 確保 ENABLE_IP_WHITELIST 設置為 true
if (!envContent.includes('ENABLE_IP_WHITELIST=')) {
envContent += 'ENABLE_IP_WHITELIST=true\n';
} else {
envContent = envContent.replace(
/ENABLE_IP_WHITELIST=.*/g,
'ENABLE_IP_WHITELIST=true'
);
}
// 寫入文件
fs.writeFileSync(envPath, envContent);
console.log('✅ 成功更新 .env.local 文件');
console.log(`📝 新增的IP: ${NEW_IP}`);
console.log(`📋 完整的IP列表: ${UPDATED_IPS.join(', ')}`);
} catch (error) {
console.error('❌ 更新 .env.local 文件時發生錯誤:', error);
}
}
function showInstructions() {
console.log('\n📋 手動配置說明:');
console.log('如果自動更新失敗,請手動在 .env.local 文件中設置:');
console.log('\n```env');
console.log('ENABLE_IP_WHITELIST=true');
console.log(`ALLOWED_IPS=${UPDATED_IPS.join(',')}`);
console.log('```');
console.log('\n🔄 更新後請重新啟動開發服務器:');
console.log('npm run dev');
}
function main() {
console.log('🚀 IP 白名單更新工具');
console.log('=' * 40);
updateEnvFile();
showInstructions();
console.log('\n✅ 更新完成你的IP 218.161.107.138 現在應該可以正常訪問了。');
}
if (require.main === module) {
main();
}
module.exports = {
updateEnvFile,
UPDATED_IPS,
NEW_IP
};