Monero Node & Tor Onion installieren

Warum einen Monero Node mit einem Tor Onion Service installieren ?

Du wirst in der Lage sein, deine Desktop- und mobilen Monero-Wallets mit deinem eigenen vertrauenswürdigen Monero-Knoten zu verbinden, und zwar auf sichere und private Weise über Tor. Ihr Node wird immer bereit sein, ohne Verzögerungen (immer synchronisiert, im Gegensatz zu einem intermittierend laufenden Node auf einem Laptop).

Die Bereitstellung von Blöcken und Transaktionen im P2P-Netzwerk von Monero hilft neuen Nutzern, ihre Nodes zu starten und zu synchronisieren. Es stärkt auch das Monero P2P-Netzwerk gegen DDoS-Angriffe und Netzwerkpartitionierung.

Die offene Wallet-Schnittstelle (die “RPC”) ermöglicht es jedem, seine Wallets über Ihren Knoten mit dem Monero-Netzwerk zu verbinden. Dies ist nützlich für Anfänger, die noch keine eigenen Nodes betreiben.

Tor onion for wallet interface ist nützlich für Wallet-Benutzer, die sich über Tor verbinden, weil es die MiTM-Risiken der Tor-Exit-Nodes (die sehr real sind) abschwächt. Wenn man die Geldbörse mit einem Onion-Dienst verbindet, ist kein MiTM-Angriff realistisch, weil die Verbindungen innerhalb des Tor-Netzwerks Ende-zu-Ende-TLS-verschlüsselt sind.

Tor-Onion für P2P-Netzwerke ist nützlich für andere Full-Node-Nutzer, da es ihnen erlaubt, Transaktionen über Tor zu übertragen (mit der Option –tx-proxy).

 

Voraussetzungen für die Installation eines Monero Node

Sie verstehen die Grundlagen der Linux-Administration. Sie suchen eine Monero-spezifische Anleitung.

Sie haben Root-Zugriff auf einen Linux-Server mit 2 GB+ RAM und 120 GB+ SSD (oder 50 GB+ für die beschnittene Knotenversion). Dies ist der Stand von Januar 2021.

Einige Befehle setzen Ubuntu voraus, aber du kannst sie leicht für deine Distribution übersetzen.

 

Installiere Tor Hidden Service

Ändern Sie /etc/tor/torrc wie unten gezeigt.

Aktiviere den Tor-Dienst mit systemctl enable tor und starte ihn mit systemctl restart tor neu

Überprüfe, ob der Tor-Dienst läuft systemctl status tor@default

Der tor-Daemon hat für dich eine neue Onion-Adresse und ein entsprechendes Schlüsselpaar in /var/lib/tor/monero/ erstellt. Sie sollten diese sichern, um die Kontrolle über Ihre Onion-Adresse zu behalten. Dies geschieht beim Neustart, wenn du ein neues HiddenServiceDir zu torrc config hinzufügst.

Der Monero-Daemon selbst ist zu diesem Zeitpunkt nicht notwendig. Die Onion-Dienste (auch versteckte Dienste genannt) werden einfach warten, bis localhost monerod an den angegebenen Ports 18081 und 18083 auftaucht.

/etc/tor/torrc

HiddenServiceDir /var/lib/tor/monero
HiddenServicePort 18081 127.0.0.1:18081    # interface for wallet ("RPC")
HiddenServicePort 18083 127.0.0.1:18083    # interface for P2P network

Monero installieren

Monero-Benutzer und -Gruppe erstellen useradd –system monero

Erstellen Sie das Verzeichnis monero binaries (vorerst leer) mkdir -p /opt/monero und chown -R monero:monero /opt/monero

Monero-Datenverzeichnis erstellen mkdir -p /srv/monero und chown -R monero:monero /srv/monero

Monero-Log-Verzeichnis erstellen mkdir -p /var/log/monero und chown -R monero:monero /var/log/monero

Es steht Ihnen frei, die obigen Angaben an Ihre bevorzugten Konventionen anzupassen, denken Sie nur daran, die Pfade entsprechend zu ändern.

Laden Sie die Datei herunter und überprüfen Sie sie.

Entpacken mit tar -xf monero-linux-x64-v0.17.1.9.tar.bz2 (adjust filename).

