NEO共识节点推荐搭建步骤

25次阅读

共计 7167 个字符,预计需要花费 18 分钟才能阅读完成。

目录
1 共识节点推荐搭建步骤 1.1 远程访问 1.2 硬件 1.31.3 密码 2 SSH 认证密钥 3 服务供应商具体配置 4 Linux 服务器配置 4.1 使用 su 时 4.2 以管理员身份登录时 4.2.1 防火墙 4.2.2 自动安全更新 4.2.3 fail2ban4.2.4 双因素认证 4.2.5 监控 4.2.6 登录成功邮件通知 4.2.7 Logwatch4.2.8 黑名单 USB 和防火墙存储 4.2.9 共识节点安装与运行 4.3 其他安全推荐
共识节点推荐搭建步骤
远程访问机器的远程访问仅限使用公钥与 Yubico4/NEO 实体公钥进行 SSH 认证。
硬件出于安全考虑,节点不应在共享的机器上运行,而应在 Deltalis, Equinix 及 A1 Arsenal 等安全性较高的数据中心通过托管的方式运行。下列 laaS 供应商硬件配置可作为 2018 年的理想配置参考。
因为共识节点有计算功能,因此应定期检查网络硬件要求以保证最优性能。
如果无法进行托管,推荐 laaS 供应商与最低配置如下:
OVH EG-32CPU: Intel Xeon E3-1270v6 – 4c/8t – 3.8GHzRAM: 32GB DDR4 ECC 2133 MHzSSD: softraid-1 2x450GB NVMeNET: 1 GbpsPacket WorkhorseCPU: Intel® Xeon E3-1240v5 – 4c/8t – 3.5GHzRAM: 32 GB DDR3 ECC 1333 MHzSSD: softraid-1 2x120GB Enterprise SSDNET: 2 x 1 Gbps BondedLiquidwebCPU: Intel Xeon E3-1275v6 – 4c/8t – 3.8GHzRAM: 32 GB DDR4 ECCSSD: softraid-1 2x240GB Enterprise SSDNET: 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:https://github.com/CityOfZion…

正文完
 0