Rendi sicuro il tuo server e lancia il tuo nodo validatore Avalanche

Giuseppe Francaviglia
Avalanche Hub
Published in
13 min readSep 27, 2020

Breve guida per principianti che intendono rendere più sicuro il proprio server (o VPS), configurare e lanciare un nodo Avalanche! Your node, your staking rewards!

Ultimo EDIT -> Aggiornamento Durango 11

Se hai utilizzato questa guida per lanciare il tuo nodo, trovi in basso i comandi per aggiornare il tuo nodo all’ultima release.

Parte 1 — Elementi essenziali per la sicurezza del tuo server Ubuntu

Scelta ed aggiornamento del sistema operativo

Molti fornitori di VPS ti permettono di scegliere il sistema operativo da installare sul tuo server virtuale, troverai tra le opzioni disponibili sia Ubuntu 18.04 che Ubuntu 20.04, entrambi LTS (Long Term Support), ovvero viene garantito il supporto per 5 anni dalla loro data di rilascio. In assenza di particolari motivi, scegli Ubuntu 20.04 LTS, il supporto è garantito fino ad Aprile 2025, e non avrai alcuna necessità di fare l’upgrade del sistema operativo fino a tale data.

La prima cosa da fare dopo aver installato il sistema operativo Ubuntu sul tuo VPS, consiste nell’aggiornamento del sistema! Procedere con i comandi riportati di seguito, in modo da installare tutti gli aggiornamenti che aiutano a proteggere il tuo sistema e ad essere più sicuro. Consiste nell’aggiornare i repository ed installare i pacchetti più aggiornati.

Esegui il comando apt-get update per scarica la lista aggiornata dei pacchetti e delle nuove versioni disponibili nei repository relativi al tuo sistema operativo (dopo l’esecuzione del comando dovresti vedere qualcosa di simile alla schermata seguente):

sudo apt-get update -y

Esegui invece il comando apt-get upgrade per esegue l’aggiornamento dei pacchetti software alla loro ultima versione.

sudo apt-get upgrade -y

Amministrazione degli utenti del sistema

Una prassi comune per una corretta configurazione di ogni server è la gestione dei suoi utenti. Aggiungere e rimuovere utenti, assegnare privilegi, sono tutte azioni basilari necessarie per configurare il proprio ambiente di lavoro.

Quando crei il tuo server (VPS), viene creato un utente standard root che detiene i privilegi per l’accesso completo al sistema. Utilizzare l’utente root può essere estremamente pericoloso: molti casi di accesso malevolo non autorizzato si verificano proprio utilizzando l’utente root, con dei programmi automatici che provano ad identificare la password per accedere al sistema. Questo rischio può essere mitigato creando un altro utente che detiene i privilegi per eseguire solo le azioni più comuni, e disabilitando l’accesso SSH al sistema all’utente root. Quando hai la necessità di compiere attività di amministrazione, puoi utilizzare i privilegi dell’utente root mediante il comando sudo.

Il primo passo consiste nel creare un nuovo utente, che non detiene i privilegi dell’utente root, ma potrà solo modificare i file nella sua cartella home.

Il secondo passo consiste nell’assegnare i privilegi dell’utente root al nuovo utente, in modo che possa eseguire i più comuni task amministrativi.

Passo 1: creazione del nuovo utente, se è la prima volta che crei un utente (quindi avrai eseguito l’accesso al sistema con l’utente root), puoi utilizzare il seguente comando (in questo caso il nuovo utente sarà avaxuser, scegli il tuo comunque, e non divulgarlo):

adduser avaxuser

Come mostrato nella schermata, dovrai inserire la password dell’utente avaxuser, e confermarla. Se preferisci, puoi evitare di inserire le altre informazioni opzionali richieste, cliccando enter. Come puoi notare nella schermata precedente, è stata anche creata la cartella home del tuo nuovo utente ( /home/avaxuser), sarà all’interno di questa cartella che poi installerai il codice del tuo nodo validatore Avalanche.

Adesso il tuo nuovo utente è disponibile, puoi cominciare subito ad utilizzarlo, ti suggerisco di fare subito una prova; hai due utenti nel tuo sistema, root ed avaxuser, è il momento di testare il nuovo utente:

su - avaxuser

Vuoi tornare ad utilizzare nuovamente l’utente root? Ok utilizza il comando exit per uscire dalla sessione corrente e tornare alla precedente:

exit

Passo 2: adesso che hai un nuovo utente sul tuo sistema, devi decidere se questo utente deve essere in grado di eseguire attività amministrative con sudo. Se l’utente che hai creato sarà il tuo utente principale sul sistema, allora dovresti dargli questi privilegi aggiungendolo al gruppo di utenti sudo. Per impostazione predefinita, gli utenti che appartengono al gruppo sudo possono utilizzare il comando sudo. Se hai eseguito l’accesso al sistema con l’utente root, esegui questo comando per aggiungere il tuo nuovo utente avaxuser al gruppo sudo:

adduser avaxuser sudo

Il tuo nuovo utente avaxuser può godere adesso dei privilegi dell’utente root, quando necessario occorre utilizzare sudo anteponendolo ai tuoi comandi!

Sicurezza della connessione al server

Sicurezza del protocollo SSH

SSH è un protocollo di comunicazione che permette di stabilire una sessione remota cifrata con un host su una rete informatica. Per questo motivo, SSH è diventato uno standard di fatto per l’amministrazione remota di sistemi UNIX e di dispositivi di rete. La porta di comunicazione standard utilizzata dal protocollo SSH è la 22.

Porta di comunicazione ed accesso utente root

I VPS sono spesso attaccati da bot automatizzati, e nel caso di VPS Linux, provano ad accedere al sistema utilizzando l’utente root tramite la porta SSH 22 per mezzo di attacchi Brute Force, attacchi mediante il quale provano ad indovinare la password provando tutte le combinazioni possibili.

Pertanto, è consigliabile modificare la porta SSH per la connessione al server e disabilitare l’accesso a SSH per l’utente root; un ulteriore vantaggio è che i file di registro rimangono più organizzati e ottieni un’immagine più chiara quando il tuo VPS subisce degli attacchi, identificando immediatamente nei log di sistema i tentativi di accesso sulla porta 22.

Inoltre, nota che le porte dalla 0 alla 1023 sono riservate per alcuni servizi di sistema, è raccomandato fare una scelta per la nuova porta SSH nell’intervallo dal 1024 al 65535. Più avanti vedrai che la nostra scelta cadrà sulla porta numero 1122. Scegli la tua e non divulgarla!

Prima di proseguire, assicurati di aver creato e configurato un altro utente e che riesca ad accedere al sistema via SSH.

Per modificare la configurazione SSH sul tuo VPS occorre accedere al file sshd_config mediante un editor di sistema, con permessi da root; quindi esegui il seguente comando o mediante l’utente root, oppure mediante un altro utente e anteponendo sudo al comando (se non utilizzi sudo, non godrai del permesso per salvare il file dopo averlo modificato):

nano /etc/ssh/sshd_config

Nella schermata vedrai il contenuto del file sshd_config, procedi ad effettuare soltanto le modifiche richieste ai due valori evidenziati, come mostrato nella schermata seguente:

Dopo aver modificato entrambi i valori, e rimosso i caratteri # dalle righe interessate (il carattere # indica che la riga è un commento, deve essere rimosso altrimenti le modifiche non vengono accettate):

Port 1122

PermitRoolLogin no

dovrai salvare il file, quindi premi Ctrl + x per chiudere il file, ti verrà chiesto se intendi accettare le modifiche eseguire, rispondi y ed invia! Se non viene visualizzato alcun messaggio di errore, o di richiesta di permessi, etc.. le modifiche sono state accettate, occorre adesso riavviare SSH in modo da applicare subito la nuova configurazione:

systemctl restart ssh

Vuoi verificare se le modifiche sono state accettate ed applicate, bene esegui il seguente comando per visualizzare lo stato del servizio SSH:

systemctl status ssh

Il tuo VPS non sarà più accessibile dall’utente root via SSH adesso, complimenti, è più sicuro! Vogliamo fare una verifica? :-)

