我使用go-ethereum实现以太坊PoA网络
我已经在网络上部署了ERC20令牌,其想法是必须从Internet上的任何钱包(例如元掩码,myetherwallet等)访问该网络
该网络的想法是:
为了达到这个目的,我创建了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
如您所见,这些节点有一些重要的事情:
如果我向互联网公开这样的节点(允许从任何来源进行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访问相关的一些问题:
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 =外部地址 本质上向世界上任何人开放该节点。 此外,--rpcapi'admin,personal,db,eth,net,web3,txpool,miner' 允许任何人有权做任何事情。我能想象 来自互联网的某人会强行强制使用密码。
https://github.com/ethereum/go-ethereum/issues/17417#issuecomment-413877558
答案 0 :(得分:1)
这种方法安全吗?
您有大致的想法,是的,但是仍有改进的空间。
personal
同时启用-unlock
API的节点,该节点将永久使该帐户能够被任何有权访问您节点的人访问。想象一下,某人已经通过其他门访问了您的节点,他们将能够立即从该帐户花费您的资金,以从本地主机生成交易。请考虑只在该节点上公开 safe API还是完全删除 unlock 语句。还有没有其他方法可以允许世界上任何人使用Metamask来打我的智能合约,而无需在标准节点上打开RPC访问权限?
您是否考虑过研究诸如poa.net之类的公共PoA网络?基本上,这使您的用户可以将metamask或mycrypto连接到POA的现有基础结构。