Einen sicheren Netzwerkknoten für ZenCash installieren und bedienen -Vollständiger Leitfaden V02
Hallo deutsche Community,
wie sicherlich einige von euch mitbekommen haben sind die Bezahlungen für “secure node” Inhaber seit einigen Tagen aktiv.
Hierzu könnt ihr euch auch auf Englisch ein Blog-Post mit Hintergrund Informationen durchlesen.
Einige konnten die Anleitung zum Erstellen und Bedienen von Tross verwenden, da es aber vermehrt
Anfragen bzgl. “secure nodes” im Discord gab, möchte ich euch einen Leitfaden von Awarrior weitergeben!
Grundvoraussetzungen für sichere Netzwerkknoten (Secure Nodes):
Der Server benötigt einen 64-Bit Prozessor und ein 64-Bit Betriebssystem. Es reicht bei entsprechender Leistung des Prozessors bereits ein Kern. Außerdem sollte der Server mindestens 6GB Arbeitsspeicher haben, bei ausreichend schnellem Speicherzugriff (zum Beispiel bei SSDs) kann das auch Swap beeinhalten.
Um sich mit dem Netzwerkknoten für die Bezahlung zu qualifizieren, muss der Server in der Lage sein, die Berechnung der Challenge in weniger als 5 Minuten (300 Sekunden) zu vollenden. Die Challenge beinhaltet das Generieren einer ZenCash Shielded Transaction (eine geschützte, anonyme Transaktion) um zu demonstrieren, dass der Server sauber läuft und in der Lage ist, beim Generieren einer Vielzahl von geschützten Transaktionen am Tag zu unterstützen und damit die Sicherheit jedes Nutzers dieser Transaktionen zu gewährleisten.
Bei manchen Anbietern reicht bereits das Mieten eines 3GB RAM VPS Paketes. Bei anderen Anbietern müssen Sie einen VPS mit 4GB RAM mieten. Wenn Sie die Kosten des Netzwerkknoten gering halten möchten, achten Sie bei der Auswahl des Anbieters darauf, dass die 3GB RAM VPS Pakete mit einer SSD ausgestattet sind. Dadurch kann der fehlende Arbeitsspeicher mit Swap ausgeglichen werden.
Es wird außerdem eine feste, einzigartige IPv4 oder IPv6 Adresse und ein TLS Zertifikat benötigt. Dieses Zertifikat wird im späteren Verlauf dieses Leitfadens generiert, allerdings wird dafür ein Domain-Name benötigt.
Dieser Leitfaden zeigt die Installation eines sicheren Netzwerkknotens auf Ubuntu 16.04 LTS. Andere Linux-Distributionen sollten ebenfalls ohne große Probleme verwendbar sein, es ist nur darauf zu achten, dass in anderen Distributionen als Ubuntu z.B. ein anderer Paketmanager als apt verwendet werden könnte. Dieser Leitfaden richtet sich speziell an erfahrene Linux-Administratoren, die wissen, welche Aktionen die Befehle, die sie hier kopieren, auslösen.
Linux Installation auf einem VPS oder eigenem Server.
Linux Installation auf einem VPS oder eigenem Server
Wenn Sie keine Erfahrung mit dem Einrichten eines Linux-Servers haben, lesen Sie sich bitte weitere Hilfen
durch, wie zum Beispiel blockoperations’ Anleitung zum Einrichten eines Linux-Servers bei dem Anbieter
Linode. Solltet ihr eure “secure node” vom eigenem Server zum VPS Dienstleister transferieren wollen,
findet ihr in Englisch bei dem Blog vom Psyrax eine Hilfestellung.
Folgen Sie diesem Leitfaden auf keinen Fall als root-User!
Lesen Sie diesen Leitfaden sorgfältig durch!
Um einen Nutzer zu erstellen, der Befehle mit root-Rechten ausführen kann, nutzen Sie den folgenden
Befehl.
adduser NUTZERNAME && adduser NUTZERNAME sudo
Ersetzen Sie NUTZERNAME durch Ihren gewünschten Nutzername, ich verwende in diesem Leitfaden
‘znode’.
Einen sicheren Netzwerkknoten einrichten
Wenn Sie Hilfe bei der Installation benötigen, oder es zu Fehlern kommt, treten Sie unserem Discord-Server
bei und bitten Sie in #securenodes (englisch) oder #german um Hilfe.
Überprüfen Sie wieviel freien RAM und Speicherplatz Sie haben:
RAM
free -h
Speicherplatz
df -h
Wenn Sie nicht mehr als 6GB Arbeitsspeicher haben, wenn Sie RAM und eventuell existierenden Swap
addieren, fügen Sie Swap hinzu:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Sorgen Sie dafür, dass der Swap nach einem Neustart erhalten bleibt:
sudo su -
cat <<EOF >> /etc/fstab
/swapfile none swap sw 0 0
EOF
exit
Selbst wenn Sie keinen neuen Swap hinzugefügt haben, sorgen Sie dafür, dass bereits existierender Swap
besser funktioniert. Diese Einstellungen lassen den Swap erst übernehmen, wenn der RAM zu 90% genutzt
ist.
sudo su -
cat <<EOF >> /etc/sysctl.conf
vm.swappiness=10
EOF
exit
Überprüfen Sie erneut RAM und Speicherplatz:
free -h
df -h
Option 1 – Zend über die Paketquellen installieren – schneller, empfohlen
Um Zen über den Paketmanager apt zu installieren, müssen Sie das Repository zu den Paketlisten hinzufügen
und einige Abhängigkeiten installieren.
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
zen-fetch-params
Option 2 – Zend von Github kompilieren und installieren – langsamer
Erstellen Sie einen Ordner im Heimverzeichnis des aktuellen Nutzers und klonen Sie das Git-Repository.
mkdir ~/zencash
cd ~/zencash
git clone https://github.com/HorizenOfficial/zen.git
Installieren Sie die zum Kompilieren von Zen benötigten Pakete:
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
Laden Sie die benötigten zk-SNARK-Parameter herunter:
cd zen
./zcutil/fetch-params.sh
Warten Sie bis die Parameter vollständig heruntergeladen wurden. Danach kompilieren Sie die Anwendung
Zend:
./zcutil/build.sh -j$(nproc)
Warten Sie bis die Anwendung komplett kompiliert wurde. Dann kopieren Sie die Binärdateien ‘zend’ und
‘zen-cli’ in das Binärverzeichnis des Nutzers:
sudo cp ~/zencash/zen/src/zend /usr/bin/
sudo cp ~/zencash/zen/src/zen-cli /usr/bin/
Zend konfigurieren
Starten Sie Zend und lesen Sie die Nachricht. Zend stoppt sich automatisch nach Anzeigen der Nachricht.
zend
Erstellen Sie eine neue Konfigurationsdatei. Kopieren Sie einfach das folgende Feld und fügen Sie es in der
Kommandozeile ein. Modifizieren Sie die Einträge bei ‘rpcuser’ und ‘rpcpassword’.
cat <<EOF > ~/.zen/zen.conf
rpcuser=ÄNDERMICH
rpcpassword=ÄNDERMICHAUCH!2
rpcport=18231
rpcallowip=127.0.0.1
server=1
daemon=1
listen=1
txindex=1
logtimestamps=1
EOF
Nun starten Sie Zend erneut. Es wird jetzt als Dienst (daemon) im Hintergrund laufen.
zend
Überprüfen Sie den Status und stellen Sie sicher, dass die Anzahl der Blöcke sich erhöht.
zen-cli getinfo
Ein kostenloses TLS-Zertifikat von LetsEncrypt einbinden
Erstellen Sie einen A-Record für Ihren Server in den DNS-Einstellungen Ihrer Domain. Dies wird Ihr FQDN sein. Immer wenn in den folgenden Abschnitten des Leitfadens ein Wort in in Vergleichszeichen (<>) steht, ersetzen Sie das Wort durch den entsprechenden Eintrag und entfernen Sie die Vergleichszeichen. Zum Beispiel wäre im Falle dieses Blogs blog.horizen.io. Stellen Sie sicher, dass Ihr Domainname komplett propagiert ist und mit der IP Ihres Servers übereinstimmt.
ping <FQDN>
Also im Falle dieses Blogs:
ping blog.horizen.io
Installieren Sie das acme-Script zum Erstellen eines Zertifikats:
sudo apt install socat
cd
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install
Erstellen Sie das Zertifikat:
FQDN=<FQDN>
echo $FQDN
sudo ~/.acme.sh/acme.sh --issue --standalone -d $FQDN
Es sollte Ihnen anzeigen, wo Ihre Zertifikate erstellt wurden. Sie sollten in ‘~/.acme.sh/<FQDN>/’ liegen.
Installieren Sie einen crontab, der das Ablaufdatum des Zertifikats prüft und falls notwendig erneuert:
sudo crontab -e
Fügen Sie diesen Eintrag am Ende der crontab-Datei ein:
6 0 * * * "/home/<USER>/.acme.sh"/acme.sh --cron --home "/home/<USER>/.acme.sh" > /dev/null
Kopieren Sie das erstellte ca.cer in den Zertifikatspeicher von Ubuntu und installieren Sie es.
FQDN=<FQDN>
sudo cp /home/$USER/.acme.sh/$FQDN/ca.cer /usr/share/ca-certificates/ca.crt
sudo dpkg-reconfigure ca-certificates
Nach Eingabe des zweiten Befehls wird sich eine Ansicht öffnen, in der Sie sich mit den Pfeiltasten und Enter bewegen können. Bestätigen Sie, dass Sie neuen Zertifikaten von Zertifizierungsstellen vertrauen möchten und markieren Sie in der folgenden Ansicht das oberste Zertifikat (ca.crt) mithilfe der Leertaste mit einem Sternchen und bestätigen Sie mit Enter.
Stoppen Sie Zend und tragen Sie den Speicherort Ihrer Zertifikate in der Konfigurationsdatei ein:
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
Überprüfen Sie den Zertifikatstatus, es sollte in der Ausgabe mit ‘true’ bestätigt werden:
zen-cli getnetworkinfo | grep tls_cert_verified
Einrichten der Tracking-Software
Erstellen Sie eine neue Adresse in Ihrer Wallet und senden Sie 42 Zen an sie. Dies ist die benötigte t-Adresse. Stellen Sie sicher, dass die 42 Zen diese Adresse nicht verlassen, sonst wird Ihre Node die Anforderungen nicht mehr erfüllen und nicht am Bezahlvorgang beteiligt. Die Bezahlung wird auch an diese Adresse geschickt werden.
Überprüfen Sie ob es bereits eine geschützte Adresse (z-Adresse) auf Ihrer Node gibt:
zen-cli z_listaddresses
Wenn noch keine z-Adresse vorhanden ist, erstellen Sie eine:
zen-cli z_getnewaddress
Senden Sie nun 4 Transaktionen mit 0.25 Zen oder 5 Transaktionen mit 0.2 Zen von Ihrer Swing Wallet an die z-Adresse. Die Arizen Wallet kann keine Transaktionen an z-Adressen durchführen.
Überprüfen Sie ob die Transaktionen durchgeführt wurden:
zen-cli z_gettotalbalance
Wenn keine Balance angezeigt wird, könnte das daran liegen, dass die Blockchain noch nicht komplett heruntergeladen wurde. Überprüfen Sie den aktuellen Stand mit:
zen-cli getinfo
Die aktuelle Blockhöhe können Sie zum Beispiel mit einem Blockchain Explorer herausfinden.
Installieren Sie nun die Tracking-Software. Dazu benötigen Sie npm und Node.js:
sudo apt -y install npm
sudo npm install -g n
sudo n latest
Klonen Sie nun das Git-Repository mit der Tracking-Software und installieren sie:
mkdir ~/zencash
cd ~/zencash
git clone https://github.com/HorizenOfficial/secnodetracker.git
cd secnodetracker
npm install
Führen Sie nun das Setup durch um die nötigen Einstellungen für die Trackingsoftware zu erstellen:
node setup.js
Fügen Sie hier die t-Adresse ein, die die 42 Zen enthält.
Starten Sie nun die Tracking-Software:
node app.js
Prüfen Sie auf der Tracking-Seite ob Ihre Node korrekt angelegt wurde.
Automatisierter Start der Tracking-Software und von Zend
Tracking-Software
Wenn alles gut aussieht, stoppen Sie auf dem Server jetzt die Tracking-Software mit STRG+C. Um die Tracking-Software als Dienst zu starten, installieren Sie pm2.
cd ~/zencash/secnodetracker/
sudo npm install pm2 -g
pm2 start app.js --name securenodetracker
Führen Sie jetzt die folgenden Befehle aus um pm2 und die Tracking-Software nach jedem Neustart automatisch zu starten:
pm2 startup | grep sudo | sh -
pm2 save
Zend
Um Zend nach jedem Neustart automatisch zu starten, installieren Sie monit:
sudo apt install monit
Erstellen Sie ein kleines Script, das monit aufrufen wird um Zend zu starten:
nano ~/zen_node.sh
Kopieren Sie den folgenden Text in die Datei. Ersetzen Sie <USER> durch Ihren Nutzernamen.
#!/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
Machen Sie die Datei ausführbar:
chmod u+x ~/zen_node.sh
Öffnen Sie jetzt die Konfigurationsdatei von monit in einem Texteditor:
sudo nano /etc/monit/monitrc
Fügen Sie folgende Zeilen unten an die Konfiguration an und ersetzen Sie wie immer <USER> durch Ihren Benutzernamen:
### 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"
Laden Sie die neue Konfiguration:
sudo monit reload
Sollte zend noch laufen, beenden Sie es mit:
zen-cli stop
Starten Sie den Dienst:
sudo monit start zend
Grundlegende Server-Sicherheit
Erstellen von Firewall-Regeln:
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
Installieren von fail2ban. Fail2ban wird eine IP nach mehreren fehlerhaften Loginversuchen für eine gewisse Zeit blockieren.
sudo apt -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Rootkit-Erkennung:
sudo apt -y install rkhunter
Wenn es nach Mail-Konfiguration fragt, wählen Sie ‘Internet-Seite’ und fügen Sie auf der nächsten Seite Ihren FQDN ein.
Erstellen Sie ein Script, das Ihren Server auf den neuesten Stand bringt und die Rootkit-Datenbank von rkhunter aktualisiert:
cat <<EOF > ~/upgrade_script.sh
#!/bin/bash
sudo apt update
sudo apt -y dist-upgrade
sudo apt -y autoremove
sudo rkhunter --propupd
EOF
Machen Sie das Script ausführbar:
chmod u+x ~/upgrade_script.sh
Wenn Sie Ihren Server nun auf den neuesten Stand bringen möchten, führen Sie einfach das Script aus:
sudo ~/upgrade_script.sh
Modifizieren Sie die Konfiguration des SSH-Servers. Finden Sie den Eintrag ‘PermitRootLogin yes’ und ändern Sie das ‘yes’ zu ‘no’. Starten Sie anschließend den SSH-Server neu.
sudo nano /etc/ssh/sshd_config
sudo service ssh restart
Es gibt noch weitere Wege, seinen Server abzusichern, wie das Generieren von Public/Private Keys für SSH.
Außerdem ist es empfehlenswert, den private Key der z-Adresse zu sichern, falls der Serveranbieter den Vertrag kündigen sollte, oder durch Fehler das Betriebssystem neu installiert werden muss.
zen-cli z_exportkey "z-Adresse"
Finale Tests
Starten Sie Ihren Server neu um zu testen, ob alles funktioniert:
sudo reboot now
Nachdem der Server neu gestartet ist, prüfen Sie ob alles ordnungsgemäß gestartet wurde:
sudo monit status
pm2 status
zen-cli getinfo
zen-cli getnetworkinfo
Bitte geben Sie dem Server vor ausführen dieser Befehle ein paar Minuten Zeit.
Sollte nach mehreren Minuten trotzdem noch ein Fehler bestehen, fragen Sie im Discord nach und Ihnen wird durch die Community schnell geholfen.
Vielen Dank an Awarrior und wer noch nützliche Links in Deutsch zum Thema “secure nodes” hat
kann diese gerne als Kommentar an dieses Blog Post anhängen!
Beste Grüße
Arno aka mrceebo 🙂
Tradeocolus
February 1, 2018 @ 8:11 am
Wirklich eine super einfache und verständliche Anleitung, vielen Dank für die Überarbeitung.
Ich nutze den günstigsten VPS von Netvcup, dieser kostet nur 2,99€ pro Monat und schafft die Challange in 166 Sekunden.