如何设置自己的Forta/Erigon节点

  • mixbytes
  • 发布于 2024-02-25 16:44
  • 阅读 26

本文详细介绍了如何设置和运行一个Forta扫描节点,包括服务器的购买要求、基本设置、安全保护、组件安装及Forta的初始化和注册步骤。作者还提供了丰富的代码示例和操作步骤,适合对区块链监控网络有兴趣的技术人员。文中也涉及到Erigon节点的设置和监控,内容结构清晰,信息量丰富。

作者: Evgeny Pleskach

MixBytes 的安全研究员

简介

Forta 是一个用于区块链活动的安全与操作监控的实时检测网络。

作为一个去中心化的监控网络,Forta 能够即时检测 DeFi、NFT、治理、桥接和其他 Web3 系统的威胁和异常。它帮助协议和投资者快速应对,以消除威胁并通过及时和相关的警报,防止或最小化资金的损失。

Forta 拥有一个去中心化的扫描节点网络;任何人都可以参与这个网络并运行自己的扫描节点。

在本文中,我们想要描述运行一个扫描节点所需的所有步骤,以及一些安全建议和最佳实践。

官方文档: https://docs.forta.network/en/latest/scanner-quickstart/

为 Forta 购买服务器

根据文档,要求如下:

  • 64 位 Linux 发行版
  • 4 个以上核心的 CPU
  • 16GB 内存
  • 连接互联网
  • Docker v20.10+
  • 100GB SSD(除了全节点的要求)
  • 推荐:全节点(任何链)

你可以选择任何云服务,例如,选择了具有以下参数的 DigitalOcean:

  • 4 个虚拟 CPU
  • 32GB 内存
  • 100GB 磁盘
  • AMS

Forta 的基本服务器设置

用户设置

## 以 root 用户登录并创建一个新用户
adduser bastion
passwd bastion

## 在系统上安装编辑器
apt install mc nano -y

## 授予用户 root 权限,向文件中添加一行
## 通过 mcedit 打开 /etc/sudoers
mcedit /etc/sudoers

## 向文件中添加这一行并关闭文件
bastion ALL=(ALL:ALL) NOPASSWD:ALL

## 切换到用户
su - bastion

## 创建目录和文件以存储
mkdir .ssh && nano .ssh/authorized_keys
## 这里应该放置一个公开的 ssh 密钥

## 更改目录和文件的权限
chown -R bastion:bastion /home/bastion/.ssh/ && chmod 700 /home/bastion/.ssh/ && chmod 600 /home/bastion/.ssh/authorized_keys

## 远程禁用 root 用户
sudo mcedit /etc/ssh/sshd_config
## 在文件 /etc/ssh/sshd_config 中添加一行
PermitRooLogin no

## 重启 ssh 服务
sudo systemctl restart sshd

为 Forta 提供基本服务器保护

在上一步中,我们远程禁用了 root 用户,并且需要配置防火墙以访问 22 端口上的服务器。

以下是在 DigitalOcean 云中采取措施的示例步骤:

1. 去管理面板: https://cloud.digitalocean.com/ 2. 查找你的服务器并进入其设置。

3. 找到防火墙部分并进入(默认没有防火墙,你需要创建它并将其添加到所需服务器)。

4. 更改规则。

4.1. 我们建议允许所有端口访问管理 IP 地址,并禁止除了用于 Forta 操作的端口以外的所有端口。

5. 添加服务器,等待规则应用。

安装 Forta 的工作组件

为了在警报中生成正确的时间戳并避免在发布警报时出现授权问题,你必须始终确保系统时间是正确的。如果系统时间不正确,你的节点将无法发布警报,可能因此而无法获得奖励。

我们建议使用 systemd-timesyncd,它广泛可用并且作为时间同步守护程序足够。启用后,它会定期在后台同步系统时间。

要启用 systemd-timesyncd 并检查结果,你可以按如下方式操作:

$ sudo systemctl enable systemd-timesyncd
$ sudo systemctl start systemd-timesyncd
$ timedatectl status
               本地时间: Tue 2022-01-01 17:00:00 -03
           协调世界时: Tue 2022-01-01 20:00:00 UTC
                 RTC 时间: Tue 2022-01-01 20:00:00
                时区: America/Argentina/Buenos_Aires (-03, -0300)
