進階
Node Security
深入了解 Bitcoin Core 節點的安全配置和最佳實踐,保護你的節點免受攻擊。
12 分鐘
節點安全概覽
運行 Bitcoin Core 節點需要考慮多方面的安全問題,包括網路安全、RPC 訪問控制、 錢包保護和系統加固。正確的安全配置可以保護你的資金和隱私。
主要威脅
網路攻擊
- • Eclipse 攻擊(隔離節點)
- • Sybil 攻擊(偽造節點)
- • DoS 攻擊
本地威脅
- • RPC 未授權訪問
- • 錢包盜竊
- • 日誌洩露
RPC 安全
# bitcoin.conf RPC 安全配置
# 基本認證(不推薦明文密碼)
# rpcuser=myuser
# rpcpassword=mypassword
# 推薦:使用 cookie 認證(預設)
# Bitcoin Core 自動在數據目錄生成 .cookie 文件
# 格式:__cookie__:隨機值
# 限制 RPC 訪問 IP
rpcbind=127.0.0.1 # 只監聽本地
rpcallowip=127.0.0.1 # 只允許本地訪問
# 遠程訪問(如果必需)
# rpcbind=0.0.0.0
# rpcallowip=192.168.1.0/24 # 只允許內網
# 禁用遠程錢包 RPC
# rpcallowip=127.0.0.1 已經做到這點
# 限制 RPC 線程
rpcthreads=4
# RPC 工作隊列
rpcworkqueue=16 # 使用 cookie 認證
# 自動使用 cookie(推薦)
bitcoin-cli getblockchaininfo
# 指定 cookie 文件
bitcoin-cli -rpccookiefile=/path/to/.cookie getblockchaininfo
# 生成安全的 rpcauth
# 使用 rpcauth.py 腳本(Bitcoin Core 源碼中)
python3 share/rpcauth/rpcauth.py myusername
# 輸出:
# rpcauth=myusername:salt$hash
# 將此行添加到 bitcoin.conf
# 多用戶訪問(不同權限)
rpcauth=admin:...
rpcauth=readonly:...
rpcwhitelist=readonly:getblockchaininfo,getnetworkinfo 網路安全
# bitcoin.conf 網路安全配置
# 連接多樣性
maxconnections=125 # 預設最大連接
maxoutbound=10 # 最大出站連接
# 防止 Eclipse 攻擊
# 確保連接到多個 ASN(自治系統)
# Bitcoin Core 自動處理
# 使用 Tor 增強隱私
proxy=127.0.0.1:9050 # SOCKS5 代理
onlynet=onion # 只使用 Tor
# 或同時使用多網路
onlynet=ipv4
onlynet=ipv6
onlynet=onion
# 禁用入站連接(增強隱私)
listen=0
# 禁用 UPnP(潛在安全風險)
upnp=0
# 禁用 NAT-PMP
natpmp=0
# 使用固定種子節點(可選)
dnsseed=0
addnode=trusted-node.example.com:8333 # 防火牆配置(Linux iptables)
# 允許 Bitcoin P2P 端口(入站)
sudo iptables -A INPUT -p tcp --dport 8333 -j ACCEPT
# 限制 RPC 端口只允許本地
sudo iptables -A INPUT -p tcp --dport 8332 -s 127.0.0.1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8332 -j DROP
# UFW(更簡單的防火牆)
sudo ufw allow 8333/tcp # P2P
sudo ufw deny 8332/tcp # 禁止外部 RPC
# 速率限制
sudo iptables -A INPUT -p tcp --dport 8333 -m limit --limit 10/min -j ACCEPT 錢包安全
# 錢包加密
bitcoin-cli -rpcwallet=mywallet encryptwallet "強密碼"
# 需要重啟 Bitcoin Core
# 解鎖錢包(指定時間,秒)
bitcoin-cli -rpcwallet=mywallet walletpassphrase "密碼" 60
# 只解鎖用於質押(不允許發送)
bitcoin-cli -rpcwallet=mywallet walletpassphrase "密碼" 60 true
# 鎖定錢包
bitcoin-cli -rpcwallet=mywallet walletlock
# 修改密碼
bitcoin-cli -rpcwallet=mywallet walletpassphrasechange "舊密碼" "新密碼" # bitcoin.conf 錢包安全配置
# 禁用熱錢包(使用硬體錢包)
disablewallet=1
# 或使用 watch-only 錢包
# 不存儲私鑰
# 錢包目錄權限
# chmod 700 ~/.bitcoin/wallets
# chown -R bitcoinuser:bitcoinuser ~/.bitcoin/wallets
# 啟動時不載入錢包
# 需要時手動載入
# bitcoin-cli loadwallet "mywallet" 系統加固
# Linux 系統加固
# 1. 創建專用用戶
sudo useradd -r -m -s /bin/false bitcoin
sudo chown -R bitcoin:bitcoin /home/bitcoin/.bitcoin
# 2. 權限設置
chmod 700 /home/bitcoin/.bitcoin
chmod 600 /home/bitcoin/.bitcoin/bitcoin.conf
chmod 600 /home/bitcoin/.bitcoin/.cookie
# 3. Systemd 服務(限制權限)
# /etc/systemd/system/bitcoind.service
[Unit]
Description=Bitcoin Core
After=network.target
[Service]
Type=forking
User=bitcoin
Group=bitcoin
ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf
ExecStop=/usr/local/bin/bitcoin-cli stop
# 安全限制
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
[Install]
WantedBy=multi-user.target
# 4. 啟動服務
sudo systemctl daemon-reload
sudo systemctl enable bitcoind
sudo systemctl start bitcoind # 日誌安全
# 限制日誌訪問
chmod 600 ~/.bitcoin/debug.log
# 日誌輪換
# /etc/logrotate.d/bitcoin
/home/bitcoin/.bitcoin/debug.log {
daily
rotate 7
compress
missingok
notifempty
create 600 bitcoin bitcoin
}
# 避免記錄敏感信息
# 不要使用 debug=rpc(會記錄 RPC 調用)
# 不要使用 debug=all(過於詳細)
# 清理舊日誌
find ~/.bitcoin -name "*.log*" -mtime +30 -delete Eclipse 攻擊防護
Eclipse 攻擊:
攻擊者嘗試控制你的所有連接:
┌─────────────────────────────────────────────────────────────┐
│ 惡意節點網路 │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ M │ │ M │ │ M │ │ M │ │ M │ │
│ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ │
│ └──────┴──────┼──────┴──────┘ │
│ ▼ │
│ ┌───────┐ │
│ │ 你的 │ ← 被隔離! │
│ │ 節點 │ │
│ └───────┘ │
│ │
│ 後果: │
│ • 看到假的區塊鏈 │
│ • 交易可能被審查 │
│ • 可能被雙花攻擊 │
└─────────────────────────────────────────────────────────────┘
防護措施:
├── 多樣化連接(不同 ASN、地區)
├── 使用 Tor(隱藏 IP)
├── 添加可信節點
└── 監控連接質量 # Eclipse 攻擊防護配置
# 添加可信節點
addnode=trusted1.example.com:8333
addnode=trusted2.example.com:8333
# 保持連接到可信節點
connect=trusted1.example.com:8333 # 只連接這些節點
# 監控連接多樣性
bitcoin-cli getpeerinfo | jq '.[].network' | sort | uniq -c
# 檢查 ASN 多樣性(需要外部工具)
bitcoin-cli getpeerinfo | jq -r '.[].addr' | \
while read ip; do whois "$ip" | grep -i origin; done
# 手動添加多樣節點
bitcoin-cli addnode "node-in-asia.example.com:8333" "add"
bitcoin-cli addnode "node-in-europe.example.com:8333" "add" 安全監控
# 監控節點狀態
# 檢查節點同步狀態
bitcoin-cli getblockchaininfo | jq '{blocks, headers, verificationprogress}'
# 監控連接
bitcoin-cli getnetworkinfo | jq '.connections'
# 檢查禁止列表
bitcoin-cli listbanned
# 監控 mempool
bitcoin-cli getmempoolinfo
# 監控腳本
#!/bin/bash
while true; do
BLOCKS=$(bitcoin-cli getblockcount)
CONNS=$(bitcoin-cli getconnectioncount)
MEMPOOL=$(bitcoin-cli getmempoolinfo | jq '.size')
echo "$(date): Blocks=$BLOCKS Connections=$CONNS Mempool=$MEMPOOL"
sleep 60
done
# 使用 Prometheus + Grafana 監控
# 安裝 bitcoin-prometheus-exporter 安全檢查清單
Bitcoin Core 節點安全檢查清單:
□ RPC 安全
├── 使用 cookie 認證
├── RPC 只監聽 127.0.0.1
├── 設置 rpcallowip 限制
└── 禁用不需要的 RPC 方法
□ 網路安全
├── 配置防火牆
├── 禁用 UPnP
├── 考慮使用 Tor
└── 監控連接多樣性
□ 錢包安全
├── 加密錢包
├── 使用強密碼
├── 定期備份
└── 考慮使用硬體錢包
□ 系統安全
├── 專用用戶運行
├── 最小權限原則
├── 保持軟體更新
└── 安全日誌管理
□ 監控
├── 監控節點狀態
├── 設置警報
└── 定期審計 總結
- ✓ RPC 安全:限制訪問,使用 cookie 認證
- ✓ 網路防護:防火牆、Tor、連接多樣性
- ✓ 錢包保護:加密、備份、硬體錢包
- ⚠ 持續監控:定期審計和更新
已複製連結