Informationssicherheit steht ganz oben auf der In-vestitionsliste von CIOs für 2019. Cybersicherheit und Risikomanagement in Unternehmen stehen ganz oben auf der Agenda von CIOs und CEOs, wie die "State of the CIO"-Studie zeigt. In diesem IPFS-Kurs werden wir den Prozess der Erstellung eines privaten IPFS-Netzwerks und die Einrichtung eines IPFS-Clusters für die Datenreplikation auf einem privaten IPFS-Netzwerk durchgehen.
Es gibt zwei Arten von IPFS Netzwerken: öffentlich und privat. Alle Dateien im öffentlichen IPFS-Netzwerk sind für jeden zugänglich. Da die meisten Geschäftsanwendungen, insbesondere Unternehmenslösungen, die volle Kontrolle über ihre Daten benötigen, ist es keine Option, ihre Netzwerke öffentlich zugänglich zu machen. Hier können die Datenschutzfunktionen von IPFS helfen: Das Netzwerk kann für bestimmte Unternehmen geschlossen werden.
Während IPFS selbst keine Datenreplikation zwischen allen Knoten im Netzwerk bietet, gibt es zwei Möglichkeiten, Daten in IPFS zu replizieren: Filecoin und IPFS Cluster. Wir werden IPFS-Cluster verwenden, um diese Funktion zu aktivieren. In unserem Fall werden wir unser privates Netzwerk auf den drei virtuellen Maschinen in der Cloud einrichten. Bevor wir jedoch beginnen, hier die Links zu den Support-Dokumentationen der verwendeten Tools:
IPFS: Ein Protokoll und Netzwerk, das eine inhaltsadress-ierbare Peer-to-Peer-Methode zur Speicherung und gemeinsamen Nutzung von Hypermedia in einem verteilten Dateisystem ermöglicht. Mehr erfahren
Private IPFS: Ermöglicht IPFS, sich nur mit anderen Peers zu verbinden, die über einen gemeinsamen geheimen Schlüssel verfügen. In privaten IPFS-Netzwerken bestimmt jeder Knoten, mit welchen anderen Knoten er sich verbinden möchte. Die Knoten in diesem Netzwerk reagieren nicht auf Nachrichten von Knoten außerhalb dieses Netzwerks. Mehr dazu
IPFS-Cluster: Ein IPFS-Cluster ist eine eigenständige Anwendung und ein CLI-Client, der Pins in einem Cluster von IPFS-Daemons zuweist, repliziert und verfolgt. IPFS-Cluster verwendet einen Leader-basierten Raft-Algorithmus, um die Speicherung eines Pin-sets zu koordinieren und den Datensatz auf die teilnehmenden Knoten zu verteilen. Read more
Es ist zu beachten, dass ein privates Netzwerk eine Standardfunktion ist, die in der IPFS-Kernfunktionalität implementiert ist, während IPFS-Cluster eine separate Anwendung ist. IPFS- und IPFS-Cluster-Anwendungen werden als unterschiedliche Pakete installiert, laufen als separate Prozesse und haben unterschiedliche Peer-IDs, API-Endpunkte und Ports. Der IPFS-Cluster-Daemon hängt vom IPFS-Daemon ab und sollte nach diesem gestartet werden.
Standardmäßig verwenden IPFS und IPFS-Cluster die folgenden Ports:
IPFS
4001 – Communication with other nodes
5001 – API server
8080 – Gateway server
IPFS-CLUSTER
9094 – HTTP API endpoint
9095 – IPFS proxy endpoint
9096 – Cluster swarm, used for communication between cluster nodes
Wir werden drei kürzlich erstellte virtuelle Maschi-nen (in meinem Fall habe ich DigitalOcean ver-wendet) mit installiertem Linux Ubuntu Distributive Version 16.04 und die Kommandozeile als Hauptinstrument für die Installation der erforderli-chen Pakete und Einstellungen verwenden. Je nach Cloud-Anbieter (AWS, Azure, Google, etc.) müssen Sie eventuell einige zusätzliche Einstellungen vornehmen, wie z.B. die Konfiguration der Firewall oder der Sicherheitsgruppen, damit sich Ihre Peers gegenseitig sehen können.
Nehmen wir an, wir haben drei VMs mit den fol-genden IP-Adressen:
Node0: 192.168.10.1
Node1: 192.168.10.2
Node2: 192.168.10.3
Beginnen wir mit dem Nullknoten (Node0), der un-ser Bootstrap-Knoten sein wird.
Installieren wir zunächst Go, da wir es während des Deployments benötigen werden.
Aktualisieren Sie die Linux-Pakete und Abhäng-igkeiten:
sudo apt-get update sudo apt-get -y upgrade
Laden Sie die neueste Version herunter und entzippen Sie Go
wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz sudo tar -xvf go1.11.4.linux-amd64.tar.gz sudo mv go /usr local
Erstellen Sie den Pfad für Go und setzen Sie die Umgebungsvariablen.
1. Erstellen Sie einen Ordner:
mkdir $HOME/gopath
Öffnen Sie die Datei .bashrc und fügen Sie am Ende drei Variablen hinzu: GOROOT, GOPATH, PATH.
Öffnen Sie die Datei:
sudo nano $HOME/.bashrc
Fügen Sie am Ende der .bashrc-Datei Folgendes ein:
export GOROOT=/usr/local/go export GOPATH=$HOME/gopath export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
2. Aktualisieren Sie die .bashrc-Datei und überprüfen Sie die Go-Version:
source ~/.bashrc go version
Wir werden die neuste Version von go-ipfs installieren. Zum Zeitpunkt des Schreibens dieses Artikels war es v0.4.18 für Linux. Sie können die neueste Ver-sion hier finden:https://dist.ipfs.io/#go-ipfs
Laden Sie IPFS herunter, entpacken Sie die tar-Datei, verschieben Sie den entpackten Ordner unter bin und initialisieren Sie den IPFS-Knoten:
wget https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_linux-amd64.tar.gz tar xvfz go-ipfs_v0.4.18_linux-amd64.tar.gz sudo mv go ipfs/ipfs /usr/local/bin/ipfs ipfs init ipfs version
Wiederholen Sie die Schritte 1 und 2 für alle Ihre VMs.
Sobald Sie Go und IPFS auf allen Ihren Knoten in-stalliert haben, führen Sie den folgenden Befehl aus, um das Dienstprogramm zur Erzeugung von Schwarmschlüsseln zu installieren. Mit dem Swarm-Schlüssel können wir ein privates Netzwerk erstellen und den Netzwerk-Peers mitteilen, dass sie nur mit den Peers kommunizieren dürfen, die diesen geheimen Schlüssel teilen.
Dieser Befehl sollte nur auf Ihrem Knoten0 ausgeführt werden. Wir generieren swarm.key auf dem Bootstrap-Knoten und kopieren ihn dann einfach auf die anderen Knoten.
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
Führen Sie nun dieses Dienstprogramm auf Ihrem ersten Knoten aus, um swarm.key im Ordner .ipfs zu erzeugen:
ipfs-swarm-key-gen & > ~/.ipfs/swarm.key
Kopieren Sie die generierte Datei swarm.key in das IPFS-Verzeichnis jedes Knotens, der an dem privaten Netzwerk teilnimmt. Zunächst müssen Sie die Standardeinträge der Bootstrap-Knoten von al-len Knoten, die Sie erstellt haben, entfernen.
ipfs bootstrap rm –all
Fügen Sie die Hash-Adresse Ihres Bootstraps zu jedem der Knoten hinzu, einschließlich des Boot-straps.
ipfs bootstrap add /ip4/192.168.10.1/tcp/4001/ipfs/QmQVvZEmvjhYgsyEC7NvMn8EWf131EcgTXFFJQYGSz4Y83
Der IP-Teil (192.168.10.1) wird in die IP Ihres Knoten 0-Rechners geändert. Der letzte Teil ist die Peer-ID, die generiert wird, wenn Sie Ihren Peer initial-isieren (ipfs init). Sie können es oben sehen, wo es "peer identity" anzeigt:
QmQVvZEmvjhYgsyEC7NvMn8EWf131EcgTXFFJQYGSz4Y83
oder wenn Sie den ipfs id Befehl in der Konsole ausführen. Sie müssen also die IP und die Peer-ID für Ihren Node0 entsprechend ändern. Tun Sie dies für alle Ihre Knoten.
Wir müssen auch die Umgebungsvariable “LIBP2P_FORCE_PNET” setzen, um unser Netzwerk in den privaten Modus zu versetzen.
export LIBP2P_FORCE_PNET=1
Configuring IP for communication
Innerhalb des Ordners .ipfs befindet sich die Datei "config". Sie enthält viele Einstellungen, darunter auch die Netzwerkdetails, mit denen unsere IPFS-Knoten arbeiten werden. Öffnen Sie diese Konfigurationsdatei und suchen Sie "Addresses". Sie sieht wie folgt aus:
"Addresses": { "API": "/ip4/192.168.10.1/tcp/5001", "Announce": [], "Gateway": "/ip4/192.168.10.1/tcp/8080", "NoAnnounce": [], "Swarm": [ "/ip4/0.0.0.0/tcp/4001", "/ip6/::/tcp/4001" ] },
Die in der API genannte IP ist diejenige, an die sich IPFS für die Kommunikation bindet. Standardmäßig ist dies localhost (127.0.0.1). Damit sich unsere Knoten gegenseitig "sehen" können, müssen wir diesen Parameter entsprechend auf die IP jedes Knotens setzen. Der Gateway-Parameter ist für den Zugriff über den Browser gedacht.
Wir sind mit allen Konfigurationen fertig, und nun ist es an der Zeit, alle Knoten zu starten, um zu sehen, ob alles gut gelaufen ist und ob sie mit dem privaten Netzwerk verbunden sind. Starten Sie den IPFS-Daemon auf allen Ihren Knoten.
ipfs daemon
Nun fügen wir die Datei von einem der Knoten aus hinzu und versuchen, von einem anderen aus darauf zuzugreifen.
mkdir test-files echo hello IPFS & > file.txt ipfs add file.txt
Nehmen Sie den ausgedruckten Hash und ver-suchen Sie, die Datei von einem anderen Knoten aus zu katalogisieren.
ipfs cat QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
Sie sollten den Inhalt der hinzugefügten Datei des ersten Knotens sehen. Um zu prüfen und sicher zu sein, dass wir ein privates Netz haben, können wir versuchen, auf unsere Datei über ihre CID vom öffentlichen IPFS-Gateway aus zuzugreifen. Sie können eines der öffentlichen Gateways aus dieser Liste auswählen:https://ipfs.github.io/public-gateway-checker.
Wenn Sie alles richtig gemacht haben, wird die Datei nicht zugänglich sein. Sie können auch den Befehl ipfs swarm peers ausführen, der eine Liste der Peers in dem Netzwerk anzeigt, mit dem er ver-bunden ist. In unserem Beispiel sieht jeder Peer zwei andere.
Damit der IPFS-Dämon auch nach Beendigung der Konsolensitzung weiterläuft, müssen wir den sys-temd-Dienst einrichten. Bevor wir dies tun, stop-pen/beenden Sie Ihren ipfs-Daemon. Erstellen Sie eine Datei für einen neuen Dienst.
sudo nano /etc/systemd/system/ipfs.service
Und fügen Sie die folgenden Einstellungen hinzu:
[Unit] Description=IPFS Daemon After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub User=root [Install] WantedBy=multi-user.target
Speichern und schließen Sie die Datei.
Wenden Sie den neuen Dienst an.
sudo systemctl daemon-reload sudo systemctl enable ipfs sudo systemctl start ipfs sudo systemctl status ipfs
Starten Sie Ihr System neu und überprüfen Sie, ob der IPFS-Daemon aktiv ist und läuft. Dann können Sie erneut versuchen, die Datei von einem Knoten aus hinzuzufügen und von einem anderen darauf zuzugreifen.
Wir haben einen Teil der Erstellung eines privaten IPFS-Netzwerks abgeschlossen und seine Dämonen als Dienst laufen lassen. In dieser Phase sollten Sie drei IPFS-Knoten haben, die in einem privaten Netzwerk organisiert sind. Lassen Sie uns nun un-seren IPFS-CLUSTER für die Datenreplikation erstellen.
Nachdem wir ein privates IPFS-Netzwerk erstellt haben, können wir mit dem Einsatz von IPFS-Cluster auf IPFS beginnen, um die Datenreplikation zu automatisieren und unsere Daten besser zu verwalten.
Es gibt zwei Möglichkeiten, IPFS-Cluster zu organi-sieren, die erste ist, einen festen Peerset festzule-gen (so können Sie Ihren Cluster nach der Erstellung nicht mit weiteren Peers erweitern) und die andere Bootstrap-Knoten (Sie können neue Peers hinzufügen, nachdem der Cluster erstellt wurde).
IPFS-Cluster besteht aus zwei Komponenten:
There are many ways how to install IPFS-Cluster. In this manual, we are using the installing from source method. Sie können alle Methoden hier sehen.
Führen Sie die folgenden Befehle in Ihrem Konsolenterminal aus, um ipfs-cluster-Komponenten zu installieren:
git clone https://github.com/ipfs/ipfs-cluster.git $GOPATH/src/github.com/ipfs/ipfs-cluster cd $GOPATH/src/github.com/ipfs/ipfs-cluster make install
Überprüfen Sie die erfolgreiche Installation durch Ausführen:
ipfs-cluster-service --version ipfs-cluster-ctl --version
Wiederholen Sie diesen Schritt für alle Ihre Knoten.
Nun müssen wir CLUSTER_SECRET generieren und als Umgebungsvariable für alle am Cluster be-teiligten Peers einrichten. Durch die gemeinsame Nutzung desselben CLUSTER_SECRET können die Peers erkennen, dass sie Teil eines IPFS-Clusters sind. Wir werden diesen Schlüssel auf dem Null-knoten erzeugen und ihn dann auf alle anderen Knoten kopieren. Führen Sie auf Ihrem ersten Kno-ten die folgenden Befehle aus:
export CLUSTER_SECRET=$(od -vN 32 -An -tx1 /dev/urandom | tr -d ' \n') echo $CLUSTER_SECRET
Sie sollten etwas wie dieses sehen:
9a420ec947512b8836d8eb46e1c56fdb746ab8a78015b9821e6b46b38344038f
Damit CLUSTER_SECRET nach dem Beenden der Konsolensitzung nicht verschwindet, müssen Sie es als konstante Umgebungsvariable in die .bashrc-Datei einfügen. Kopieren Sie den gedruckten Schlüssel nach dem Befehl echo und fügen Sie ihn am Ende der Datei .bashrc auf allen Ihren Kno-ten ein.
Sie sollte wie folgt aussehen:
export CLUSTER_SECRET=9a420ec947512b8836d8eb46e1c56fdb746ab8a78015b9821e6b46b38344038f
Und vergessen Sie nicht, Ihre .bashrc-Datei mit dem Befehl zu aktualisieren:
source ~/.bashrc
Nachdem wir den IPFS-Cluster-Dienst installiert und die Umgebungsvariable CLUSTER_SECRET gesetzt haben, sind wir bereit, den ersten Cluster-Peer ("Knoten0") zu initialisieren und zu starten.
Hinweis: Stellen Sie sicher, dass Ihr ipfs-Daemon läuft, bevor Sie den ipfs-cluster-service-Daemon starten. Um den Cluster-Peer zu initialisieren, müs-sen wir den folgenden Befehl ausführen:
-cluster-service init
Um den Cluster-Peer zu starten, führen Sie aus:
-cluster-service daemon
You should see the output in the console:
INFO cluster: IPFS Cluster is ready cluster.go:461 ipfs-cluster-service daemon
In der Konsole sollten Sie die folgende Ausgabe sehen:
INFO cluster: IPFS Cluster is ready cluster.go:461
Öffnen Sie nun ein neues Konsolenfenster und verbinden Sie sich mit Ihrer zweiten VM ("Node"). Hinweis: Stellen Sie sicher, dass Ihr ipfs daemon läuft, bevor Sie den ipfs-cluster-service-Daemon starten.
Sie müssen die IPFS-Cluster-Komponenten instal-lieren und eine CLUSTER_SECRET-Umgebungsvariable setzen (Kopie von Node0), wie wir es für unseren ersten Knoten getan haben. Führen Sie die folgenden Befehle aus, um IPFS-Cluster zu initialisieren und auf node 0 zu booten:
ipfs-cluster-service init ipfs-cluster-service daemon --bootstrap /ip4/192.168.10.1/tcp/9096/ipfs/QmZjSoXUQgJ9tutP1rXjjNYwTrRM9QPhmD9GHVjbtgWxEn
Der IP-Teil (192.168.10.1) wird in die IP Ihres Knotens 0 geändert. Der letzte Teil ist die Cluster-Peer-ID, die erzeugt wird, wenn Sie Ihren Cluster-Peer initialisieren (ipfs-cluster-service init). Beach-ten Sie, dass es sich um eine IPFS-Cluster-Peer-ID und nicht um eine IPFS-Peer-ID handeln sollte.
Sie können den Befehl ipfs-cluster-service id in der Konsole ausführen, um diese zu erhalten. Sie müs-sen IP und Cluster-Peer-ID entsprechend Ihrem Knoten0 ändern. Tun Sie dies für alle Ihre Knoten. Um zu überprüfen, ob wir zwei Peers in unserem Cluster haben, führen Sie den Befehl aus:
Ipfs-cluster-ctl peers ls
Sie sollten die Liste der Cluster-Peers sehen
node1 & > ipfs-cluster-ctl peers ls QmYFYwnFUkjFhJcSJJGN72wwedZnpQQ4aNpAtPZt8g5fCd | Sees 1 other peers Addresses: - /ip4/127.0.0.1/tcp/10096/ipfs/QmYFYwnFUkjFhJcSJJGN72wwedZnpQQ4aNpAtPZt8g5fCd - /ip4/192.168.1.3/tcp/10096/ipfs/QmYFYwnFUkjFhJcSJJGN72wwedZnpQQ4aNpAtPZt8g5fCd IPFS: Qmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - /ip4/127.0.0.1/tcp/4001/ipfs/Qmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - /ip4/192.168.1.3/tcp/4001/ipfs/Qmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa QmZjSoXUQgJ9tutP1rXjjNYwTrRM9QPhmD9GHVjbtgWxEn | Sees 1 other peers Addresses: - /ip4/127.0.0.1/tcp/9096/ipfs/QmZjSoXUQgJ9tutP1rXjjNYwTrRM9QPhmD9GHVjbtgWxEn - /ip4/192.168.1.2/tcp/9096/ipfs/QmZjSoXUQgJ9tutP1rXjjNYwTrRM9QPhmD9GHVjbtgWxEn IPFS: Qmbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb - /ip4/127.0.0.1/tcp/4001/ipfs/Qmbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb - /ip4/192.168.1.2/tcp/4001/ipfs/Qmbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Wiederholen Sie diesen Schritt für den dritten Knoten und alle anderen Knoten, die Sie dem Cluster hinzufügen möchten.
Damit der IPFS-Cluster-Daemon auch nach dem Schließen der Konsolensitzung weiterläuft, müssen wir einen systemd-Dienst für ihn erstellen. Führen Sie den folgenden Befehl aus, um eine Datei für den IPFS-Cluster-Systemdienst zu erstellen:
sudo nano /etc/systemd/system/ipfs-cluster.service
Und fügen Sie in diese Datei ein:
[Unit] Description=IPFS-Cluster Daemon Requires=ipfs After=syslog.target network.target remote-fs.target nss-lookup.target ipfs [Service] Type=simple ExecStart=/home/ubuntu/gopath/bin/ipfs-cluster-service daemon User=root [Install] WantedBy=multi-user.target
Wenden Sie den neuen Dienst an und führen Sie ihn aus:
sudo systemctl daemon-reload sudo systemctl enable ipfs-cluster sudo systemctl start ipfs-cluster sudo systemctl status ipfs-cluster
Starten Sie Ihren Rechner neu und überprüfen Sie, ob die Dienste IPFS und IPFS-Cluster laufen.
Um die Datenreplikation zu testen, erstellen Sie die Datei und fügen Sie sie dem Cluster hinzu:
ipfs-cluster-ctl add myfile.txt
Nehmen Sie die CID der kürzlich hinzugefügten Datei und überprüfen Sie ihren Status:
ipfs-cluster-ctl status CID
Sie sollten sehen, dass diese Datei auf allen Clusterknoten PINNED wurde.
Wenn Sie Fragen zu IPFS-Netzwerken und ihrer möglichen Nutzung für Datenreplikation und sicheren Datenaustausch haben, zögern Sie nicht, uns zu kontaktieren!
Wir sind zufrieden mit dem Know-how sowie der Arbeit, die ELEKS für uns geleistet hat. Wir haben zum Produkt, über dessen Design, den Funktionen sowie der Benutzerfreundlichkeit hervorragendes Feedback erhalten. Insgesamt waren wir sehr zufrieden mit der Zusammenarbeit mit ELEKS, und wir können uns ganz sicher vorstellen, weitere Projekte mit ihnen durchzuführen.