比特幣節點防火牆設定:由連接埠開放到規則排查的完整實作指南

比特幣節點防火牆設定:由連接埠開放到規則排查的完整實作指南
字号
【导读】比特幣節點防火牆設定完整指南:確認 bitcoind 監聽狀態,設定 UFW、firewalld 與 nftables 放行 TCP 8333,並排查雲端安全群組、路由器 NAT 與 CGNAT 造成的入站連線問題。

節點同步完成之後,許多人會盯着 getconnectioncount 的數字覺得安心,卻沒留意十幾條連接全部都是出站方向。對外撥號的能力與讓外部節點連入的通道是兩回事,比特幣節點防火牆設定的核心目標就是確保入站通道暢通。確認節點監聽狀態、配置主機防火牆、排除雲端與路由器阻礙,是完成全節點建設的關鍵環節。

即使不開放連接埠,節點依然能同步區塊、廣播交易、運行錢包,基礎功能不受影響。但開放入站連接能夠為整個比特幣網路提供區塊與交易中繼服務,提升整體網路的去中心化韌性。這項設定未完成時不會引發任何錯誤報警,只會表現為入站連接數長期停留在零。

出站與入站連接的分工

Bitcoin Core 啟動後會主動向外部對等節點發起連接,這些屬於出站連接。目標連接埠通常是對方的 8333(或其自訂連接埠)。這類流量僅受本機出站規則限制,多數 Linux 系統預設放行所有出站流量,因此單純同步區塊通常不需要調整防火牆。

入站連接則是其他節點主動連向你的公網位址與監聽連接埠。連線需依序穿透三道防線:主機防火牆軟體、雲端服務商安全群組、以及家用路由器的 NAT 轉發。任何一層未放行,外部連線就無法建立,且客戶端不會出現報錯提示。

比特幣節點防火牆設定中外部流量需依序穿過路由器轉發、雲端安全群組與主機防火牆三層防護的概念圖
外部節點入站連線需依序通過路由轉發、雲端存取清單及本機防火牆三道檢查機制。

要確認當前連接狀態,可在終端機執行指令查詢具備 “inbound”: true 屬性的節點數量:

bitcoin-cli getpeerinfo | grep -c ‘”inbound”: true’

若返回值為 0,代表目前尚無外部節點連入。可參考 Bitcoin Core 官方 RPC 文件 中關於 getpeerinfo 的欄位定義來深入理解網路拓撲。

Bitcoin Core 各網路連接埠清單

不同的比特幣網路環境使用不同的預設通訊埠,在調整防火牆前務必確認節點運行的網路類型。P2P 協議與 RPC 介面具備完全不同的安全級別:

網路類型 P2P 監聽連接埠 RPC 本地連接埠
mainnet (主網) 8333 8332
testnet4 (新測試網) 48333 48332
testnet3 (舊測試網/逐步棄用) 18333 18332
signet 38333 38332
regtest (本地私有測試) 18444 18443

比特幣 P2P 網路通訊僅使用 TCP 協議,無需放行 UDP。不使用預設連接埠的節點往往較難收到其他節點的主動連接,因為網路爬蟲與節點發現機制優先維護標準連接埠列表。

安全警告:RPC 介面預設綁定 127.0.0.1,嚴禁在防火牆或公網安全群組中向 0.0.0.0/0 放行 8332 等 RPC 連接埠。若外部程式需存取 RPC,應在 bitcoin.conf 內配置 rpcauth 認證,並透過 rpcallowip 將來源限制為特定白名單 IP。

確認節點本地監聽狀態

在調整外層防火牆前,必須先驗證 bitcoind 行程是否已在主機的正確網路介面上監聽:

sudo ss -tlnp | grep 8333

若輸出包含 0.0.0.0:8333 或 [::]:8333,表示節點已正常對外監聽。若僅看到 127.0.0.1:8333 或無任何輸出,需檢查 bitcoin.conf 是否被設定了 listen=0 或限制性的 bind 參數。

可透過 bitcoin-cli getnetworkinfo 觀察 connections_in 與 connections_out 數值。新節點啟動初期會優先建立出站連接,入站連接通常在節點位址被網路發現機制收錄後陸續增加。

主機防火牆設定實作

在 Linux 伺服器上開放 P2P 連接埠時,應遵循最小權限原則,同時確保遠端管理通道(如 SSH)的安全防護。

1. UFW (Ubuntu / Debian)

在配置 UFW 前,先檢查既有的規則編號。若先前已存在全放行的 22 規則,需先刪除舊規則再套用速率限制,以防規則順序導致限速失效:

# 查看現有規則與編號
sudo ufw status numbered
## 若已存在 22/tcp allow 規則,刪除對應編號(例如第 1 條)
## sudo ufw delete 1
## 套用 SSH 連線頻率限制並開放比特幣主網 P2P 連接埠
sudo ufw limit 22/tcp comment ‘SSH rate limited’
sudo ufw allow 8333/tcp comment ‘Bitcoin P2P mainnet’
sudo ufw enable
sudo ufw reload

2. firewalld (RHEL / Rocky Linux / Fedora)

firewalld 採用區域(zone)管理規則,需使用 –permanent 參數使規則持久化:

sudo firewall-cmd –get-active-zones
sudo firewall-cmd –permanent –zone=public –add-service=ssh
sudo firewall-cmd –permanent –zone=public –add-port=8333/tcp
sudo firewall-cmd –reload
sudo firewall-cmd –zone=public –list-all

3. nftables (原生過濾規則鏈)

若使用原生 nftables,可建立包含連線追蹤、ICMPv4/ICMPv6 診斷放行與 8333 連接埠的規則鏈:

nft add table inet filter
nft add chain inet filter input ‘{ type filter hook input priority 0; policy drop; }’
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input iif lo accept
nft add rule inet filter input tcp dport 22 ct state new accept
nft add rule inet filter input tcp dport 8333 ct state new accept
nft add rule inet filter input ip protocol icmp icmp type echo-request accept
nft add rule inet filter input ip6 nexthdr icmpv6 icmpv6 type { echo-request, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept
## 保存規則至設定檔並啟用服務
sudo sh -c ‘nft list ruleset > /etc/nftables.conf’
sudo systemctl enable –now nftables

雲端安全群組與外層路由配置

主機防火牆放行後,流量仍需通過雲端廠商或邊界設備的存取控制清單:

  • AWS EC2:在實例所屬 Security Group 的 Inbound Rules 中,新增 Custom TCP、Port 8333、Source 0.0.0.0/0(及 ::/0 放行 IPv6)。
  • Google Cloud Platform (GCP):於 VPC 網路的防火牆規則中,新增允許 tcp:8333 入站規則,並透過 Target tags 套用至節點實例。
  • Oracle Cloud (OCI):需同時確認 Security List 與 NSG(網路安全群組)放行 8333,且 Oracle 提供的 Ubuntu 映像檔內建 iptables 規則亦需手動同步放行。
  • 家用路由器與 CGNAT 排除:在家中運行節點時,需在路由器設定連接埠轉發(Port Forwarding),將外部 TCP 8333 導向節點的內部固定 IP。若路由器的 WAN IP 落在 100.64.0.0/10 網段,代表處於電信商 CGNAT 環境下,連接埠轉發將無法生效,需向電信商申請固定公網 IP 或改行洋蔥網路。

Docker 容器網路的防火牆陷阱

使用 Docker 部署節點時,預設的連接埠映射參數(如 -p 8333:8333)會自動修改 iptables 的 PREROUTING 鏈,繞過 UFW 等常規防火牆規則。這常導致 UFW 狀態與實際開放狀態不一致。

若需嚴格管理暴露介面,可將容器連接埠明確綁定至指定 IP,或查閱 iptables 的 DOCKER 鏈轉發規則:

sudo iptables -t nat -L DOCKER -n

外部可達性驗證與排查流程

驗證連接埠是否真正對外開放時,切勿在同一個區域網路內測試。應使用外部網路進行探測:

  • 行動網路熱點測試:使用切換至行動網路的筆電或外網主機執行 nc -zv [公網IP] 8333,連線成功應回傳 open 或 succeeded。
  • 在線掃描工具:利用公網開放的 Port Check 服務輸入節點公網 IP 與 8333 連接埠測試連通性。
  • 觀察真實入站連線:維持節點運行一段時間後,檢查 bitcoin-cli getpeerinfo 是否出現 inbound 為 true 的連線。

入站數長期為 0 的排查清單

  1. 檢查本地監聽:執行 ss -tlnp | grep 8333 確認是否綁定在 0.0.0.0 或 [::]。
  2. 檢查主機防火牆:確認 UFW、firewalld 或 nftables 已放行 TCP 8333。
  3. 檢查外層安全組:核對雲端控制台入站規則是否覆蓋 8333。
  4. 檢查網路拓撲:家用環境確認已排除 CGNAT 且路由器已設定 NAT 轉發。
  5. 資源參數配置:若伺服器頻寬有限,可在 bitcoin.conf 設定 maxuploadtarget=5000(每日 MB 上限),避免因過度上傳擠佔頻寬,而無需手動縮減連接數量。

常見問題解答 (FAQ)

Q1: 不開放入站連接埠 8333,比特幣節點還能正常運作嗎?

可以。節點依舊可以正常同步最新區塊、驗證交易並發送交易。開放 8333 連接埠主要能讓你的節點成為全功能的中繼節點,幫助其他新節點同步與廣播數據,強化比特幣網路的去中心化能力。

Q2: 開放 8333 連接埠會不會增加伺服器被黑客攻擊的風險?

Bitcoin Core 的 P2P 通訊層專門針對不可信的外部輸入進行嚴格校驗與緩衝區保護,並內建對異常對等節點的懲罰與斷開機制。只要嚴格禁止對外開放 RPC 連接埠 (8332),並對 SSH 連接埠做好速率限制或金鑰認證,僅暴露 8333 P2P 連接埠是標準且安全的做法。

比特幣節點防火牆設定中開放P2P通訊埠與嚴格隔離RPC內部介面的安全架構對照
運行比特幣節點時僅需對外放行P2P同步通道,RPC管理介面則必須維持內部隔離以確保系統安全。

Q3: 身處家用寬頻 CGNAT 環境,不想加購公網 IP 該如何接收外部連接?

可搭配 Tor 洋蔥服務(Onion Service)運行節點。在本地配置 Tor 守護程序與控制連接埠後,Bitcoin Core 能夠建立 v3 洋蔥位址。洋蔥網路的所有連線均由本地節點向外建立連線隧道,完全無需在路由器或防火牆上進行連接埠轉發與開放,即可接收來自 Tor 網路的對等連線。

Q4: 為什麼我的防火牆與雲端安全群組都開了,入站數依然增加得很慢?

比特幣網路的節點發現是一個漸進過程。其他節點需要透過 DNS 種子或已連線節點的 addr 訊息逐步獲取你的公網位址。節點剛啟動的前幾小時入站連接較少屬於正常現象,通常在穩定運行數小時至一天後,入站連接數會逐步增長。

admin

作者负责资讯整理、核查与撰写。 · 已发布 93 篇文章

查看作者全部文章