Guida all'installazione di un full node con Bitcoin Core: Electrum Server (Ep. 3)

Crypto 23 ott 2024

Come già spiegato nei precedenti articoli, (se te li sei persi ti consiglio di andarli a leggere), in questa serie di articoli vediamo come creare e mantenere attivo un full node di Bitcoin. Oggi vedremo come installare, un server Electrum.
Perchè Electrum?
Come tutti sappiamo, il modo migliore per tenere in sicurezza i nostri BTC è avere un Hardware Wallet (es. SeedSigner). La configurazione che abbiamo installato in precedenza con Bitcoin Core, non ci dà la possibilità di utilizzare facilmente questi hardware wallet direttamente.
Una soluzione è utilizzare Bitcoin Core insieme a un server Electrum, che funge da 'intermediario'. Il server Electrum sincronizza i dati da Bitcoin Core e li rende disponibili ai portafogli software che supportano il protocollo Electrum (come Sparrow, Specter, BlueWallet, ecc.). In questo modo, possiamo gestire e firmare le transazioni dai nostri hardware wallet, mantenendo comunque la piena sicurezza e controllo dei nostri fondi.
Inoltre, Electrum consente anche un'operatività più rapida rispetto a Bitcoin Core per l'interazione con i portafogli, in quanto non richiede la completa sincronizzazione della blockchain ogni volta che si effettua una transazione. Questo lo rende un'ottima soluzione per chi desidera un equilibrio tra sicurezza, velocità e praticità.

!!Attenzione:
Prima di cominciare con l'installazione di Fulcrum, assicuriamoci di aver tolto dal bitcoin.conf la dicitura "dbcache=2048" e "blocksonly=1"

Partiamo accedendo al server con l'utente "giuseppe" e successivamente aggiorniamo i pacchetti:

sudo apt-get update && sudo apt-get upgrade -y

Andiamo adesso ad installare le dipendenze eseguendo il comando:

sudo apt-get install libssl-dev -y

Attendiamo che il sistema scarichi ed installi il tutto e proseguiamo con la configurazione del Firewall.
Andiamo ad aprire (per le richieste in arrivo) le porte 50001 e 50002:

sudo ufw allow 50001/tcp comment 'allow Fulcrum TCP from anywhere'

sudo ufw allow 50002/tcp comment 'allow Fulcrum SSL from anywhere'

Per verificare che tutto sia funzionante lanciamo il comando:

sudo ufw status verbose

Riceveremo una risposta uguale a questa:

Assicuriamoci che la porta 50001 e 50002 siano riportate come l'esempio in alto.
Adesso, dobbiamo modificare il file di bitcoin.conf, aggiungendo ZMQ Blockhash notification, per farlo digitamo il seguente comando sul terminale:

sudo nano /data/bitcoin/bitcoin.conf

Scorriamo fino a trovare la sezione "# Connessioni" ed aggiungiamo la seguente riga:

# Abilita ZMQ blockhash notification (per Fulcrum)
zmqpubhashblock=tcp://127.0.0.1:8433

Andiamo a riavviare il bitcoind.service:

sudo systemctl restart bitcoind.service

Per verificare che su Bitcoin Core sia abilitata ZMQ sulla porta 8433 lanciamo il comando:

sudo ss -tulpn | grep bitcoind | grep 8433

Riceveremo la seguente risposta sul terminale

Procediamo adesso con il download e l'installazione dei file binari, assicuriamoci di essere l'utente "giuseppe", accediamo alla cartella temporanea:

cd /tmp

Impostiamo una variabile d'ambiente relativa alla versione di Fulcrum da scaricare, digitando sul terminale:

VERSION=1.11.1
(NB: Per verificare l'ultima versione disponibile verifichiamo sempre il repository ufficiale GitHub del progetto https://github.com/cculianu/Fulcrum/releases)

Impostata la variabile della versione andiamo a scaricare i file binari, i checksum e la firma:

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-x86_64-linux.tar.gz

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt.asc

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt

Controlliamo la firma ottenendo la chiave pubblica dello sviluppatore di Fulcrum:

curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | gpg --import

A video riceveremo una risposta uguale a questa nel terminale:

Verifichiamo adesso il checksum firmato rispetto a quello scaricato:

grep 'x86_64-linux.tar.gz' Fulcrum-$VERSION-shasums.txt | sha256sum --check

Riceveremo a video una risposta simile a questa:
"Fulcrum-1.11.1-x86_64-linux.tar.gz: OK"
Estraiamo adesso i file binari con il comando tar:

tar -xzvf Fulcrum-$VERSION-x86_64-linux.tar.gz

Completata l'operazione passiamo all'installazione:

sudo install -m 0755 -o root -g root -t /usr/local/bin Fulcrum-$VERSION-x86_64-linux/Fulcrum Fulcrum-$VERSION-x86_64-linux/FulcrumAdmin

Una volta completata l'installazione verifichiamo che tutto funzioni correttamente lanciando il comando:

Fulcrum --version

A video riceveremo una risposta simile a questa:

Adesso, come già visto per Bitcoin Core, andiamo a creare un utente ed un gruppo (nel caso di questa guida lo chiameremo "fulcrum"), quindi da terminale:

sudo adduser --disabled-password --gecos "" fulcrum

Aggiungiamo l'utente "fulcrum" al gruppo "bitcoin" così da consetire di leggere il bitcoind:

sudo adduser fulcrum bitcoin

Passiamo adesso alla creazione di una cartella dati per Fulcrum:

sudo mkdir -p /data/fulcrum/fulcrum_db

Assegniamo il proprietario della cartella all'utente "fulcrum"

sudo chown -R fulcrum:fulcrum /data/fulcrum/

Adesso effettuiamo il log-in all'utente "fulcrum":

sudo su - fulcrum

Creiamo un collegamento simbolico da /home/fulcrum/.fulcrum alla cartella /data/fulcrum

ln -s /data/fulcrum /home/fulcrum/.fulcrum

Verifichiamo che il collegamento sia stato creato correttamente:

ls -la .fulcrum

Se vedremo questa schermata tutto funziona correttamente:

Rechiamoci nella cartella dati di fulcrum e generiamo i file cert e la chiave per SSL:

cd /data/fulcrum

openssl req -newkey rsa:2048 -sha256 -nodes -x509 -days 3650 -subj "/O=Fulcrum" -keyout key.pem -out cert.pem

A questo punto andiamo a creare un banner personalizzato per Fulcrum (è un passaggio opzionale ma è divertente farlo), da terminale digitiamo:

nano fulcrum-banner.txt

Adesso sul nostro browser web rechiamoci alla pagina:
https://patorjk.com/software/taag/#p=display&f=Slant&t=fulcrum
Ed inseriamo un nome a nostro piacimento come questo esempio:

Copiamo la scritta ed incolliamola sul file fulcrum-banner.txt che avevamo lasciato in background prima.
Adesso andiamo a creare un file di configurazione per Fulcrum:

nano /data/fulcrum/fulcrum.conf

Inseriamo la seguente configurazione:

## Impostazioni di Bitcoin Core
bitcoind = 127.0.0.1:8332
rpccookie = /data/bitcoin/.cookie

## Impostazioni Script Admin
admin = 8000

## Impostazioni Fulcrum server 
datadir = /data/fulcrum/fulcrum_db
cert = /data/fulcrum/cert.pem
key = /data/fulcrum/key.pem
ssl = 0.0.0.0:50002
tcp = 0.0.0.0:50001
peering = false

# Imposta utxo-cache
# Attenzione! Impostare a seconda l'hardware esempio: utxo-cache=1/2 x RAM disponibile 4GB RAM -> utxo-cache=2000
utxo-cache = 2000

# Banner
banner = /data/fulcrum/fulcrum-banner.txt

Usciamo dall'utente "fulcrum" con il comando:

exit

Accediamo con l'utente "giuseppe" ed andiamo a creare il servizio systemd per avviare automaticamente all'avvio Fulcrum:

sudo nano /etc/systemd/system/fulcrum.service

Copiamo la seguente configurazione:

[Unit]
Description=Fulcrum
Requires=bitcoind.service
After=bitcoind.service

StartLimitBurst=2
StartLimitIntervalSec=20

[Service]
ExecStart=/usr/local/bin/Fulcrum /data/fulcrum/fulcrum.conf
ExecStop=/usr/local/bin/FulcrumAdmin -p 8000 stop

User=fulcrum
Group=fulcrum

# Process management
####################
Type=exec
KillSignal=SIGINT
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target

Salviamo digitando "CTRL+X" e confermiamo con "Y".
Adesso andiamo ad abilitare l'avvio automatico:

sudo systemctl enable fulcrum.service

Avviamo il servizio di Fulcrum con il comando:

sudo systemctl start fulcrum

Adesso vediamo che tutto funzioni correttamente attraverso il comando:

journalctl -fu fulcrum

Come Bitcoin Core, anche Fulcrum deve prima indicizzare completamente la blockchain e compattare il suo database prima di poter connettersi ad esso con i portafogli, la procedura può richiedere anche 3-4 GG tutto dipende dall'hardware.
Ecco cosa vediamo quando tutto è indicizzato:

Una volta completata l'indicizzazione, assicuriamoci che il servizio ascolti le porte 50002, 50001 e 8000, dal terminale digitiamo:

sudo ss -tulpn | grep Fulcrum

Riceveremo la seguente risposta a video:

Accesso da remoto

Ammettiamo di volerci connettere al nostro server electrum da un'altra postazione (immagino una seconda casa o da mobile), per farlo non utilizzeremo la clearnet ma TOR.

Tranquilli, approfondiremo la connessione ed i wallet nei prossimi episodi 😉

Per ottenere un indirizzo .onion logghiamoci al server con l'utente "giuseppe" ed andiamo a modificare il file "torrc":

sudo nano +63 /etc/tor/torrc --linenumbers

Aggiungiamo la seguente riga nella sezione ## This section is just for location-hidden services ##

# Hidden Service Fulcrum TCP & SSL
HiddenServiceDir /var/lib/tor/hidden_service_fulcrum_tcp_ssl/
HiddenServiceVersion 3
HiddenServicePoWDefensesEnabled 1
HiddenServicePort 50001 127.0.0.1:50001
HiddenServicePort 50002 127.0.0.1:50002

Ecco un esempio:

Adesso ricarichiamo il servizio TOR affinché le modifiche siano effettive:

sudo systemctl reload tor

Andiamo a recuperare il nostro indirizzo .onion:

sudo cat /var/lib/tor/hidden_service_fulcrum_tcp_ssl/hostname

Riceveremo a video una risposta simile a questa:
indirizzoblablabla.onion
!! SALVA IL SEGUENTE INDIRIZZO IN UN POSTO SICURO !!
Grazie all'indirizzo recuperato in precedenza saremo in grado di connetterci al nostro server Fulcrum in remoto tramite tor usando la porta 50001 (TCP) oppure la 50002 (SSL).

Aggiornare Fulcrum Server

Se, verificando la pagina ufficiale GitHub di Fulcrum ci accorgessimo che è stata rilasciata una nuova versione non ci resta che aggiornarlo, l'operazione è molto semplice, per prima cosa andiamo a stoppare il servizio, quindi con l'utente "giuseppe" digitiamo:

sudo systemctl stop fulcrum.service

Rechiamoci nuovamente nella cartella temporanea:

cd /tmp

Impostiamo la variabile con la versione aggiornata:

VERSION=1.11.2

Scarichiamo nuovamente i file binari, i checksum e la firma:

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-x86_64-linux.tar.gz

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt.asc

wget https://github.com/cculianu/Fulcrum/releases/download/v$VERSION/Fulcrum-$VERSION-shasums.txt

Verifichaimo che la firma sia attendibile:

curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | gpg --import

Verifichiamo che la firma del fila contenga i checksum per l'applicazione

gpg --verify Fulcrum-$VERSION-shasums.txt.asc

Infine, controlliamo i checksum:

grep 'x86_64-linux.tar.gz' Fulcrum-$VERSION-shasums.txt | sha256sum --check

"Fulcrum-1.11.2-x86_64-linux.tar.gz: OK".
Passiamo adesso con l'estrazione dei file binari attraverso tar:

tar -xzvf Fulcrum-$VERSION-x86_64-linux.tar.gz

Adesso possiamo procedere con l'installazione:

sudo install -m 0755 -o root -g root -t /usr/local/bin Fulcrum-$VERSION-x86_64-linux/Fulcrum Fulcrum-$VERSION-x86_64-linux/FulcrumAdmin

Per verificare che l'aggiornamento sia andato a buon fine, verifichiamo la versione:

Fulcrum --version

A video riceveremo la risposta:
Fulcrum 1.11.1 (Release a1f6a54)
Protocol: version min: 1.4, version max: 1.5.3
compiled: gcc 13.1.0
jemalloc: version 5.3.0-0-g54eaed1
Qt: version 5.15.6
rocksdb: version 9.2.1-08f9322
simdjson: version 0.6.0
ssl: OpenSSL 1.1.1 11 Sep 2018
zmq: libzmq version: 4.3.5, cppzmq version: 4.10.0

Adesso avviamo nuovamente il servizio:

sudo systemctl start fulcrum.service

E verifichiamo nei log, se il servizio sta usando l'ultima versione appena aggiornata:

journalctl -fu fulcrum

Fine Episodio 2


Spero che l'articolo sia stato di tuo gradimento, se vuoi altri contenuti simili non esitare a farmelo sapere sul Gruppo Telegram.
Se ti piacciono i miei contenuti e vuoi supportarmi puoi iscriverti alla Newsletter, effettuare una donazione o acquistare attraverso il mio link referral di Amazon, trovi tutti i link 
qui.
Considera anche l'idea di iscriverti al mio canale delle offerte, lo trovi su 
WhatsApp e su Telegram.

Tag