跳至主要內容
進階

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、連接多樣性
  • 錢包保護:加密、備份、硬體錢包
  • 持續監控:定期審計和更新
已複製連結
已複製到剪貼簿