系统钟同步: 是
              NTP 服务: 活动 <------------------- (工作正常)
          RTC 在本地时区: 否

安装 Docker(至少 v20.10)

官方指南: https://docs.docker.com/engine/install/

我们必须添加网络参数以便 Docker 工作。

在你的 /etc/docker 目录中添加一个名为 daemon.json 的文件,以下内容:

{
   "default-address-pools": [\
        {\
            "base":"172.17.0.0/12",\
            "size":16\
        },\
        {\
            "base":"192.168.0.0/16",\
            "size":20\
        },\
        {\
            "base":"10.99.0.0/16",\
            "size":24\
        }\
    ]
}

要应用更改,我们必须运行:

systemctl restart docker

Forta 安装

Forta 扫描节点软件适用于流行的 64 位 Linux 发行版,使用官方的 Forta 仓库。包安装方法是可验证的(在安装期间自动验证)并帮助你安装所需的依赖项。

$ sudo curl https://dist.forta.network/pgp.public -o /usr/share/keyrings/forta-keyring.asc -s
$ echo 'deb [signed-by=/usr/share/keyrings/forta-keyring.asc] https://dist.forta.network/repositories/apt stable main' | sudo tee -a /etc/apt/sources.list.d/forta.list
$ sudo apt-get update
$ sudo apt-get install forta

Forta 设置

初始化创建一个将签署你的扫描节点警报的私钥。你必须设置 FORTA_PASSPHRASE 环境变量或向 init 命令提供 --passphrase 标志。

使用 forta init 命令初始化 Forta:

$ forta init --passphrase <your_passphrase>

此命令生成一个配置目录,一个私钥,并输出你的地址。

示例输出:

Scanner address: 0xAAA8C491232cB65a65FBf7F36b71220B3E695AAA
成功初始化于 /yourname/.forta

配置 systemd

如果 Forta 停止运行,它必须被重启。如果你使用了包安装方法,则可以启用 Forta systemd 服务,并用你的密码短语和配置目录环境变量覆盖它。

请不要修改原始的 forta.service 文件,而是 prefer 希望的这里推荐的覆盖。这是因为原始文件会在你通过 yum 或 apt 更新 Forta 时被替换。

要覆盖 systemd 服务环境,你可以在 /etc/systemd/system/forta.service.d/env.conf 中设置变量,如下所示:

[Service]
Environment="FORTA_DIR=<your_forta_config_dir>"
Environment="FORTA_PASSPHRASE=<your_forta_passphrase>"

编辑配置

mcedit .forta/config.yml
chainId: 1

scan:
  jsonRpc:
    #  你可以在下面阅读有关设置自己的 erigon 节点的更多信息
    url: http://your-node-erigon:8545

trace:
  jsonRpc:
    url: http://your-node-erigon:8545

## 默认使用扫描节点 URL,因为未设置 - 在运行节点时的最佳选项
## jsonRpcProxy:
##   jsonRpc:
##     url: http://your-node-erigon:8545

然后你需要将进程添加到自动加载和服务启动。

sudo systemctl daemon-reload
sudo systemctl enable forta
sudo systemctl start forta

Forta 检查

forta status
docker ps

示例输出

root@forta-prod:~# forta status
forta.container.forta-inspector.summary
⬤ ok

forta.container.forta-json-rpc.summary
⬤ ok

forta.container.forta-scanner.summary
⬤ ok: at block 15933557.

forta.container.forta-supervisor.summary
⬤ ok: all 6 service containers are running.

forta.container.forta-updater.summary
⬤ ok

你可以用下面的命令找到你的扫描节点地址

forta account address

注册扫描节点

你的扫描节点有一个以太坊地址,这使两个主要功能成为可能:

  • 接收检测机器人进行运行
  • 确认输出警报的权威

虽然这个地址作为主身份,但必须由不同的钱包拥有。注册后,扫描节点作为 NFT(ERC721)铸造并转移给这个拥有者。你可以在这里查看智能合约文档:

https://docs.forta.network/en/latest/smart-contracts/

