Bitcoin v klietke?

Tak sa stalo, že som profesionálny administrátor počítačových systémov a sietí (skratka: sysadmin) a v priebehu viac ako 10 rokov profesionálnej činnosti som pracoval s najrôznejšími systémami, vrátane tých, ktoré vyžadujú [po|za]výšené opatrenia bezpečnosti. A navyše, nejaký čas dozadu som našiel pre seba zaujímavé bitcoin, a nielenže som ho používal, ale aj som spustil niekoľko mikro-služieb, aby som sa naučil samostatne pracovať so sieťou bitcoinu (je to p2p, ako inak) z pohľadu vývojára (som samozrejme iba taký amatér, prechádzal som okolo). Ale nejde mi o vývoj, ale o bezpečné a efektívne prostredie pre aplikácie. devFinančné technológie (

fintech) idú ruka v ruke s informačnou bezpečnosťou (infosec) a prvé bez druhého môže fungovať, ale len na krátko. Preto sa chcem podeliť so svojimi skúsenosťami a súborom nástrojov, ktoré používam, ktoré zahŕňajú aj, pričom súčasne, a môžu byť použité aj v širšom alebo úplne inom účele. V tomto článku nebudem rozprávať len o bitcoine, ale skôr o modeli infraštruktúry pre vývoj a prevádzku finančných (a nielen) služieb — jedným slovom, tých služieb, kde „B“ má význam. To platí ako pre bitcoinovú burzu, tak pre typek typického korporátneho „zoo“ služieb malej firmy, ktorá nemá s bitcoinom nič spoločné. ) idú ruka v ruke s informačnou bezpečnosťou (, tak aj ) a prvé bez druhého môže fungovať, ale len na krátko. Preto sa chcem podeliť so svojimi skúsenosťami a súborom nástrojov, ktoré používam, ktoré zahŕňajú ajChcem zdôrazniť, že som zastáncom zásad

„keep it stupid simple“ „less is more“ a , preto článok, ako aj to, čo je v ňom popísané, bude mať vlastnosti, o ktorých hovorí tieto zásady.Predstavovaný scenár:

Imaginárny scenár Pozrime sa na príklad bitcoinového zmenárne. Rozhodli sme sa spustiť zmenu rubľov, dolárov, eur na bitcoiny a späť, a už máme fungujúce riešenie, ale pre iné digitálne meny ako Qiwi a Webmoney, t. j. máme vyriešené všetky právne otázky, existuje pripravená aplikácia, ktorá slúži ako platobná brána pre ruble, doláre a eurá a iné platobné systémy. Je prepojená s našimi bankovými účtami a má nejaké API pre naše koncové aplikácie. Takisto máme webovú aplikáciu, ktorá slúži ako zmenáreň pre používateľov, niečo ako typický účet Qiwi alebo Webmoney - založte si účet, pridajte kartu a podobne. Komunikuje s našou bránou, nech už cez REST API v lokálnej sieti. A tak sme sa rozhodli pripojiť bitcoiny a zároveň upgradovať infraštruktúru, pretože pôvodne sme to celé rýchlo nastavili na VirtualBoxoch v kancelárii pod stolom… web sa stal populárnym a začali sme mať obavy o dostupnosť a výkon.

Takže začneme s ním najdôležitejším - výberom servera. Keďže podnikanie v našom príklade je malé a dôverujeme poskytovateľovi hostingu (OVH), vyberieme ekonomickú variantu kde nie je možné nainštalovať systém z originálneho obrazu .iso, ale nič sa nedeje, oddelenie IT bezpečnosti určite vykoná analýzu nainštalovaného obrazu. A keď sa rozrastieme, prenajmeme si uzamknutú skriňu a obmedzený fyzický prístup, alebo možno postavíme vlastné dátové centrum. V každom prípade si treba pamätať, že pri prenájme hardvéru a inštalácii hotových obrazov existuje šanca, že vo vašej sústave bude „trójsky kôň od poskytovateľa hostingu“, ktorý väčšinou nie je určený na sledovanie, ale na ponúkanie pohodlnejších nástrojov na správu servera.

Inštalácia servera

Tu je všetko jednoduché. Vyberáme hardvér, ktorý vyhovuje našim potrebám. Potom vyberieme obraz FreeBSD. Alebo sa pripojíme (v prípade iného poskytovateľa a vlastného hardvéru) cez IPMI alebo s monitorom a vložíme do bootovania .iso obrazu FreeBSD. Na orchestrálne inštalácie používam Ansible a mfsbsd. Jediná vec, v našom prípade s Kimsufi, sme vybrali vlastnú inštaláciu aby mali dva disky v zrkadle „otvorené“ len pre systémovú a /home partíciu, zvyšok disku bude zašifrované, ale o tom neskôr.

Bitcoin v klietke?

Inštalácia systému prebieha štandardným spôsobom, na to sa nezastavím, len si všimnite, že pred začatím prevádzky je dobré zamerať sa na hardenovanie možnosti, ktoré ponúka bsdinstaller na konci inštalácie (ak systém inštalujete sami):

Bitcoin v klietke?

Existuje dobrý materiál na túto tému, v skratke ho tu zopakujem.

Aktivovať vyššie uvedené parametre je možné aj na už nainštalovanom systéme. Na to je potrebné upraviť súbor bootloaderu a povoliť parametre jadra. *ee — to je editor v BSD

# ee /etc/rc.conf

...
#sec hard
clear_tmp_enable="YES"
syslogd_flags="-ss"
sendmail_enable="NONE"

# ee /etc/sysctl.conf

...
#sec hard
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=$(jot -r 1 9999)
security.bsd.stack_guard_page=1

Rovnako by ste sa mali uistiť, že máte nainštalovanú najnovšiu verziu systému a vykonať všetky aktualizácie a upgrady.V našom prípade, napríklad, je potrebné upgrade na najnovšiu verziu, pretože predinštalované obrazy zaostávajú o pol roka až rok. A tam meníme SSH port na niečo iné ako predvolené, pridávame autentifikáciu pomocou kľúčov a zakazujeme heslom.

Potom nastavíme aide, monitorovanie stavu konfiguračných súborov systému. Podrobnejšie si môžete prečítať tu.

pkg install aide

a upravíme náš crontab

crontab -e

06 01 * * 0-6 /root/chkaide.sh

#! /bin/sh
#chkaide.sh
MYDATE=`date +%Y-%m-%d`
MYFILENAME="Aide-"$MYDATE.txt
/bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME
/usr/local/bin/aide --check > /tmp/myAide.txt
/bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME
/bin/echo "**************************************" >> /tmp/$MYFILENAME
/usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME
/bin/echo "****************DONE******************" >> /tmp/$MYFILENAME

Aktivujte systémové auditovanie

sysrc auditd_enable=YES

# service auditd start

Ako to administratívne zvládať, je výborne popísané v príručke.

Teraz sa reštartujeme a začíname so softvérom na serveri. Každý server predstavuje hypervízor pre kontajnery alebo plnohodnotné virtuálne stroje. Preto je dôležité, aby procesor podporoval VT-x a EPT, ak plánujeme používať plnú virtualizáciu.

Ako správcu kontajnerov a virtuálnych strojov používam cbsd od olevole, prajem mu veľa zdravia a požehnania za túto skvelú utilitu!

Kontajnery? Zase docker, čo?

Ale nie. FreeBSD Jails — sú vynikajúci nástroj na kontajnerizáciu, a ten spomínaný cbsd na orchestráciu týchto kontajnerov, ktorého meno je — klietky.

Klietka je mimoriadne efektívne riešenie na budovanie infraštruktúry na rôzne účely, kde je nakoniec potrebná úplná izolácia jednotlivých služieb alebo procesov. V podstate ide o klon hostiteľského systému, ktorý však nevyžaduje úplnú virtualizáciu „hardvéru“. A vďaka tomu sa prostriedky nezameriavajú na „hostiteľský OS“, ale iba na vykonávanú prácu. Keď sa klietky používajú na interné účely, je to veľmi praktické riešenie pre optimálne využitie zdrojov – množstvo klietok na jednom fyzickom serveri môže každá samostatne využívať celý výkon servera podľa potreby. Keďže rôzne podslužby zvyčajne potrebujú dodatočné zdroje v rôznych časoch, je možné z jedného servera vytlačiť maximálny výkon, ak sa klietky správne naplánujú a rozložia medzi servermi. Ak je to potrebné, klietkam sa takisto môžu nastaviť obmedzenia týkajúce sa využívaných zdrojov.

Bitcoin v klietke?

A čo sa deje s plnou virtualizáciou?

Podľa mojich informácií, cbsd podporuje prácu bhyve a hypervízory XEN. Druhý som nikdy nepoužíval, ale ten prvý je relatívne mladý hypervízor od FreeBSD. Pozríme sa na príklad využitia bhyve v nasledujúcom príklade.

Inštalácia a konfigurácia hostiteľského prostredia

Používame FS ZFS. Je to mimoriadne silný nástroj na správu priestoru na serveri. Vďaka ZFS môžeme priamo z diskov vytvárať pole rôznych konfigurácií, dynamicky „za chodu“ rozširovať priestor, meniť poškodené disky, spravovať snímky a mnoho, mnoho ďalšieho, čo by sa dalo opísať v celej sérii článkov. Vráťme sa k našemu serveru a jeho diskom. Na začiatku inštalácie sme na diskoch nechali voľný priestor pre šifrované oddiely. Prečo tak? Je to kvôli tomu, aby sa systém automaticky spúšťal a počúval cez SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

pridáme oddiel disku na zostávajúce miesto

geli init /dev/ada0p4

zadáme naše šifrovacie heslo

geli attach /dev/ada0p4

opäť zadáme heslo a získame zariadenie /dev/ada0p4.eli — to je náš zašifrovaný priestor. Potom opakujeme to isté pre /dev/ada1 a ostatné disky v poli. A vytvoríme nový ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — no, máme minimálny bojový arzenál pripravený. Zrkadlové pole diskov na prípad, že by jeden z trojice zlyhal.

Vytvárame dataset na novom „pool-e“

zfs create vms/jails

pkg install cbsd — spustili sme príkaz a inštalujeme správu pre naše klietky.

Akonáhle cbsd je nainštalovaný, treba ho inicializovať:

# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv

a odpovedáme na množstvo otázok, väčšinou odpoveďami podľa predvolených nastavení.

*Ak používate šifrovanie, je dôležité, aby démon cbsdd nenastartoval automaticky, kým manuálne alebo automaticky (v našom príklade to robí zabbix) neodšifrujete disky.

**Takisto nepoužívam NAT od cbsd, ale nastavil som si ho sám v pf.

# sysrc pf_enable=YES

# ee /etc/pf.conf

IF_PUBLIC="em0"
IP_PUBLIC="1.23.34.56"
JAIL_IP_POOL="192.168.0.0/24"

#WHITE_CL="{ 127.0.0.1 }"

icmp_types="echoreq"

set limit { states 20000, frags 20000, src-nodes 20000 }
set skip on lo0
scrub in all

#NAT for jails
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

## Bitcoin network port forward
IP_JAIL="192.168.0.1"
PORT_JAIL="{8333}"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

# service pf start

# pfctl -f /etc/pf.conf

Nastavenie politík firewallu je tiež samostatná téma, preto sa nebudem hlbšie zaoberať nastavením politiky BLOCK ALL a nastaveniami bielych zoznamov, to sa dá urobiť prečítaním oficiálnu dokumentáciu alebo akéhokoľvek z množstva článkov dostupných na googli.

Takže… máme nainštalovaný cbsd, je čas vytvoriť našu prvú pracovnú „koničku“ — démon Bitcoinu v klietke!

cbsd jconstruct-tui

Bitcoin v klietke?

Tu vidíme dialóg pre vytváranie klietky. Po nastavení všetkých hodnôt vytvoríme!

Pri vytváraní prvej klietky je potrebné vybrať, čo použiť ako základ pre klietky. Ja si vyberám distribúciu z repozitára FreeBSD príkazom repo. Tento výber prebieha iba pri vytváraní prvej klietky konkrétnej verzie (môžete hostiť klietky akýchkoľvek verzií, ktoré sú staršie ako verzia hostiteľa).

Akonáhle je všetko nainštalované — spúšťame klietku!

# cbsd jstart bitcoind

Ale potrebujeme do klietky nainštalovať softvér.

# jls

   JID  IP Adresa      Názov hostiteľa                Cesta
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind aby sme sa dostali do konzoly klietky

a už v klietke inštalujeme softvér s jeho závislosťami (náš hostiteľský systém zostáva čistý)

bitcoind:@[15:25] # pkg install bitcoin-daemon bitcoin-utils

bitcoind:@[15:30] # sysrc bitcoind_enable=YES

bitcoind:@[15:30] # service bitcoind start

Bitcoin je v klietke, ale potrebujeme anonymitu, pretože chceme sa pripájať k niektorým klietkam cez sieť TOR. A všeobecne plánujeme väčšinu klietok s podozrivým softvérom prevádzkovať iba cez proxy. Vďaka pf Môžeme vypnúť NAT pre určitý rozsah IP adries v lokálnej sieti a povoliť NAT iba pre náš TOR uzol. Takže aj keď sa do klietky dostane škodlivý program, pravdepodobne nebude mať prístup k vonkajšiemu svetu, a ak aj bude, neodhalí IP našich serverov. Preto vytvárame ďalšiu klietku pre "presmerovanie" služieb ako "onion" službu a ako proxy pre prístup na internet pre samostatné klietky.

# cbsd jsconstruct-tui

# cbsd jstart tor

# jexec tor

tor:/@[15:38] # pkg install tor

tor:/@[15:38] # sysrc tor_enable=YES

tor:/@[15:38] # ee /usr/local/etc/tor/torrc

Nastavíme na počúvanie na lokálnej adrese (prístupné pre všetky klietky)

SOCKSPort 192.168.0.2:9050

Čo nám ešte chýba k úplnému šťastiu? Áno, potrebujeme službu pre náš web, možno aj niekoľko. Spustíme nginx, ktorý bude slúžiť ako reverse-proxy a postará sa o predĺženie certifikátov Let's Encrypt.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

nginx-rev:/@[15:47] # pkg install nginx py36-certbot

A tak sme umiestnili 150 MB závislostí do klietky. A hostiteľ je stále čistý.

Návrat k nastaveniu nginx neskôr; potrebujeme vytvoriť ďalšie dve klietky pre náš platobný bránu na nodejs a rust a webovú aplikáciu, ktorá z nejakého dôvodu beží na Apache a PHP, pričom posledná vyžaduje databázu MySQL.

# cbsd jsconstruct-tui

# cbsd jstart paygw

# jexec paygw

paygw:/@[15:55] # pkg install git node npm

paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

… a ešte 380 MB balíkov izolovane

ďalej nahráme našu aplikáciu prostredníctvom gitu a spustíme ju.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql

450 MB balíkov. v klietke.

Tu poskytujeme prístup developerom cez SSH priamo do klietky, oni to tam urobia sami:

webapp:/@[16:02] # ee /etc/ssh/sshd_config

Port 2267 — meníme port SSH klietky na akýkoľvek ľubovoľný

webapp:/@[16:02] # sysrc sshd_enable=YES

webapp:/@[16:02] # service sshd start

No, služba je spustená, zostáva pridať pravidlo do pf firewall

Pozrime sa, aké IP adresy máme u klietok a ako vyzerá naša „lokálka“

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind
     2  192.168.0.2     tor.space.com                 /zroot/jails/jails/tor
     3  192.168.0.3     nginx-rev.space.com           /zroot/jails/jails/nginx-rev
     4  192.168.0.4     paygw.space.com               /zroot/jails/jails/paygw
     5  192.168.0.5     webapp.my.domain              /zroot/jails/jails/webapp

a pridáme pravidlo

# ee /etc/pf.conf

## SSH for web-Devs
IP_JAIL="192.168.0.5"
PORT_JAIL="{ 2267 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

no a keď už sme tu, pridáme aj pravidlo pre reverse-proxy:

## web-ports for nginx-rev
IP_JAIL="192.168.0.3"
PORT_JAIL="{ 80, 443 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

# pfctl -f /etc/pf.conf

A teraz trochu o bitcoinoch

Čo máme — máme webovú aplikáciu, ktorá je externá a lokálne komunikuje s našou platobnou bránou. Teraz potrebujeme pripraviť pracovné prostredie na interakciu so samotnou bitcoinovou sieťou — uzol bitcoind toto je len démon, ktorý podporuje lokálnu kópiu akútneho blockchainu. Tento démon má RPC a funkciu peňaženky, avšak na vývoj aplikácií sú k dispozícii pohodlnejšie „obaly“. Na začiatok sme sa rozhodli nainštalovať electrum — to je CLI peňaženka. Táto peňaženka u nás bude používaná ako „studené úložisko“ pre naše bitcoiny — vlastne tie bitcoiny, ktoré musia byť uložené „mimo“ systému prístupného používateľom a vo všeobecnosti ďaleko od všetkých. Má tiež GUI, takže takúto peňaženku plánujeme použiť aj na
laptopoch. Zatiaľ budeme používať electrum s verejnými servermi, a neskôr vo vytvoríme v ďalšej klietke ElectrumX, aby sme boli úplne nezávislí.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

electrum: /@[8:45] # pkg install py36-electrum

ešte 700 MB softvéru máme v klietke

electrum: /@[8:53] # adduser

Meno používateľa: wallet
Celé meno: 
Uid (nechajte prázdne pre predvolené hodnoty): 
Login skupina [wallet]: 
Login skupina je wallet. Pozvať wallet do iných skupín? []: 
Login trieda [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Domovský adresár [ /home/wallet]: 
Práva domovského adresára (nechajte prázdne pre predvolené hodnoty): 
Použiť autentifikáciu na základe hesla? [áno]: nie
Zablokovať účet po vytvorení? [nie]: 
Meno používateľa: wallet
Heslo: 
Celé meno: 
Uid: 1001
Trieda: 
Skupiny: wallet 
Domov: /home/wallet
Režim domova: 
Shell: /bin/tcsh
Zamknuté: nie
OK? (áno/nie): áno
adduser: INFO: Úspešne pridané (wallet) do databázy používateľov.
Pridať ďalšieho používateľa? (áno/nie): nie
Zbohom!
electrum: /@[8:53] # su wallet

electrum: /@[8:53] # su wallet

wallet@electrum: / % electrum-3.6 create

{
    "msg": "Prosím, uchovajte svoj seed na bezpečnom mieste; ak ho stratíte, nebudete môcť obnoviť svoju peňaženku.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}

Teraz máme vytvorenú peňaženku.

wallet@electrum: / % electrum-3.6 listaddresses

[
    "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
    "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
    "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
    ...
    "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
    "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]

wallet@electrum: / % electrum-3.6 help

K našej on-chain peňaženke sa odteraz bude môcť pripojiť iba obmedzený okruh osôb. Aby sme neotvárali prístup zvonka do tejto klietky, pripojenia cez SSH budú prebiehať cez TOR (decentralizovaná verzia VPN). Spúšťame SSH v klietke, ale nedeštrukujte náš pf.conf na hostiteľovi.

electrum: /@[9:00] # sysrc sshd_enable=YES

electrum: /@[9:00] # service sshd start

Teraz odpojmeme klietku s peňaženkou od internetu. Pridelíme jej IP adresu z inej podsiete, ktorá nie je NAT-ovaná. Najprv zmeníme /etc/pf.conf na hostiteľovi

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" zmeníme na JAIL_IP_POOL="192.168.0.0/25", tak všetky adresy 192.168.0.126-255 nebudú mať priamy prístup na internet. Akoby softvérová „air-gap“ sieť. A NAT pravidlo ostáva také isté.

nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

Prehrávame pravidlá

# pfctl -f /etc/pf.conf

Teraz sa pustíme do našej bunky

# cbsd jconfig jname=electrum

Bitcoin v klietke?

Bitcoin v klietke?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Odstrániť starú IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Nastaviť novú IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hm, ale teraz prestane fungovať aj samotný systém. No môžeme špecifikovať systémový proxy. Ale je tu jedno ale, na TOR to je SOCKS5 proxy, a pre pohodlie by sme potrebovali aj HTTP proxy.

# cbsd jsconstruct-tui

# cbsd jstart polipo

# jexec polipo

polipo:/@[9:28] # pkg install polipo

polipo:/@[9:28] # ee /usr/local/etc/polipo/config

socksParentProxy = "192.168.0.2:9050"
socksProxyType = socks5

polipo:/@[9:42] # sysrc polipo_enable=YES

polipo:/@[9:43] # service polipo start

No a teraz máme v našom systéme dva proxy servery, oba sú pripojené cez TOR: socks5://192.168.0.2:9050 a http://192.168.0.6:8123

Teraz môžeme nastaviť prostredie našej peňaženky

# jexec electrum

electrum:/@[9:45] # su wallet

wallet@electrum:/ % ee ~/ .cshrc

#in the end of file proxy config
setenv http_proxy http://192.168.0.6:8123
setenv https_proxy http://192.168.0.6:8123

Tak, teraz bude shell fungovať pod proxy. Ak chceme inštalovať balíky, mali by sme pridať do /usr/local/etc/pkg.conf z pod roota bunky

pkg_env: {
               http_proxy: "http://my_proxy_ip:8123",
           }

A teraz prišiel čas pridať TOR skrytú službu ako adresu našej SSH služby v bunke peňaženky.

# jexec tor

tor:/@[9:59] # ee /usr/local/etc/tor/torrc

HiddenServiceDir /var/db/tor/electrum/
HiddenServicePort 22 192.168.0.200:22

tor:/@[10:01] # mkdir /var/db/tor/electrum

tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/electrum

tor:/@[10:01] # chmod 700 /var/db/tor/electrum

tor:/@[10:03] # service tor restart

tor:/@[10:04] # cat /var/db/tor/electrum/hostname

mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion

Tu je naša adresa na pripojenie. Poďme to skontrolovať z lokálneho počítača. Ale najprv musíme pridať náš SSH kľúč:

wallet@electrum:/ % mkdir ~/ .ssh

wallet@electrum:/ % ee ~/ .ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

A s klientským linuxovým počítačom

user@local ~$ nano ~/ .ssh/ config

#remote electrum wallet
Host remotebtc
        User wallet
        Port 22
        Hostname mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion
        ProxyCommand /bin/ncat --proxy localhost:9050 --proxy-type socks5 %h %p

Pripojíme sa (Pre správnu funkciu je potrebný lokálny TOR demon, ktorý počúva na 9050)

user@local ~$ ssh remotebtc

Autentickosť hostiteľa 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion ()' nemôže byť potvrdená.
ECDSA kľúčená odtlačok je SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Ste si istý, že chcete pokračovať v pripojení (yes/no/[fingerprint])? yes
Varovanie: Trvale pridané 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) do zoznamu známych hostiteľov.
FreeBSD 12.1-RELEASE-p1 GENERIC 
Aby ste ušetrili miesto na disku vo vašom domácom adresári, komprimujte súbory, ktoré zriedka používate príkazom "gzip filename".
        -- Dru 
wallet@electrum:~ % logout

Úspech!

Na prácu s okamžitými a mikro-transakciami potrebujeme tiež nodu Lightning Network, vlastne to bude náš hlavný pracovný nástroj s Bitcoinom. U *c-lightning, ktorý plánujeme použiť ako démona, má plugin Sparko, ktorý je plnohodnotným HTTP (REST) rozhraním a umožňuje pracovať ako s off-chain transakciami, tak aj s on-chain transakciami. c-lightning na fungovanie potrebujeme bitcoind nódu.

*existujú rôzne implementácie rôznych programovacích jazykov protokolu Lightning Network. Z tých, ktoré sme testovali, sa c-lightning (napísaný v C) javil ako najstabilnejší a najefektívnejší z hľadiska zdrojov.

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning: /@[10:23] # adduser

Používateľské meno: lightning
...

lightning: /@[10:24] # pkg install git

lightning: /@[10:23] # su lightning

cd ~ && git clone https://github.com/ElementsProject/lightning

lightning@lightning:~ % exit

lightning: /@[10:30] # cd /home/lightning/lightning/

lightning: /home/lightning/lightning@[10:31] # pkg install autoconf automake gettext git gmp gmake libtool python python3 sqlite3 libsodium py36-mako bash bitcoin-utils

lightning: /home/lightning/lightning@[10:34] # ./configure && gmake && gmake install

Kým sa všetko potrebné kompiluje a inštaluje, vytvoríme RPC používateľa pre lightningd v bitcoind

# jexec bitcoind

bitcoind: /@[10:36] # ee /usr/local/etc/bitcoin.conf

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
# umožniť iba c-lightning
rpcallowip=192.168.0.7/32

bitcoind: /@[10:39] # service bitcoind restart

Moje chaotické prechádzanie medzi bunkami sa ukazuje, že nie je také chaotické, ak si všimneme utilitu tmux, ktorá umožňuje v rámci jednej relácie vytvárať množstvo podrelácií terminálov. Analóg: screen

Bitcoin v klietke?

Takže, nechceme odhaľovať reálnu IP našej nód a chceme vykonávať všetky finančné operácie prostredníctvom TOR. Preto potrebujeme ešte jeden .onion.

# jexec tor

tor:/@[9:59] # ee /usr/local/etc/tor/torrc

HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735

tor: /@[10:01] # mkdir /var/db/tor/cln

tor: /@[10:01] # chown -R _tor:_tor /var/db/tor/cln

tor: /@[10:01] # chmod 700 /var/db/tor/cln

tor:/@[10:03] # service tor restart

tor: /@[10:04] # cat /var/db/tor/cln/hostname

en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion

teraz vytvoríme konfiguráciu pre c-lightning

lightning: /home/lightning/lightning@[10:31] # su lightning

lightning@lightning:~ % mkdir .lightning

lightning@lightning:~ % ee .lightning/config

alias=My-LN-Node
bind-addr=192.168.0.7:9735
rgb=ff0000
announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735
network=bitcoin
log-level=info
fee-base=0
fee-per-satoshi=1
proxy=192.168.0.2:9050
log-file=/home/lightning/.lightning/c-lightning.log
min-capacity-sat=200000

# sparko plugin
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko

sparko-host=192.168.0.7
sparko-port=9737

sparko-tls-path=sparko-tls

#sparko-login=mywalletusername:mywalletpassword

#sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
# pre vyššie uvedený príklad by sa mali inicializačné protokoly (zmiešané s protokolmi lightningd) vytlačiť niečo také ako

lightning@lightning:~ % mkdir .lightning/plugins

lightning@lightning:~ % cd .lightning/plugins/

lightning@lightning:~/.lightning/plugins:% fetch https://github.com/fiatjaf/sparko/releases/download/v0.2.1/sparko_full_freebsd_amd64

lightning@lightning:~/.lightning/plugins % mkdir ~/.lightning/sparko-tls

lightning@lightning:~/.lightning/sparko-tls % cd ~/.lightning/sparko-tls

lightning@lightning:~/.lightning/sparko-tls % openssl genrsa -out key.pem 2048

lightning@lightning:~/.lightning/sparko-tls % openssl req -new -x509 -sha256 -key key.pem -out cert.pem -days 3650

lightning@lightning:~/.lightning/plugins % chmod +x sparko_full_freebsd_amd64

lightning@lightning:~/.lightning/plugins % mv sparko_full_freebsd_amd64 sparko

lightning@lightning:~/.lightning/plugins % cd ~

je potrebné vytvoriť aj konfiguračný súbor pre bitcoin-cli, nástroj, ktorý komunikuje s bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

kontrolujeme

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

spúšťame lightningd

lightning@lightning:~ % lightningd --daemon

Sám lightningd môžete spravovať nástroj lightning-cli, napríklad:

lightning-cli newaddr získať adresu pre novú prichádzajúcu platbu

{
   "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
   "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all odoslať na adresu všetky peniaze z peňaženky (všetkých on-chain adries)

Takisto príkazy pre off-chain operácie lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay atď.

No a pre komunikáciu s aplikáciou máme REST Api

curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'

Zhrnieme to

# jls

   JID  IP Adresa      Názov servera                      Cesta
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind
     2  192.168.0.2     tor.space.com                 /zroot/jails/jails/tor
     3  192.168.0.3     nginx-rev.space.com           /zroot/jails/jails/nginx-rev
     4  192.168.0.4     paygw.space.com               /zroot/jails/jails/paygw
     5  192.168.0.5     webapp.my.domain              /zroot/jails/jails/webapp
     7  192.168.0.200   electrum.space.com            /zroot/jails/jails/electrum
     8  192.168.0.6     polipo.space.com              /zroot/jails/jails/polipo
     9  192.168.0.7     lightning.space.com           /zroot/jails/jails/cln

Bitcoin v klietke?

Máme súbor kontajnerov, každý s vlastnou úrovňou prístupu do lokálnej siete aj z nej.

# zfs list

NÁZOV                    POUŽITÉ  K DISPOZÍCII  ODKAZ  MOUNTPOINT
zroot                   279G  1.48T    88K  /zroot
zroot/ROOT             1.89G  1.48T    88K  none
zroot/ROOT/default     1.89G  17.6G  1.89G  /
zroot/home               88K  1.48T    88K  /home
zroot/jails             277G  1.48T   404M  /zroot/jails
zroot/jails/bitcoind    190G  1.48T   190G  /zroot/jails/jails-data/bitcoind-data
zroot/jails/cln         653M  1.48T   653M  /zroot/jails/jails-data/cln-data
zroot/jails/electrum    703M  1.48T   703M  /zroot/jails/jails-data/electrum-data
zroot/jails/nginx-rev   190M  1.48T   190M  /zroot/jails/jails-data/nginx-rev-data
zroot/jails/paygw      82.4G  1.48T  82.4G  /zroot/jails/jails-data/paygw-data
zroot/jails/polipo     57.6M  1.48T  57.6M  /zroot/jails/jails-data/polipo-data
zroot/jails/tor        81.5M  1.48T  81.5M  /zroot/jails/jails-data/tor-data
zroot/jails/webapp      360M  1.48T   360M  /zroot/jails/jails-data/webapp-data

Ako vidno, bitcoind zaberá všetkých 190 GB priestoru. A čo ak potrebujeme ďalší uzol na testy? Tu prichádza k slovu ZFS. S jeho pomocou cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Môžete vytvoriť snapshot a priradiť novú bunku k tomuto snapshotu. Nová bunka bude mať úplne svoj vlastný priestor, ale v súborovom systéme sa bude zohľadňovať len rozdiel medzi aktuálnym stavom a originálom (ušetříme minimálne 190 GB)

Každá bunka je svojím vlastným oddeleným datasetom ZFS, čo je mimoriadne pohodlné. ZFS tiež umožňuje vykonávať rôzne ďalšie cool veci, ako napríklad posielanie snapshotov cez SSH. O tom sa nebudeme rozpisovať, aj tak už je toho dosť.

Rovnako treba spomenúť potrebu vzdialeného monitorovania hostiteľa, na tento účel Zabbix.

B – bezpečnosť

Čo sa týka bezpečnosti, poďme vychádzať z kľúčových princípov v kontexte infraštruktúry:

Ochrana súkromia – Štandardné nástroje UNIX-podobných systémov zabezpečujú splnenie tohto princípu. Logicky delíme prístup k každému logicky oddelenému prvku systému – bunke. Prístup je realizovaný prostredníctvom štandardnej užívateľskej autentifikácie pomocou osobných kľúčov používateľov. Celá komunikácia medzi a do konečných buniek prebieha v šifrovanej forme. Vďaka šifrovaniu diskov sa môžeme bez obáv postarať o bezpečnosť dát počas výmeny disku alebo migrácie na iný server. Jediný kritický prístup je prístup k host-systému, pretože taký prístup zvyčajne zabezpečuje prístup k dátam vo vnútri kontajnerov.

Integrita – Splnenie tohto princípu prebieha na niekoľkých rôznych úrovniach. Po prvé, je dôležité poznamenať, že v prípade serverového hardvéru, ECC pamäť, ZFS už „z krabice“ dbá na integritu dát na úrovni bitov informácií. Okamžité snapshoty umožňujú vykonávať zálohovanie v akomkoľvek čase za behu. Praktické nástroje na export-import buniek zjednodušujú replikáciu buniek.

Dostupnosť – Tu už ide o voľbu. Závisí od úrovne vašej známosti a od skutočnosti, či máte odporcov. V našom prípade sme zabezpečili dostupnosť peňaženky výlučne z TOR siete. Ak je to potrebné, môže sa na firewalle zablokovať všetko a umožniť prístup na server výlučne cez tunely (TOR alebo VPN, to je iná otázka). Takto bude server odrezaný od vonkajšieho sveta, pokiaľ je to možné, a na jeho dostupnosť budeme môcť vplývať len my sami.

Nemožnosť odstúpenia — To závisí od ďalšieho používania a dodržiavania správnych politík používateľských práv, prístupu atď. Ale pri správnom prístupe sú všetky činnosti používateľov auditované a vďaka kryptografickým riešeniam je možné jednoznačne identifikovať, kto a kedy vykonal určité akcie.

Samozrejme, popísaná konfigurácia nie je absolútnym príkladom toho, ako by to malo byť vždy, je to skôr jeden z príkladov, ako to môže vyzerať pri zachovaní veľmi pružných možností škálovania a prispôsobenia.

A čo úplná virtualizácia?

O úplnej virtualizácii prostredníctvom cbsd mozem povedať prečítať tu. Len dodám, že pre prácu bhyve je potrebné zapnúť niektoré parametre jadra.

# cat /etc/rc.conf

...
kld_list="vmm if_tap if_bridge nmdm"
...

# cat /boot/loader.conf

...
vmm_load="YES"
...

Takže ak náhodou existuje potreba spustiť Docker, môžeme vziať nejaký Debian a dopredu!

Bitcoin v klietke?

A to je všetko

Asi to je všetko, čím som sa chcel podeliť. Ak sa vám článok páčil, môžete mi poslať nejaké bitcoiny — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Ak chcete vyskúšať bunky v akcii a máte trochu bitcoinov, môžete sa pozrieť na môj pet-project.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster