【发布时间】:2019-01-27 04:29:10
【问题描述】:
我正在使用 go-ethereum 实现一个以太坊 PoA 网络
我在网络上部署了一个 ERC20 代币,其想法是必须从互联网上的任何钱包访问网络(即 metamask、myetherwallet 等)
这个网络的想法是:
- 拥有 N 个能够封存区块的完整节点(节点有未锁定的账户)
- 部署作为 ERC20 代币的智能合约
- 拥有一个暴露网络的节点以便从任何来源访问,例如 Metamask、MyEtherWallet、带有钱包的移动应用程序等。这个想法是 任何人如果他们有合适的客户,可以点击 ERC20 Token。
为了实现这一点,我创建了 2 个完整节点来负责密封块。
我像这样运行这些节点:
geth --datadir sealer1/ --syncmode 'full' --port 30351 --rpc --rpcaddr 'localhost' --rpcport 8502 --rpcapi='admin,personal,db,eth,net,web3,txpool,miner' --networkid 20 --gasprice '1' -unlock 'someaccount' --password s2/password.txt --mine
如您所见,关于这些节点有一些重要的事情:
- 解锁帐户
- 只能从 localhost 访问(注意 rpcaddres)
- 这些节点是矿工
如果我将这样的节点暴露给互联网(允许从任何来源进行 RPC 访问),任何黑客都可以将以太币发送到另一个帐户,因此,我创建了第三个节点,一个标准节点,它不暴露 rpc api,但允许端口 8545 上的连接(以便从 metamask、myetherwallet 等中访问)
我用这个命令运行节点:
geth --datadir standard1/ --syncmode 'full' --port 30352 --rpc --rpcport 8545--rpccorsdomain '*' --rpcaddr 'SERVER_PUBLIC_IP' --networkid 20 --gasprice '1'
你可以看到这个节点:
- 未解锁帐户
- 允许从任何来源访问 rpc
- 不公开 rpc api,如个人、管理员等
我的问题是:
- 这种方法安全吗?
- 是否有另一种方法可以让世界上的任何人使用 Metamask 来访问我的智能合约,而无需在标准节点上打开 RPC 访问?
为什么我有这些问题?
因为有很多地方不推荐开放RPC端口,所以我不安全如果:
- 没有使用解锁帐户暴露的节点
- 不要暴露关键的 rpc api,例如管理员和个人
足以安全地公开我的节点。
以下是一些与打开 RPC 访问相关的问题:
https://blog.blockdaemon.com/ethereum-geth-configuration-made-in-ireland-7ba2e876c6e3 https://www.reddit.com/r/ethereum/comments/4z0mvi/ethereum_nodes_with_insecure_rpc_settings_are/
https://www.reddit.com/r/ethereum/comments/3ird55/holy_shit_my_eth_accounts_been_hacked/
https://www.reddit.com/r/ethereum/comments/4jav5u/mist_wallet_has_2_sec_vulnerability_for_rpc/
https://blog.3or.de/internet-wide-ethereum-json-rpc-scans.html
https://www.bokconsulting.com.au/blog/7218-ethers-stolen-from-miner-with-rpc-port-open/
这里是以太坊推荐组长:
好的,您的设置似乎非常危险。 --rpcaddr=external_address 本质上向世界上的任何人开放节点以访问它。 Forthermore, --rpcapi 'admin,personal,db,eth,net,web3,txpool,miner' 允许任何有权做任何事情的人。我能想象 来自互联网的某人正在暴力破解密码。
https://github.com/ethereum/go-ethereum/issues/17417#issuecomment-413877558
【问题讨论】:
标签: ethereum go-ethereum metamask