Bitcoin puuris?

Juhtus nii, et olen ametilt arvutisüsteemide ja võrgu administraator (lühidalt: süsteemiadmin) ning mul oli veidi rohkem kui 10 aasta jooksul oma töös võimalus rääkida väga erinevatest süsteemidest, sealhulgas neist, mis nõuavad [kõrgeid] turvameetmeid. Ja juhtus ka nii, et mõni aeg tagasi leidsin ma huvitava bitcoinja mitte ainult ei kasutanud seda, vaid käivitas ka mitu mikroteenust, et õppida arendaja vaatenurgast Bitcoini võrguga (see on ju P2P) töötama (ma pole just dev, lihtsalt möödaminnes). Aga ma ei räägi arendusest, ma räägin rakenduste jaoks turvalisest ja tõhusast keskkonnast.

Finantstehnoloogiad (FINTECH) käivad käsikäes infoturbega (infosek) ja esimene võib toimida ka ilma teiseta, aga mitte kaua. Seepärast tahan jagada oma kogemust ja tööriistakomplekti, mida ma kasutan, mis hõlmab mõlemat FINTECHJa infosekja samal ajal saab seda kasutada ka laiemal või täiesti erineval eesmärgil. Selles artiklis ei räägi ma niivõrd Bitcoinist, kuivõrd finantsteenuste (ja mitte ainult) arendamise ja toimimise infrastruktuurimudelist - ühesõnaga, nendest teenustest, mille puhul "B" on oluline. See kehtib nii Bitcoini börsi kui ka väikeettevõtte kõige tüüpilisema ettevõtte loomaaia kohta, mis pole Bitcoiniga mingil moel seotud.

Tahaksin rõhutada, et olen põhimõtete pooldaja. "hoia see loll lihtne" и "vähem on rohkem", seega on nii artiklil kui ka selles kirjeldatul omadused, mida need printsiibid kirjeldavad.

Kujuteldav stsenaarium: Vaatame seda bitcoini vahetaja näitel. Otsustasime käivitada rublade, dollarite, eurode vahetamise bitcoini vastu ja vastupidi ning meil on juba toimiv lahendus olemas, aga teiste digitaalsete valuutade, näiteks Qiwi ja WebMoney jaoks, st kuna meil on kõik juriidilised küsimused lahendatud, on olemas valmis rakendus, mis toimib rublade, dollarite ja eurode ning teiste maksesüsteemide makseväravana. See on seotud meie pangakontodega ja sellel on meie lõpprakenduste jaoks API. Meil on ka veebirakendus, mis toimib kasutajate jaoks vahetajana, noh, nagu tüüpiline Qiwi või WebMoney konto – looge konto, lisage kaart jne. See suhtleb meie lüüsirakendusega, ehkki kohalikus piirkonnas REST API kaudu. Ja nii otsustasimegi bitcoinid ühendada ja samal ajal infrastruktuuri uuendada, sest algselt ehitati kõik kiiruga kontoris laua all asuvatele virtuaalsetele kastidele... saiti hakati kasutama ja hakkasime muretsema tööaja ja jõudluse pärast.

Alustame siis kõige olulisemast – serveri valimisest. Kuna meie näites on ettevõte väike ja me usaldame hostipakkujat (OVH), siis valime eelarve valik milles on võimatu süsteemi installida algsest .iso-kujutisest, aga see pole oluline, IT-turbeosakond analüüsib installitud kujutist kindlasti. Ja kui me suureks saame, rendime endale lukustatud kapi piiratud füüsilise juurdepääsuga või ehitame isegi oma andmekeskuse. Igal juhul tasub meeles pidada, et riistvara rentimisel ja valmiskujutiste installimisel on võimalus, et teie süsteemis ripub "hosteri trooja", mis enamasti ei ole mõeldud teie järele luuramiseks, vaid mugavamate serverihaldustööriistade pakkumiseks.

Serveri installimine

Kõik on siin lihtne. Valime oma vajadustele vastava riistvara. Seejärel valime FreeBSD image'i. Või ühendume (teise hosti ja oma riistvara puhul) IPMI või monitoriga ja suuname selle alglaadimisfaili .iso FreeBSD image'i. Orkestraalse installi jaoks kasutan ma Võimalik и mfsbsdAinuke asi on see, et meie kimsufi puhul valisime kohandatud paigaldamine Selleks, et peeglis olevatel kahel kettal oleksid avatud ainult alglaadimis- ja /home-partitsioonid, krüpteeritakse ülejäänud kettaruum, aga sellest lähemalt hiljem.

