Bitcoin puuris?

Juhtus nii, et ametilt olen arvutisüsteemide ja võrkude administraator (lühidalt: süsteemiadministraator) ja mul oli veidi rohkem kui 10 aastat võimalus rääkida prof. mitmesuguste süsteemide tegevus, sealhulgas need, mis nõuavad [äärmuslikke] turvameetmeid. Juhtus ka nii, et mõni aeg tagasi tundus see mulle huvitav bitcoin, ja mitte ainult ei kasutanud seda, vaid käivitas ka mitu mikroteenust, et õppida iseseisvalt Bitcoini võrguga (aka p2p) arendaja vaatenurgast töötama (mina olen muidugi üks neist dev, nii et ma sõitsin mööda). Aga ma ei räägi arendusest, vaid turvalisest ja tõhusast rakenduste keskkonnast.

Finantstehnoloogia (FINTECH) minge infoturbe kõrval (infosek) ja esimene võib töötada ilma teiseta, kuid mitte kaua. Seetõttu tahan jagada oma kogemust ja kasutatavat tööriistakomplekti, mis sisaldab mõlemat FINTECHJa infosek, ja samal ajal ning seda saab kasutada ka laiemalt või hoopis teistsugusel eesmärgil. Selles artiklis ei räägi ma mitte niivõrd Bitcoinist, vaid finantsteenuste (ja mitte ainult) arendamise ja toimimise infrastruktuuri mudelist - ühesõnaga nendest teenustest, kus B on oluline. See kehtib nii Bitcoini börsi kui ka väikese ettevõtte kõige tüüpilisema ettevõtte loomaaia kohta, mis pole Bitcoiniga kuidagi seotud.

Tahan märkida, et olen põhimõtete pooldaja "hoidke see loll lihtsana" и "vähem on rohkem"Seetõttu on nii artiklil kui ka selles kirjeldatul omadused, mida need põhimõtted puudutavad.

Kujutletav stsenaarium: Vaatame kõike bitcoini vahetaja näitel. Otsustasime käivitada rublade, dollarite, eurode vahetamise bitcoinide vastu ja tagasi ning meil on juba toimiv lahendus, kuid muu digitaalse raha jaoks nagu qiwi ja webmoney, st. Oleme lõpetanud kõik juriidilised küsimused, meil on valmis rakendus, mis toimib rublade, dollarite ja eurode ning muude maksesüsteemide makseväravana. See on ühendatud meie pangakontodega ja sellel on meie lõpprakenduste jaoks mingi API. Meil on ka veebirakendus, mis toimib kasutajate vahetajana, nagu tavaline qiwi või webmoney konto – loo konto, lisa kaart jne. See suhtleb meie lüüsirakendusega, ehkki kohaliku piirkonna REST API kaudu. Ja nii otsustasime ühendada bitcoinid ja samal ajal uuendada infrastruktuuri, sest... Esialgu pandi kõik kiiruga üles laua all kontoris asuvatesse virtuaalkastidesse... saiti hakati kasutama ning me hakkasime muretsema tööaja ja jõudluse pärast.

Niisiis, alustame peamisest - serveri valimisest. Sest meie näites olev ettevõte on väike ja me usaldame hostijat (OVH), mille me valime eelarve valik mille puhul on võimatu süsteemi installida algsest .iso-pildist, kuid see pole oluline, IT-turvaosakond analüüsib installitud pilti kindlasti. Ja kui me suureks saame, rendime oma luku ja võtme all piiratud füüsilise juurdepääsuga kapi ja võib-olla ehitame oma alalisvoolu. Igal juhul tasub meeles pidada, et riistvara rentimisel ja valmispiltide installimisel on võimalus, et teie süsteemis ripub "Trooja hostist", mis enamikul juhtudel pole mõeldud teie järel luuramiseks. vaid pakkuda mugavamaid haldustööriistu server.

Serveri installimine

