SPOILER ALERT TENTO NÁVOD (ZATIAĽ) OBSAHUJE, AKO SI NAINŠTALOVAŤ BITCOIN CORE
DO NÁVODU JE PLÁNOVANÉ DOPLNIŤ:
• blockchain EXPLORER: btc rpc explorer
• FULCRUM SERVER
• LND (dlhodobý horizont)
V prípade, že chceme, aby náš uzol zachránil Bitcoin aj počas apokalypsy, tak sa odporúča napojiť uzol na UPS (Uninterrupted Power Supply), čiže na zdroj neprerušovaného napätia. Najčastejšie sa na to využívajú batérie.
V nasledujúcom návode si ukážeme, ako si nainštalovať svoj vlastný bitcoinový uzol na PC za pomoci Linuxu, použitím operačného systému Ubuntu a návodu Minibolt.
Zo začiatku sa môže zdať proces náročný a odstrašujúci, ale keď sa cez návod „prehryzieme“, čaká nás na konci sladká odmena a dobrý pocit, že sme to zvládli a navyše sa naučíme niečo nové o Bitcoine aj o Linuxe.
Čo budeme potrebovať?
• osobný počítač s Intel/AMD s procesorom generácie aspoň +2010
• minimálne 2 GB RAM na Bitcoin core a 4 GB RAM na Lightning node (odporúčané +8GB RAM)
• úložisko 1 TB SSD (odporúčané 2 TB SSD)
• USB disk vo veľkosti minimálne 4 GB
• ethernet kábel
• dočasný monitor alebo TV
• dočasnú klávesnicu
INŠTALÁCIA UBUNTU
Flashneme si najnovšiu verziu Ubuntu na prenosný USB disk za pomoci balenaEtcher:
Odkaz na balenaEtcher → https://etcher.balena.io/
Odkaz na Ubuntu → https://ubuntu.com/download/server
Nainštalujeme si balenaEtcher a stiahneme si najnovšiu stabilnú verziu Ubuntu.
Vložíme USB do PC a spustíme balenaEtcher, zobrazí sa nám nasledovné okno:
Postupujeme podľa krokov:
1 Flash from file
2 Zvolíme cestu kde máme stiahnuté Ubuntu
3 V prípade, že nám automaticky nezvolilo umiestnenie, kam flashnúť Ubuntu, tak zvolíme Select target
4 Flash!
Po flashnutí Ubuntu zapojíme USB do PC, na ktorom chceme bežať náš uzol. Zapneme PC a potrebujeme sa dostať do Boot Menu.
V prípade HP tak spravíme stlačením F9 pár sekúnd po štarte PC, kde v Boot Menu zvolíme možnosť, ktorá bude vyzerať nasledovne alebo podobne:
UEFI – názov USBčka (napr. Kingston DataTraveler 3.0...)
V nasledujúcich krokoch už inštalujeme Ubuntu:
1 *Try or Install Ubuntu Server
2 Jazyk zvolíme English alebo Čeština, odporúčané [English]
3 Identifikáciu klávesnice preskočíme – [Done]
4 Zvolíme (X) Ubuntu Server – [Done]
5 Počkáme, kým nám načíta IP adresu, IP ADRESU SI POZNAČÍME, budeme ju v ďalších krokoch potrebovať, v prípade, že máme pripojený PC k sieti cez ethernet kábel a pokračujeme – [Done]
6 Proxy address necháme prázdne a pokračujeme ďalej – [Done]
7 Ak nechceme použiť alternatívny mirror pre Ubuntu, tak ponecháme prázdne a pokračujeme – [Done]
8 Use entire disk, ak máme len jeden primárny disk a možnosť „Set up this disk as an LVM group“ odškrtneme ak je treba a pokračujeme ďalej – [Done]
9 Storage configuration – pokračujeme ďalej – [Done]
10 Pokračujeme cez [Continue], kde už niet cesty späť
11 Vytvoríme si užívateľa, ktorý bude dočasný:
Your name: temp
Your servers name: minibolt
Pick a username: temp
Choose a password: xxxx
Confirm your password: xxxx
Pokračujeme ďalej – [Done]
12 Upgrade to Ubuntu Pro (X) Skip for now – [Continue]
13 (X) Install OpenSSH server – [Done]
14 Ak chceme nainsťalovať aplikácie 3. strán, tak si môžeme zvoliť, v inom prípade pokračujeme – [Done]
15 Prebieha inštalácia
16 Cancel update and reboot, Rebooting…
17 Please remove the installation medium, then press ENTER, vyberieme inštalačný USB disk pre Ubuntu a stlačíme ENTER
Po reštartovaní PC sa nám spustí Ubuntu, systém sa načíta a následne sa prihlásime ako užívateľ temp s heslom, ktoré sme zadali. Ak sme sa úspešne prihlásili, môžeme prejsť na náš hlavný PC, z ktorého už budeme následne všetko riadiť.
KONFIGURÁCIA
Na našom hlavnom PC si pustíme Terminál (CTRL + ALT + T) a zadáme príkaz ssh spolu s užívateľom a IP, ktorú sme videli počas inštalácie Ubuntu, ak sme ju nevideli, tak si ju vieme pozrieť v nastaveniach routru.
Terminál od nás vypýta vytvorenie autentifikácie, napíšeme yes a stlačíme ENTER.
The authenticity of host '192.168.X.XXX (192.168.X.XXX)' can't be established.
AB12345 key fingerprint is SHA256:....
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Vypýta od nás heslo na prihlásenie, prihlásime sa heslom, ktoré sme zadali pri inštalácii Ubuntu, počas vytvárania užívateľa.
Vytvoríme hlavného užívateľa admin namiesto užívateľa temp pre jednoduchosť návodu.
Vytvoríme užívateľa s názvom admin a s heslom XY, ktoré budeme potrebovať.
sudo adduser --gecos "" admin
Z užívateľa admin spravíme superusera tým, že ho pridáme do skupiny sudo a starej skupiny temp.
sudo usermod -a -G sudo,adm,cdrom,dip,plugdev,lxd admin
Odhlásime sa z existujúceho užívateľa temp.
logout
Opäť sa prihlásime do svojho uzla cez príkaz ssh, ale tentokrát cez užívateľa admin s novým heslom. Vymažeme užívateľa temp, ktorého už nebudeme potrebovať.
Vymažeme užívateľa temp.
sudo userdel -rf temp
Očakávaný výstup:
userdel: user temp is currently used by process 1344
userdel: temp mail spool (/var/mail/temp) not found
Spravíme systémový update:
sudo apt update && sudo apt full-upgrade
Počas inštalácie môže od nás vypýtať súhlas, zvolíme „y“ a stlačíme ENTER, pokračujeme ďalej.
Aby sme mohli používať svoj vlastný názov uzla MiniBolt na prihlasovanie cez ssh namiesto IP adresy, musíme nainštalovať potrebný softvér.
Príklad: namiesto ssh [email protected] budeme používať ssh [email protected].
sudo apt install avahi-daemon
Overíme si výkon zápisu nášho disku. Výkon nášho uzla do veľkej miery závisí od rýchlosti zápisu nášho disku. Overíme si, či rýchlosť zápisu disku je dostačujúca. Disk by mal byť detegovaný ako /dev/sda. Overíme si to pomocou nasledovného príkazu, ktorý nám ukáže zoznam pripojených zariadení.
lsblk -pli
Odmeriame rýchlosť nášho disku, prikáz sa môže líšiť v závislosti od SATA alebo nvme.
Pre SATA použijeme príkaz:
sudo hdparm -t --direct /dev/sda
Alebo v prípade nvme:
sudo hdparm -t --direct /dev/nvme0n1
Očakávaný výstup:
/dev/sda:
Timing O_DIRECT disk reads: 404 MB in 3.01 seconds = 134.39 MB/sec
Ak sme nainštalovali aj sekundárny disk, tak odmeriame jeho rýchlosť zápisu s nasledovným príkazom. Ak sme sekundárny disk nenainštalovali, tak príkaz preskočíme.
sudo hdparm -t --direct /dev/sdb
Adresár údajov
Budeme ukladať všetky aplikácie a ich dáta v priečinku /data. Toto zabezpečí lepšiu ochranu, pretože to nebudeme ukladať v priečinku home žiadneho užívateľa. Dodatočne je jednoduchšie presunúť ten priečinok niekam inam, napríklad na separátny disk, kde môžeme pripojiť akékoľvek úložisko k /data.
sudo mkdir /data
Priradíme užívateľa admin ako majiteľa priečinku /data.
sudo chown admin:admin /data
BEZPEČNOSŤ
Zabezpečíme, aby bol náš uzol zabezpečený voči neautorizovanému vonkajšiemu prístupu. Uzol potrebuje byť zabezpečený voči útokom viacerými metódami.
Nekomplikovaný Firewall (povolenie & konfigurácia)
Brána Firewall kontroluje, aký druh vonkajšej prevádzky náš počítač akceptuje a ktoré aplikácie môžu odosielať dáta. V predvolenom (defaultnom) nastavení je veľa sieťových portov otvorených a načúvajú k prichádzajúcim spojeniam. Zatvorenie nepotrebných portov môže zmierniť mnohé potenciálne zraniteľnosti systému.
Zatiaľ by malo byť dostupné z vonku iba SSH. Bitcoin Core a LND používajú Tor a nepotrebujú prichádzajúce porty. Otvoríme porty až v ďalších častiach návodu, ak to bude potrebné (napríklad pre Electrs alebo webové aplikácie).
Skontrolujeme dostupnosť IPv6
S užívateľom admin skontrolujeme dostupnosť IPv6.
ping6 -c2 2001:858:2:2:aabb:0:563b:1526 && ping6 -c2 2620:13:4000:6000::1000:118 && ping6 -c2 2001:67c:289c::9 && ping6 -c2 2001:678:558:1000::244 && ping6 -c2 2001:638:a000:4140::ffff:189 && echo OK.
Ak dostaneme výstup „OK.“ tak máme dostupnosť IPv6.
Ak náš výstup bude „ping6: connect: Network is unreachable„, tak IPv6 dostupnosť nemáme, ale nič sa nedeje, adopcia IPv6 je nízka, môžeme pokračovať aj bez toho. Namiesto toho môžeme získať verejnú IPv4 za pomoci:
curl -s ipv4.icanhazip.com
V prípade, že nemáme IPv6 dostupnosť, môžeme zakázať IPv6 na UFW, aby sme predišli vytvoreniu pravidiel, ktoré s tým môžu súvisieť.
sudo nano /etc/default/ufw
Zmeníme IPV6=yes na IPV6=no. Uložíme – CTRL + S a súbor zavrieme – CTRL + X.
Zakážeme odhlasovanie.
sudo ufw logging off
Očakávaný výstup:
Logging disabled
Povolíme SSH pripojenie.
sudo ufw allow 22/tcp comment 'allow SSH from anywhere'
Povolíme UFW keď nám prompt ukáže:
sudo ufw enable
"Command may disrupt existing ssh connections. Proceed with operation (y|n)?"
Napíšeme „y“ a stlačíme ENTER.
Očakávaný výstup:
Firewall is active and enabled on system startup
Skontrolujeme si, či je UFW správne nakonfigurovaný a aktívny.
sudo ufw status verbose
Očakávaný výstup:
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere # allow SSH from anywhere
Monitorovanie SSH logs (voliteľné)
Môžeme monitorovať všeobecné protokoly autentifikácie v našom systéme v reálnom čase, monitorovanie ukončíme stlačením CTRL + C.
sudo tail -f /var/log/auth.log
Alebo vyfiltrujeme iba SSH autentifikáciu v posledných 500 riadkoch.
sudo tail --lines 500 /var/log/auth.log | grep sshd
Pomocou nasledujúceho príkazu vieme zobraziť zoznam posledných úspešných prihlásených užívateľov do nášho uzla za posledných 7 dní. Ak si želáme vidieť iné časové obdobie, môžeme zmeniť -7days podľa vlastných preferencií.
last -s -7days -t today
Vďaka tomuto vieme zistiť prípadný útok hrubou silou a môžeme prijať vhodné opatrenia na zmiernenie.
INŠTALÁCIA NGINX
Niekoľko komponentov tohto návodu si bude vyžadovať komunikačný port, napríklad Blockchain Explorer (BTC RPC Explorer) alebo ThunderHub webové rozhranie pre Lightning uzol. Aj napriek tomu, že používame tieto aplikácie len vo vlastnej domácej sieti, komunikácia by mala byť vždy šifrovaná. V opačnom prípade každé zariadenie na rovnakej sieti môže načúvať k vymieňaným dátam, vrátane hesiel.
Použijeme Nginx na šifrovanie komunikácie za pomoci SSL/TLC (Transport Layer Security). Toto nastavenie sa volá „reverse proxy“. Nginx poskytuje bezpečnú komunikáciu smerom von a smeruje prenos späť do internej služby bez šifrovania.
Nainštalujeme Nginx.
sudo apt-get install nginx-full
Overíme správnosť inštalácie a skontrolujeme verziu nginx.
nginx -v
Požadovaný výstup:
nginx version: nginx/1.24.0 (Ubuntu)
Vytvoríme certifikát SSL/TLS s vlastným podpisom platný 10 rokov.
sudo openssl req -x509 -nodes -newkey rsa:4096 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -subj "/CN=localhost" -days 3650
Nginx je taktiež webový server. Ak ho chceme používať iba ako „reverse proxy“, zálohujeme si predvolenú konfiguráciu.
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
Vytvoríme si čistý súbor na konfiguráciu.
sudo nano /etc/nginx/nginx.conf
Nalepíme nasledujúci text do súboru nginx.conf. Uložíme – CTRL + S a zavrieme – CTRL + X.
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_session_cache shared:HTTP-TLS:1m;
ssl_session_timeout 4h;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
include /etc/nginx/sites-enabled/*.conf;
}
stream {
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_session_cache shared:STREAM-TLS:1m;
ssl_session_timeout 4h;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
include /etc/nginx/streams-enabled/*.conf;
}
Vytvoríme si priečinky streams-available a streams-enabled pre budúcu konfiguráciu.
sudo mkdir /etc/nginx/streams-available
sudo mkdir /etc/nginx/streams-enabled
Vymažeme súbory site available a site enabled s pôvodnou konfiguráciou.
sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default
Vyskúšame si nastavenie Nginx.
sudo nginx -t
Očakávaný výstup:
> nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
> nginx: configuration file /etc/nginx/nginx.conf test is successful
Znovu načítame Nginx aby sa zmeny prejavili.
sudo systemctl reload nginx
Pre monitorovanie správania sa Nginx a zobrazenie zápisov použijeme nasledovný príkaz. Pre ukončenie sledovania stlačíme CTRL + C.
journalctl -f -u nginx
Očakávaný výstup:
> Nov 16 16:56:56 minibolt systemd[1]: Starting A high performance web server and a reverse proxy server...
> Nov 16 16:56:56 minibolt systemd[1]: Started A high performance web server and a reverse proxy server.
Pre sledovanie chybných hlásení Nginx použijeme nasledovný príkaz:
sudo tail -f /var/log/nginx/error.log
SÚKROMIE
Nastavíme Tor a l2P, aby náš uzol bežal anonymne.
Bežaním vlastného Bitcoinového a Lightningového uzla sa stávate suverénnym členom Bitcoinovej siete. Avšak, pokiaľ pri konfigurácii nedbáme na súkromie, tak dávame vedieť celému svetu, že sme niekto s Bitcoinom.
Ako ďalšiu výhodu si uľahčíme pripojenie k uzlu mimo domácej siete.
Je pravda, že ide iba o našu IP adresu, ale za pomoci služieb, ako je napríklad iplocation.net, naša fyzická adresa môže byť celkom presne určená. Obzvlášť, ak ide o Lightning, naša adresa by sa veľmi šírila. Musíme preto zabezpečiť svoje súkromie.
Tor Project
Používame Tor, bezplatný softvér vytvorený Tor Project-om. Umožňuje nám anonymizovať internetový prenos tým, že smeruje prenos cez sieť ďalších uzlov, vďaka čomu je ukrytá naša poloha a profil používania.
Projekt sa nazýva Tor (The Onion Router). Informácie sa prenášajú cez niekoľko hopov (skokov) a sú šifrované niekoľkokrát. Každý uzol dešifruje iba vrstvu informácií, ktorá je mu adresovaná, pričom sa dozvie iba predchádzajúci a nasledujúci hop (skok) z celej trasy. Dátový balík je tak postupne odlúpnutý ako vrstvy cibule až pokým nedosiahne konečný cieľ.
Inštalácia Tor
Ak nie sme, prihlásime sa do uzla cez ssh ako užívateľ admin a nainštalujeme Tor.
Aktualizujeme celý operačný systém nášho uzla.
sudo apt update && sudo apt full-upgrade
Nainštalujeme dependency.
sudo apt install apt-transport-https
Vytvoríme nový súbor s názvom tor.list.
sudo nano /etc/apt/sources.list.d/tor.list
Do súboru zapíšeme nasledujúce riadky. Uložíme – CTRL + S a zavrieme – CTRL + X.
deb [arch=amd64 signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org jammy main
deb-src [arch=amd64 signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org jammy main
Na chvíľu sa prihlásime do užívateľa root.
sudo su
Pridáme kľúče GPG používané na podpisovanie balíkov spustením nasledujúceho prikazu.
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null
Vrátime sa do užívateľa admin.
exit
Aktualizujeme úložisko apt a nainštalujeme Tor a Tor Debian keyring.
sudo apt update && sudo apt install tor deb.torproject.org-keyring
Overíme, či sa Tor nainštaloval správne.
tor --version
Očakávaný výstup:
Tor version 0.4.8.12.
This build of Tor is covered by the GNU General Public License (https://www.gnu.org/licenses/gpl-3.0.en.html)
Tor is running on Linux with Libevent 2.1.12-stable, OpenSSL 3.0.13, Zlib 1.3, Liblzma 5.4.5, Libzstd 1.5.5 and Glibc 2.39 as libc.
Tor compiled with GCC version 11.4.0
Tor konfigurácia
Bitcoin Core bude komunikovať priamo s Tor deamonom, aby smeroval všetku komunikáciu cez sieť Tor. Potrebujeme povoliť Tor, aby prijímal inštrukcie cez svoj port so správnou autentifikáciou.
Upravíme konfiguráciu Tor.
sudo nano +56 /etc/tor/torrc --linenumbers
Za pomoci časti príkazu +56 nám otvorí dokument priamo na riadku 56, povolíme riadiaci port a to tak, že vymažeme znak hashtag #, čím sa zruší príznak komentovania. Čiže náš riadok by mal vyzerať nasledovne:
ControlPort 9051
Uložíme – CTRL + S a zavrieme – CTRL + X.
Aby sa zmena prejavila, musíme znovu načítať Tor.
sudo systemctl reload tor
Ubezpečíme sa, že Tor beží a počúva k predvoleným portom 9050 a 9051 na localhost (127.0.0.1).
sudo ss -tulpn | grep tor
Očakávaný výstup:
tcp LISTEN 0 4096 127.0.0.1:9050 0.0.0.0:* users:(("tor",pid=13959,fd=6))
tcp LISTEN 0 4096 127.0.0.1:9051 0.0.0.0:* users:(("tor",pid=13959,fd=15))
V prípade, že chceme sledovať, čo Tor robí v reálnom čase, použijeme nasledovný príkaz.
journalctl -fu tor@default
Inštalácia i2P
Ubezpečíme sa, že sme prihlásení ako užívateľ admin a pridáme i2pd úložisko.
wget -q -O - https://repo.i2pd.xyz/.help/add_repo | sudo bash -s –
Očakávaný výstup:
Importing signing key
Adding APT repository
Aktualizujeme úložisko a nainštalujeme i2pd. Ak sa nás pýta na prompt tak napíšme “y“ a stlačíme ENTER.
sudo apt update && sudo apt install i2pd
Skontrolujeme, či inštalácia prebehla úspešne.
i2pd --version
Očakávaný výstup:
i2pd version 2.54.0 (0.9.64)
Boost version 1.83.0
OpenSSL 3.0.13 30 Jan 2024
Zabezpečíme, aby služba i2pd fungovala a načúvala predvoleným portom.
sudo ss -tulpn | grep i2pd
Očakávaný výstup:
udp UNCONN 0 0 0.0.0.0:10477 0.0.0.0:* users:(("i2pd",pid=14661,fd=21))
udp UNCONN 0 0 127.0.0.1:7655 0.0.0.0:* users:(("i2pd",pid=14661,fd=45))
tcp LISTEN 0 4096 127.0.0.1:7656 0.0.0.0:* users:(("i2pd",pid=14661,fd=44))
tcp LISTEN 0 4096 127.0.0.1:7070 0.0.0.0:* users:(("i2pd",pid=14661,fd=25))
tcp LISTEN 0 4096 127.0.0.1:6668 0.0.0.0:* users:(("i2pd",pid=14661,fd=40))
tcp LISTEN 0 4096 127.0.0.1:4447 0.0.0.0:* users:(("i2pd",pid=14661,fd=36))
tcp LISTEN 0 4096 127.0.0.1:4444 0.0.0.0:* users:(("i2pd",pid=14661,fd=35))
tcp LISTEN 0 4096 0.0.0.0:10477 0.0.0.0:* users:(("i2pd",pid=14661,fd=20))
Na monitorovanie hlásení i2p použijeme nasledovný príkaz. Pre ukončenie sledovania stlačíme klávesovú skratku CTRL + C.
sudo tail -f /var/log/i2pd/i2pd.log
BITCOIN CORE
Inštalácia Bitcoin Core. Bitcoin Core stiahne celý blockchain a overí všetky transakcie od roku 2009. Hovoríme o viac ako 864 845 blokoch (ku dňu písania článku) s veľkosťou 690, GB čo nie je ľahká úloha.
Inštalácia
Stiahneme Bitcoin Core a porovnáme s podpísaným a časovo označeným kontrolným súčtom. Toto je preventívne opatrenie, aby sme sa uistili, že ide o oficiálne vydanie a nie o škodlivú verziu, ktorá by sa nám pokúšala ukradnúť peniaze.
Ako užívateľ admin zmeníme dočasný priečinok, ktorý sa pri reštarte vymaže.
cd /tmp
Nastavíme verziu, ktorú chceme stiahnuť. V prípade, že pri Bitcoine uprednostňujeme pomalšie updaty, môžeme zvoliť staršiu verziu.
Zoznam starších verzií najdeme na https://github.com/bitcoin/bitcoin/tags.
VERSION=28.0
Stiahneme aktuálne binárne súbory a podpisy.
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-x86_64-linux-gnu.tar.gz
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc
Kontrolný súčet
Skontrolujeme, či sa kontrolný súčet v súbore SHA256SUMS zhoduje s kontrolným súčtom, ktorý vypočítame my (ignorujeme riadky s nesprávnym formátovaním).
sha256sum --ignore-missing --check SHA256SUMS
Očakávaný výstup:
bitcoin-28.0-x86_64-linux-gnu.tar.gz: OK
Kontrola podpisu
Jednotlivé verzie vydania Bitcoinu sú podpísané viacerými jednotlivcami, kde každý používa svoj vlastný kľúč. Na overenie platnosti týchto podpisov musíme najprv importovať zodpovedajúce verejné kľúče do našej databázy kľúčov GPG.
Nasledujúci príkaz automaticky stiahne a importuje všetky podpisy z vydaní Bitcoin Core.
curl -s "https://api.github.com/repositories/355107265/contents/builder-keys" | grep download_url | grep -oE "https://[a-zA-Z0-9./-]+" | while read url; do curl -s "$url" | gpg --import; done
> gpg: key 17565732E08E5E41: 29 signatures not checked due to missing keys
> gpg: /home/admin/.gnupg/trustdb.gpg: trustdb created
> gpg: key 17565732E08E5E41: public key "Andrew Chow <[email protected]>" imported
> gpg: Total number processed: 1
> gpg: imported: 1
> gpg: no ultimately trusted keys found
[...]
Overíme, či súbor s kontrolnými súčtami je kryptograficky podpísaný podpisovými kľúčmi. Nasledujúci príkaz vytlačí kontroly podpisov pre každý verejný kľúč, ktorý podpísal kontrolný súčet.
gpg --verify SHA256SUMS.asc
Očakávaný výstup:
gpg: assuming signed data in 'SHA256SUMS'
gpg: Signature made Thu Oct 3 16:25:02 2024 UTC
gpg: using RSA key 101598DC823C1B5F9A6624ABA5E0907A0380E6C3
gpg: Good signature from "CoinForensics (SigningKey) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 1015 98DC 823C 1B5F 9A66 24AB A5E0 907A 0380 E6C3
gpg: Signature made Thu Oct 3 21:36:16 2024 UTC
Kontrola časovej pečiatky (Timestamp)
Binárny súbor kontrolného súčtu je tiež označený časovou pečiatkou s bitcoinovým blockchainom pomocou protokolu OpenTimeStamps, čo dokazuje, že súbor existoval pred určitým časom. Overíme si túto časovú pečiatku. Na svojom lokálnom PC si stiahneme súbor kontrolných súčtov a jeho dôkaz o časovej pečiatke:
Stiahnuť súbor kontrolného súčtu
Stiahnuť súbor kontrolného súčtu
Vo svojom prehliadači si otvoríme OpenTimeStamps webovú stránku.
V sekcii „Stamp and verify“ prenesieme stiahnutý súbor SHA256SUMS.ots do vyznačeného čiarkovaného pola.
Do ďalšieho pola nahráme súbor SHA256SUMS.
Ak sú časové pečiatky overené, mala by sa nám zobraziť nasledujúca správa:
Ak sme s kontrolým súčtom, podpisom a časovou pečiatkou spokojní, môžeme extrahovať binárny súbor Bitcoin Core.
tar -xvf bitcoin-$VERSION-x86_64-linux-gnu.tar.gz
bitcoin-28.0/
bitcoin-28.0/README.md
bitcoin-28.0/bin/
bitcoin-28.0/bin/bitcoin-cli
bitcoin-28.0/bin/bitcoin-qt
bitcoin-28.0/bin/bitcoin-tx
bitcoin-28.0/bin/bitcoin-util
bitcoin-28.0/bin/bitcoin-wallet
bitcoin-28.0/bin/bitcoind
bitcoin-28.0/bin/test_bitcoin
bitcoin-28.0/bitcoin.conf
bitcoin-28.0/share/
bitcoin-28.0/share/man/
bitcoin-28.0/share/man/man1/
bitcoin-28.0/share/man/man1/bitcoin-cli.1
bitcoin-28.0/share/man/man1/bitcoin-qt.1
bitcoin-28.0/share/man/man1/bitcoin-tx.1
bitcoin-28.0/share/man/man1/bitcoin-util.1
bitcoin-28.0/share/man/man1/bitcoin-wallet.1
bitcoin-28.0/share/man/man1/bitcoind.1
bitcoin-28.0/share/rpcauth/
bitcoin-28.0/share/rpcauth/README.md
bitcoin-28.0/share/rpcauth/rpcauth.py
Inštalácia binárnych súborov
Nainštalujeme za pomoci nasledovného príkazu:
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-$VERSION/bin/bitcoin-cli bitcoin-$VERSION/bin/bitcoind
Skontrolujeme nainštalovanú verziu.
bitcoind --version
Bitcoin Core version v28.0.0
Copyright (C) 2009-2024 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org/> for further information about the software.
The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <https://opensource.org/licenses/MIT>
Vytvorenie používateľa a skupiny bitcoin
Aplikácia Bitcoin Core bude bežať na pozadí ako daemon a z bezpečnostných dôvodov bude používať samostatného užívateľa bitcoin. Tento používateľ nemá práva užívateľa admin a nemôže zasahovať do konfigurácie systému.
Vytvoríme užívateľa a skupinu bitcoin.
sudo adduser --gecos "" --disabled-password bitcoin
Priradíme užívateľa admin do skupiny bitcoin.
sudo adduser admin bitcoin
Povolíme užívateľovi bitcoin, aby mohol používať riadiaci port a nakonfigurujeme Tor tým, že ho pridáme do skupiny debian-tor.
sudo adduser bitcoin debian-tor
Vytvoríme priečinok data
Bitcoin Core štandardne používa priečinok .bitcoin v užívateľskom umiestnení home. Namiesto vytvorenia tohto priečnku vytvoríme priečniok data vo všeobecnom umiestnení /data a prelinkujeme ho.
Vytvoríme Bitcoin data priečinok.
mkdir /data/bitcoin
Priradíme mu majiteľa, ktorý bude používateľ bitcoin.
sudo chown bitcoin:bitcoin /data/bitcoin
Prihlásime sa ako užívateľ bitcoin.
sudo su - bitcoin
Vytvoríme symbolický link .bitcoin, ktorý bude nasmerovaný do tohto priečinku.
ln -s /data/bitcoin /home/bitcoin/.bitcoin
Skontrolujeme, či symbolický link bol správne vytvorený.
ls -la .bitcoin
Očakávaný výstup:
lrwxrwxrwx 1 bitcoin bitcoin 13 Oct 10 21:22 .bitcoin -> /data/bitcoin
Vygenerujeme prístupové poverenia
Na to, aby sa mohli iné programy dopytovať na Bitcoin Core, potrebujú správne prístupové údaje. Aby sa predišlo ukladaniu používateľského mena a hesla v konfiguračnom súbore v obyčajnom texte, heslo je zahashované. To umožňuje Bitcoin Core akceptovať heslo, hashovať ho a porovnávať s uloženým hashom, pričom nie je možné získať pôvodné heslo.
Ďalšou možnosťou, ako získať prístupové údaje, je prostredníctvom súboru .cookie v adresári bitcoinových údajov. Ten sa vytvára automaticky a môžu si ho prečítať všetci používatelia, ktorí sú členmi skupiny „bitcoin“. Bitcoin Core poskytuje jednoduchý program Python na generovanie konfiguračného riadku pre konfiguračný súbor.
cd .bitcoin
Stiahneme program RPCAuth.
wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py
Spustíme nižšie uvedený skript s tým, že zadáme presne meno nášho servera minibolt a naše heslo.
python3 rpcauth.py minibolt YourPasswordB
Očakávaný výstup:
String to be appended to bitcoin.conf:
rpcauth=minibolt:....
Skopírujeme si celý riadok rpcauth od začiatku až po koniec a niekde si ho dočasne a bezpečne nakopírujeme.
Konfigurácia
Teraz je potrebné vytvoriť si konfiguračný súbor bitcoind a taktiež si nastavíme aj správne prístupové oprávnenia.
Nesmieme zabudnúť nakopírovať naše vygenerované rpcauth pod # Connections, pôvodný rpcauth text vymažeme a nahradíme ho našim.
V prípade, že máme dostupnú vyššiu RAM tak môžeme v konfiguračnom súbore upraviť aj riadok dbcache a to nasledovným spôsobom:
Odporúčané je používať 1/2 našej RAM, napr. ak máme 4GB RAM → dbcache=2048 / 8 GB RAM → dbcache=4096 / 16 GB RAM = dbcache=8192 atď.
nano /home/bitcoin/.bitcoin/bitcoin.conf
# MiniBolt: bitcoind configuration
# /home/bitcoin/.bitcoin/bitcoin.conf
# Bitcoin daemon
server=1
txindex=1
# Append comment to the user agent string
uacomment=MiniBolt node
# Disable integrated wallet
disablewallet=1
# Additional logs
debug=tor
debug=i2p
# Assign to the cookie file read permission to the Bitcoin group users
startupnotify=chmod g+r /home/bitcoin/.bitcoin/.cookie
# Disable debug.log
nodebuglogfile=1
# Avoid assuming that a block and its ancestors are valid,
# and potentially skipping their script verification.
# We will set it to 0, to verify all.
assumevalid=0
# Enable all compact filters
blockfilterindex=1
# Serve compact block filters to peers per BIP 157
peerblockfilters=1
# Maintain coinstats index used by the gettxoutsetinfo RPC
coinstatsindex=1
# Network
listen=1
## P2P bind
bind=127.0.0.1
## Proxify clearnet outbound connections using Tor SOCKS5 proxy
proxy=127.0.0.1:9050
## I2P SAM proxy to reach I2P peers and accept I2P connections
i2psam=127.0.0.1:7656
# Connections
rpcauth=<replace with your own auth line generated in the previous step>
# Initial block download optimizations (set dbcache size in megabytes
# (4 to 16384, default: 300) according to the available RAM of your device,
# recommended: dbcache=1/2 x RAM available e.g: 4GB RAM -> dbcache=2048)
# Remember to comment after IBD (Initial Block Download)!
dbcache=2048
blocksonly=1
Nastavíme povolenie iba pre používateľa bitcoin a členov skupiny bitcoin, ktorí ho môžu čítať (potrebné, aby LND prečítalo riadok „rpcauth“).
chmod 640 /home/bitcoin/.bitcoin/bitcoin.conf
Odhlásime sa z užívateľa bitcoin naspäť do užívateľa admin.
exit
Chceme, aby systém spúšťal bitcoin daemon automaticky na pozadí. Používame systemd, daemon, ktorý riadi proces spúšťania pomocou konfiguračných súborov.
sudo nano /etc/systemd/system/bitcoind.service
# MiniBolt: systemd unit for bitcoind
# /etc/systemd/system/bitcoind.service
[Unit]
Description=Bitcoin Core Daemon
Requires=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
-conf=/home/bitcoin/.bitcoin/bitcoin.conf \
-datadir=/home/bitcoin/.bitcoin
# Process management
####################
Type=exec
NotifyAccess=all
PIDFile=/run/bitcoind/bitcoind.pid
Restart=on-failure
TimeoutStartSec=infinity
TimeoutStopSec=600
# Directory creation and permissions
####################################
User=bitcoin
Group=bitcoin
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
UMask=0027
# Hardening measures
####################
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
SystemCallArchitectures=native
[Install]
WantedBy=multi-user.target
Povolíme automatické spúšťanie (voliteľné).
sudo systemctl enable bitcoind
Pripravíme si termínal na monitorovanie bitcoind žurnálu (journal) systemd a skontrolujeme výstup. Monitorovanie môžeme kedykoľvek ukončiť pomocou CTRL + C.
journalctl -f -u bitcoind
Aby sme mohli sledovať, čo náš uzol robí za pomoci aplikácie Bitcoin Core, otvoríme si nový terminál cez CTRL + ALT + T. Opäť sa prihlásime do nášho uzla ako admin a spustíme bitcoind.
sudo systemctl start bitcoind
Očakývaný výstup:
Oct 10 21:51:06 minibolthdd bitcoind[15413]: 2024-10-10T21:51:06Z Opening LevelDB in /home/bitcoin/.bitcoin/blocks/index
Oct 10 21:51:06 minibolthdd bitcoind[15413]: 2024-10-10T21:51:06Z Opened LevelDB successfully
Oct 10 21:51:06 minibolthdd bitcoind[15413]: 2024-10-10T21:51:06Z Using obfuscation key for /home/bitcoin/.bitcoin/blocks/index: 0000000000000000
Oct 10 21:51:06 minibolthdd bitcoind[15413]: 2024-10-10T21:51:06Z LoadBlockIndexDB: last block file = 0
Oct 10 21:51:06 minibolthdd bitcoind[15413]: 2024-10-10T21:51:06Z LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=0, size=0, heights=0...0, time=1970-01-01...1970-01-01)
...
Prepojíme aj adresár Bitcoin data z domovského adresára užívateľa admin. To umožňuje užívateľovi admin pracovať s bitcoind priamo, napríklad pomocou príkazu bitcoin-cli.
ln -s /data/bitcoin /home/admin/.bitcoin
Symbolické prepojenie sa stáva aktívnym, až keď sa opätovne prihlásime, takže sa odhlásime a znova prihlásime.
exit
Overíme, či sa symbolické prepojenie správne vytvorilo.
ln -s /data/bitcoin /home/admin/.bitcoin
Očakávaný výstup:
lrwxrwxrwx 1 admin admin 13 Nov 7 10:41 .bitcoin -> /data/bitcoin
V prípade, že nám vyhodilo chybu alebo máme iba „.bitcoin“ namiesto „.bitcoin -> /data/bitcoin“ je potrebné to opraviť:
Oprava „.bitcoin -> /data/bitcoin„
S užívateľom admin vymažeme symbolické prepojenie.
sudo rm -r .bitcoin
Vytvoríme znova symbolické prepojenie.
ln -s /data/bitcoin /home/admin/.bitcoin
Skontrolujeme, či bolo prepojenie vytvorené správne.
ls -la .bitcoin
bitcoin-cli -netinfo
Očakývaný výstup:
lrwxrwxrwx 1 admin admin 13 Oct 10 21:58 .bitcoin -> /data/bitcoin
V tomto momente nám Bitcoin Core beží a synchronizuje blockchain.
Medzičasom, kým prebieha synchronizácia, vieme sledovať jej stav za pomoci príkazu bitcoin-cli -getinfo.
bitcoin-cli -getinfo
Alebo vieme sledovať bitcoin žurnál.
journalctl -fu bitcoind
Ak sa vám podarilo dostať sa až sem, GRATULUJEM! Nainštalovali ste si svoj vlastný bitcoinový uzol a tým prispievate k decentralizácii siete a zároveň ste sa naučili niečo nové o Bitcoine aj Linuxe.
NEDOKONČEnÉ
BLOCKCHAIN EXPLORER: BTC RPC EXPLORER
Blockchain explorer je webová aplikácia, ktorá beží na našom uzle, ktorá nám poskytuje detailné informácie o našom uzle a o blockchaine v peknom grafickom prostredí.
Na inštaláciu BTC RPC Explorer budeme potrebovať Bitcoin Core a Node + NPM.
Inštalácia Node
S užívateľom admin aktualizujeme najprv všetky balíky nášho operačného systému, napíšeme „y“ a stlačíme ENTER, tam kde si to vyžaduje.
sudo apt update && sudo apt full-upgrade
Použíjeme binárne súbory NodeSource Node.js. Stiahneme a naimportujeme NodeSource GPG kľúč.
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
Zvolíme si prostredie verzie.
VERSION=20
Vytvoríme deb úložisko.
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Aktualizujeme a nainštalujeme Node.js + NPM za pomoci apt package manažéra. Napíšeme „y“ a stlačíme ENTER.
sudo apt update && sudo apt install nodejs
Skontrolujeme správnosť inštalácie nodejs.
node -v
Očakávaný výstup:
v20.18.0
Skontrolujeme správnosť inštalácie npm.
npm -v
Očakávaný výstup:
10.8.2
Aktualizujeme operačný systém.
sudo apt update && sudo apt full-upgrade
Nainštalujeme nasledovný balíček, v prípade, že od nás vypýta potvrdenie, napíšeme „y“ a ENTER.
sudo apt install build-essential
Reverse proxy & Firewall
V sekcii Bezpečnosť sme nastavili nginx ako reverse proxy, teraz pridáme do konfigurácie BTC RPC Explorer.
Povolíme aby nginx reverse proxy na smerovanie externého šifrovaného prenosu HTTPS interne do BTC RPC Explorer. Chyba error_page 497 dáva pokyn prehliadačom, ktoré odosielajú požiadavky HTTP, aby ich znova odoslali cez HTTPS.
S užívateľom admin vytvoríme konfiguráciu pre reverse proxy.
sudo nano /etc/nginx/sites-available/btcrpcexplorer-reverse-proxy.conf
Nasledovný text nakopírujeme do konfigurácie. Uložíme – CTRL + S a súbor zavrieme – CTRL + X.
server {
listen 4000 ssl;
error_page 497 =301 https://$host:$server_port$request_uri;
location / {
proxy_pass http://127.0.0.1:3002;
}
}
Vytvoríme symbolické prepojenie, ktorý smeruje na adresár sites-enabled.
sudo ln -s /etc/nginx/sites-available/btcrpcexplorer-reverse-proxy.conf /etc/nginx/sites-enabled/
Otestujeme konfiguráciu:
sudo nginx -t
Očakývaný výstup:
ginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Aby sa aplikovali zmeny tak znovu načítame nginx.
sudo systemctl reload nginx
Nakonfigurujeme bránu firewall aby povoľovala prichádzajúce požiadavky HTTPS.
sudo ufw allow 4000/tcp comment 'allow BTC RPC Explorer SSL from anywhere'
Inštalácia
Vytvoríme užívateľa btcrpcexplorer user.
Pre lepšiu bezpečnosť vytvoríme nového užívateľa btcrpcexplorer, ktorý beží prieskumníka blokov. Použitie špecializovaného užívateľa obmedzuje potenciálne škody v prípade, že kód obsahuje bezpečnostné slabiny. Útočník toho nemôže veľa urobiť v rámci nastavení povolení tohto užívateľa. BTC RPC Explorer nainštalujeme do domovského adresára, pretože nepotrebuje príliš veľa miesta.
sudo adduser --disabled-password --gecos "" btcrpcexplorer
Pridajte užívateľa btcrpcexplorer do skupiny bitcoin, čo umožní užívateľovi čítať súbor bitcoind .cookie.
sudo adduser btcrpcexplorer bitcoin
Prihlásime sa ako užívateľ btcrpcexplorer.
sudo su - btcrpcexplorer
Dočasne nastavíme verziu prostredia pre inštaláciu.
VERSION=3.4.0
Importujeme GPG kľúč vývojára.
curl https://github.com/janoside.gpg | gpg --import
Stiahnieme si zdrojový kód priamo z GitHubu a prejdeme do priečinka btc-rpc-explorer.
git clone --branch v$VERSION https://github.com/janoside/btc-rpc-explorer.git && cd btc-rpc-explorer
Overíme vydanie.
git verify-commit v$VERSION
Očakávaný výstup:
gpg: Signature made Wed 14 Jun 2023 01:18:11 PM UTC
gpg: using EDDSA key 4D841E6E6B1B68EBFAB4A9E670C0B166321C0AF8
gpg: Good signature from "Dan Janosik <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 4D84 1E6E 6B1B 68EB FAB4 A9E6 70C0 B166 321C 0AF8
Nainštalujeme dependancy pomocou npm.
npm install
Vo výstupe by sme mali dostať veľa rôznych hlášok a súčasťou nich by malo byť aj nasledovné:
added 645 packages, and audited 646 packages in 43s
101 packages are looking for funding
run `npm fund` for details
Skontrolujeme správnu inštaláciu.
head -n 3 /home/btcrpcexplorer/btc-rpc-explorer/package.json | grep version
Očakývaný výstup:
"version": "3.4.0",
Konfigurácia
Skopírujeme si template pre konfiguráciu.
cp .env-sample .env
Upravíme súbor .env.
nano .env
Pre aktivovanie nastavenie odstránime znak # na začiatku vety alebo upravujeme priamo
Pre nastavenie aby sa BTC RPC Explorer pripojil priamo do lokálneho Bitcoin Core odkomentujeme a nahradíme nasledovný riadok:
BTCEXP_BITCOIND_COOKIE=/data/bitcoin/.cookie
Na získanie zostatkov adries je potrebný server Electrum alebo externá služba. Náš lokálny server Electrum môže poskytnúť zoznamy transakcií s adresami, zostatkami a pod.
BTCEXP_ADDRESS_API=electrum
BTCEXP_ELECTRUM_SERVERS=tcp://127.0.0.1:50001
Odkomentujeme nasledovný riadok.
BTCEXP_SLOW_DEVICE_MODE=false
Uložíme – CTRL + S a súbor zavrieme – CTRL + X.
Odhlásime sa z užívateľa btcrpcexplorer a prejdeme do užívateľa admin.
exit
Zabezpečíme, aby sa náš blockchain explorer spúšťal ako služba na PC, aby bol vždy spustený.
Ako užívateľ admin vytvoríme súbor pre službu.
sudo nano /etc/systemd/system/btcrpcexplorer.service
Nakopírujeme nasledovné nastavenie, uložíme – CTRL + S a súbor zavrieme – CTRL + X.
# MiniBolt: systemd unit for BTC RPC Explorer
# /etc/systemd/system/btcrpcexplorer.service
[Unit]
Description=BTC RPC Explorer
Requires=bitcoind.service fulcrum.service
After=bitcoind.service fulcrum.service
[Service]
WorkingDirectory=/home/btcrpcexplorer/btc-rpc-explorer
ExecStart=/usr/bin/npm start
User=btcrpcexplorer
Group=btcrpcexplorer
# Hardening Measures
####################
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
[Install]
WantedBy=multi-user.target
Povolíme automatické spustenie (voliteľné).
sudo systemctl enable btcrpcexplorer
Pripravíme si monitorovanie btcrpcexplorer za pomoci žurnálu a skontrolujte výstup. Monitorovanie môžete kedykoľvek ukončiť pomocou Ctrl + C.
journalctl -fu btcrpcexplorer
Aby sme videli čo sa v žurnáli deje spustíme si nový Terminál kde sa prihlásime do nášho uzla za pomoci ssh a s užívateľom admin spustíme btcrpcexplorer.
sudo systemctl start btcrpcexplorer