Begleitartikel zu folgendem Video

Vorwort

Diese Anleitung ist nur eine Möglichkeit einen Node aufzusetzen.
Wir haben uns bewusst dazu entschieden, alle Schritte manuell zu machen.
So verstehst du was zur Installation und Konfiguration eines Nodes notwendig ist.
Das würde bei einem Installationsscript verloren gehen.

Außerdem kannst du dir sicher sein, dass sich in deinem System keine Hintertürchen z.B. vom Ersteller eines Installationsscriptes befinden.

Falls du noch nie einen Linux Server betrieben hast, stell im Zweifel lieber eine Frage im Forum, bevor du einen unsicheren Server ins Internet stellst 😉

Server

Wir haben bei Contabo den “VPS S SSD” Server gebucht. Für eine einmalige Einrichtungsgebühr von 5€ kannst du diesen monatlich kündigen und zahlst pro Monat nur 5€ für den Server.

Der Server hat die folgenden Spezifikationen:
– 4 (virtuelle) CPU Kerne
– 8GB RAM
– 200GB SSD

Als Betriebssystem verwenden wir Ubuntu 20.04

Falls du den Server auch buchen möchtest, nutze gerne unseren Ref-Link und unterstütze unsere Arbeit:
Für Leute aus Deutschland: https://ref.blocktrainer.de/contabo
Für Leute NICHT aus Deutschland: https://ref.blocktrainer.com/contabo.com

Domain

Wenn du deinen Node auch in Trinity eintragen möchtest, brauchst du eine eigene Domain.
Dort musst du dann mindestens einen A Record erstellen, der auf deine Server IP verweist.
Für IPv6 Unterstützung musst du zusätzlich einen entsprechenden AAAA Record erstellen.

Firewall

Wenn du das erste Mal mit dem Server verbunden bist, solltest du direkt die Firewall konfigurieren.
Unter Ubuntu nutzen wir dazu UFW.
Damit du dich nicht selbst aussperrst, musst du als erstes den SSH Zugriff mit folgendem Befehl erlauben:

ufw limit OpenSSH

Damit erlaubst du den SSH Zugriff, limitierst aber automatische Angriffe durch das Verwenden von “limit” anstelle des üblichen ufw allow OpenSSH Befehls.
Anschließend kannst du die Firewall mit folgendem Befehl einschalten:

ufw enable

Du wirst noch gefragt, ob du das wirklich machen willst, da es deine SSH Verbindung trennen könnte.
Dies bestätigst du einfach mit der Eingabe von y und ENTER.

Anschließend können wir direkt die Ports für den HORNET Node öffnen.

ufw allow 14626/udp
ufw allow 15600/tcp

Port 14626 ist für das Autopeering (Automatische Suche von anderen Nodes) nötig.
Port 15600 wird für das Gossip Protokoll (Kommunikation zwischen verbundenen Nodes) benötigt.

SSH Absichern

Jetzt sichern wir noch den SSH Zugang ab, indem wir von Passwort-Anmeldung auf SSH Key-Anmeldung wechseln.

Dafür benötigst du natürlich einen SSH Key.
Falls du noch keinen hast, empfehle ich den folgenden Artikel als Anleitung: https://www.heise.de/tipps-tricks/SSH-Key-erstellen-so-geht-s-4400280.html
Nimm dir unbedingt die Zeit, dem Key ein Passwort zu geben und versuche das System hinter SSH Keys zu verstehen. Bei Verständnisfragen gilt wie immer: im Forum wird dir gerne und kostenlos geholfen 👍

Kurz zusammengefasst bietet dir die Key Authentifizierung die folgenden Vorteile:

  • Ein Public Key gehört jeweils zu einer Person oder zu einem Computer.
    Will du also den Zugriff auf den eigenen Server entziehen, musst du nur den Key vom Server entfernen und brauchst nicht alle Passwörter zu ändern.
  • Du kannst den gleichen Key für mehrere Server nutzen.
  • Du kannst den Key einmal in einem Agent entsperren (der durch ein Passwort extra geschützt wird) und dann ohne eine Passworteingabe mit deinem Server eine Verbindung aufbauen.
    Auf meinem MacBook mache ich das z.B. automatisch beim Anmelden.
  • Ein Key ist wesentlich sicherer als ein normales (evtl. kurzes) Passwort.

Nun aber zurück zur Anleitung. Auf dem Server kannst du den SSH Public Key in die folgender Datei speichern .ssh/authorized_keys
Ich nutze (der Einfachheit halber) dazu den Nano Texteditor:

nano .ssh/authorized_keys

