目录

  • 共识节点推荐搭建步骤

    • 远程访问
    • 硬件
    • 密码
  • SSH认证密钥
  • 服务供应商具体配置
  • Linux服务器配置
    • 使用su时
    • 以管理员身份登录时
      • 防火墙
      • 自动安全更新
      • fail2ban
      • 双因素认证
      • 监控
      • 登录成功邮件通知
      • Logwatch
      • 黑名单USB和防火墙存储
      • 共识节点安装与运行
    • 其他安全推荐

共识节点推荐搭建步骤

远程访问

机器的远程访问仅限使用公钥与Yubico4/NEO实体公钥进行SSH认证。

硬件

出于安全考虑,节点不应在共享的机器上运行,而应在Deltalis, Equinix及A1 Arsenal等安全性较高的数据中心通过托管的方式运行。下列laaS供应商硬件配置可作为2018年的理想配置参考。

因为共识节点有计算功能,因此应定期检查网络硬件要求以保证最优性能。

如果无法进行托管,推荐laaS供应商与最低配置如下:

  • OVH EG-32

    • CPU: Intel Xeon E3-1270v6 – 4c/8t – 3.8GHz
    • RAM: 32GB DDR4 ECC 2133 MHz
    • SSD: softraid-1 2x450GB NVMe
    • NET: 1 Gbps
  • Packet Workhorse
    • CPU: Intel® Xeon E3-1240v5 – 4c/8t – 3.5GHz
    • RAM: 32 GB DDR3 ECC 1333 MHz
    • SSD: softraid-1 2x120GB Enterprise SSD
    • NET: 2 x 1 Gbps Bonded
  • Liquidweb
    • CPU: Intel Xeon E3-1275v6 – 4c/8t – 3.8GHz
    • RAM: 32 GB DDR4 ECC
    • SSD: softraid-1 2x240GB Enterprise SSD
    • NET: 1 Gbps

密码

使用密码管理工具存放本次搭建过程中所需的每个密码(推荐使用Lastpass和Dashlane),所有服务均应启用双因素认证和实体密钥(如有)。

所有密码均应设置高强度密码(使用此 lastpass方案)。

SSH认证密钥

仅限使用公钥访问SSH认证可起到密钥保护的作用,所以我们要求使用实体OpenPGP智能卡进行SSH认证。我们推荐使用Ubikey 4。有关Yubikey PGP的更多性能请参考官方文档.

  • 完整Windows指南
  • 完整Linux/MacOS指南

更改默认管理员PIN码 12345678 与PIN码 123456 为可记忆的安全密码。

将您的私钥添加到智能卡激活的认证代理服务后,gpg-agent就会与gpg2绑定——这是我们推荐的步骤。

服务供应商具体配置

打开供应商防火墙(不在OS设置中),设置为屏蔽全部,端口22、20333与10333除外。若有其他服务共享同一账户,请务必确保将节点放置在反关联性群组中。

Linux服务器配置

需给每个节点在两个辖区分别配置2个管理员。每个管理员都应有一个可以登录系统的专属用户和一个(SSH无权访问的)第三方共识用户,并且仅可通过该第三方共识用户访问共识节点的私钥(注意本指南使用的Ubuntu版本是16.04 LTS)。

首次登录时,设置一个强效根密码,但仅在遗失sudo密码(或进行撤销操作)时才需使用根密码;

su (sudo su on Ubuntu)
passwd复制代码

仍在使用su时

Ubuntu更新包:

apt-get update
apt-get upgrade复制代码

CentOS:

yum update复制代码

添加管理员用户(两个管理员重复操作):

useradd -m node
mkdir /home/node/.ssh
chmod 700 /home/node/.ssh复制代码

本指南是基于bash编制的,所以在shell下拉列表中将bash设为偏好值:

usermod -s /bin/bash node复制代码

从管理员的 ssh-add -L中将Yubikey公钥复制到authorized_keys:

vim /home/node/.ssh/authorized_keys复制代码

许可设置:

chmod 400 /home/node/.ssh/authorized_keys
chown node:node /home/node -R复制代码

设置管理员密码(这就是sudo密码):

passwd node复制代码

接下来我们就可以设置管理员的sudo了,添加 %sudo 群组,注释非 root的任何其他群组时使用#:

visudo复制代码