Chiudi la sessione corrente di SSH, e prova ad effettuare l'accesso come indicato di seguito (nel primo caso, accesso mediante root alla porta standard 22, NEGATO — nel secondo caso accesso mediante avaxuser alla porta standard 22, NEGATO — nel terzo caso accesso mediante avaxuser alla porta personalizzata 1122, CONSENTITO!):

  • ssh root@ip-del-tuo-server
  • ssh avaxuser@ip-del-tuo-server
  • ssh -p 1122 avaxuser@ip-del-tuo-server

Sicurezza di un server VPS Ubuntu utilizzando il firewall ufw

Un firewall è un programma che ti permette di abilitare e/o disabilitare il traffico in entrata/uscita nel tuo server. Puoi utilizzare ufw come firewall, dovrebbe essere già pre-installato nella tua distribuzione di Ubuntu. Se non lo è, installalo con il seguente comando:

sudo apt install ufw

Di seguito elencate le porte su cui bisogna abilitare il traffico in ingresso:

  • il traffico http sulla porta 80
  • il traffico https sulla porta 443
  • il traffico ssh sulla porta che hai configurato in precedenza, quindi 1122
  • il traffico sulla porta utilizzata dal nodo validatore per la connessione con il network Avalanche, 9651. Queste sono le porte standard utilizzate dal nodo quando viene lanciato; queste porte possono essere cambiate (guida), eventualmente ricordati di sostituirle nei comandi seguenti.
sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 80sudo ufw allow 443sudo ufw allow 9651sudo ufw allow 1122

Abilita il servizio:

sudo ufw enable

Verifica :

sudo ufw status verbose

Cancella lo storico dei comandi eseguiti

Sarebbe buona prassi eliminare lo storico dei comandi eseguiti durante una sessione di lavoro, un eventuale intrusione nel tuo server non avrebbe a disposizione i comandi precedentemente eseguiti. Per cancellare lo storico dei comandi eseguiti, esegui il seguente comando:

history -c 

Disabilitare lo storico

I comandi precedenti disabilitano la memorizzazione dei comandi per la shell corrente. Per disabilitare in modo permanente la memorizzazione l’history dei comandi, esegui il seguente comando:

echo 'set +o history' >> ~/.bashrc

La modifica sarà attiva dal prossimo login. Se vuoi applicarla subito nella sessione corrente, esegui il seguente comando:

. ~/.bashrc

Parte 2— Installare il nodo validatore Avalanche utilizzando il codice compilato

Procediamo adesso con l’installazione e la configurazione del nodo validatore utilizzando direttamente i codici compilati. Stiamo considerando che si tratta di una prima installazione, quindi verrà anche configurato un servizio di sistema per avviare e arrestare il nodo, e sarà mostrato anche come configurare l’attivazione di StateSync, ovvero l’opzione che permette di abilitare il pruning per risparmiare spazio sul database.

Installazione codice compilato di Avalanchego

cd

wget https://github.com/ava-labs/avalanchego/releases/download/v1.11.11/avalanchego-linux-amd64-v1.11.11.tar.gz

tar xvf avalanchego-linux-amd64-v1.11.11.tar.gz

mv avalanchego-v1.11.11/ avalanchego

rm avalanchego-linux-amd64-v1.11.11.tar.gz

Configurazione StateSync

StateSync può essere abilitato anche su un nodo che è già installato, sincronizzato, e funzionante in rete. Per abilitare State Sync supponendo che si tratti di un validatore già in esecuzione, occorre arrestare il nodo, cancellare il database, configurare l’opzione che rende attivo State Sync, e avviare il nodo. Adesso la fase di bootstrap e sincronizzazione richiederà molto meno tempo, anche le dimensioni del database saranno molto ridotte rispetto a prima.

Per abilitare State Sync supponendo che si tratti di un validatore già in esecuzione, provvedi ad arrestare il nodo e a cancellare il database.

  1. Puoi arrestare il nodo con l’istruzione:
sudo systemctl stop avalanchego

2. Puoi cancellare il database con l’istruzione:

cd

rm -r .avalanchego/db

Comandi per configurare ed abilitare StateSync:

cd