Hier kannst du dann pro Zeile einen Key eingeben. Für mich sieht die Zeile dann z.B. so aus:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoCfGEd1yR1ixIf+p5FrySeENu5N85zCmmuRsBEa0fBC8xrFHkzPm0SZN6U/+Y/GhIod8ypYo1sGKSpBR9wN+Ww/hnDovZb/q9pvDhoEcb+YsA6Rzdj6pTGgqwseBYKoC0k1B/ZeLJbmCot0CA6h/+hLmxrB2Ie/HE+bAcCIwpvoHJxeZqST/QaZMeFhru7/VxMBghnT5ssr+pE7OR8udHkIB9gRNJbjUQaAd3xzSJR3KU6MvQPXlu0FIL0ieucF1/PEMGOoLizfjN81W8yHeY6Zm49efmqp5g4zD+cBzDZJ3VFA/QMDreTzfCdOjxN4jxJIHTb0+UrM6hDXLbmKWEw== rsa-key-20200129

Nano zeigt dir im unteren Bereich alle Funktionen an.
Dabei steht das “^” Zeichen immer für die Strg bzw. ctrl (auf dem Mac) Taste.
Zum Speichern drückst du also Strg + O, wirst dann noch nach dem Dateinamen gefragt (den du einfach mit Enter bestätigen kannst) um anschließend per Strg + X Nano wieder zu verlassen.

Nun, da du die Hintergründe kennst, verrate ich dir noch, dass man das ganze auch mit dem Tool: https://www.ssh.com/ssh/copy-id vereinfachen kann. Das macht im Grunde die obigen Schritte für dich automatisch.

Falls du die Key Authentifizierung zum ersten mal nutzt, bietet es sich an, den Zugriff zu testen.
Denn im nächsten Schritt stellen wir die Passwort Anmeldung in SSH ab.
Dies hat dann das Potenzial sich selbst auszusperren 😉

nano /etc/ssh/sshd_config

Hier änderst du die folgenden beiden Optionen:

X11Forwarding no
PasswordAuthentication no

Mit dem Befehl sshd -t kannst du dann nach dem Speichern testen, ob die SSH Konfiguration ohne Fehler gelesen wird.
Anschließend solltest du SSH mit service ssh restart die neue Konfiguration übernehmen lassen.

Automatische Updates

Da dies nur ein Node ist, bei dem ein Ausfall nicht so schlimm wie z.B. bei einem Online-Shop wäre, aktivieren wir automatische Updates und lassen den Server (falls nötig) selbst neu starten.

Zuerst stellst du mit apt install unattended-upgrades sicher, dass das benötigte Paket dafür vorhanden ist.

Um automatische Updates zu aktivieren, musst du zwei Dateien anpassen.
Die erste Datei öffnest du mit folgendem Befehl:

nano /etc/apt/apt.conf.d/10periodic

dort ersetzt du den Inhalt komplett durch:

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

Die zweite Datei öffnest du mit:

nano /etc/apt/apt.conf.d/50unattended-upgrades 

Dort musst du die folgenden Optionen anpassen:

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:33";

Hinweis: Bitte wähle NICHT 03:33 Uhr für den Neustart, sondern wähle eine “eigene” Uhrzeit aus. Ansonsten starten bei einem Update viele Nodes gleichzeitig neu, was einen negativen Effekt auf das IOTA-Netzwerk haben könnte.

Ob alles funktioniert kannst du mit unattended-upgrades --dry-run --debug prüfen.
Außerdem solltest du nach ein paar Tagen einen Blick in die Log Dateien werfen um sicher zu gehen, dass die automatischen Updates wirklich laufen.
z.B. mit: cat /var/log/unattended-upgrades/unattended-upgrades.log

HORNET installieren

Wir installieren HORNET über die neue PPA Paketquelle. Damit werden Updates automatisch per apt übernommen und auch die Installation/Einrichtung wird dir komplett abgenommen.

wget -qO - https://ppa.hornet.zone/pubkey.txt | apt-key add -
sh -c 'echo "deb http://ppa.hornet.zone stable main" >> /etc/apt/sources.list.d/hornet.list'
apt update && apt install hornet

Nach der Installation musst du HORNET noch als Systemservice aktivieren. Damit wird deine Node auch automatisch nach einem Neustart des Server wieder gestartet.

systemctl enable hornet.service
service hornet start

Mit service hornet status kannst du nun überprüfen ob der Service ordnungsgemäß läuft.

Die Log Ausgabe von HORNET kannst du dir mit folgendem Befehl live ansehen:

journalctl -u hornet.service -f

Webserver + SSL

Damit dein Node auch in Trinity funktioniert, brauchst du ein SSL Zertifikat. Damit ist die Kommunikation zwischen Wallet und Node verschlüsselt. Zusätzlich machen wir damit das Dashboard (abgesichert durch Benutzername und Passwort) erreichbar.

Installation von nginx Webserver
apt install nginx

Firewall öffnen
ufw allow "Nginx Full"

Dashboard absichern

Für diesen Abschnitt solltest du dich im Verzeichnis der HORNET Installation befinden. Gib also cd /var/lib/hornet ein.