未来,拥有者钱包将允许你远程禁用扫描节点,并在你进行维护(短暂时间内)或在你决定完全关闭节点时避免削减。目前,你可以使用 forta disable 和 forta enable 命令,使用扫描节点私钥进行相同操作。

要将你的节点注册到注册合约,你可以运行

forta register --owner-address <address>

在执行此操作之前,请确保你已在 config.yml 中正确设置了 chainId。你的扫描节点只能注册一次,并且只能扫描特定链。拥有者钱包地址需要与你的扫描节点地址不同。

有关质押,你可以在这里阅读: https://docs.forta.network/en/latest/stake-on-scan-node/

检查 forta 工作情况:

https://api.forta.network/stats/sla/scanner/YOUR_NODE_ADDRESS

为 Erigon 购买服务器:

https://github.com/ledgerwatch/erigon#system-requirements

我们建议以相同的方式购买满足要求的服务器,在任何云服务中。

例如,在 hetzner:

  • 专用根服务器 AX101
  • AMD Ryzen 9 5950X 16 核心(Zen3)
  • 128 GB DDR4 ECC 内存
  • 2 x 3.84 TB NVMe SSD 数据中心版(软件 RAID 1)
  • 1 Gbit/s 带宽

Erigon 的基本服务器设置

类似于 Forta 的文章:Forta 的基本服务器设置

Erigon 的基本服务器保护

类似于 Forta 的文章:Forta 的基本服务器保护

设置 Erigon 的工作组件

apt install git make supervisor build-essential software-properties-common

## 安装 prysm
mkdir ethereum
cd ethereum/
mkdir consensus
cd consensus/
mkdir prysm
cd prysm/
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh

mcedit /root/.bashrc
## 添加一行,强制指示 prysm 版本并关闭文件
export USE_PRYSM_VERSION=v3.1.1

## 生成 JWT Token
cd ethereum/consensus/prysm/
./prysm.sh beacon-chain generate-auth-secret

## 创建一个清单以启动 prysm
cd /etc/supervisor/conf.d/
mcedit prysm.conf
## 添加到 prysm.conf 文件
---
[program:beacon_eth]
command=/root/ethereum/consensus/prysm/prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=/root/ethereum/consensus/prysm/jwt.hex --verbosity=debug
user=root
numprocs=1
autostart=true
autorestart=true
stderr_logfile=/var/log/prysm.log
---
## 关闭文件并调用下一个命令
systemctl restart supervisor

## 检查服务是否已启动
supervisorctl

## 命令输出的示例
supervisorctl
beacon_eth                       运行中   pid 383637, uptime 30 days, 5:52:02
supervisor>

Go 安装按照文档进行: https://go.dev/doc/install

设置服务器时间:

systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
timedatectl status

Erigon 安装

git clone --recurse-submodules https://github.com/ledgerwatch/erigon.git
cd erigon
git checkout alpha
make erigon
make rpcdaemon

Erigon 设置

设置服务:

## 创建服务
mcedit /etc/systemd/system/erigon.service
---
[Unit]
Description=Erigon Node
After=network.target network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/root/erigon/
ExecStart=/root/erigon/build/bin/erigon --datadir=/erigon --private.api.addr=localhost:9090 --metrics --metrics.addr=localhost --metrics.port=6060 --http=false --authrpc.jwtsecret /root/ethereum/consensus/prysm/jwt.hex
User=root
Restart=always
RestartSec=5s

## 输出到 syslog
StandardOutput=syslog
StandardError=syslog
## 更改找到应用日志在 /var/log/syslog
SyslogIdentifier=erigon

[Install]
WantedBy=multi-user.target
---
## 创建第二个服务
mcedit /etc/systemd/system/erigon-rpc.service
---
[Unit]
Description=Erigon RPC Daemon

[Service]

WorkingDirectory=/root/erigon/
ExecStart=/root/erigon/build/bin/rpcdaemon --datadir=/erigon --private.api.addr=localhost:9090 --http.vhosts '*' --http.port 8545 --http.addr 0.0.0.0 --http.corsdomain '*' --http.api=eth,erigon,web3,net,debug,trace
User=root
Restart=always
RestartSec=5s

