Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

关于 geth 节点安全

杨小公子君莫邪
162 0 0
前段时间有写过一个小文,用来给需要搭建 geth 节点的朋友们做些指引。所用命令如下:8 ?) M( i' u, |* z. q( {5 o$ J

3 x- |, ]; k$ H5 D# D* Mgeth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 0.0.0.0  --ws --wsaddr 0.0.0.0 --wsport 6667 --wsorigins "*"
9 N. Q. ~: i4 d+ K/ @- I/ R2 f
1 ~9 s7 V5 h7 f2 j) D6 ~, x% S5 U本文以此命令为基础,谈谈需要关注的安全方面的问题。5 ^" s* b3 N/ n2 J9 I1 y2 }) V8 b
9 d0 u) v  I& {: T1 n- p* @" M& y9 P
0x01 防火墙应该放开哪些端口- X1 p5 r- T7 L8 m' \5 J# H4 N

/ o$ T8 R, y4 V) s% S$ f推荐放开的端口:30303& r" z) z: ?: y# R2 w) g4 [
1 D0 q1 q( b' d4 }
这是 geth 节点之间相互连接建立 p2p 网络的端口,放开此端口可以大大提高数据同步的稳定性。$ |3 P8 j7 O7 K! P, ?
8 v/ V! m, t6 n& S( {
选择性放开的端口:6666 与 66677 _4 M2 j" i* q8 [
3 q- w- \  a  m: R) E8 a# f4 @1 Y
如果只需要 http 连接,放开 rpc 端口 6666 就足够了。如果还需要 web socket 连接,才需要放开 6667 端口。
  P* l% p  D0 Z: H$ o, O* j1 H  O. p& v/ H! E6 {( v
0x02 应该让节点做什么事情: {6 v9 Z2 R: c/ j; |

, x% H$ V# F& Y  h/ m在放开 rpcport 或 wasport 的情况下,非常不建议在此节点上进行账户管理
: E( A& P0 j$ m* L( G6 Z
7 u3 u9 R/ l0 L8 K# I2 V' ~! V# Y一般来说,做应用开发时我们所搭建的节点,主要用来做两个事情:
& t" l/ V3 c6 |# x
$ j2 X( t/ I; Z# i7 [$ G查询数据. V% r. ^3 F2 E; y( h

. m/ S6 ]  \; r, x广播交易' ?& ]2 L- q; B6 T( W) d: c( N

8 y+ |$ l( [! w  |1 A5 i) a账户管理,最好在去中心化钱包中去做。将签名后的交易通过 sendRawTransaction 发送到我们搭建的节点上。' E/ G& i% |& U* j

5 b+ T- G- C/ O& S0x03 rpcaddr 与 wsaddr
! `# i0 @2 n- T, I9 O
% t" e/ ]2 e3 i& h3 s& Z5 f0 |2 L) N/ L当这两个参数的值设为 0.0.0.0 时,将允许来自任何机器的 http 和 web socket 连接。
0 X6 _+ O. A  m& V4 \9 v  ~  g1 l' G2 z; B. z% n4 D
这个时候如果在自己搭的 geth 节点上创建或导入钱包,并执行 personal.unlockAccount 命令,别人就可以通过开放的 http或 web socket 连接执行sendTransaction调用将钱包中的以太币资产转出。
0 \" W" d: {$ H  d* R6 }0 w7 n: o! Q* |
0x04 对节点的进一步加固
2 R' T5 a6 z! a# A' A4 j+ s* A& {( p& i: n' @; ]1 R, @* C, D$ [
SSH Tunnel+ h2 D: u/ Y  ^. a8 G

! y9 v  G( w; ~5 I! V8 s通过下面的命令将远程调用限制于本地连接,这里将rpcaddr和 wsaddr 参数的值都设为了 127.0.0.1, f3 S& R: Y( Q# n7 e* P

; m/ m$ \+ ]7 D2 Lgeth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 127.0.0.1  --ws --wsaddr 127.0.0.1 --wsport 6667 --wsorigins "*") C; B; `8 T0 z" X. R
, s5 u  D  W' M" |0 ^0 Z' v* S
其它机器要调用这个节点怎么办呢?可以通过 SSH Tunnel 建立该机器与节点机器间的可信连接。
) o% M$ Z0 _! }4 S  k3 @
7 m0 r$ ~1 O5 ]/ m0 WBasic Auth; t6 z3 O5 i5 _$ J0 W0 ?8 H( r. j

, L5 L8 {3 Q5 _1 p可以在节点服务器上搭建 nginx 服务器,配置相应的 basic auth,通过用户名密码来限制对 geth 节点 rpc 服务的调用。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

杨小公子君莫邪 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13