Siin on kõik lihtne. Valime meie vajadustele vastava riistvara. Seejärel valige FreeBSD pilt. Noh, või ühendame (teise hosti ja oma riistvara puhul) IPMI või monitoriga ja söödame allalaaditavasse .iso FreeBSD kujutise. Orkestri seadistuste jaoks, mida ma kasutan Võimalik и mfsbsd. Ainsa asja, meie puhul kimsufi puhul, valisime kohandatud paigaldamine selleks, et kahel peeglis oleval kettal oleks “avatud” ainult alglaadimis- ja /home-partitsioonid, krüpteeritakse ülejäänud kettaruum, aga sellest hiljem.

Bitcoin puuris?

Süsteemi paigaldamine toimub tavapärasel viisil, ma ei peatu sellel, märgin ainult, et enne töö alustamist tasub tähelepanu pöörata karastamine valikuid, mida see pakub bsdinstaller installimise lõpus (kui installite süsteemi ise):

Bitcoin puuris?

On hea materjal sel teemal kordan seda siin põgusalt.

Eelnimetatud parameetrid on võimalik lubada ka juba paigaldatud süsteemis. Selleks peate redigeerima alglaaduri faili ja lubama kerneli parameetrid. *ee on selline redaktor BSD-s

# 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

Samuti peaksite veenduma, et teil on installitud süsteemi uusim versioon ja tehke kõik värskendused ja täiendused. Meie puhul on näiteks vaja uuendada uusimale versioonile, sest... paigalduseelsed pildid jäävad maha kuus kuud kuni aasta. Noh, seal muudame SSH-pordi vaikeportist erinevaks, lisame võtme autentimise ja keelame parooli autentimise.

Siis sättisime aide, jälgides süsteemi konfiguratsioonifailide olekut. Täpsemalt saab lugeda siin.

pkg install aide

ja redigeerige meie 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

Me kaasame süsteemi auditeerimine

sysrc auditd_enable=YES

# service auditd start

Kuidas seda asja hallata, on täpselt kirjeldatud juhend.

Nüüd taaskäivitame ja jätkame serveris oleva tarkvaraga. Iga server on konteinerite või täisvirtuaalmasinate hüperviisor. Seetõttu on oluline, et protsessor toetaks VT-x ja EPT, kui plaanime kasutada täielikku virtualiseerimist.

Kasutatavate konteinerite ja virtuaalmasinate haldamiseks cbsd pärit olevole, soovin talle rohkem tervist ja õnnistusi selle imelise utiliidi jaoks!

Konteinerid? Jälle Docker või mis?

Kuid mitte. FreeBSD vanglad on suurepärane vahend konteineriseerimiseks, kuid mainitud cbsd nende konteinerite, mida nimetatakse rakkudeks, orkestreerimiseks.

Puur on äärmiselt tõhus lahendus infrastruktuuri ehitamiseks erinevatel eesmärkidel, kus lõppkokkuvõttes on vaja üksikute teenuste või protsesside täielikku isoleerimist. Põhimõtteliselt on see hostsüsteemi kloon, kuid see ei nõua täielikku riistvara virtualiseerimist. Ja tänu sellele ei kulutata ressursse "külalise OS-ile", vaid ainult tehtavale tööle. Kui rakke kasutatakse sisemisteks vajadusteks, on see väga mugav lahendus optimaalseks ressursikasutuseks – hunnik rakke ühes riistvaraserveris saab igaüks eraldi kasutada kogu serveriressurssi vajadusel. Arvestades, et tavaliselt vajavad erinevad allteenused lisa. ressursse erinevatel aegadel, saate ühest serverist maksimaalse jõudluse eraldada, kui planeerite ja tasakaalustate lahtreid serverite vahel õigesti. Vajadusel saab lahtritele määrata ka kasutatava ressursi piirangud.

Bitcoin puuris?

Aga täielik virtualiseerimine?

Niipalju kui mina tean cbsd toetab tööd bhyve ja XEN hüperviisorid. Teist pole ma kunagi kasutanud, aga esimene on suhteliselt uus hüperviisor FreeBSD-st. Vaatame kasutamise näidet bhyve allolevas näites.

Hostikeskkonna installimine ja konfigureerimine