文件格式如下:

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
​
# Host alias specification
​
# User alias specification
​
# Cmnd alias specification
​
# User privilege specification
root    ALL=(ALL:ALL) ALL
​
# Members of the admin group may gain root privileges
#%admin ALL=(ALL) ALL
​
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
​
# See sudoers(5) for more information on "#include" directives:
​
#includedir /etc/sudoers.d复制代码

将管理员添加到sudo群组:

usermod -aG sudo node复制代码

需登录并登出管理员账户后才能完成更新:

su -l node
exit复制代码

再回到su,现在设置为仅可通过公钥与管理员登录SSH:

vim /etc/ssh/sshd_config复制代码

应添加下列行或在原有的基础上修改成如下形式,在AllowUsers中添加所有管理员并用空格键隔开:

X11Forwarding no
PermitRootLogin no
PasswordAuthentication no
AllowUsers node
LoginGraceTime 30
AllowTcpForwarding no
TCPKeepAlive no
AllowAgentForwarding no
DebianBanner no
Banner /etc/ssh/sshd-banner复制代码

设置SSH的法律声明:

echo "WARNING:  Unauthorized access to this system is forbidden and will be
prosecuted by law. By accessing this system, you agree that your actions
may be monitored if unauthorized usage is suspected." >> /etc/ssh/sshd-banner复制代码

添加用户运行共识节点:

useradd consensus
mkdir /home/consensus
chown consensus:consensus /home/consensus -R复制代码

为共识节点创建一个非常强效的密码,应可安全地被两个管理员共享:

passwd consensus复制代码

su的最后一步就是以管理员身份登录后重启SSH。

sudo systemctl restart sshd.service复制代码

以管理员身份登录时

防火墙

首先在Debian(Ubuntu)中安装防火墙并锁定节点:

sudo apt-get install ufw复制代码

CentOS:

sudo yum install epel-release
sudo yum install ufw复制代码

vim /etc/default/ufw中将IPV6设为yes,并设置为仅允许使用端口:

sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow 10333
sudo ufw allow 20333
sudo ufw disable
sudo ufw enable复制代码

自动安全更新

Ubuntu:
sudo apt-get install unattended-upgrades
sudo vim /etc/apt/apt.conf.d/10periodic复制代码

更新以匹配:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";复制代码

禁止不安全的自动更新:

sudo vim /etc/apt/apt.conf.d/50unattended-upgrades复制代码

更新,未注释的行有且仅有以下几行:

Unattended-Upgrade::Allowed-Origins {"${distro_id}:${distro_codename}";"${distro_id}:${distro_codename}-security";"${distro_id}ESM:${distro_codename}";
};复制代码
CentOS:

安装yum-cron并允许安全包更新:

sudo yum -y install yum-cron
sudo systemctl start yum-cron
sudo systemctl enable yum-cron
sudo nano /etc/yum/yum-cron.conf复制代码

更改设置以匹配:

update_cmd = security
apply_updates = yes
emit_via = email
email_to = YOUR_EMAIL_TO_RECEIVE_UPDATE_NOTIFICATIONS复制代码

有更新时,使用email_to功能插入你想发送提醒的邮件地址。

fail2ban

接下来我们就来安装fail2ban,这个工具可禁止防火墙上的可疑IP。该工具的默认值就可使用,因此简单的安装就够了。Ubuntu:

sudo apt-get install fail2ban复制代码

CentOS:

sudo yum install fail2ban复制代码

双因素认证

将2FA与SSH的实体OpenPGP密钥相结合是强效认证设置。在Ubuntu中使用下列代码安装:

sudo apt-get install libpam-google-authenticator复制代码

CentOS (启用epel——同上):

sudo yum install google-authenticator复制代码

安装完毕后,以管理员身份运行指令时遵循每步指令,(回答y/y/y/n/y),先以管理员身份(两个)进行这步操作,完成后再更新PAM获得2FA:

google-authenticator复制代码

接下来编辑SSH配置来获得2FA设置许可:

sudo vim /etc/pam.d/sshd复制代码

在文件结尾添加以下行:

auth required pam_google_authenticator.so复制代码

在Ubuntu中放入密码提示的注释行:

# Standard Un*x authentication.
#@include common-auth复制代码

CentOS:

#auth       substack     password-auth复制代码

编辑sshd_config文件要求进行2FA认证:

sudo vim /etc/ssh/sshd_config复制代码

编辑文件允许认证,并添加认证方法行:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password publickey,keyboard-interactive复制代码

重启SSHD服务:

sudo systemctl restart sshd.service复制代码