Bitcoin puuris?

Süsteemi paigaldamine toimub standardsel viisil, ma ei hakka sellel pikemalt peatuma, märgin vaid, et enne töö alustamist tasub sellele tähelepanu pöörata karastamine valikud, mis pakuvad bsdinstaller installimise lõpus (kui paigaldate süsteemi ise):

Bitcoin puuris?

On hea materjal sellel teemal kordan seda siinkohal lühidalt.

Samuti on võimalik ülalmainitud parameetreid lubada juba installitud süsteemil. Selleks peate muutma alglaaduri faili ja lubama kerneli parameetrid. *ee on BSD-s selline redaktor

# 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 tasub veenduda, et teil on installitud süsteemi uusim versioon ja teostada kõik uuendused ja täiendusedNäiteks meie puhul on vaja uuendada uusimale versioonile, kuna installieelsed pildid on kuus kuud kuni aasta maas. Näiteks muudame SSH-pordi vaikesättest erinevaks, lisame võtmetega autentimise ja keelame parooliga autentimise.

Siis me panime selle paika aide, jälgides süsteemi konfiguratsioonifailide olekut. Lisateavet leiate siit. siin.

pkg install aide

ja redigeeri meie crontab'i

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üsteemiaudit

sysrc auditd_enable=YES

# service auditd start

Selle asja haldamine on täpselt kirjeldatud juhend.

Nüüd taaskäivitame arvuti ja liigume edasi serveri tarkvara juurde. Iga server on hüperviisor konteinerite või täielike virtuaalsete masinate jaoks. Seetõttu on oluline, et protsessor toetaks VT-x ja EPT-d, kui plaanime kasutada täielikku virtualiseerimist.

Konteineri ja virtuaalse masina haldamiseks kasutan ma cbsd pärit olevole, Soovin talle selle imelise utiliidi jaoks rohkem tervist ja õnnistust!

Konteinerid? Jälle Docker?

Kuid mitte. FreeBSD jailid - see on suurepärane tööriist konteineriseerimiseks ja mainitud cbsd nende konteinerite, mida nimetatakse rakkudeks, orkestreerimiseks.

Serveripuur on äärmiselt efektiivne lahendus mitmesuguste eesmärkidega infrastruktuuri loomiseks, kus on lõppkokkuvõttes vaja üksikute teenuste või protsesside täielikku isoleerimist. Sisuliselt on see hostsüsteemi kloon, kuid see ei nõua riistvara täielikku virtualiseerimist. Ja tänu sellele ei kulutata ressursse "külalisoperatsioonisüsteemile", vaid ainult tehtavale tööle. Kui serveripuure kasutatakse sisemiste vajaduste jaoks, on see ressursside optimaalseks kasutamiseks väga mugav lahendus – hunnik serveripuure ühel riistvaraserveril saavad igaüks eraldi kogu serveriressurssi kasutada, kui vaja. Arvestades, et erinevad alamteenused vajavad tavaliselt erinevatel aegadel lisaressursse, saab ühest serverist maksimaalse jõudluse saavutada, kui serveripuure õigesti planeerida ja tasakaalustada. Vajadusel saab määrata ka piiranguid serveripuuride jaoks kasutatavale ressursile.

Bitcoin puuris?

Aga kuidas on lood täieliku virtualiseerimisega?

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

Hostikeskkonna installimine ja seadistamine

Me kasutame FS-i ZFSSee on äärmiselt võimas tööriist serveriruumi haldamiseks. Tänu ZFS-ile saate otse ketastelt luua erineva konfiguratsiooniga massiive, dünaamiliselt "kuumalt" laiendada ruumi, vahetada surnud kettaid, hallata hetktõmmiseid ja palju, palju muud, mida saab kirjeldada terves artiklite seerias. Läheme tagasi oma serveri ja selle ketaste juurde. Installi alguses jätsime ketastele krüptitud partitsioonide jaoks vaba ruumi. Miks? See on selleks, et süsteem käivituks automaatselt ja kuulaks SSH kaudu.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lisage ülejäänud ruumile kettapartitsioon

