Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

关于 geth 节点安全

杨小公子君莫邪
163 0 0
前段时间有写过一个小文,用来给需要搭建 geth 节点的朋友们做些指引。所用命令如下:
$ i# E6 P+ U- A( Q% }. `. S  T' a& ]' A6 o4 G" `
geth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 0.0.0.0  --ws --wsaddr 0.0.0.0 --wsport 6667 --wsorigins "*"
1 v" {# W: v/ V( M0 i8 M; F& m0 V, ?7 F3 p+ r; M$ B4 N
本文以此命令为基础,谈谈需要关注的安全方面的问题。/ W1 I# m% g/ A# h% d! }5 W

/ I5 ^0 p+ S! `4 P/ Q. Q0x01 防火墙应该放开哪些端口
7 S( h+ }$ E/ Y7 t% w
0 q7 g$ {' ^! V! j推荐放开的端口:30303' c* f  c" A* {0 T1 D

) {4 p5 q: {' n这是 geth 节点之间相互连接建立 p2p 网络的端口,放开此端口可以大大提高数据同步的稳定性。: n& r7 P0 z% @; D! V
# _# x: I. r0 Q+ F4 {) f/ C1 r0 @
选择性放开的端口:6666 与 6667" ]$ i. W5 m9 o2 s
7 p& J2 w; c0 C7 j
如果只需要 http 连接,放开 rpc 端口 6666 就足够了。如果还需要 web socket 连接,才需要放开 6667 端口。( z4 ?) m2 L$ B4 h* R
( ]" [4 Q' N. P* u& a5 W
0x02 应该让节点做什么事情
4 \# A0 i& K5 [1 w& q% \5 ~/ R3 ~
在放开 rpcport 或 wasport 的情况下,非常不建议在此节点上进行账户管理
/ I/ h3 N" `5 O( J4 i8 t, I9 E+ {5 e6 ~' T- k5 L1 S, r
一般来说,做应用开发时我们所搭建的节点,主要用来做两个事情:
) ?2 r+ Q9 U2 h' j, j
8 ]5 X$ d' L5 K5 ]* I查询数据$ C% Q9 J8 U. b6 H

2 p/ m/ o  a# Y0 N广播交易6 j7 u& h7 e' \/ l0 x2 T
* A0 ?& v# s& Y: A/ Q
账户管理,最好在去中心化钱包中去做。将签名后的交易通过 sendRawTransaction 发送到我们搭建的节点上。
- W0 |* X9 i! g1 U7 J; o  q7 I* Z: {9 P* D6 w
0x03 rpcaddr 与 wsaddr9 R9 s! g9 r. }+ n. u; M( }

9 [" \/ ?8 E! n( t' e7 o3 m* |当这两个参数的值设为 0.0.0.0 时,将允许来自任何机器的 http 和 web socket 连接。3 o( o9 Q2 X9 L( z- W5 `
: E1 Q7 S6 @) |- k7 D% V
这个时候如果在自己搭的 geth 节点上创建或导入钱包,并执行 personal.unlockAccount 命令,别人就可以通过开放的 http或 web socket 连接执行sendTransaction调用将钱包中的以太币资产转出。& Q9 j1 o; T/ k3 z( x& ^( B' F/ Y

! i, _6 s6 T; \0 g" X* k1 ~+ \& W0x04 对节点的进一步加固8 S* W0 L4 |( v- ^$ B! f7 A  O& G

" x0 O5 u0 K# ^6 [$ y4 o" P0 ?+ zSSH Tunnel
1 w8 f: E) E' \. r+ b$ b: y* D9 x+ R$ ~2 a  ~# L
通过下面的命令将远程调用限制于本地连接,这里将rpcaddr和 wsaddr 参数的值都设为了 127.0.0.11 ?& D' h1 \! y8 s- h% q, u0 t6 ?

4 ^( T3 a; r6 @6 |) v$ Z' p/ \geth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 127.0.0.1  --ws --wsaddr 127.0.0.1 --wsport 6667 --wsorigins "*"$ h, F+ F0 h' E1 y. \) V! b

- [& r* k" ~9 K( M' \其它机器要调用这个节点怎么办呢?可以通过 SSH Tunnel 建立该机器与节点机器间的可信连接。
. C" I. `0 {5 I" Q6 ?  v% i% t3 i2 L9 u4 c: q: x; R% q! d
Basic Auth
4 P8 n2 t, F7 ~  P9 B+ h
; _  s: L* Q5 [# x可以在节点服务器上搭建 nginx 服务器,配置相应的 basic auth,通过用户名密码来限制对 geth 节点 rpc 服务的调用。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13