Securenode: Guide complet d’installation et de configuration
Ce tutoriel est une traduction et une adaptation du tutoriel originel de ROLF et qui est disponible ICI
Si vous êtes arrivé jusqu’ici, c’est surement que vous savez ce qu’est un securenode et quels intérêts ils ont pour l’ensemble du réseau Zencash. Cependant, avant de vous lancer dans le montage d’un securenode, vous allez avoir besoin des choses suivantes:
- Un VPS plutôt puissant (au moins 4Go de RAM),
- Un nom de domaine,
- Un certificat TLS (qui sera généré depuis le VPS),
- Putty et PuttyGen (pour les utilisateurs Windows) téléchargeable ici
- Le wallet avec sur une adresse 42 ZEN exactement et sur une autre 1.1 ZEN
Vous avez tout ? Rien ne manque ? Alors on continue !
Étape 1 – Création de la paire de clef RSA
Cette étape est très importante pour garantir la sécurité de votre VPS. En effet, c’est cette paire de clefs qui vous servira a vous authentifier avec votre VPS et donc d’y accéder.
On va commencer par lancer PuttyGen que l’on a précédemment téléchargé afin de créer la paire de clef RSA nécessaire à la sécurité du serveur. On arrive sur une fenêtre comme celle-ci:
On choisit RSA et 4096 et on clique sur « Generate ». On génère la paire de clef en bougeant le curseur dans le rectangle gris et il vous faudra sauvegarder la clef publique ainsi que la clef privée dans des endroits sûrs et ne pas les perdre.
Pour celà on clique sur “save private key” et “save public key”. Pensez à garder PuttyGen ouvert jusqu’à la fin du tuto, cela vous facilitera grandement la tâche.
Voilà, cette étape importante est terminée, passons maintenant à l’installation du VPS et du Securenode.
Étape 2 – Première connexion au VPS et parametrages
On va commencer par lancer Putty et renseigner les infos nécessaires à la connexion.
On remplit la fenêtre de la manière suivante :
- Adresse IP du VPS,
- Connexion SSH,
- Le port correspondant,
- Un nom: ici ça sera “Securenode”
On finit tout ça en cliquant sur “save” pour sauvegarder cette configuration.
Ensuite on sélectionne la « saved sessions » et on clique sur Load. On va ensuite dans Connection,
SSH et Auth et Open :
Pour la suite de ce tuto, il est préférable de copier-coller simplement les commandes suivantes une après
l’autre en faisant clique-droit dans Putty plutôt que de tout retaper à la main, beaucoup d’erreur seront évitées de cette manière.
Si tout a bien été fait, on arrive dans une console qui demande des identifiants de connexion. Il faut
utiliser ceux reçu lors de la livraison du VPS.
La première étape va être de nommer votre vps. Pour cela on va taper:
hostnamectl set-hostname lenomquonveut
On fait ensuite en sorte que le système arrive à se résoudre lui-même, pour ça on édite un fichier de
configuration en lançant cette commande :
nano /etc/hosts
On insert cette ligne en dessous de la ligne « 127.0.0.1 localhost » en remplaçant bien XX.XX.XXX.XXX par l’adresse IP de votre VPS:
XX.XX.XXX.XXX nomdusecurenode tondomaine.truc
Pour quitter et sauvegarder le fichier, on fait un CTRL-X puis O et enfin ENTREE
On choisit ensuite la timezone (pour avoir le vps en français pour les logs etc…)
timedatectl list-timezones
Et enfin on rentre la bonne timezone (pour nous c’est Europe/paris) :
timedatectl set-timezone 'Europe/Paris'
On ajoute un compte utilisateur à qui on donne les privilèges administrateurs. On tape un mot de
passe (en en choisissant un qui est différent du MDP root !)
adduser nouvel_user && adduser nouvel_user sudo
On se déconnecte
exit
On se reconnecte ensuite avec l’utilisateur que l’on vient de créer précédemment puis on va modifier
le fichier de configuration qui gère les connexions SSH :
sudo nano /etc/ssh/sshd_config
On repère la ligne « PermitRootLogin yes» et on remplace le yes par no :
PermitRootLogin no
On redémarre ensuite le service SSHD :
sudo systemctl restart sshd.service
Maintenant il faut dire au VPS de nous autoriser à le contacter avec la clé générée tout à l’heure.
On va dans le dossier .ssh :
cd ~/.ssh
Si le dossier n’existe pas alors on va le créer et s’y rendre:
mkdir ~/.ssh cd ~/.ssh
Et on rajoute à la main notre clé publique que l’on vient copier depuis PuttyGen (je vous avais conseillé de le laisser ouvert) dans un fichier qui s’appellera authorized_keys:
echo “TA_CLEF_RSA“ >> authorized_keys
On se déconnecte et on relance la connexion comme indiqué au début du tuto. Si tout a bien
fonctionné, le terminal vous demandera le nom d’utilisateur (il faudra utiliser le nom de l’utilisateur
que l’on a créé) et il ne vous demandera pas de mot de passe mais seulement la Passphrase que vous
avez tapé quand vous avez créé votre paire de clef.
On va ensuite mettre à jour le serveur en lançant cette commande :
sudo apt-get update && sudo apt-get -y upgrade
On installe ensuite PWGEN, c’est un logiciel permettant de générer des mots de passe aléatoires :
sudo apt -y install pwgen
On vérifie la mémoire vive et l’espace disque dispo sur le VPS :
free -h df -h
On crée ensuite une partition SWAP sur le VPS :
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
On fait en sorte que le Swap soit persistant même après reboot du VPS :
sudo su - cat <<EOF >> /etc/fstab /swapfile none swap sw 0 0 EOF exit
On fait en sorte de dire à l’ordinateur d’utiliser le swap uniquement si la RAM arrivé a 90%
d’utilisation :
sudo su - cat <<EOF >> /etc/sysctl.conf vm.swappiness=10 EOF exit
On vérifie enfin une dernière fois la RAM et le disque dur:
free -h df -h
Voilà pour le paramétrage du VPS, maintenant on passe au plus intéressant, l’installation et le paramétrage du securenode!
Étape 3 – Installation et paramétrage du securenode
On va maintenant installer ZEN. Pour ça il y a 2 solutions (ici A et B). Il faut choisir soit l’une soit l’autre.
A- La solution rapide
sudo apt-get update sudo apt-get install apt-transport-https lsb-release echo 'deb https://zencashofficial.github.io/repo/ '$(lsb_release -cs)' main' | sudo tee --append /etc/apt/sources.list.d/zen.list gpg --keyserver ha.pool.sks-keyservers.net --recv 219F55740BBF7A1CE368BA45FB7053CE4991B669 gpg --export 219F55740BBF7A1CE368BA45FB7053CE4991B669 | sudo apt-key add - sudo apt-get update sudo apt-get install zen # to install Zen zen-fetch-params
Il se peut que l’installation ne soit pas possible. Si c’est le cas, on utilise la solution B.
B- La solution lente
On va créer un dossier et cloner l’application Zen Node :
mkdir ~/zencash cd ~/zencash git clone https://github.com/HorizenOfficial/zen.git
On installe tous les prérequis pour l’appli Zen Node (toutes les instructions en une fois):
sudo apt -y install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake
On télécharge les paramètres zk-SNARK :
cd zen ./zcutil/fetch-params.sh
On attend que les paramètres se téléchargent et on va ensuite compiler l’application Zen :
./zcutil/build.sh -j$(nproc)
On a ensuite le temps d’aller boire un café parce que franchement c’est hyper long…
Une fois que tout est fini de compilé et que le terminal nous rend la main, on installe zend et zen-cli
dans le répertoire de l’utilisateur qu’on a créé.
sudo cp ~/zencash/zen/src/zend /usr/bin/ sudo cp ~/zencash/zen/src/zen-cli /usr/bin/
Voila, la méthode B est maintenant terminée !
Maintenant on passe à la configuration de ZEN !
On lance l’application zend et on lit bien ce qui est indiqué. L’application va se stopper après ça.
zend
On rentre ensuite toutes ces commandes une à une pour créer un nouveau fichier de conf pour
l’application ZEN :
USERNAME=$(pwgen -s 16 1) PASSWORD=$(pwgen -s 64 1) cat <<EOF > ~/.zen/zen.conf rpcuser=$USERNAME rpcpassword=$PASSWORD rpcport=18231 rpcallowip=127.0.0.1 server=1 daemon=1 listen=1 txindex=1 logtimestamps=1 ### testnet config #testnet=1 EOF
Si tout se passe bien on peut lancer l’application Zen en tant que daemon :
zend
Et on vérifie le statut de l’application et que le nombre de bloc s’incrémente bien :
zen-cli getinfo
On lance cette commande plusieurs fois histoire d’être sûr.
Maintenant que tout ça est terminé. On va sur le panel d’administration de votre nom de domaine afin de rajouter une entrée de type A sur votre DNS qui pointera vers votre VPS.
Une fois que c’est fait, on supprime l’enregistrement de type A déjà présent (avec une adresse IP
différente de notre VPS évidemment) dans la zone DNS. On ne supprime rien de plus que cette
entrée A.
On va ensuite lancer un invité de commande (cmd) sur son poste et on teste de pinguer notre nom
de domaine voir si tout fonctionne correctement :
ping nomdedomaine
On vérifie bien que le terminal nous renvoie l’adresse IP de notre VPS. Si tout est OK, on retourne sur
notre VPS et on passe à la partie certificat TLS.
On va maintenant installer le programme permettant de générer le certificat :
sudo apt install socat cd git clone https://github.com/Neilpang/acme.sh.git cd acme.sh ./acme.sh --install
On créer le certificat de la manière suivante :
FQDN=lenomdetondomaine
echo $FQDN
sudo ~/.acme.sh/acme.sh --issue --standalone -d $FQDN
Si tout se passe bien, le certificat doit se trouver ici :
~/.acme.sh/lenomdetondomaine
On lance crontab, il va permettre de renouveler le certificat automatiquement quand celui-ci sera
expiré :
sudo crontab -e
On rajoute cette ligne à la fin du fichier qui s’est ouvert :
6 0 * * * "/home/<USER>/.acme.sh"/acme.sh --cron --home "/home/<USER>/.acme.sh" > /dev/null
On lance ensuite ces commandes :
FQDN=lenomdedomaine echo " is $USER" echo " is $FQDN" sudo cp /home/$USER/.acme.sh/$FQDN/ca.cer /usr/share/cacertificates/ca.crt sudo dpkg-reconfigure ca-certificates
On arrive sur un écran rose/orange/bleu suivant les distributions :
On choisit Yes et on tombe sur cette page :
On sélectionne ca.cert en utilisant la barre espace. Lorsque l’étoile apparait [*], on valide avec entrée.
On stoppe l’application Zen et on configure la localisation du certificat :
zen-cli stop
Et ensuite :
FQDN=lenomdedomaine
cat <<EOF >> ~/.zen/zen.conf
tlscertpath=/home/$USER/.acme.sh/$FQDN/$FQDN.cer
tlskeypath=/home/$USER/.acme.sh/$FQDN/$FQDN.key
EOF
zend
On finit par checker si le certificat est reconnu par l’application :
zen-cli getnetworkinfo
On doit voir une ligne qui donne l’info suivante :
“tls_cert_verified”: true
Étape 4 – Paramétrage du securenode
Si tu as bien suivi les prérequis énoncés au début du tuto, tu as une adresse transparente avec 42
ZEN et une autre adresse transparente avec 1,1 ZEN dans ton wallet.
NE PAS ENVOYER les 42 ZEN sur le securenode ! SURTOUT PAS !
On retourne sur le VPS, et on regarde si le node possède déjà une shield address :
zen-cli z_listaddresses
Si il n’en a pas, on en créé une avec la commande :
zen-cli z_getnewaddress
On va noter cette adresse en tant que pour la suite du tuto. On va maintenant envoyer 5 transactions de 0.22 ZEN vers la à partir de l’adresse qui contient 1,1ZEN. Une fois que ça sera fait, on vérifiera sur le securenode que celui-ci a bien reçu les fonds avec la commande
zen-cli z_gettotalbalance
Si à la fin des 5 envois rien n’apparait, pas d’inquiétude, il se peut que le VPS ne soit pas encore
synchronisé avec la blockchain.
On va ensuite installer le tracker d’activité du Securenode :
sudo apt -y install npm sudo npm install -g n sudo n latest
On clone le répertoire et installe les modules :
mkdir ~/zencash cd ~/zencash git clone https://github.com/HorizenOfficial/secnodetracker.git cd secnodetracker npm install
On lance l’installation du node. On va avoir besoin de l’adresse où sont les 42 ZEN et d’une adresse
email pour recevoir l’ensemble des alertes :
node setup.js
On démarre le tracker et on vérifie qu’il fonctionne :
node app.js
On vérifie bien qu’on trouve notre securenode sur cette page.
Si on trouve notre securenode et que l’on n’a pas d’erreur de remonter, on stop le node en faisant
CTRL-C.
On va maintenant faire en sorte de lancer le node en tant que processus (celà nous permet de ne pas
monopoliser le terminal et de continuer à travailler dans la console):
cd ~/zencash/secnodetracker/ sudo npm install pm2 -g pm2 start app.js --name securenodetracker
On le fait se lancer au démarrage du VPS :
pm2 startup
Cette commande nous dit qu’il faut copier-coller une commande pour avoir pm2 au démarrage. On
copie alors la commande indiquée.
On va ensuite installer et configurer monit :
sudo apt install monit
On va créer un petit script pour lancer zend :
sudo nano ~/zen_node.sh
On colle l’ensemble des instruction suivantes en remplacement par le nom d’utilisateur que l’on utilise sur le securenode :
#!/bin/bash PID_FILE='/home/<USER>/.zen/zen_node.pid' start() { touch $PID_FILE eval "/bin/su <USER> -c '/usr/bin/zend 2>&1 >> /dev/null'" PID=$(ps aux | grep zend | grep -v grep | awk '{print $2}') echo "Starting zend with PID $PID" echo $PID > $PID_FILE } stop () { pkill zend rm $PID_FILE echo "Stopping zend" } case $1 in start) start ;; stop) stop ;; *) echo "usage: zend {start|stop}" ;; esac exit 0
On sauvegarde le fichier avec un CTRL-X et O.
On rend le fichier exécutable :
chmod u+x ~/zen_node.sh
Et on ouvre le fichier de configuration de monit :
sudo nano /etc/monit/monitrc
On colle l’ensemble des instructions suivantes à la fin du fichier en remplaçant par le nom d’utilisateur dans le securenode :
### added on setup for zend set httpd port 2812 use address localhost # only accept connection from localhost allow localhost # allow localhost to connect to the server # ### zend process control check process zend with pidfile /home/<USER>/.zen/zen_node.pid start program = "/home/<USER>/zen_node.sh start" with timeout 60 seconds stop program = "/home/<USER>/zen_node.sh stop"
On recharge la nouvelle configuration :
sudo monit reload
On active le monitoring :
sudo monit start zend
On check le statut de monit pour voir si tout est ok :
sudo monit status
Ainsi, on fait en sorte que monit tourne tout le temps, si il se stoppe, il redemarre automatiquement.
Si on veut vraiment le stopper on lance :
sudo monit stop zend
On passe maintenant à des ajouts de sécurité sur le node :
On installe un pare-feu. Pour cela on install ufw :
sudo apt-get install ufw
On rentre ensuite l’ensemble de ces instructions DANS L’ORDRE !
sudo ufw default allow outgoing sudo ufw default deny incoming sudo ufw allow ssh/tcp sudo ufw limit ssh/tcp sudo ufw allow http/tcp sudo ufw allow https/tcp sudo ufw allow 9033/tcp sudo ufw allow 19033/tcp sudo ufw logging on sudo ufw enable
On installe un programme qui permet d’éviter les attaques par dictionnaires :
sudo apt -y install fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
On installe ensuite un détecteur de rootkit :
sudo apt -y install rkhunter
L’utilitaire d’installation va demander la configuration du mail, il faudra choisir « Internet Site » et
rentrer notre FQDN.
On va enfin finir avec la création d’un script qui nous permettra de mettre rapidement notre
securenode à jour lorsqu’il y aura une montée en version :
cat <<EOF > ~/upgrade_script.sh #!/bin/bash sudo apt update sudo apt -y dist-upgrade sudo apt -y autoremove sudo rkhunter --propupd EOF
On change les permissions sur le fichier pour pouvoir exécuter :
chmod u+x ~/upgrade_script.sh
Si vous avez choisi la méthode d’installation A, maintenant lorsque vous voudrez mettre à jourvotre securenode, il faudra simplement lancer ce script en tapant :
sudo ~/upgrade_script.sh
Etape 5 – Test final
Pour tester que tout fonctionne, on redémarre le serveur :
sudo reboot
On va alors être déconnecté. On se reconnecte via Putty et on attend 5 minutes que tout se lance
tranquillement. Ensuite on vérifie que tout fonctionne avec ces commandes :
sudo monit status pm2 status zen-cli getinfo zen-cli getnetworkinfo
Voilà tout est normalement opérationnel !
26/02/2018 – Update vers Zen 2.0.11
Il faut mettre à jour le paquet zen avant le 4 mars. Du coup voici la marche à suivre:
Si vous avez utilisé la méthode d’installation rapide:
sudo apt-get update sudo apt-get install zen sudo reboot
Et pour contrôler au redémarrage que tout est OK:
zend --version
Le VPS devrait vous répondre ceci:
Zen Daemon version v2.0.11
Si vous avez utilisé la méthode longue:
cd ~/zencash rm -rf zen git clone https://github.com/HorizenOfficial/zen.git
Ensuite on passe tout ce bloc de commande en une seule fois:
sudo apt -y install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake
Puis on tape:
cd zen ./zcutil/build.sh -j$(nproc)
On finit enfin par:
zen-cli stop sudo cp ~/zencash/zen/src/zend /usr/bin/ sudo cp ~/zencash/zen/src/zen-cli /usr/bin/ sudo reboot
Et pour contrôler au redémarrage que tout est OK:
zend --version
Le VPS devrait vous répondre ceci:
Zen Daemon version v2.0.11
Voilà c’est terminé ! 🙂
__________________________________________________________
ZEN : znXpJEJ2zLrv8ZzKh9hdpFK7Qv5v7H7E35C
XZC : a9z3jPMymX61MzcvoS1pEcZSH9WFGnj8uM
camzilla
June 25, 2020 @ 4:48 pm
J’ai un souci en créant le masternode. Je n’arrive pas a connecter zen-cli getblockcount retourne 0…getinfo connections=0 ….
Pourtant mes ports ssh,http,https,9033 sont ouverts, le service zend et zentracker lancés.
Voici par contre l’info journal $sudo journalctl -fu zentracker
jun 25 22:47:28 ubn1-desktop node[2221]: 2020-06-25 20:47:28 UTC — Connected to server ts2.eu. Initializing…
jun 25 22:47:28 ubn1-desktop node[2221]: 2020-06-25 20:47:28 UTC — Checking t-address…
jun 25 22:47:28 ubn1-desktop node[2221]: 2020-06-25 20:47:28 UTC — ERROR zend get t-address
jun 25 22:47:28 ubn1-desktop node[2221]: 2020-06-25 20:47:28 UTC — connect ECONNREFUSED 127.0.0.1:18231
jun 25 22:47:48 ubn1-desktop node[2221]: 2020-06-25 20:47:48 UTC — Checking t-address…
jun 25 22:47:48 ubn1-desktop node[2221]: Node t_address (not for stake)=znWqHH4KioNk6FvkUMhrEg86oDbK1GnGUzS
jun 25 22:47:48 ubn1-desktop node[2221]: 2020-06-25 20:47:48 UTC — Checking private z-addresses…
jun 25 22:47:48 ubn1-desktop node[2221]: 2020-06-25 20:47:48 UTC — Unable to get a z-addr balance