Kasutame FS-i ZFS. See on äärmiselt võimas tööriist serveriruumi haldamiseks. Tänu ZFS-ile saate otse ketastelt ehitada mitmesuguste konfiguratsioonide massiive, dünaamiliselt "kuumalt" ruumi laiendada, muuta surnud kettaid, hallata hetktõmmiseid ja palju-palju muud, mida saab kirjeldada terves artikliseerias. Pöördume tagasi oma serveri ja selle ketaste juurde. Installimise alguses jätsime ketastele vaba ruumi krüpteeritud partitsioonide jaoks. Miks nii? Seda selleks, et süsteem ärkaks automaatselt ja kuulaks SSH kaudu.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lisage ülejäänud ruumi ketta partitsioon

geli init /dev/ada0p4

sisestage meie krüpteerimisparool

geli attach /dev/ada0p4

Sisestame parooli uuesti ja meil on seade /dev/ada0p4.eli - see on meie krüptitud ruum. Seejärel kordame sama /dev/ada1 ja ülejäänud massiivi ketaste jaoks. Ja loome uue ZFS bassein.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Meil ​​on minimaalne lahingukomplekt valmis. Peegeldatud ketaste massiiv juhuks, kui üks kolmest ebaõnnestub.

Andmestiku loomine uues kogumis

zfs create vms/jails

pkg install cbsd — lõime meeskonna ja panime paika oma rakkude haldamise.

Pärast cbsd installitud, tuleb see lähtestada:

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

Noh, me vastame paljudele küsimustele, enamasti vaikevastustega.

*Kui kasutate krüptimist, on oluline, et deemon cbsdd ei käivitunud automaatselt enne, kui dekrüpteerite kettad käsitsi või automaatselt (meie näites teeb seda zabbix)

**Ma ei kasuta ka NAT-i alates cbsdja ma konfigureerin selle ise 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

Tulemüüri poliitikate seadistamine on samuti eraldi teema, nii et ma ei lasku poliitika BLOKEERI KÕIK seadistamisse ja valgete nimekirjade seadistamisse, seda saate teha lugedes ametlik dokumentatsioon või mõni Google'is saadaolevate tohutute artiklite hulgast.

Noh... meil on cbsd installitud, on aeg luua meie esimene tööhobune - puuris peetav Bitcoini deemon!

cbsd jconstruct-tui

Bitcoin puuris?

Siin näeme lahtri loomise dialoogi. Kui kõik väärtused on seatud, loome!

Esimese lahtri loomisel peaksite valima, mida lahtrite alusena kasutada. Valin käsuga FreeBSD hoidlast distributsiooni repo. See valik tehakse ainult konkreetse versiooni esimese lahtri loomisel (saate hostida mis tahes versiooni lahtreid, mis on hostiversioonist vanemad).

Kui kõik on paigaldatud, käivitame puuri!

# cbsd jstart bitcoind

Kuid me peame puuri installima tarkvara.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind kärjekonsooli pääsemiseks

ja juba lahtrisse installime tarkvara koos selle sõltuvustega (meie hostsüsteem jääb puhtaks)

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

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

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

Puuris on Bitcoin, kuid me vajame anonüümsust, sest tahame mõne puuriga ühenduse luua TOP võrgu kaudu. Üldiselt plaanime enamikku kahtlase tarkvaraga rakke käitada ainult puhverserveri kaudu. Tänu pf Saate NAT-i keelata teatud IP-aadresside vahemiku jaoks kohalikus võrgus ja lubada NAT-i ainult meie TOR-sõlme jaoks. Seega, isegi kui pahavara lahtrisse satub, ei suhtle see suure tõenäosusega välismaailmaga ja kui see juhtub, siis ei avalda see meie serveri IP-d. Seetõttu loome teise lahtri teenuste edasisaatmiseks .onion-teenusena ja puhverserverina üksikutele rakkudele Interneti-juurdepääsuks.

# 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

Määrake kuulama kohalikul aadressil (saadaval kõigi lahtrite jaoks)

SOCKSPort 192.168.0.2:9050

Mida me veel täielikuks õnneks vajame? Jah, me vajame oma veebi jaoks teenust, võib-olla rohkem kui üht. Käivitame nginxi, mis toimib pöördpuhverserverina ja hoolitseb Let's Encrypti sertifikaatide uuendamise eest

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Ja nii me paigutasime 150 MB sõltuvusi puuri. Ja peremees on ikka puhas.

Tuleme hiljem tagasi nginxi seadistamise juurde, peame tõstma veel kaks lahtrit oma maksevärava jaoks nodejs ja roostes ning veebirakenduse, mis on millegipärast Apache'is ja PHP-s ning viimane nõuab ka MySQL andmebaasi.

# 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

...ja veel 380 MB isoleeritud pakette

Järgmisena laadime alla oma rakenduse koos gitiga ja käivitame selle.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB paketid. puuris.

siin anname arendajale juurdepääsu SSH kaudu otse lahtrisse, nad teevad seal kõik ise:

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

Port 2267 - muutke lahtri SSH-port suvaliseks

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

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

Noh, teenus töötab, jääb üle vaid reegel lisada pf tulemüüri

Vaatame, milline IP on meie rakkudel ja milline meie "kohalik piirkond" üldiselt välja näeb.

# 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

ja lisage reegel

# 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

Noh, kuna oleme siin, lisame ka pöördpuhverserveri reegli:

## 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

Noh, nüüd natuke bitcoinidest

Meil on veebirakendus, mis on väljastpoolt avatud ja suhtleb kohapeal meie makseväravaga. Nüüd peame ette valmistama töökeskkonna Bitcoini võrgu endaga suhtlemiseks - sõlmega bitcoind see on lihtsalt deemon, mis hoiab plokiahela kohalikku koopiat ajakohasena. Sellel deemonil on RPC ja rahakoti funktsionaalsus, kuid rakenduste arendamiseks on mugavamad "ümbrised". Alustuseks otsustasime panna electrum on CLI rahakott. See rahakott kasutame seda oma bitcoinide "külmhoidlana" - üldiselt on need bitcoinid, mida tuleb hoida kasutajatele juurdepääsetavast süsteemist "väljaspool" ja üldiselt kõigist eemal. Sellel on ka GUI, nii et kavatseme kasutada sama rahakotti
sülearvutid. Praegu kasutame Electrumit avalike serveritega ja hiljem tõstame selle teise lahtrisse ElectrumXet üldse mitte kellestki sõltuda.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

veel 700 MB tarkvara meie puuris

electrum:/@[8:53] # adduser

Username: wallet
Full name: 
Uid (Leave empty for default): 
Login group [wallet]: 
Login group is wallet. Invite wallet into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/wallet]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]: 
Username   : wallet
Password   : <disabled>
Full Name  : 
Uid        : 1001
Class      : 
Groups     : wallet 
Home       : /home/wallet
Home Mode  : 
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (wallet) to the user database.
Add another user? (yes/no): no
Goodbye!
electrum:/@[8:53] # su wallet

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

wallet@electrum:/ % electrum-3.6 create

{
    "msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}

Nüüd on meil rahakott loodud.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Meie ahelas Nüüdsest saab rahakotiga ühenduse luua vaid piiratud arv inimesi. Selleks, et mitte avada juurdepääsu sellele lahtrile väljastpoolt, toimuvad ühendused SSH kaudu TOP-i (VPN-i detsentraliseeritud versioon) kaudu. Käivitame lahtris SSH, kuid ärge puudutage hostis meie pf.conf-i.

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

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

Nüüd lülitame rahakoti Interneti-juurdepääsuga raku välja. Anname sellele IP-aadressi teisest alamvõrguruumist, mis pole NAT-iga ühendatud. Kõigepealt muudame /etc/pf.conf peremehe peal

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" muudame selle vastu JAIL_IP_POOL="192.168.0.0/25", seega ei ole kõigil aadressidel 192.168.0.126-255 otsest juurdepääsu Internetile. Omamoodi tarkvaraline "õhuvahe" võrk. Ja NAT-reegel jääb samaks

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

Reeglite ülekoormamine

# pfctl -f /etc/pf.conf

Võtame nüüd oma raku

# cbsd jconfig jname=electrum

Bitcoin puuris?

Bitcoin puuris?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Remove old IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Setup new IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hmm, aga nüüd lakkab süsteem ise meil töötamast. Siiski saame määrata süsteemi puhverserveri. Kuid on üks asi, TOR-is on see SOCKS5 puhverserver ja mugavuse huvides sooviksime ka HTTP-puhverserverit.

# 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

Noh, nüüd on meie süsteemis kaks puhverserverit ja mõlemad väljastavad TOR-i kaudu: socks5://192.168.0.2:9050 ja http://192.168.0.6:8123

Nüüd saame oma rahakoti keskkonda konfigureerida

# 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

Noh, nüüd töötab kest puhverserveri alt. Kui tahame pakette installida, peaksime lisama /usr/local/etc/pkg.conf puuri juure alt

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

Noh, nüüd on aeg lisada TOR peidetud teenus meie SSH-teenuse aadressiks rahakoti puuris.

# 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

See on meie ühenduse aadress. Kontrollime kohalikust masinast. Kuid kõigepealt peame lisama oma SSH-võtme:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Noh, Linuxi kliendimasinast

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

Ühendame (Selle toimimiseks vajate kohalikku TOR-deemonit, mis kuulab 9050)

user@local ~$ ssh remotebtc

The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts.
FreeBSD 12.1-RELEASE-p1 GENERIC 
To save disk space in your home directory, compress files you rarely
use with "gzip filename".
        -- Dru <[email protected]>
wallet@electrum:~ % logout

Edu!

Kiir- ja mikromaksetega töötamiseks vajame ka sõlme Lightning Network, tegelikult on see meie peamine töövahend Bitcoiniga. U*c-välkmida me deemonina kasutame Sparko pistikprogramm, mis on täisväärtuslik HTTP (REST) ​​liides ja võimaldab teil töötada nii ahelaväliste kui ka ahelasiseste tehingutega. c-lightning toimimiseks vajalik bitcoind aga jah.

*Lightning Networki protokolli on erinevates keeltes erinevad teostused. Nendest, mida testisime, tundus c-lightning (kirjutatud C-s) olevat kõige stabiilsem ja ressursitõhusam

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/@[10:23] # adduser

Username: 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

Kuni kõik vajalik on kompileeritud ja installitud, loome jaoks RPC kasutaja lightningd в bitcoind

# jexec bitcoind

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

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#allow only c-lightning
rpcallowip=192.168.0.7/32

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

Minu kaootiline lahtrite vahel vahetamine ei osutu nii kaootiliseks, kui utiliiti märkida tmux, mis võimaldab luua ühe seansi jooksul mitu terminali alamseanssi. Analoog: screen

Bitcoin puuris?

Niisiis, me ei soovi avaldada oma sõlme tegelikku IP-d ja tahame kõik finantstehingud läbi viia TOP-i kaudu. Seetõttu pole teist .sibulat vaja.

# 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

Nüüd loome c-lightningi konfiguratsiooni

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
# for the example above the initialization logs (mixed with lightningd logs) should print something like

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 ~

Samuti peate looma bitcoin-cli konfiguratsioonifaili, utiliidi, mis suhtleb bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

Kontrollima

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

[
  "test"
]

käivitada lightningd

lightning@lightning:~ % lightningd --daemon

Ise lightningd saate utiliiti juhtida lightning-cli, näiteks:

lightning-cli newaddr hankige uue sissetuleva makse aadress

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all saatke kogu rahakotis olev raha aadressile (kõik ketisisesed aadressid)

Samuti käsud ahelaväliste toimingute jaoks lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay jne

Noh, rakendusega suhtlemiseks on meil REST Api

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

Kokkuvõtteks

# 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
     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 puuris?

Meil on konteinerite komplekt, millest igaühel on oma juurdepääsutase nii kohalikust võrgust kui ka sellele.

# zfs list

NAME                    USED  AVAIL  REFER  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

Nagu näete, võtab bitcoind kõik 190 GB ruumi. Mis siis, kui vajame testide jaoks teist sõlme? Siin on ZFS kasulik. Abiga cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com saate luua hetktõmmise ja lisada sellele pildile uue lahtri. Uuel lahtril on oma ruum, kuid failisüsteemis võetakse arvesse ainult praeguse oleku ja originaali erinevust (säästame vähemalt 190 GB)

Iga lahter on oma eraldiseisev ZFS-i andmestik ja see on äärmiselt mugav. ZFS lubab ka teha muid lahedaid asju, näiteks saata SSH kaudu pilte. Me ei kirjelda seda, seda on juba palju.

Samuti väärib märkimist vajadus hosti kaugjälgimise järele, selleks on meil olemas Zabbix.

B - ohutus

Turvalisuse osas alustame infrastruktuuri kontekstis peamistest põhimõtetest:

Konfidentsiaalsus - UNIX-laadsete süsteemide standardtööriistad tagavad selle põhimõtte rakendamise. Eraldame loogiliselt juurdepääsu igale loogiliselt eraldiseisvale süsteemi elemendile – lahtrile. Juurdepääs tagatakse tavalise kasutaja autentimise kaudu, kasutades kasutajate isiklikke võtmeid. Kogu side lõpprakkude vahel ja nende vahel toimub krüpteeritud kujul. Tänu ketta krüptimisele ei pea me ketta asendamisel või teise serverisse migreerumisel muretsema andmete ohutuse pärast. Ainus kriitiline juurdepääs on juurdepääs hostsüsteemile, kuna selline juurdepääs võimaldab üldiselt juurdepääsu konteinerites olevatele andmetele.

Ausus „Selle põhimõtte rakendamine toimub mitmel erineval tasandil. Esiteks on oluline märkida, et serveri riistvara, ECC mälu puhul hoolitseb ZFS juba “kastist väljas” andmete terviklikkuse eest infobittide tasemel. Kiired hetktõmmised võimaldavad teil igal ajal lennult varukoopiaid teha. Mugavad rakkude ekspordi/impordi tööriistad muudavad rakkude replikatsiooni lihtsaks.

Kättesaadavus - See on juba vabatahtlik. Sõltub teie kuulsuse tasemest ja sellest, et teil on vihkajaid. Meie näites tagasime, et rahakott oli ligipääsetav ainult TOP-võrgust. Vajadusel saab tulemüüris kõik blokeerida ja lubada serverile ligipääsu ainult tunnelite kaudu (TOR või VPN on teine ​​asi). Seega on server välismaailmast nii palju kui võimalik ära lõigatud ja ainult meie ise saame selle kättesaadavust mõjutada.

Keeldumise võimatus - Ja see sõltub edasisest toimimisest ja kasutajaõiguste, juurdepääsu jms õigete eeskirjade järgimisest. Kuid õige lähenemise korral auditeeritakse kõiki kasutaja tegevusi ning tänu krüptograafilistele lahendustele on võimalik üheselt tuvastada, kes ja millal teatud toiminguid tegi.

Loomulikult ei ole kirjeldatud konfiguratsioon absoluutne näide sellest, kuidas see alati olema peaks, vaid pigem üks näide sellest, kuidas see võib olla, säilitades samas väga paindlikud skaleerimis- ja kohandamisvõimalused.

Aga täielik virtualiseerimine?

Teave täieliku virtualiseerimise kohta cbsd abil saate loe siit. Lisan selle lihtsalt töö jaoks bhyve Peate lubama mõned kerneli valikud.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Nii et kui teil on järsku vaja dokk käivitada, installige mõni debian ja minge!

Bitcoin puuris?

See on kõik

See on vist kõik, mida ma jagada tahtsin. Kui teile artikkel meeldis, võite saata mulle mõned bitcoinid - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Kui soovite rakke tegevuses proovida ja bitcoine saada, võite minna minu lehele lemmiklooma projekt.

Allikas: www.habr.com