比特幣節點防火牆配置完整指南

詳細介紹比特幣節點的防火牆配置,包括 iptables、ufw、firewalld 設定,以及 Tor 節點安全配置。

比特幣節點防火牆配置完整指南

運行比特幣節點需要適當的網路安全配置。良好的防火牆設定不僅能保護你的節點,還能維護整個網路的安全性。本指南是比特幣節點架設的進階內容,同時也與比特幣節點安全最佳實踐密切相關。

為什麼需要防火牆?

比特幣節點暴露在公開網路上,面臨多種潛在威脅:

適當的防火牆配置可以有效緩解這些威脅。

基本防火牆原則

最小權限原則

只開放必要的連接埠:

網路分段

將比特幣節點隔離在專用網段:

iptables 配置

基礎設定

# 清除現有規則
iptables -F
iptables -X

# 設定預設策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允許本地迴環
iptables -A INPUT -i lo -j ACCEPT

# 允許已建立的連接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允許 SSH(限制來源 IP)
iptables -A INPUT -p tcp --dport 22 -s YOUR_IP -j ACCEPT

# 允許比特幣 P2P 連接(限制來源可選)
iptables -A INPUT -p tcp --dport 8333 -j ACCEPT
# 或者限制特定子網
iptables -A INPUT -p tcp --dport 8333 -s 10.0.0.0/8 -j ACCEPT

防禦常見攻擊

# 防止 SYN 洪水攻擊
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 防止端口掃描
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# 限制 ICMP(防止 Ping 洪水)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# 防止 IP 碎片攻擊
iptables -A INPUT -f -j DROP

Rate Limiting

# 限制來自單一 IP 的連接數
iptables -A INPUT -p tcp --dport 8333 -m connlimit --connlimit-above 10 -j DROP

# 限制新連接速率
iptables -A INPUT -p tcp --dport 8333 -m recent --set
iptables -A INPUT -p tcp --dport 8333 -m recent --update --seconds 60 --hitcount 10 -j DROP

ufw 配置(Ubuntu/Debian)

基本設定

# 安裝 ufw
sudo apt install ufw

# 設定預設策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允許 SSH
sudo ufw allow from YOUR_IP to any port 22

# 允許比特幣節點
sudo ufw allow 8333/tcp

# 啟用防火牆
sudo ufw enable

進階配置

# 限制比特幣連接速率
sudo ufw limit 8333/tcp

# 只允許特定網段
sudo ufw allow from 10.0.0.0/8 to any port 8333

# 允許 RPC(僅本地)
sudo ufw allow from 127.0.0.1 to any port 8332

firewalld 配置(CentOS/RHEL)

# 安裝 firewalld
sudo yum install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld

# 允許比特幣連接
sudo firewall-cmd --permanent --add-port=8333/tcp

# 允許 SSH
sudo firewall-cmd --permanent --add-port=22/tcp

# 重新載入規則
sudo firewall-cmd --reload

# 檢查狀態
sudo firewall-cmd --list-all

比特幣節點特定配置

bitcoin.conf 防火牆設定

# bitcoin.conf

# 綁定到特定界面
bind=127.0.0.1

# 只接受白名單節點
whitebind=10.0.0.100:8333

# 限制連接數
maxconnections=50

# 啟用黑白名單
addnode=trusted-node-ip
onlynet=onion  # 可選:只連接到 Tor 節點

RPC 安全配置

# bitcoin.conf - RPC 設定

# 禁用 RPC(如果不需要)
rpcbind=127.0.0.1
rpcbind=::1

# 設置 RPC 用戶名和密碼
rpcuser=bitcoinuser
rpcpassword=STRONG_PASSWORD_HERE

# 允許 RPC 的 IP 白名單
rpcallowip=127.0.0.1
rpcallowip=10.0.0.0/24

# 限制 RPC 訪問
rest=1

Tor 節點防火牆配置

配置 Tor 隱藏服務

# /etc/tor/torrc

HiddenServiceDir /var/lib/tor/bitcoin-node/
HiddenServicePort 8333 127.0.0.1:8333
HiddenServicePort 18333 127.0.0.1:18333

防火牆允許 Tor

# 允許 Tor 控制連接
iptables -A INPUT -p tcp --dport 9051 -j ACCEPT

# 允許 Tor 節點連接
iptables -A INPUT -p tcp --dport 9001 -j ACCEPT

# 允許 Tor 匯出連接
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

IPv6 安全配置

# 允許比特幣 IPv6 連接
ip6tables -A INPUT -p tcp --dport 8333 -j ACCEPT

# 防止 IPv6 碎片攻擊
ip6tables -A INPUT -f -j DROP

日誌監控

設置日誌記錄

# iptables 日誌
iptables -A INPUT -j LOG --log-prefix "iptables-input: "

# 分析日誌
sudo tail -f /var/log/kern.log | grep iptables

# 使用 fail2ban 自動封禁
sudo apt install fail2ban

fail2ban 配置

# /etc/fail2ban/jail.local

[bitcoind]
enabled = true
port = 8333
filter = bitcoind
action = iptables-allports[name=bitcoind]
logpath = /var/log/bitcoind/debug.log
maxretry = 10
findtime = 3600
bantime = 86400

定期安全檢查

檢查連接

# 查看當前連接
bitcoin-cli getpeerinfo | jq

# 查看連接 IP
netstat -tn | grep :8333

# 檢查異常連接
ss -tn | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn

監控腳本

#!/bin/bash
# monitor-connections.sh

LOGFILE="/var/log/btc-connections.log"
THRESHOLD=20

CURRENT=$(netstat -an | grep :8333 | grep ESTABLISHED | wc -l)

echo "$(date): $CURRENT connections" >> $LOGFILE

if [ $CURRENT -gt $THRESHOLD ]; then
    echo "Alert: High connection count: $CURRENT"
fi

災難復原

備份防火牆規則

# 匯出規則
iptables-save > /root/iptables-backup.rules

# 匯入規則
iptables-restore < /root/iptables-backup.rules

自動化備份

# crontab
0 3 * * * iptables-save > /root/iptables-$(date +\%Y\%m\%d).rules

常見問題

Q1:應該完全阻止外部連接嗎?

不完全是。比特幣網路需要節點之間互相連接。建議:

Q2:如何測試防火牆配置?

# 測試連接埠是否開放
nmap -p 8333 your-node-ip

# 測試 RPC 訪問
curl --user rpcuser:rpcpassword http://127.0.0.1:8332/rest/chaininfo.json

# 檢查監聽連接埠
ss -tlnp | grep bitcoin

Q3:Tor 和普通連接可以同時使用嗎?

可以。建議:

Q4:防火牆會影響同步速度嗎?

可能會。限制連接數會略微增加區塊同步時間,但可以提高安全性。建議:

結論

比特幣節點的防火牆配置是保護節點安全的重要環節。通過遵循最小權限原則、實施適當的訪問控制、監控網路流量,可以顯著提高節點的安全性。

如需了解更多節點相關知識,請參考:

記住:

良好的防火牆配置不僅保護你的節點,也有助於維護整個比特幣網路的安全性。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!