在保持当前SSH窗口运行的同时打开另一个窗口,并登录以确认设置能正确运行。

监视

保持对共识节点的监视对于发现问题及改善NEO项目而言是至关重要的。我们仅会通过SSH通道安装并访问网络数据库(保留防火墙拦截设置)。

安装预购建静态版本(以减少攻击面并杜绝不必要的依赖性):

bash <(curl -Ss https://my-netdata.io/kickstart-static64.sh)复制代码

访问方法是创建SSH通道并打开浏览器访问localhost:19999:

ssh -f node@SERVERIP -L 19999:SERVERIP:19999 -N复制代码

登录成功邮件通知

sudo apt-get install mailutils复制代码

CentOS:

sudo yum install mailx复制代码

编辑默认bash档案:

sudo vim /etc/profile复制代码

在文件结尾添加以下行,编辑邮箱使其可接收登录通知:

SIP="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
SHOSTNAME=$(hostname)
SNOW=$(date +"%e %b %Y, %a %r")
echo 'Someone from '$SIP' logged into '$SHOSTNAME' on '$SNOW'.' | mail -s 'SSH Login Notification' 'YOUR@EMAIL.HERE'复制代码

Logwatch

在Ubuntu上配置logwatch以发送节点的日常活动总结(通常无活动):

sudo apt-get install logwatch复制代码

CentOS:

sudo yum install logwatch复制代码

现在添加cron job将总结发送到你的邮箱:

sudo vim /etc/cron.daily/00logwatch复制代码

将默认执行命令变更为:

/usr/sbin/logwatch --output mail --mailto YOUR@EMAIL.HERE --detail high复制代码

黑名单USB与防火墙存储

我们会把不需要的模块放入黑名单以减少攻击面,WiFi和蓝牙通常已经与服务器内核切断了(需验证!),因此仅需关闭USB存储。

sudo vi /etc/modprobe.d/blacklist.conf复制代码

添加以下行:

blacklist usb-storage
blacklist firewire-core复制代码

安装并运行共识节点

在Unbuntu上安装前提条件:

sudo apt-get install unzip sqlite3 libsqlite3-dev libleveldb-dev libunwind-dev复制代码

CentOS:

sudo yum install unzip leveldb-devel libunwind-devel复制代码

以共识节点用户的身份登录:

su consensus
cd ~复制代码

在发行版中下载、验证校验和、解压最新版neo-cli客户端:

wget https://github.com/neo-project/neo-cli/releases/download/v2.5.2/neo-cli-YOURDISTRIBUTION.zip
sha256sum neo-cli-YOURDISTRIBUTION.zip
unzip neo-cli-YOURDISTRIBUTION.zip
cd neo-cli
chmod u+x neo-cli复制代码

复制节点运行的设置(测试网或主网):

mv protocol.json protocol.json.back
cp protocol.testnet.json protocol.json复制代码

如果这是首次操作,你需要给共识节点创建钱包:

./neo-cli
neo> create wallet /home/consensus/cn_wallet.json
password: SOMESTRONGPASSWORD
password: SOMESTRONGPASSWORD复制代码

复制start_consensus脚本:

cd ~
wget https://raw.githubusercontent.com/CityOfZion/standards/master/assets/nodes/start_consensus.sh
chmod u+x start_consensus.sh复制代码

编辑目录使其与你的钱包文件地址及密码匹配。现在就可以在supervisord的控制下在Ubuntu上运行了:

sudo apt-get install supervisor复制代码

CentOS:

sudo yum install supervisor复制代码

配置supervisord以执行start_consensus(在需要的情况下编辑文件):

wget https://raw.githubusercontent.com/CityOfZion/standards/master/assets/nodes/supervisord.conf
chmod 700 supervisord.conf
cp supervisord.conf /etc/supervisord.conf
sudo supervisord复制代码

添加初始脚本以便在系统重启时自动运行。

这就是全部步骤,现在登出服务器并仅在必须部署更新或检测到恶意行为时再重新登录。

其他安全推荐

  • GRUB密码
  • 磁盘加密
  • 开启TCP SYN Cookie功能(net.ipv4.tcp_syncookies = 1 -> /etc/sysctl.conf)

原文翻译自CoZ:github.com/CityOfZion/…

NEO共识节点推荐搭建步骤相关推荐

  1. 如何在NEO共识节点间分配任务

    作者:Alexey Vanin 任何计算机系统都有监控操作,可能会发送心跳信息.校验和查询及哈希请求等.这些操作在本文中都被统称为任务.在中心化系统中,通常会有一个受认证的节点或节点群组来完成任务.而 ...

  2. mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)

    MySQL簇概述 MySQL簇是一种技术,该技术允许在无共享的系统中部署"内存中"数据库的簇.通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于每个组件 ...

  3. miniK8S单节点环境搭建初试

    目录 引言 搭建步骤 升级环境和国内访问网络处理 引言 越来越多的应用现在都倾向于迁移到PaaS平台进行部署,其中广受欢迎的K8S也是目前业务在用的选择.从公司回家以后,一边学习K8S的原理,一边也想 ...

  4. 基于区块链/Hyperledger Fabric的商品交易溯源系统搭建步骤

    原项目链接:https://github.com/togettoyou/fabric-realty 此项目链接:https://gitee.com/real__cool/fabdeal 演示链接:ht ...

  5. kafka+zookeeper搭建步骤kafka问题

    kafka+zookeeper搭建步骤 帅气的名称被占用关注 0.1392018.12.04 13:48:00字数 1,007阅读 88 vmware 安装centOS7 克隆虚拟为:三台 本地你的I ...

  6. Lync server 2013 之office web apps server 搭建步骤

    office web apps server 搭建步骤: 一. .NET Framework 4.5 节点下的HTTP 激活 .NET Framework 3.5 Windows Identity F ...

  7. k8s v1.9.6 超详细搭建步骤

    部署说明 k8s新的版本与之前1.5的部署方式发生改变,官方将kubernetes大组件中的服务例如(kube-proxy.kube-api等服务)剥离出来封装成容器的形式来简化部署的方式.以下为三个 ...

  8. Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用

    文章目录 导读 官方文档 Eureka Server高可用集群概述 2个Eureka Server节点高可用集群搭建步骤 Step1. 新建子模块 microservice-discovery-eur ...

  9. Oracle 11g 11201_RHEL5.5_RAC_VBOX 详细搭建步骤

    Oracle 11g 11201_RHEL5.5_RAC_VBOX 详细搭建步骤 1.安装好vbox,创建好虚拟机(红帽5.5),注意:VBOX全局设置VBOX磁盘的位置和备份位置 IP.hostna ...

