如何保护你的以太坊网络节点RPC免受黑客攻击?

最近朋友的以太坊节点遭到黑客攻击,存储在Geth钱包中的以太币通过暴露的RPC端口命令被转移出去,Transfer可以在下面看到。

![](http://blog.hubwiz.com/2019/05/05/ethereum-node-security/1.png)

下图显示了最近向黑客帐户的转移:

![](http://blog.hubwiz.com/2019/05/05/ethereum-node-security/2.png)

保护计算机系统传统上是一场斗智斗勇,Gosser说”穿透者试图找到漏洞,设计师试图关闭它们。”

与大多数比特币客户端不同,默认情况下,大多数以太坊客户端RPC不受密码保护。

尽管如此,有多种方法可以保护以太坊节点RPC。

其中一些方法包括:

- 1.为帐户选择一个强密码。

- 2.使用Nginx作为反向代理和HTTP基本身份验证。

- 3.使用UFW设置防火墙。

### 安装以太坊客户端

以太坊有两个主要客户Parity和Geth。安装任何一个都可以很好地与以太坊网络进行交互。

你可以通过以下任一文章安装:

- [https://github.com/ethereum/go-ethereum/wiki/Installing-Geth](https://github.com/ethereum/go-ethereum/wiki/Installing-Geth)

- [https://wiki.parity.io/Setup](https://wiki.parity.io/Setup)

### 配置节点

从来没有这样做过!!!

在GETH节点上启用RPC访问时,不允许在解锁帐户的情况下允许对RPC进行外部访问。例如:

```

$ geth — rpc — rpcaddr 0.0.0.0 — rpcport 8545 — rpcapi “db, eth, net, web3, personal” — ipcapi “admin,eth,debug,personal,web3” — unlock <addrs>

```

你基本上允许外部访问你的以太坊帐户,并且当你解锁帐户时,攻击者可以轻松转出存储在你钱包中的以太币。

由于此错误而被黑客入侵的示例:

[https://ethereum.stackexchange.com/questions/3887/how-to-reduce-the-chances-of-your-ethereum-wallet-getting-hacked?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa](https://ethereum.stackexchange.com/questions/3887/how-to-reduce-the-chances-of-your-ethereum-wallet-getting-hacked?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)

- 还有我的朋友:)

### 保护你的以太坊节点

#### 1.为帐户选择强随机密码

在Parity或Geth上创建帐户时,请选择一个强大的随机密码。可以从以下站点生成密码:

- [https://passwordsgenerator.net/](https://passwordsgenerator.net/)

- [https://lastpass.com/generatepassword.php](https://lastpass.com/generatepassword.php)

- [https://www.random.org/passwords/](https://www.random.org/passwords/)

#### 2.使用Nginx HTTP基本身份验证

- 安装Nginx

你需要在服务器上安装和配置Nginx,你可以按照此[Nginx文章](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-14-04-lts)进行操作。

- 设置HTTP Auth基本凭据

在此步骤中,你将为运行该节点的用户创建密码。

该密码和关联的用户名将存储在你指定的文件中。密码将被加密,文件名可以是你喜欢的任何名称。

```

$ sudo htpasswd -c /etc/nginx/.htpasswd nginx

```

你可以检查新创建的文件的内容以查看用户名和哈希密码。

```

$ cat /etc/nginx/.htpasswd

```

- 更新Nginx配置

现在我们已经创建了HTTP基本身份验证凭据,下一步是更新Nginx配置以查看它。

```

$ sudo nano /etc/nginx/sites-available/default

```

更新文件以包含这些内容:

```

server {

listen 80;

listen [::]:80;

# ADDED THESE TWO LINES FOR AUTHENTICATION

auth_basic “Protected Ethereum client”;

auth_basic_user_file /path/to/passwords;

server_name example.com;

location / {

      proxy_pass http://localhost:8545/;

      proxy_set_header Host $host;

}

}

```

- 测试

要应用更改,请先重新加载Nginx。

```

$ sudo service nginx reload

```

你现在可以访问RPC URL

**http://<USERNAME>:<PASSWORD>@mydomain.com**

你还可以安装可以从letsencrypt获得的免费SSL证书,你可以在[此处](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04)找到该教程。

### 3.使用UFW设置防火墙

UFW或Uncomplicated Firewall是iptables的一个接口,旨在简化配置防火墙的过程。

- 安装UFW

```

$ sudo apt-get install ufw

```

- 设置默认策略

```

$ sudo ufw default deny incoming

$ sudo ufw default allow outgoing

```

- 允许以太网网络端口

我们还将启用以太坊网络,以便我们的节点能够与公共区块链网络进行通信和同步。

以太坊网络端口是30303,

```

$ sudo ufw allow 30303

```

- 启用RPC端口

我们只允许从我们的可信节点连接到我们的以太坊客户端。以太坊端口的默认RPC端口为8545。

```

$ sudo ufw allow from <IP addr> to any port 8545

```

例如,如果我的外部服务器IP地址是192.148.16.1,设置:

```

$ sudo ufw allow from 192.148.16.1 to any port 8545

```

如果你使用的是与8545不同的不同RPC端口,则应指定它。

- 启用UFW

启用UFW

```

$ sudo ufw enable

```

- 允许其他连接

你也可以根据需要启用其他端口,例如:HTTP 端口80,使用此命令可以允许HTTP连接(未加密的Web服务器使用的连接):

```

$ sudo ufw allow http

```

你的防火墙现在应配置为允许连接到以太坊RPC和网络端口。确保允许服务器需要的任何其他传入连接,同时限制任何不必要的连接,以便你的服务器功能和安全。

### 结论

安全性是区块链生态系统中的一个主要讨论。到处都有黑客想要偷走你的硬币。

如果你想学习区块链并在Blockchain Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric等区块链相关的交互式在线编程实战教程:

> - [java以太坊开发教程](http://xc.hubwiz.com/course/5b2b6e82c02e6b6a59171de2?affid=cdldy),主要是针对java和android程序员进行区块链以太坊开发的web3j详解。

> - [python以太坊](http://xc.hubwiz.com/course/5b40462cc02e6b6a59171de4?affid=cdldy),主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。

> - [php以太坊](http://xc.hubwiz.com/course/5b36629bc02e6b6a59171de3?affid=cdldy),主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。

> - [以太坊入门教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=cdldy),主要介绍智能合约与dapp应用开发,适合入门。

> - [以太坊开发进阶教程](http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6?affid=cdldy),主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

> - [ERC721以太坊通证实战](http://xc.hubwiz.com/course/5c6ed395070c379b559a813a?affid=cdldy),课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。

> - [C#以太坊](http://xc.hubwiz.com/course/5b6048c3c02e6b6a59171dee?affid=cdldy),主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。

> - [java比特币开发教程](http://xc.hubwiz.com/course/5bb35c90c02e6b6a59171df0?affid=cdldy),本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。

> - [php比特币开发教程](http://xc.hubwiz.com/course/5b9e779ac02e6b6a59171def?affid=cdldy),本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

> - [c#比特币开发教程](http://xc.hubwiz.com/course/5c766a59f54a5e207931b5a5?affid=cdldy),本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。

> - [EOS入门教程](http://xc.hubwiz.com/course/5b52c0a2c02e6b6a59171ded?affid=cdldy),本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

> - [深入浅出玩转EOS钱包开发](http://xc.hubwiz.com/course/5c79edcaf697372707791512?affid=cdldy),本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。

> - [Hyperledger Fabric 区块链开发详解](http://xc.hubwiz.com/course/5c9b89f54898e59b7b63430a?affid=cdldy),本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。

> - [Hyperledger Fabric java 区块链开发详解](http://xc.hubwiz.com/course/5c9b89f54898e59b7b63430a?affid=cdldy),课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。

> - [tendermint区块链开发详解](http://xc.hubwiz.com/course/5bdec63ac02e6b6a59171df3?affid=cdldy),本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是[如何保护你的以太坊网络节点RPC免受黑客攻击?](http://blog.hubwiz.com/2019/05/05/ethereum-node-security/)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容