geli init /dev/ada0p4

sisestame oma krüpteerimisparooli

geli attach /dev/ada0p4

Sisestame parooli uuesti ja saame seadme /dev/ada0p4.eli – see on meie krüpteeritud ruum. Seejärel kordame sama /dev/ada1 ja ülejäänud massiivi ketaste puhul. Ja loome uue. ZFS-i bassein.

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

Loo andmestik uuel "basseinil"

zfs create vms/jails

pkg install cbsd — käivitasime käsu ja seadsime sisse oma rakkude haldamise.

Pärast cbsd installitud, tuleb see initsialiseerida:

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

Noh, me vastame hulgale küsimustele, enamasti vaikimisi vastustega.

*Krüpteerimise kasutamisel on oluline, et deemon cbsdd ei käivitu automaatselt enne, kui kettad käsitsi või automaatselt dekrüpteerite (meie näites teeb seda zabbix)

**Ma ei kasuta ka NAT-i saidilt** cbsdja ma seadsin selle ise sisse 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üüripoliitikate seadistamine on samuti eraldi teema, seega ma ei süvene BLOCK ALL poliitika ja valgete nimekirjade seadistamisse, seda saab teha lugedes ametlik dokumentatsioon või ükskõik milline Google'is saadaolevatest tohututest artiklitest.

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

cbsd jconstruct-tui

Bitcoin puuris?

Siin näeme lahtri loomise dialoogi. Pärast kõigi väärtuste määramist loome selle!

Esimese lahtri loomisel tuleb valida, mida lahtrite alusena kasutada. Mina valin FreeBSD repositooriumist atribuudi käsuga repoSee valik tehakse ainult konkreetse versiooni esimese lahtri loomisel (hostversioonist vanemaid versioone saab hostida mis tahes versiooni lahtritega).

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

# cbsd jstart bitcoind

Aga me peame puuri tarkvara installima.

# jls

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

jexec bitcoind mobiilikonsoolile sisenemiseks

ja juba raku sees 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, aga me vajame anonüümsust, sest tahame mõne puuriga ühenduse luua TOR-võrgu kaudu. Ja üldiselt plaanime enamikku kahtlase tarkvaraga puure käitada ainult proksi kaudu. Aitäh. pf Saate NAT-i teatud IP-aadresside vahemiku jaoks kohtvõrgus keelata ja lubada NAT-i ainult meie TOR-sõlme jaoks. Seega, isegi kui pahavara satub puuri, ei suhtle see tõenäoliselt välismaailmaga ja kui suhtleb, ei avalda see meie serveri IP-aadressi. Seetõttu loome teise puuri teenuste "edastamiseks" ".onion" teenusena ja üksikute lahtrite internetiühenduse puhverserverina.

# 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

Seadistasime kuulamise kohalikule aadressile (saadaval kõigile lahtritele)

SOCKSPort 192.168.0.2:9050

Mida me veel täiesti õnnelikuks olemiseks vajame? Jah, me vajame oma veebi jaoks teenust, võib-olla rohkem kui ühte. Käivitame nginxi, mis toimib pöördproksi rollis 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 panime puuri 150 MB sõltuvusi. Ja host on endiselt puhas.

Naaseme hiljem nginxi seadistamise juurde, peame oma maksevärava jaoks veel kaks lahtrit nodejs-il ja rusti peal kasvatama ning veebirakenduse, mis mingil põhjusel on Apache ja PHP peal ning viimane vajab ka MySQL-i 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 oma rakenduse gitiga alla 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 pakette puuris.

Siin anname arendajale SSH kaudu ligipääsu otse puuri, nad teevad 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 on käivitatud, jääb üle vaid reegel lisada pf tulemüüri

Vaatame, millised IP-d meil rakkude jaoks on ja milline meie "kohalik" ü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 lisa 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 me siin oleme, lisame ka reegli pöördproksile:

## 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, millele pääseb ligi väliselt ja mis suhtleb lokaalselt meie makseväravaga. Nüüd peame ette valmistama töökeskkonna, et suhelda Bitcoini võrguga ise – sõlmega. bitcoind See on lihtsalt deemon, mis hoiab plokiahela kohalikku koopiat ajakohasena. Sellel deemonil on RPC ja rahakoti funktsionaalsus, kuid rakenduste arendamiseks on mugavamaid "ümbriseid". Alustuseks otsustasime installida electrum — see on CLI-rahakott. See rahakott Me kasutame seda oma bitcoinide "külmhoidlana" – põhimõtteliselt need bitcoinid, mida tuleb hoida süsteemist "väljaspool", kasutajatele ligipääsetavana ja üldiselt kõigile kättesaamatus kohas. Sellel on ka graafiline kasutajaliides, seega hakkame sama rahakotti kasutama ka meie omas.
sülearvutid. Praegu kasutame avalike serveritega electrumit ja hiljem tõstame selle teise lahtrisse. ElectrumX, et mitte kellestki üldse sõltuda.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

Meil on puuris veel 700 MB tarkvara

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 omadele ahelas Rahakott saab edaspidi ühenduda ainult piiratud ringi inimestega. Selleks, et vältida juurdepääsu väljastpoolt sellele puurile, toimuvad SSH-ühendused TORi (VPN-i detsentraliseeritud versioon) kaudu. Käivitame SSH puuris, kuid ärge puudutage oma pf.conf faili hostis.

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

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

Nüüd keelame rahakotiga lahtri internetiühenduse. Anname sellele IP-aadressi teisest alamvõrgust, mis pole NAT-itud. Esmalt muudame /etc/pf.conf peremeesorganismi peal

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" vahetame vastu JAIL_IP_POOL="192.168.0.0/25", seega pole kõigil aadressidel 192.168.0.126-255 otsest juurdepääsu internetile. Tegemist on tarkvaralise "õhupiluga" võrguga. Ja NAT-reegel jääb samaks, mis see oli.

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

Reeglite ülekoormamine

# pfctl -f /etc/pf.conf

Nüüd võtame oma puuri enda kätte.

# 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. Küll aga saame määrata süsteemi puhverserveri. Aga üks asi on, TOR-is on see SOCKS5 puhverserver ja mugavuse huvides tahaksime 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 meil süsteemis kaks puhverserverit ja mõlemad väljuvad TORi kaudu: socks5://192.168.0.2:9050 ja http://192.168.0.6:8123

Nüüd saame oma rahakotikeskkonna seadistada.

# 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

Nüüd töötab shell 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-i peidetud teenus meie SSH-teenuse aadressina 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

Siin on meie ühenduse aadress. Kontrollime seda kohalikust masinast. Aga 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, ja kliendi Linuxi masinast

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

Võtame ühendust (Selleks, et see toimiks, vajate kohalikku TOR-deemonit, mis kuulab 9050-l)

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 <genesis@istar.ca>
wallet@electrum:~ % logout

Edu!

Kiir- ja mikromaksetega töötamiseks vajame ka sõlme Lightning Network, see saab tegelikult olema meie peamine töövahend bitcoiniga. U *c-välk, mida me deemoni rollis kasutama hakkame, on Sparko plugin, mis on täieõiguslik HTTP (REST) liides ja võimaldab töötada nii ahelaväliste kui ka ahelasiseste tehingutega. c-lightning toimimiseks vajalik bitcoind sõlm.

*Erinevates PL-ides on Lightning Network protokolli erinevaid implementatsioone. Meie testitud protokollidest tundus c-lightning (kirjutatud C-keeles) kõige stabiilsem ja ressursisäästlikum.

# 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õike kompileeritakse ja installitakse, loome 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 märgid utiliidi tmux, mis võimaldab teil ühe seansi sees luua mitu terminali alamseanssi. Analoog: screen

Bitcoin puuris?

Seega me ei taha näidata oma sõlme tegelikku IP-aadressi ja tahame kõik finantstehingud teha TORi kaudu. Seetõttu vajame veel ühte .onion domeeni.

# 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-lightningu 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, mis on utiliit, mis suhtleb bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

me kontrollime

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

[
  "test"
]

käivitada lightningd

lightning@lightning:~ % lightningd --daemon

Ise lightningd saate utiliidi hallata lightning-cli, näiteks:

lightning-cli newaddr hankige aadress uute sissetulevate maksete jaoks

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all saatke kogu rahakotiraha (kõik ahelas olevad aadressid) aadressile

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

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 komplekt konteinereid, millel kõigil on oma juurdepääsutase nii kohalikust võrgust kui ka kohaliku võrgu kaudu.

# 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 enda alla kõik 190 GB ruumi. Mis siis, kui vajame testimiseks veel ühte sõlme? ZFS on siin suurepärane valik. Selle abil cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com saate luua hetktõmmise ja linkida selle hetktõmmisega uue lahtri. Uuel lahtril on oma ruum, kuid FS-is võetakse arvesse ainult praeguse oleku ja algse oleku erinevust (säästame vähemalt 190 GB).

Iga lahter on omaette ZFS-i andmestik ja see on äärmiselt mugav. ZFS võimaldab ka teha muid lahedaid asju, näiteks saata hetktõmmiseid SSH kaudu. Me ei hakka seda kirjeldama, neid on juba palju.

Samuti väärib märkimist hosti kaugseire vajaduse järele, selleks otstarbeks on meil olemas Zabbix.

B - ohutus

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

Konfidentsiaalsus — UNIX-i-laadsete süsteemide standardsed tööriistad tagavad selle põhimõtte rakendamise. Me eraldame loogiliselt juurdepääsu igale süsteemi loogiliselt eraldi elemendile – lahtrile. Juurdepääs tagatakse standardse kasutajaautentimise abil, kasutades kasutajate isiklikke võtmeid. Kogu suhtlus lõpplahtrite vahel ja nendega on krüpteeritud. Tänu ketta krüpteerimisele võime olla kindlad andmete turvalisuses ketta vahetamise või teisele serverile migreerimise ajal. Ainus kriitiline juurdepääs on juurdepääs hostsüsteemile, kuna selline juurdepääs annab üldiselt juurdepääsu konteinerites olevatele andmetele.

Ausus — Seda põhimõtet rakendatakse mitmel erineval tasandil. Esiteks on oluline märkida, et serveririistvara, ECC-mälu ja ZFS puhul hoolitseb andmete terviklikkuse eest juba „karbist võttes“ infobittide tasandil. Hetkelised hetktõmmised võimaldavad teil igal ajal varukoopiaid teha. Mugavad tööriistad lahtrite eksportimiseks ja importimiseks muudavad lahtrite replikatsiooni lihtsaks.

Kättesaadavus — See on valikuline. See sõltub sellest, kui kuulus sa oled ja kas sul on vihkajaid. Meie näites tagasime, et rahakotile pääseb ligi ainult TOR-võrgust. Vajadusel saad tulemüüril kõik blokeerida ja lubada serverile juurdepääsu ainult tunnelite kaudu (TOR või VPN on omaette küsimus). Nii on server välismaailmast maksimaalselt eraldatud ja ainult meie ise saame sellele ligipääsetavust mõjutada.

Keeldumise võimatus — Ja see sõltub edasisest kasutamisest ja õigete kasutajaõiguste, juurdepääsu jms poliitikate järgimisest. Kuid õige lähenemisviisi korral auditeeritakse kõiki kasutaja toiminguid ning tänu krüptograafilistele lahendustele on võimalik selgelt tuvastada, kes ja millal teatud toiminguid tegi.

Loomulikult ei ole kirjeldatud konfiguratsioon absoluutne näide sellest, kuidas see alati peaks olema, vaid pigem üks näide sellest, kuidas see saab olla, säilitades samal ajal väga paindliku skaleeritavuse ja kohandamisvõimalused.

Aga kuidas on lood täieliku virtualiseerimisega?

Täieliku virtualiseerimise kohta cbsd abil saate teada loe siitLisan selle vaid detailsemalt. bhyve Mõned kerneli valikud tuleb lubada.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Seega, kui äkki tekib vajadus dokkija käivitada, siis me tõstame mõned debian ja edasi!

Bitcoin puuris?

See on kõik

Ma arvan, et see on kõik, mida ma jagada tahtsin. Kui teile artikkel meeldis, võite mulle bitcoine visata - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttcKui soovite rakke töös proovida ja bitcoine saada, võite külastada minu lehte. lemmikloomaprojekt.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster