Exécuter un noeud Bitcoin avec Lightning via Tor

2
2399

Dans ce guide nous allons suivre pas à pas toutes les étapes pour installer un noeud Lightning, cela avec une bonne confidentialité grâce à Tor. Nous avons choisi l’implémentation Lightning de LND, principalement pour sa compatibilité avec d’autres services.

Bien qu’il existe aujourd’hui des solutions clé en main pour faire tourner un noeud Bitcoin et Lightning Network telles que Umbrel, myNode ou RaspiBlitz, notre but ici est d’être maître de notre installation afin de pouvoir la personnaliser au mieux selon nos envies, d’avoir un noeud robuste, d’installer les applications de notre choix…
Pour cela nous allons partir d’un OS vierge et procéder à toutes les installations par nous-mêmes.

1. Choix du matériel – Installation du système d’exploitation

Dans notre exemple nous utiliserons Ubuntu Serveur 20.04, installé sur un serveur dédié, afin d’avoir un bon taux de disponibilité et de bonnes performances. Mais vous pouvez très bien utiliser un ordinateur personnel classique ou un mini ordinateur comme le raspberry pi.

En terme de mémoire il vous faut au minimum 350Go d’espace libre. Si vous achetez un nouveau disque dur privilégiez un SSD d’au moins 1 To.

Installez maintenant Ubuntu et nommez « bitcoin » votre compte utilisateur principal pour pouvoir copier les configs de ce tutoriel sans vous tromper.

2. Installation de Tor

Avant d’installer le noeud nous allons installer Tor. Cela nous permettra d’échanger de manière plus confidentielle avec les autres noeuds compatibles avec Tor.

Commencez par mettre à jour tous les paquets :

sudo apt update && sudo apt upgrade

Installez maintenant les paquets pour tor et git :

sudo apt install tor git

Ajoutez deux lignes dans la configuration de Tor. Le Control Port 9051 nécessaire pour Bitcoin Core, ainsi que des logs utiles en cas de problème.

echo 'ControlPort 9051' | sudo tee -a /usr/share/tor/tor-service-defaults-torrc

echo 'Log notice stdout' | sudo tee -a /usr/share/tor/tor-service-defaults-torrc 

Vérifiez que les 4 lignes suivantes sont bien présentes dans le fichier /usr/share/tor/tor-service-defaults-torrc, les ajouter sinon :

SOCKSPort 9050
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1

Redémarrez maintenant le service tor :

sudo /etc/init.d/tor restart

Ajoutez l’utilisateur bitcoin dans le groupe debian-tor

sudo usermod -a -G debian-tor bitcoin

Tor est maintenant prêt à être utilisé.

3. Sécurité (optionnel)

Installez un firewall local :

sudo ufw logging on
sudo ufw enable
# PRESSEZ Y
sudo ufw status
sudo ufw allow OpenSSH
sudo ufw allow 9050
sudo ufw allow 9735
sudo ufw allow 10009

Configurez des protections contre les attaques DDoS :

sudo iptables -N syn_flood
sudo iptables -A INPUT -p tcp --syn -j syn_flood
sudo iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
sudo iptables -A syn_flood -j DROP
sudo iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
sudo iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
sudo iptables -A INPUT -p icmp -j DROP
sudo iptables -A OUTPUT -p icmp -j ACCEPT

4. Installation d’un noeud complet (full node)

Nous allons maintenant installer et configurer le noeud Bitcoin Core pour qu’il puisse discuter via le réseau Tor, mais également sur le clearnet. Il pourra ainsi communiquer avec tous les noeuds du réseau et servira de passerelle entre les « deux mondes ».

Cherchez la dernière version de Bitcoin core (0.20.0 aujourd’hui) et téléchargez là.
Attention à choisir la bonne version pour votre système (ex : ARM pour raspberry) :

wget https://bitcoin.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.0-x86_64-linux-gnu.tar.gz

Les étapes suivantes sont optionnelles, mais recommandées. Elles vont nous permettre de nous assurer que le fichier téléchargé est le bon et n’a pas été corrompu.

Téléchargez les signatures de version :

wget https://bitcoin.org/bin/bitcoin-core-0.20.0/SHA256SUMS.asc

Vérifiez le fichier :

sha256sum --check SHA256SUMS.asc --ignore-missing
=> bitcoin-0.20.0-x86_64-linux-gnu.tar.gz: OK

Le fichier Bitcoin Core semble bon, reste à nous assurer que le fichier sha256sum n’a pas été compromis.

