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

本贴最后更新于 2018 天前,其中的信息可能已经时移世异

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

1.png

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

2.png

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

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

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

其中一些方法包括:

  • 1.为帐户选择一个强密码。
  • 2.使用 Nginx 作为反向代理和 HTTP 基本身份验证。
  • 3.使用 UFW 设置防火墙。

安装以太坊客户端

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

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

配置节点

从来没有这样做过!!!

在 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>

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

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

  • 还有我的朋友:)

保护你的以太坊节点

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

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

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

  • 安装 Nginx

你需要在服务器上安装和配置 Nginx,你可以按照此 Nginx 文章进行操作。

  • 设置 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://:@mydomain.com

你还可以安装可以从 letsencrypt 获得的免费 SSL 证书,你可以在此处找到该教程。

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 建立职业生涯,那么请查看我们分享的一些以太坊区块链相关的交互式在线编程实战教程:

  • java 以太坊开发教程,主要是针对 java 和 android 程序员进行区块链以太坊开发的 web3j 详解。
  • python 以太坊,主要是针对 python 工程师使用 web3.py 进行区块链以太坊开发的详解。
  • php 以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与 dapp 应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用 node.js、mongodb、区块链、ipfs 实现去中心化电商 DApp 实战,适合进阶。
  • ERC721 以太坊通证实战,课程以一个数字艺术品创作与分享 DApp 的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含 ERC-721 标准的自主实现,讲解 OpenZeppelin 合约代码库二次开发,实战项目采用 Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用 C#开发基于.Net 的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...