Verschieben Sie die Binärdateien nach /opt/monero/ mit mv monero-x86_64-linux-gnu-v0.17.1.9/* /opt/monero/ dann chown -R monero:monero /opt/monero

Erstellen Sie /etc/monero.conf wie unten gezeigt und fügen Sie Ihre Werte in die Platzhalter ein.

Erstellen Sie /etc/systemd/system/monero.service wie unten gezeigt.

Aktivieren Sie den Monero-Dienst mit systemctl enable monero und starten Sie ihn neu mit systemctl restart monero

Überprüfen Sie, ob der Dienst läuft systemctl status monero

Überprüfen Sie, ob es wie vorgesehen funktioniert tail -n100 /var/log/monero/monero.log

 

/etc/monero.conf

Dies ist nur eine Beispielkonfiguration und in keiner Weise verbindlich. Sie können sie gerne ändern, siehe monerod-Referenz.

Ändern Sie die Pfade, wenn Sie sie geändert haben.

Drucken Sie Ihre Onion-Adresse mit cat /var/lib/tor/monero/hostname aus und fügen Sie sie in die Option anonymous-inbound ein.

# /etc/monero.conf
#
# Configuration file for monerod. For all available options see the MoneroDocs:
# https://monerodocs.org/interacting/monerod-reference/

# Data directory (blockchain db and indices)
data-dir=/srv/monero

# Optional prunning
# prune-blockchain=1           # Pruning saves 2/3 of disk space w/o degrading functionality but contributes less to the network
# sync-pruned-blocks=1         # Allow downloading pruned blocks instead of prunning them yourself

check-updates=disabled         # Do not check DNS TXT records for a new version

# Log file
log-file=/var/log/monero/monero.log
log-level=0                    # Minimal logs, WILL NOT log peers or wallets connecting
max-log-file-size=2147483648   # Set to 2GB to mitigate log trimming by monerod; configure logrotate instead

# P2P full node
p2p-bind-ip=0.0.0.0            # Bind to all interfaces (the default)
p2p-bind-port=18080            # Bind to default port

# RPC open node
public-node=1                  # Advertise to other users they can use this node as a remote one for connecting their wallets
confirm-external-bind=1        # Open Node (confirm)
rpc-bind-ip=0.0.0.0            # Bind to all interfaces (the Open Node)
rpc-bind-port=18081            # Bind to default port (the Open Node)
restricted-rpc=1               # Obligatory for Open Node interface
no-igd=1                       # Disable UPnP port mapping
no-zmq=1                       # Disable ZMQ RPC server to decrease attack surface (it's not used)

# RPC TLS
rpc-ssl=autodetect             # Use TLS if client wallet supports it (the default behavior); the certificate will be generated on the fly on every restart

# Mempool size
max-txpool-weight=268435456    # Maximum unconfirmed transactions pool size in bytes (here 256MB, default ~618MB)

# Slow but reliable db writes
db-sync-mode=safe

out-peers=64              # This will enable much faster sync and tx awareness; the default 8 is suboptimal nowadays
in-peers=64               # The default is unlimited; we prefer to put a cap on this

limit-rate-up=1048576     # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network
limit-rate-down=1048576   # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync

# Tor: broadcast transactions originating from connected wallets over Tor (does not concern relayed transactions)
tx-proxy=tor,127.0.0.1:9050,16

# Tor: add P2P seed nodes for the Tor network
# For an up-to-date list of working nodes see https://www.ditatompel.com/monero/node-peers
add-peer=4egylyolrzsk6rskorqvocipdo4tqqoyzxnplbjorns7issmgpoxvtyd.onion:18083
add-peer=fagmobguo6u4z4b2ghyg3jegcdpmd4qj4wxkhemph5d5q6dltllveqyd.onion:18083
add-peer=monerokdwzyuml7vfp73fjx5277lzesbrq4nvbl3r3t5ctgodsx34vid.onion:18089
add-peer=b75obarnhi42p7js7wgzo7v3wtiwcgf4bknrwv6ihatop77jivrtwpid.onion:15892
add-peer=5nvd6jbefgto3u74nzzdkcsbqgxyzrkk7bz5qupsdqg4gbuj5valiaqd.onion:18083
add-peer=ozeavjybjbxbvmfcpxzjcn4zklbgohjwwndzenjt44pypvx6jisy74id.onion:18083
add-peer=xcccrsxi2zknef6zl3sviasqg4xnlkh5k3xqu7ytwkpfli3huyfvsjid.onion:18083

# Make the seed nodes permanent to fix monerod issue of not maintaining enough connections,
# based on this reddit comment:
# https://www.reddit.com/r/monerosupport/comments/k3m3x2/comment/ge5ehcy/?utm_source=share&utm_medium=web2x&context=3
add-priority-node=4egylyolrzsk6rskorqvocipdo4tqqoyzxnplbjorns7issmgpoxvtyd.onion:18083
add-priority-node=fagmobguo6u4z4b2ghyg3jegcdpmd4qj4wxkhemph5d5q6dltllveqyd.onion:18083
add-priority-node=monerokdwzyuml7vfp73fjx5277lzesbrq4nvbl3r3t5ctgodsx34vid.onion:18089
add-priority-node=b75obarnhi42p7js7wgzo7v3wtiwcgf4bknrwv6ihatop77jivrtwpid.onion:15892
add-priority-node=5nvd6jbefgto3u74nzzdkcsbqgxyzrkk7bz5qupsdqg4gbuj5valiaqd.onion:18083
add-priority-node=ozeavjybjbxbvmfcpxzjcn4zklbgohjwwndzenjt44pypvx6jisy74id.onion:18083
add-priority-node=xcccrsxi2zknef6zl3sviasqg4xnlkh5k3xqu7ytwkpfli3huyfvsjid.onion:18083

# Tor: tell monerod your onion address so it can be advertised on P2P network
anonymous-inbound=PASTE_YOUR_ONION_HOSTNAME:18083,127.0.0.1:18083,64

# Tor: be forgiving to connecting wallets; suggested by http://xmrguide42y34onq.onion/remote_nodes
disable-rpc-ban=1

/etc/…/monero.service

# /etc/systemd/system/monero.service

[Unit]
Description=Monero Daemon
After=network.target
Wants=network.target

[Service]
ExecStart=/opt/monero/monerod --detach --config-file /etc/monero.conf --pidfile /run/monero/monerod.pid
ExecStartPost=/bin/sleep 0.1
Type=forking
PIDFile=/run/monero/monerod.pid

Restart=always
RestartSec=16

User=monero
Group=monero
RuntimeDirectory=monero

StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Monero Node Tor Hidden Service

Firewall-Ports öffnen

Wenn Sie eine Firewall verwenden (und das sollten Sie), öffnen Sie die Ports 18080 und 18081 für eingehende TCP-Verbindungen. Diese sind für eingehende Clearnetzverbindungen, P2P und RPC.

Für Tor brauchst du keine Ports zu öffnen. Die Onion-Dienste arbeiten mit virtuellen Ports. Der Tor-Daemon nimmt nicht direkt eingehende Verbindungen an und braucht daher keine offenen Ports.

Für eine gängige ufw-Firewall wäre das zum Beispiel so:

ufw allow 18080/tcp
ufw allow 18081/tcp

Um dies zu überprüfen, verwenden Sie ufw status. Die Ausgabe sollte in etwa so aussehen wie die folgende (22 ist der Standard-SSH-Port, der nichts mit Monero zu tun hat):

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere
18080/tcp                  ALLOW       Anywhere
18081/tcp                  ALLOW       Anywhere
22/tcp (v6)                LIMIT       Anywhere (v6)
18080/tcp (v6)             ALLOW       Anywhere (v6)
18081/tcp (v6)             ALLOW       Anywhere (v6)

 

Prüfung

Listen Sie alle Dienste auf, die auf den Ports lauschen, und stellen Sie sicher, dass sie den Erwartungen entsprechen:

sudo netstat -lntpu

Die Ausgabe sollte diese enthalten (in beliebiger Reihenfolge); natürlich werden die PID-Werte unterschiedlich sein.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
...
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      259255/monerod
tcp        0      0 0.0.0.0:18081           0.0.0.0:*               LISTEN      259255/monerod
tcp        0      0 127.0.0.1:18083         0.0.0.0:*               LISTEN      259255/monerod
tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      258786/tor

Auf dem Client-Rechner

Schließlich wollen wir die Verbindungen von Ihrem Client-Rechner aus testen.

Installieren Sie tor und torsocks auf Ihrem Laptop, da Sie diese sowieso für die Monero-Wallet benötigen.

Zu Testzwecken benötigen Sie außerdem nmap und proxychains.

Testen Sie die P2P-Verbindung von clearnet:

nmap -Pn -p 18080 YOUR_IP_ADDRESS_HERE

Test clearnet RPC-Verbindung:

curl --digest -X POST http://YOUR_IP_ADDRESS_HERE:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'

Testen Sie die P2P-Verbindung der Onion (überspringen Sie es, wenn Sie keine Proxychains haben):

proxychains nmap -Pn -p 18083 YOUR_ONION_ADDRESS_HERE.onion

Testen Sie die Onion-RPC-Verbindung:

torsocks curl --digest -X POST http://YOUR_ONION_ADDRESS_HERE.onion:18081/json_rpc -d '{"jsonrpc": "2.0", "id": "0", "method": "get_info"}' -H 'Content-Type: application/json'

Eventuelle Fehlersuche

Tor:

  • Status: systemctl status tor@default
  • Logs: journalctl -xe –unit tor@default

Monero:

  • Status: systemctl status monero
  • Logs: tail -n100 /var/log/monero/monero.log
  • Logs more info: change log-level=0 to log-level=1 in monero.conf (remember to revert once solved)

Weitere Verbesserungen

Regelmäßige Restarts

Es ist lohnenswert, einen automatischen Neustart von Tor und Monerod alle paar Stunden einzuführen. Keiner der beiden Daemons ist perfekt; sie können in Extremsituationen stecken bleiben oder Speicher lecken, wie bei den jüngsten Angriffen auf Tor v3 oder DDoS-Angriffen auf das Monero-Netzwerk. Ein möglicher Weg wäre die Verwendung von systemd-Timern.