cd .avalanchego

mkdir configs

cd configs

mkdir chains

cd chains

mkdir C

cd C

nano config.json

L’ultima istruzione visualizza il contenuto del file config.json, appena creato. Attualmente è vuoto, inserite il contenuto:

{
"state-sync-enabled": true
}

adesso, dovrai salvare il file, quindi premi Ctrl + x per chiudere il file, ti verrà chiesto se intendi accettare le modifiche eseguire, rispondi y ed invia!

Non modificare più questa opzione al fine di mantenere abilitato StateSync anche in futuro.

Puoi affettuare una veloce verifica, esegui nuovamente il comando “nano config.json” per controllare che il contenuto inserito in precedenza è stato salvato correttamente.

Configurazione servizio di sistema e avvio del nodo validatore

Adesso creiamo un servizio di sistema che lancerà il nodo automaticamente quando il server viene riavviato (anche a causa di un crash improvviso):

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

Dopo aver creato ed aperto il file avalanchego.service, incolla al suo interno il seguente contenuto e salvalo:

[Unit]
Description=Avalanche Node service
After=network.target
[Service]
User=avaxuser
Group=avaxuser
WorkingDirectory=/home/avaxuser/avalanchego
ExecStart=/home/avaxuser/avalanchego/avalanchego
Restart=always
PrivateTmp=true
TimeoutStopSec=60s
TimeoutStartSec=10s
StartLimitInterval=120s
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

Salva il file ed esci (Ctrl + x, e alla richiesta di conferma y)

Infine esegui i due comandi seguenti per abilitare ed avviare il servizio (avviando il servizio, il tuo nodo verrà lanciato):

sudo chmod 644 /etc/systemd/system/avalanchego.service
sudo systemctl daemon-reload
sudo systemctl enable avalanchego
sudo systemctl start avalanchego

Hai avviato il nodo, congratulazioni!

Per verificare lo stato del servizio e monitorare il tuo nodo, puoi eseguire il seguente comando:

sudo systemctl status avalanchego

oppure:

journalctl -f -u avalanchego

Se dovessi avere invece la necessità di fermare l’esecuzione del servizio, esegui il seguente comando (ricordati di avviare nuovamente il servizio dopo, per lanciare di nuovo il tuo nodo):

sudo systemctl stop avalanchego

>>> Aggiornamento del nodo validatore alla versione Durango 11<<<

Vediamo adesso come effettuare l’aggiornamento del codice del nodo, scaricando ed eseguendo direttamente il codice compilato di AvalancheGo. Effettua il login con il tuo utente (nel contesto di questa guida era avaxuser) ed esegui i seguenti comandi, uno dopo l’altro, per aggiornare il nodo all’ultima release.

cdwget https://github.com/ava-labs/avalanchego/releases/download/v1.11.11/avalanchego-linux-amd64-v1.11.11.tar.gztar xvf avalanchego-linux-amd64-v1.11.11.tar.gzsudo systemctl stop avalanchegorm -r avalanchegomv avalanchego-v1.11.11/ avalanchegosudo systemctl start avalanchegorm avalanchego-linux-amd64-v1.11.11.tar.gz

Per verificare che il nodo è in esecuzione con la versione aggiornata potete eseguire la seguente chiamata:

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNodeVersion"
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

il messaggio di output sarà del tipo:

{“jsonrpc”:”2.0",”result”:{“version”:”avalanchego/1.11.11",”databaseVersion”:”v1.4.5",”rpcProtocolVersion”:”37",”gitCommit”:”d3c09eb19d6e8c85a4757f17cd5da7e713c2baba”,”vmVersions”:{“avm”:”v1.11.11",”evm”:”v0.13.7",”platform”:”v1.11.11"}},”id”:1}

Parte 3 — Bootstap, Node ID, backup, notifiche in real-time

Il Node ID rappresenta l’identità del tuo nodo, effettua subito il suo backup; dovrai copiare la cartella ‘staking’ presente nel tuo VPS e poi incollarla localmente (in una chiavetta USB o altro), ti consigliamo di non archiviare la cartella in un supporto che sarebbe spesso connesso ad Internet e/o facilmente hackerabile. I due file (staker.crt e staker.key) contenuti all’interno di questa cartella ti potrebbero servire per un eventuale recovery del tuo nodo.

Verifichiamo se il nodo è connesso con i peer del network:

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.peers"
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Ti accorgerai se il nodo è connesso ai peer, otterrai una lunga lista in output.

Adesso otteniamo il Node ID con la seguente chiamata:

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNodeID"
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Nell’output trovi il tuo Node ID:

{
"jsonrpc":"2.0",
"result":{
"nodeID":"NodeID-xxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzz",
"nodePOP":{
"publicKey":"0x8888887......18d8efb32c4a4862",
"proofOfPossession":"0xe9f......3eae8dbceb029a558"
}
},
"id":1
}

Per verificare che il nodo abbia completato il bootstrap su una chain, per esempio la C chain, eseguite questo comando:

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.isBootstrapped",
"params": {
"chain":"C"
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

otterrete un risultato del tipo:

{"jsonrpc":"2.0","result":{"isBootstrapped":true},"id":1}

Ultimo passo, mettere al sicuro l’identità del tuo nodo; per prima cosa trova la cartella di staking situata nel tuo VPS, utilizzando il comando “ls -la” per vedere i file contenuti nelle directory; ad ogni modo, la cartella che stai cercando si trova in “home/avaxuser/.avalanchego/staking”. Nel nostro caso avaxuser è l’utente creato per gli scopi di questa guida.

Se localmente stai utilizzando Linux o OSX, puoi eseguire il seguente comando in una shell per creare un backup locale della cartella che contiene i file che il tuo Node Id (1122 è la porta SSH, inserisci quella scelta da te; avaxuser è l’utente, inserisci quello scelto da te; ip-del-tuo-server è l’indirizzo ip del tuo server; localBackupFolder è la cartella locale del tuo pc dove verranno copiati i file):

scp -r -P 1122 avaxuser@ip-del-tuo-server:/home/avaxuser/.avalanchego/staking/ localBackupFolder 

Se invece hai creato una coppia di chiavi pubblica/privata per connetterti via SSH al server, il comando da utilizzare per effettuare il backup è il seguente (1122 è la porta SSH, inserisci quella scelta da te; avaxuser è l’utente, inserisci quello scelto da te; ip-del-tuo-server è l’indirizzo ip del tuo server; localBackupFolder è la cartella locale del tuo pc dove verranno copiati i file; /Users/UserLocal/.ssh/id_rsa è la chiave pubblica per l’accesso via SSH):

scp -r -P 1122 -i /Users/UserLocal/.ssh/id_rsa avaxuser@ip-del-tuo-server:/home/avaxuser/.avalanchego/staking/ localBackupFolder 

Validazione

Adesso che hai ottenuto il tuo Node ID, puoi diventare un validatore! Devi assegnare lo stake al tuo nodo affinchè possa iniziare a validare. Per far ciò, la strada più semplice è di utilizzare il web wallet.

Verificare lo stato di salute e l’uptime del proprio nodo validatore

Per verificare se il tuo validatore è connesso al network in modo corretto e senza alcun problema di rete, è possibile adesso sfruttare la seguente dashboard:

Inserendo il Node Id del proprio validatore è possibile verificarne lo stato.

Puoi comunque controllare l’uptime stimato del tuo nodo mediante la seguente chiamata API:

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.uptime"
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Nell’output troverai quanto cercato:

{
"jsonrpc": "2.0",
"result": {
"rewardingStakePercentage": "99.9403",
"weightedAveragePercentage": "98.9182",
},
"id": 1
}

Notifiche in real-time su Telegram per monitorare l’esecuzione del tuo validatore

Nell’articolo al link seguente troverai le istruzioni che ti permettono di installare e configurare uno script che invia notifiche su Telegram ogni volta che c’è un consumo non usuale delle risorse sul tuo server, o se il validatore non è in esecuzione.

Qui l’articolo completo: https://medium.com/avalanche-hub/come-ricevere-avvisi-in-tempo-reale-dal-tuo-nodo-validante-avalanche-954d7b4b6299

--

--