最新文章

  1. matlab浮点运算的误差,MATLAB的eps,浮点数相对精度
  2. 是凡尔赛本赛了,马斯克回应成为全球首富
  3. grafana+prometheus快速搭建MySql监控系统实践
  4. (转)mybatis常用jdbcType数据类型
  5. 泛型java实例_【Java学习笔记】Java6泛型实例
  6. 【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
  7. JDBC的批处理操作三种方式
  8. c语言3×3行列互换_戴尔推出UltraSharp U4021QW显示器 采用雷电3接口和5K×2K曲面屏...
  9. 将内存使用的详细情况输出到文件
  10. 满屏的指标?删了吧,手把手教你裸 K 交易!
  11. 通达信炒股软件测试简历,专家看盘(通达信公式 副图 源码 测试图)
  12. 小马哥----高仿机部分6735芯片机型的root方法浅析 高仿三星Galaxy S6 A228_4G刷机root
  13. 纯CSS实现超美选项卡
  14. error LNK1120: 1 个无法解析的外部命令(详细小问题解释)
  15. 《贵妃》孙溟㠭绘画艺术
  16. 51nod 1677——treecnt
  17. linux把u盘只读文件,完美解决linux下U盘文件只读的问题
  18. UE4场景“郊区”:建模技术,使用Substance纹理化和顶点绘制等
  19. ANSYS Maxwell 3D线圈磁场仿真分析
  20. 闲来无事,咱也来看看腾讯,看看UC

热门文章

  1. SAP PLM进阶1 – 价值亮点
  2. 李飞飞出任推特董事会成员:将利用AI技术持续推动变革
  3. 我的业务要不要用人工智能?引入AI前你需要评估的(四)
  4. 肺炎疫情期间购买口罩小记
  5. 赚到!4个Python初学者必学的Numpy小技巧
  6. SAP的SD模块中客户的销售视图--扩充客户销售范围
  7. 机器学习中的数学基础(2)——理解基、线性组合与向量空间
  8. 数字化转型战略中不可忽视“软因素”
  9. SAP MM 如果存在OPEN的盘点凭证,则不能再次创建盘点凭证
  10. 《用Python进行自然语言处理》第 5 章 分类和标注词汇