21 sty

ZenCash Node – jak skonfigurować i zarządzać

ZenCash Node - jak skonfigurować i zarządzać

Podstawowe wymagania techniczne do Nody

Do utworzenia Nody potrzebujemy serwer wirtualny (VPS) albo dedykowany z 64-bitowym procesorem i zainstalowanym systemem operacyjnym. Taki serwer również musi posiadać dostęp do rdzeni procesora i 6 GB pamięci podręcznej, z których 4 Gb może być pamięcią RAM i 2 Gb pamięcią swap.

Aby podłączyć do przetwarzania transakcji z sieci ZenCash naszą bezpieczną Nodę, serwer musi wykonywać obliczenia do 5 minut lub 300 sekund. Te obliczenia polegają na tworzeniu Zabezpieczonych transakcji ZenCash (Shielded Transaction) oraz demonstracji wydajności serwera, który będzie tworzył dużo takich transakcji co dziennie zwiększając bezpieczeństwo każdego takiego przelewu.

Potrzebny jest również przypisany do serwera unikalny adres IPv4 lub IPv6, SSL/TLS certyfikat i nazwa domeny (wystarczy nawet utworzyć poddomenę). O tym jak wygenerować i zainstalować darmowy certyfikat SSL od Lets Encrypt pisaliśmy trochę wcześniej, ale byłoby bezpieczniej wykupić komercyjny certyfikat SSL.

W tym artykule pokażemy, jak wykonać instalację w systemie Ubuntu 16.04. Na innych wersjach systemu Unix lub Linux powinno wszystko działać też bez problemów.

Instalacja systemu operacyjnego Linux na serwer VPS

Aby zainstalować system operacyjny Ubuntu musimy wybrać odpowiednią zakładkę na stronie z informacją o produkcie w Panelu Klienta (OS Reinstall)

Billing OS Reinstall

 

Tworzenie Nody ZenCash

Jeżeli będziesz potrzebował pomocy – można się zgłosić do grupy w Discord ZenCash i wejść do kanału z nazwą #securenodes

Sprawdź wolną pamięć i miejsce na dysku serwera:

free -h
df -h

Jeśli nie masz  więcej niż 5 Gb RAM po dodaniu – musimy dodać plik swap:

sudo fallocate -l /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Zróbmy żeby swap dodawał się po ponownym uruchomieniu serwera automatycznie:

sudo su -
cat <<EOF >> /etc/fstab
/swapfile none swap sw 0 0
EOF
exit

Należy zrobić poniższe ustawienia na serwerze aby pamięć swap miała najwyższą wydajność. Ta opcja wymusza serwer wypełnić pamięć RAM do 90% zanim przejść do wykorzystania swap na dysku twardym serwera:

sudo su -
cat <<EOF >> /etc/sysctl.konf
vm.swappines=10
EOF
exit

Sprawdzamy jeszcze raz wolną pamię ćpodręczną oraz dysk:

free -h.
df -h

Instalacja zen z gotowych pakietów

Zainstalujemy Zen z pakietów dostępnych na tej stronie – https://zencashofficial.github.io/repo/

sudo apt-get update
sudo apt-get install apt-transport-https z 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

Tego powinno wystarczyć dla szybkiej i najprostszej w obsłudze instalacji Nody ZenCash.

Konfiguracja Zen

Uruchamiamy zend jeden raz i czytamy wiadomość. Następnie zend automatycznie zatrzyma się.

zend

Tworzymy nowy plik konfiguracyjny zen. Jego zawartośc będzie następna:

cat <<EOF > ~/.zen/zen.conf
rpcuser=zenuserorsomebettername
rpcpassword=replacethiswithagoodpassword
rpcport=18231
rpcallowip=127.0.0.1
server=1
daemon=1
listen=1
txindex=1
logtimestamps=1
### testnet config
#testnet=1
EOF

Uruchomiamy aplikację Zen jako proces:

zend

Sprawdzamy stan i upewniamy się, że blok zwiększa się:

zen-cli getinfo

Instalacja darmowego certyfikatu od LetsEncrypt

Tworzymy wpis A dla serwera poprzez panel zarządzania wpisami DNS domeny internetowej. FQDN – w kolejnych krokach jest nazwą domeny.

