关于 geth 节点安全
杨小公子君莫邪
发表于 2022-12-15 05:47:33
127
0
0
: ]9 \7 E& Q J8 Q' [
geth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 0.0.0.0 --ws --wsaddr 0.0.0.0 --wsport 6667 --wsorigins "*"
本文以此命令为基础,谈谈需要关注的安全方面的问题。
8 t# l/ h! A7 u
0x01 防火墙应该放开哪些端口$ D6 d3 X/ F' T) z w6 k4 Y
, A8 {( C# t1 C6 @
推荐放开的端口:30303
P0 [7 I# {! {/ k4 M9 H& x
这是 geth 节点之间相互连接建立 p2p 网络的端口,放开此端口可以大大提高数据同步的稳定性。. C: `+ T9 V" c/ D/ A
选择性放开的端口:6666 与 66674 Q6 [6 O& v2 t: w2 u+ {# z* ~
如果只需要 http 连接,放开 rpc 端口 6666 就足够了。如果还需要 web socket 连接,才需要放开 6667 端口。& J+ x7 j) I7 E& _
0x02 应该让节点做什么事情! W& ?. o# c" N7 S
在放开 rpcport 或 wasport 的情况下,非常不建议在此节点上进行账户管理0 ?8 F" S3 r, ^, O3 {, ~ d
一般来说,做应用开发时我们所搭建的节点,主要用来做两个事情:
: C1 e0 k, p- P I5 Y/ U
查询数据: T3 e* p( {3 L& Q1 n
广播交易
账户管理,最好在去中心化钱包中去做。将签名后的交易通过 sendRawTransaction 发送到我们搭建的节点上。
0x03 rpcaddr 与 wsaddr0 | d" {6 s$ h+ [
当这两个参数的值设为 0.0.0.0 时,将允许来自任何机器的 http 和 web socket 连接。
这个时候如果在自己搭的 geth 节点上创建或导入钱包,并执行 personal.unlockAccount 命令,别人就可以通过开放的 http或 web socket 连接执行sendTransaction调用将钱包中的以太币资产转出。( h8 |0 r3 ^! l3 M( E- |
0x04 对节点的进一步加固
SSH Tunnel
& f; L# R5 u0 W/ \' O
通过下面的命令将远程调用限制于本地连接,这里将rpcaddr和 wsaddr 参数的值都设为了 127.0.0.1
% Y8 y! ~' T. E2 W( d" ~; E5 `
geth --datadir --cache 4096 data --rpc --rpcport 6666 --rpcaddr 127.0.0.1 --ws --wsaddr 127.0.0.1 --wsport 6667 --wsorigins "*"
其它机器要调用这个节点怎么办呢?可以通过 SSH Tunnel 建立该机器与节点机器间的可信连接。. R+ S* K( @) X8 U+ T9 `% t
; P/ P/ h& _- q- g: x+ |) L5 ]& X4 i
Basic Auth
5 Y7 r+ ]5 S6 y* Q% M0 Z. H
可以在节点服务器上搭建 nginx 服务器,配置相应的 basic auth,通过用户名密码来限制对 geth 节点 rpc 服务的调用。
成为第一个吐槽的人