Home

Awesome

Ontology Triones Service Node security checklist(本体北斗共识集群安全执行指南)

by 慢雾安全团队 & Joinsec Team

目录

架构核心目标

  1. 保护出块服务器正常通信与运行
  2. 增强初始主网整体抗攻击能力
  3. 保护节点安全

面临的主要问题

  1. 对初始状态主网进行 DDoS
  2. RPC/API 功能被未授权访问及滥用
  3. 通信故障

架构核心设计

  1. TSN 服务器隔离
  2. 多跳转节点(小节点流量转发,大节点高防护)
  3. 多链路高可用
  4. 对比 EOS 架构,适当降低单节点成本,增加整体数量,并保证 TSN 的稳定

核心防御

  1. 默认关闭 RPC/API 。必须打开时,混淆端口,并架设高防等保护
  2. TSN 通信多链路设计
    • TSN 服务器不在公网上暴露,通过跳板服务器(跳板服务器数量要大)进行通信
    • 在外网公布的跳板服务器遭遇持续性攻击时,通过备用链路进行通信
  3. 防止全网扫描定位高防后的服务器,修改同步端口 20338 (同理 RPC/API 的 20334-20337 )至全网最大存活数量的端口 80、443 或 22,这样可以有效抬高攻击者定位成本。

推荐总架构

Architecture

架构说明:

为了应对可能的 DDoS 攻击,节点应准备多条链路,在攻击到来后,可以随时通过备用链路进行通信,确保主网顺利启动,并持续出块。

在没有攻击情况下,外围节点通过对外公布的公开节点进行通信。

其它架构

随着主网 TSN 节点的增多,整体的抗攻击能力增强,新增节点在考虑节省成本的情况下可适当降配

1. 单链路方案

Architecture

2. 多负载方案

Architecture

3. 入门级方案

Architecture

安全加固方案

1. RPC/API 安全

1.1 屏蔽 RPC/API

如无必要,建议禁止 RPC/API 对外访问。

1.2 RPC/API 防护

不建议把节点的 RPC/API 端口直接暴露在公网中,如有暴露的需求请在端口之前添加保护措施

查询用 RPC/API 所在 full node 与 TSN 完全隔离并架设防御,保证外网对 RPC/API 的攻击不能影响到 TSN。

2. 命令执行安全

命令详细使用说明可参考官方手册 Ontology CLI User Guide

2.1 密码安全

--password, -p

password 参数用于指定 Ontology 节点启动的账户密码。因为在命令行中输入的账户密码会被保存在系统的日志中,容易造成密码泄露,因此在生产环境中建议不要使用该参数。

2.2 开启日志记录

--loglevel

loglevel 参数用于设置 Ontology 输出的日志级别。默认值是1,即只输出 info 级及其之上级别的日志,建设使用默认配置。

2.3 设置最低交易价格

--gasprice

gasprice 参数用于设定当前节点交易池接受交易的最低 gasprice ,默认为0,建议设置一个大于零的值以防止交易阻塞攻击。

2.4 并发连接数优化

P2P 端口并发连接数为无限制,可优化ulimit系统参数和内核参数,增强恶意连接攻击承受能力。

2.5 非 root 启动 ontology

建议编译完成后,创建普通用户账号,并使用该账号启动 ./ontology,避免使用 root,降低风险。

2.6 监听随机端口

--nodeport=PORT1

--rpcport=PORT2

建议设置为非默认端口,如果是对外服务的,建议采用 主机安全 中的配置方法

3. 网络安全

3.1 网络架构

为应对可能的 DDoS 攻击导致节点主网络阻塞的问题,建议提前配置备份网络,例如私密 VPN 网络。

3.2 云服务商

经慢雾安全团队测试,Google Cloud、AWS 及 UCloud 等具有更好的抗 DDoS 攻击的性能,并且在 DDoS 攻击过后服务商不会临时封锁服务器,可以极为快速的恢复网络访问,推荐北斗共识集群使用。(请谨慎选择云服务商,许多云服务商在遭遇 DDoS 等攻击时会直接关闭服务器)

3.3 DDoS 防御

为应对可能发生的 DDoS 攻击,建议北斗共识集群提前配置 Cloudflare、AWS Shield 等 DDoS 高防服务。

4. 主机安全

5. 威胁情报

6. 核心安全配置总结

  1. 选用 Google Cloud、AWS 及 UCloud 等可靠的云服务商做节点基础设施,服务器配置在双核4G以上
  2. 配置规则禁止与 node 服务不相关的其他服务端口开放( SSH 只开启证书登陆并限制访问 SSH 端口的 IP 只能为我方运维 IP )
  3. 使用非 root 运行 node 程序,启动时随机指定P2P端口,并且若无必要则不开启 RPC/API

致谢

在此非常感谢

大力支持节点安全测试,为社区安全积累了宝贵的数据。