Wszędzie gdzie są duże litery <CAPS> musimy zamienić odpowiednią wartością dla naszego serwera/użytkownika/domeny. Na przykład, <FQDN> blogu ZenCash jest blog.zensystem.io

Sprawdzamy czy dodany wpis domeny jest skierowany na publiczny adres IP twojego serwera:

ping <FQDN>

Instalujemy skrypt acme aby utworzyć certyfikat:

sudo apt install socat
cd 
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install

Tworzymy certyfikat:

FQDN=<FQDN>
echo $FQDN
sudo ~/.acme.sh/acme.sh --issue --standalone -d $FQDN

Musimy zobaczyć w konsoli gdzie są certyfikaty. Powinny one być w folderze

~/.acme.sh/<FQDN>

Instalujemy crontab, który będzie sprawdzał ważność certyfikatu i będzie go odnawiał w razie potrzeby:

sudo crontab-e

Wklejamy następny kod na końcu pliku crontab:

6 0 * * * "/home/<USER>/.acme.sh"https://hostovita.r.worldssl.net/acme.sh --cron --home "/home/<USER>/.acme.sh" > /dev/null

Kopiujemy certyfikat do magazynu certyfikatów Ubuntu i instalujemy go. Najlepszym sposobem, aby to zrobić jest skopiowanie następnej sekcji do pliku tekstowego w notatniku czy Notepad++, gdzie zmieniamy nazwę użytkownika i nazwę domeny <USER> i <FQDN> na potrzebne nam, a następnie kopiujemy ten tekst i wklejamy do wierszu poleceń serwera na Linux. Nie trzeba kopiować linię z nazwą domeny FQDN więcej niż jeden raz. Użyj Tab, spacja i Enter, aby przejść do menu certyfikatów CA:

FQDN=<FQDN>
echo "<USER> is $USER" 
echo "<FQDN> is $FQDN"
sudo cp /home/$USER/.acme.sh/$FQDN/ca.cer /usr/share/ca-certificates/ca.crt
sudo dpkg-reconfigure ca-certificates

Zatrzymujemy aplikację zen i konfigurujemy ścieżkę do certyfikatu, a następnie uruchamiamy zend ponownie:

FQDN=<FQDN>
zen-cli stop
cat <<EOF >> ~/.zen/zen.conf
tlscertpath=/home/$USER/.acme.sh/$FQDN/$FQDN.cer 
tlskeypath=/home/$USER/.acme.sh/$FQDN/$FQDN.key
EOF
zend

Sprawdzamy status TLS cert – to polecenie musi wyświetlić „tls_cert_verified”: true

zen-cli getnetworkinfo

Konfiguracja bezpieczeństwa Nody

Tworzymy nowy adres portfelu – na który trzeba będzie wysłać 42 zen. To jest adresem <T_ADDR>. Musimy upewnić się że ZEN zostaje w tym adresie, w przeciwnym przypadku Noda nie przejdzie weryfikacji.

Sprawdzamy czy Noda posiada już zabezpieczony adres:

zen-cli z_listaddresses

Jeśli nie, utwórz „shielded” adres na nodzie zen:

zen-cli z_getnewaddress

Adres ten będzie nazwany <Z_ADDR>. Wysyłamy 4 lub 5 transakcji od 0,1 do 0,25 monet zen na <Z_ADDR> z portfelu ZenCash zainstalowanego na komputerze PC lub Mac. Upewniamy się, że noda wie, że ona ma pieniądze. Będziemy gotowi, gdy będziemy mieli więcej niż 1 ZEN:

zen-cli z_gettotalbalance

Jeśli balans nadal jest zerowy, blockchain prawdopodobnie nie został zaktualizowany do ostatniej wersji. Sprawdzić można za pomocą polecenia

zen-cli getinfo

lub

watch zen-cli getinfo

Instalujemy aplikację tracker. Jeśli aktualizujesz aplikację, przeczytaj instrukcje dotyczącą aktualizacji tutaj: https://github.com/ZencashOfficial/secnodetracker

Instalujemy npm i Node.js:

sudo apt -y install npm
sudo npm install -g n
sudo n latest

Kopiujemy ten repozytorium i instalujemy moduły node:

mkdir ~/zencash
cd ~/zencash
git clone https://github.com/ZencashOfficial/secnodetracker.git
cd secnodetracker
npm install