Pour cela récupérez la clé PGP de l’équipe Bitcoin Core :

wget https://bitcoin.org/laanwj-releases.asc

gpg ./laanwj-releases.asc
=> Vérifiez que vous obtenez bien 01EA5486DE18A882D4C2684590C8019E36C2E964

Puis importez la clé :

gpg --import ./laanwj-releases.asc

Et vérifiez la signature :

gpg --verify SHA256SUMS.asc
=> gpg: Good signature from "Wladimir J. van der Laan

Le fichier étant OK, décompressez et installez-le :

tar -xvf bitcoin-0.20.0-x86_64-linux-gnu.tar.gz

sudo install -m 0755 -o root -g root -t /usr/local/bin/ bitcoin-0.20.0/bin/*

Bitcoin Core est maintenant installé, supprimez tous les fichiers n’étant plus utiles :

rm bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
rm -r bitcoin-0.20.0/
rm laanwj-releases.asc
rm SHA256SUMS.asc

Vérifiez l’installation :

bitcoind -version

Nous allons maintenant générer ce qu’il faut pour l’authentification RPC entre Bitcoin Core et LND.

wget https://raw.githubusercontent.com/bitcoin/bitcoin/452bb90c718da18a79bfad50ff9b7d1c8f1b4aa3/share/rpcauth/rpcauth.py -qq

python3 rpcauth.py lightning

Notez bien les deux résultats :
rpcauth qui sera utile dans la configuration de Bitcoin Core,
– le password qui servira dans la configuration de LND.

Supprimez le fichier :

rm rpcauth.py

Avant de le lancer, créez un fichier de configuration pour Bitcoin Core :

mkdir ~/.bitcoin
nano ~/.bitcoin/bitcoin.conf

Et entrez la configuration suivante :

# La base
daemon=1
server=1
addresstype=bech32
rpcport=8332
#testnet=1
#datadir=/data # Si vous avez plusieurs disques et ou que vous voulez mettre les data dans un autre répertoire

# Pour LND
txindex=1
rpcauth=lightning:ce6ad5fh4990xxxxxxxxx
zmqpubrawblock=tcp://127.0.0.1:29001
zmqpubrawtx=tcp://127.0.0.1:29002

# Pour Tor
proxy=127.0.0.1:9050
listen=1
bind=127.0.0.1

Créer maintenant un service qui fera tourner le noeud :

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

Entrez :

[Unit]
Description=Bitcoin daemon
After=network.target

[Service]
User=bitcoin
Group=bitcoin
Type=forking
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
ExecStart=/usr/local/bin/bitcoind -pid=/home/bitcoin/.bitcoin/bitcoind.pid
KillMode=process
Restart=always
TimeoutSec=120
RestartSec=30

[Install]
WantedBy=multi-user.target

Démarrez le service :

sudo systemctl daemon-reload
sudo systemctl start bitcoind.service

Vérifiez que le service est bien lancé :

sudo systemctl status bitcoind.service

Le service est lancé, le noeud doit être en train de démarrer. Vérifier dans les logs que le noeud tourne bien sur Tor. Pour cela tapez less ~/.bitcoin/debug.log et cherchez la ligne :
tor: Got service ID xxx, advertising service xxx.onion:8333

Félicitations ! Il faudra probablement plusieurs jours à votre noeud pour se synchronisez. Pour vérifier l’état d’avancement :

tail ~/.bitcoin/debug.log
bitcoin-cli -getinfo


5. Configuration réseau (optionnel)

Si votre ordinateur est dans votre réseau local, il est très probable que votre routeur réalise du NAT, il faut donc que vous configurer du port forwarding pour le bon fonctionnement de votre noeud. Cela n’est pas compliqué, mais le procédé est différent selon votre routeur / opérateur. Faites une recherche internet : « configurer redirection de port [votreOperateur/box] ». Vous trouverez facilement des tutoriaux.

Dans notre cas, il va falloir rediriger les ports 9735 et 10009, avec le protocole TCP, depuis l’IP de votre box, jusqu’à l’IP de votre PC.

6. Installation de LND

C’est parti pour LND. Nous allons également le configurer pour router les transactions lightning via à la fois Tor et le clearnet.

Installer go

Commencez par trouver dernière version de go: https://golang.org/dl/ puis téléchargez-la :

cd ~
wget https://golang.org/dl/go1.14.5.linux-amd64.tar.gz

Vérifiez le fichier :

sha256sum go1.14.5.linux-amd64.tar.gz

Décompressez-le :

sudo tar -C /usr/local -xvf go1.14.5.linux-amd64.tar.gz

Ajoutez go au Path :

echo 'export PATH="/usr/local/go/bin:$PATH"' >>  ~/.bashrc
source ~/.bashrc

Vérifiez l’installation de go :

go version

Go est maintenant installé, procédez au nettoyage :

rm go1.14.5.linux-amd64.tar.gz

Installons maintenant LND

git clone https://github.com/lightningnetwork/lnd
cd lnd

Cherchez la dernière release de LND : https://github.com/lightningnetwork/lnd/releases.
Passez sur cette branche et installez-la :

git checkout v0.11.0-beta
make && make install

LND est maintenant installé dans ~/go/bin
Ajoutez le dans le path :

echo 'export PATH="$HOME/go/bin:$PATH"' >>  ~/.bashrc
source ~/.bashrc

Vérifiez :

lnd --help

Nettoyez :

cd ~
rm -rf lnd

Configurez :

mkdir ~/.lnd
nano ~/.lnd/lnd.conf

Entrez la configuration suivante :

# LND
bitcoin.active=1
bitcoin.mainnet=1
debuglevel=info
alias=alias_de_votre_noeud
color=#005400 # Une couleur utilisée par les explorers

# Bitcoind
bitcoin.node=bitcoind
bitcoind.rpchost=127.0.0.1:8332
bitcoind.zmqpubrawblock=tcp://127.0.0.1:29001
bitcoind.zmqpubrawtx=tcp://127.0.0.1:29002
bitcoind.rpcuser=lightning
bitcoind.rpcpass=votre_pass_rpc_ici

# Tor
tor.active=true
tor.v3=true
tor.streamisolation=true
listen=0.0.0.0
externalip=votre_ip

LND est maintenant installé, créez le service qui va le faire tourner :

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

Entrez :

[Unit]
Description=LND daemon
Requires=bitcoind.service
After=bitcoind.service

[Service]
User=bitcoin
Group=bitcoin
Type=simple
ExecStart=/home/bitcoin/go/bin/lnd
RestartSec=60

[Install]
WantedBy=multi-user.target

Démarrez le service :

sudo systemctl daemon-reload
sudo systemctl start lnd.service

Vérifiez que le service est bien démarré :

sudo systemctl status lnd.service

LND est maintenant lancé. Au premier lancement il vous faut créer un wallet et entrer un mot de passe :

lncli create
# Entrez un password fort

La prochaine fois que vous démarrerez LND, il ne vous faudra plus créer un wallet, mais le déverrouiller avec :

lncli unlock

Vérifier que votre noeud est bien lancé et opérationnel :

lncli getinfo
less ~/.lnd/logs/bitcoin/mainnet/lnd.log
lncli listpeers

7. Ouvrir un channel

Pour que notre noeud soit connu et commence à relayer des transactions il faut ouvrir un premier channel.

Avant d’ouvrir un channel il faudra alimenter votre noeud

# Generez une adresse
lncli newaddress p2wkh
#Envoyer des fonds sur cette adresse puis verifiez qu'ils sont bien arrivés
lncli walletbalance

Choisissez un noeud auquel vous connecter. L’explorer 1ml est pratique pour trouver les informations nécessaires.
La commande à taper pour vous connecter au noeud bitcoin.fr par exemple :

lncli connect 028331898ddfd97c3579f313458c26f495cfc0c0e1dc762b710a5c4f82192a16b1@51.15.21.116:9735

Puis pour ouvrir un canal :

lncli openchannel --node_key 028331898ddfd97c3579f313458c26f495cfc0c0e1dc762b710a5c4f82192a16b1 --local_amt 1000000 --sat_per_byte 3

Patientez maintenant 6 blocs pour que votre transaction soit confirmée (ou plus, selon l’état de la mempool).

Vérifiez l’état de vos canaux avec la commande :

lncli listchannel

Une fois la transaction confirmée par 6 blocs votre noeud devrait rapidement être visible sur les différents explorers.

8. Aller plus loin

Il existe de nombreux services additionnels pour gérer et utiliser son noeud. Je tâcherai de publier dans les mois à venir d’autres articles sur le sujet, que je référencerai ici. N’hésitez pas à poser des questions dans les commentaires si cela vous intéresse.

Edit : le prochain article sur Ride The Lightning, un projet open source pour administrer son noeud, est disponible ici : https://bitcoin.fr/installer-ridethelightning-sur-ubuntu/.