Du brauchst für diesen Schritt 3 verschiedene Zeichenfolgen (Benutzername, Password und Salt). Benutzername und Passwort kannst du frei wählen. Beim Salt musst du beachten, dass die Zeichenkette nur aus Kleinbuchstaben bestehen darf!

Falls du dir ein sicheres Passwort und Salt generieren möchtest, findest du unter diesem Link ein paar Buchstaben und Zahlen:
https://www.random.org/passwords/?num=5&len=24&format=html&rnd=new

Oder du nutzt deinen Passwortmanager um ein sicheres Passwort/Salt zu erstellen 😉

Für dieses Beispiel nutzen wir die folgenden Werte:
Benutzername: benutzer1337
Passwort: cNEVTAs4jMCtv9h38Hk5jmc6
Salt: pmnhce6dzrrtr2ruzvdgkrhy

Bitte nutz nicht die Werte aus diesem Beispiel. Wenn du Probleme damit hast z.B. den Hash richtig zu erstellen, nutz bitte das Forum und frag einfach nach!

HORNET liefert ein Tool zum errechnen des Passwort-Hash direkt mit.
Wir müssen einfach nur

hornet tool pwdhash

ausführen und den Wizard-Schritten folgen. Nachdem du alle Werte ausgefüllt hast, wird dir der passende Hash angezeigt.

In der config.json kannst du nun den "dashboard"/"basicAuth" Bereich anpassen.

"dashboard": {
    "bindAddress": "localhost:8081",
    "theme": "default",
    "dev": false,
    "basicAuth": {
      "enabled": true,
      "username": "benutzer1337",
      "passwordHash": "cNEVTAs4jMCtv9h38Hk5jmc6pmnhce6dzrrtr2ruzvdgkrhy",
      "passwordSalt": "pmnhce6dzrrtr2ruzvdgkrhy"
    }
  },

Damit HORNET diese Änderungen lädt, starte den Service einmal mit service hornet restart neu.

Nginx konfigurieren

Wir konfigurieren nun nginx so, als ob wir kein SSL nutzen würden. Der Let’s encrypt certbot passt die Konfiguration im nächsten Schritt automatisch für dich an.

nano /etc/nginx/sites-available/default

Ersetze den Inhalt der Datei durch diesen:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;

        location /node {
                proxy_pass http://127.0.0.1:14265/;
        }

        location /ws {
                proxy_pass http://127.0.0.1:8081/ws;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_read_timeout 86400;
        }

        location / {
                proxy_pass http://127.0.0.1:8081;
        }
}

Prüfe nach dem Speichern der Datei ob diese gültig ist, indem du nginx -t ausführst.
Wenn keine Fehler angezeigt werden, kannst du nun nginx die Konfiguration mit service nginx reload laden.

SSL Zertifikat

Für die Installation des cerbot kannst du einfach die folgenden Befehle nutzen:

apt install software-properties-common
add-apt-repository universe
apt update
apt install certbot python3-certbot-nginx

Im Anschluss an die Installation kannst du dann mit dem folgenden Befehl den certbot Wizard starten:

certbot --nginx

Die Schritte sind dann wie folgt:

  1. E-Mail für Benachrichtigung angeben. Nutze hier auf jeden Fall eine E-Mail Adresse die du auch regelmäßig abrufst. Sollte dein Zertifikat einmal auslaufen (aufgrund eines Fehlers), bekommst du an diese Adresse eine Benachrichtigung
  2. Die Bedingungen mit der Taste A aktzeptieren
  3. Falls du deine E-Mail mit der EFF teilen willst, drücke die Taste Y, anderenfalls die Taste N
  4. Hier musst du nun deine Domain für den HORNET Node angeben.
  5. Dein Zertifikat wird nun installiert
  6. Drücke die Taste 2 damit alle Anfragen per HTTP automatisch an das sichere HTTPS weitergeleitet werden.

Glückwunsch 🎉 Du solltest nun ein funktionierendes IOTA HORNET Node haben. Zum Überprüfen ruf einfach deine eigene Domain auf und gib deinen Benutzernamen und Passwort ein. Anschließend wird dir das Dashboard angezeigt und du bist nun Teil des IOTA Netzwerks 🤙

Trinity Konfiguration

Deinen Node kannst du auch in Trinity eintragen. Da wir sowohl das Dashboard, als auch die API auf der selben Domain betreiben, musst du ans Ende der Domain /node anfügen. Im Fall der Blocktrainer Node ist die gültige Adresse also: https://hornet.blocktrainer.de:443/node.

Kommt es zu Problemen mit der Verbindung in Trinity, kannst du das folgende Tool zur Fehlersuche verwenden:
https://trinity.iota.org/nodes/

Autor

Geboren in Münster, hat er immer noch keinen überzeugenden Grund gefunden, diese tolle Stadt zu verlassen. Als Programmierer macht er technisch alles möglich, was du hier so findest. Du willst dich bei mir bedanken? Dann guck doch mal in meine Amazon Wunschliste