## 输出到 syslog
StandardOutput=syslog
StandardError=syslog
## 更改找到应用日志在 /var/log/syslog
SyslogIdentifier=erigon-rpc

[Install]
WantedBy=multi-user.target
---
sudo systemctl daemon-reload
sudo systemctl enable erigon
sudo systemctl enable erigon-rpc
sudo systemctl start erigon
sudo systemctl start erigon-rpc

Erigon 检查

curl http://localhost:3500/eth/v1/node/syncing
## 如何检查日志
journalctl -f -u erigon
journalctl -f -u erigon-rpc
tail -f /var/log/prysm.log

Forta/Erigon 的服务器监控

我们建议在两台不同的服务器上运行。

在服务器上安装 prometheus:

mkdir -p /etc/prometheus
sudo mkdir -p /var/lib/prometheus
## 下载 prometheus 压缩包
wget https://github.com/prometheus/prometheus/releases/download/v2.31.0/prometheus-2.31.0.linux-amd64.tar.gz

## 解压缩压缩包
tar -xvf prometheus-2.31.0.linux-amd64.tar.gz

## 将二进制文件移动到系统目录
cd prometheus-2.31.0.linux-amd64/
sudo mv prometheus promtool /usr/local/bin/
sudo mv consoles/ console_libraries/ /etc/prometheus/
sudo mv prometheus.yml /etc/prometheus/prometheus.yml

## promisue 版本检查
prometheus --version

## 创建 prometheus 服务
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/
sudo chmod -R 775 /etc/prometheus/ /var/lib/prometheus/
## 创建服务
mcedit /etc/systemd/system/prometheus.service
----
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Restart=always
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --web.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target
----

## 启动服务,添加到启动,检查服务状态
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus

## 在浏览器中检查可用性
http://IP:9090

## 向配置文件添加参数
mcedit /etc/prometheus/prometheus.yml

## 添加到 targets(本地节点导出器)
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: 'servers'
    static_configs:
    - targets: ['127.0.0.1:9100']

sudo systemctl restart prometheus

在本地安装 Grаfana

## 下载依赖项

sudo apt-get install -y gnupg2 curl software-properties-common

## 安装 Grafana
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
apt-get -y install grafana

## 添加到启动并检查服务状态
systemctl enable --now grafana-server
systemctl status grafana-server.service

## 在浏览器中检查可用性
http://IP:3000

## 默认授权为 admin/admin

添加 Prometheus 数据源 http://localhost:9090

## 导入 ID=10180 的仪表板

在本地安装节点导出器

## 创建用户以运行服务
useradd --no-create-home --shell /bin/false node_exporter

## 下载压缩包以进行后续工作
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

## 解压缩压缩包
tar xvf node_exporter-1.3.1.linux-amd64.tar.gz

## 复制二进制文件到系统中,赋予必要权限
cp node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
chown node_exporter:node_exporter /usr/local/bin/node_exporter
mkdir -p /prometheus/metrics
chown node_exporter:node_exporter /prometheus/metrics

## 创建服务
mcedit /lib/systemd/system/node_exporter.service
---
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter --collector.textfile.directory=/prometheus/metrics --web.listen-address=0.0.0.0:9100
Restart=always
RestartSec=10s
NotifyAccess=all

[Install]
WantedBy=multi-user.target
---
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter

## 在浏览器中检查可用性
http://IP:9100

Erigon 的额外配置:

## 添加到文件 /etc/prometheus/prometheus.yml

mcedit /etc/prometheus/prometheus.yml

  - job_name: erigon
    metrics_path: /debug/metrics/prometheus
    static_configs:
      - targets:
        - "127.0.0.1:6060"

将仪表板导入 Grafana:

下载 https://github.com/ledgerwatch/erigon/blob/devel/cmd/prometheus/dashboards/erigon.json 并设置下载的文件。

  • MixBytes 是谁?

MixBytes 是一个由专家组成的区块链审计和安全研究团队,专门为 EVM 兼容和 Substrate 基于项目提供全面的智能合约审计和技术咨询服务。请在 X 上关注我们,以便随时了解行业最新趋势和洞察。

  • 原文链接: mixbytes.io/blog/how-to-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
mixbytes
mixbytes
Empowering Web3 businesses to build hack-resistant projects.