Uruchomiamy instalację aplikacji node. Musimy wiedzieć jaki jest <T_ADDR> i adres e-mail do powiadomień.

node setup.js

Uruchomiamy aplikację i sprawdzamy, czy działa:

node app.js

Sprawdzić stan Twojej nody można na stronie trackera:

https://securenodes.zensystem.io/

Jeśli widzimy żę noda została zarejestrowana poprawnie i wygląda dobrze, wciskamy Ctrl-C, aby zatrzymać aplikację.

cd ~/zencash/secnodetracker/
sudo npm install pm2@2.4.0 -g
pm2 start app.js --name securenodetracker

Zrobimy tak, aby to się uruchomiało przy starcie systemu:

pm2 startup

Trzeba skopiować i wkleić polecenie, aby pm2 był uruchomiany przy starcie systemu – system powie, co należy zrobić.

Instalujemy i konfigurujemy monit aby noda zen działała. Instalujemy monit:

sudo apt install monit

Stwórzmy mały plik, aby uruchomić zend. Edytujemy:

nano ~/zen_node.sh
or 
vim ~/zen_node.sh

Wklejamy następną zawartość do pliku. Zamieniamy tylko nazwę użytkownika <USER> na naszą

#!/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

Robimy tak, aby plik pomocniczy był wykonywalny:

chmod u+x ~/zen_node.sh

Dodajemy kilka opcji do konfiguracji monit w dolnej części plikui:

sudo nano /etc/monit/monitrc 
or 
sudo vim /etc/monit/monitrc

Wklejamy to do pliku na samym dole. Zamieniamy tylko nazwę użytkownika <USER>:

### 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"

Wgrywamy nową konfigurację:

sudo monit reload

Włączamy usługę monitoringu:

sudo monit start zend

Możemy sprawdzić status monit za pomocą polecenia:

sudo monit status

Powyższe ustawienia pozwolą nam zawsze mieć uruchomiony zend. Jeżeli zatrzymamy go, to system automatycznie uruchomi go ponownie. Jeśli naprawdę musimy go zatrzymać, możemy to zrobić następnym sposobem:

sudo monit stop zend

Zwiększamy bezpieczeństwo serwera

Tworzymy zaporę sieciową:

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 logging on
sudo ufw enable

Instalujemy i włączamy dziennik nieudanych prób logowania:

sudo apt -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Ustawiamy detektor rootkit:

sudo apt -y install rkhunter

Jeżeli  system zapyta o ustawienia email, wybieramy Internet Site i wpisujemy nazwę domeny FQDN na następnej stronie. Tworzymy skrypt aktualizacji, który będzie również aktualizować rootkit hunter po aktualizacji nody:

cat <<EOF > ~/upgrade_script.sh
#!/bin/bash
sudo apt update
sudo apt -y dist-upgrade
sudo apt -y autoremove
sudo rkhunter --propupd
EOF

Zmieniamy uprawnienia aby skrypt mógł się wykonywać:

chmod u+x ~/upgrade_script.sh
Ważne: polecamy również zabezpieczyć połączenie z serwerem za pomocą utworzenie publicznego/prywatnego kluczy SSH- Tworzenie kluczy SSH oraz zmianą domyślnego portu SSH na inny (warto uważać na ten port, żeby dodać go do skonfigurowanej wyżej zapory sieciowej, firewall).

Jeżeli będziemy chcieli zaktualizować nodę, wystarczy uruchomić skrypt poleceniem:

sudo ~/upgrade_script.sh

Teraz musimy mieć działającą Bezpieczną Nodę ZenCash :)

Ostateczny test

Uruchomiamy ponownie serwer i upewniamy się, że wszystko wraca do normalnej pracy

sudo reboot

Po ponownym uruchomieniu serwera, podłączamy się i sprawdzamy, czy wszystko działa:

sudo monit status
pm2 status
zen-cli getinfo
zen-cli getnetworkinfo
Ważne: prosimy również utworzyć kopię zapasową klucza prywatnego portfela, który znajduje się na serwerze w bezpiecznym miejscu.

Powinno być tyle dla Nody z podstawowym poziomem bezpieczeństwa. Czy można robić rzeczy lepiej, inaczej? Oczywiście że tak. Jeżeli macie coś do poprawienia w tej instrukcji – dajcie nam znać w komentarzach do tego wpisu :)

Udostępnij