Bitcoin puuris?

Elus, et olen ametilt arvutisĂŒsteemide ja vĂ”rkude administraator (lĂŒhidalt: sĂŒsteemihaldur) ning mul on olnud ĂŒle 10 aasta professionaalset kogemust erinevate sĂŒsteemidega, sealhulgas nendega, mis nĂ”uavad [ĐżĐŸ|за]vishennud meetmeid turvalisuse tagamiseks. Ja olen samuti leidnud, et mĂ”ni aeg tagasi huvitab mind bitcoiin, ja mitte lihtsalt ei kasutanud seda, vaid kĂ€ivitasin ka mitu mikroteenust, et Ă”ppida ise töötama bitcoini vĂ”rgus (see on p2p pĂ€rast) arendaja vaatenurgast (ma muidugi ei ole just kĂ”ige parem dev, lihtsalt mööda jalutasin). Aga ma ei rÀÀgi arendamisest, vaid turvalisest ja efektiivsest keskkonnast rakenduste jaoks.

Finantstehnoloogiad (fintech) kĂ€ivad kĂ€sikĂ€es infotehnoloogia turvalisusega (infosec) ja esimene vĂ”ib töötada ilma teiseta, aga mitte kaua. SeetĂ”ttu tahan jagada oma kogemust ja tööriistade komplekti, mida ma kasutan, mis hĂ”lmab nii fintech, kui ka infosec, kĂŒll aga vĂ”ib seda kasutada ka laiemates vĂ”i tĂ€iesti erinevates ĂŒlesannetes. Selles artiklis rÀÀgin ma mitte niivĂ”rd Bitcoinist, vaid infrastruktuuri mudelist finants- (ja mitte ainult) teenuste arendamiseks ja haldamiseks — ĂŒhe sĂ”naga teenustest, kus „B” mĂ€ngib olulist rolli. See kehtib nii Bitcoin'i börsi kui ka tĂŒĂŒpilise ettevĂ”tte teenuste mitmekesise valiku kohta, mis Bitcoiniga kuidagi ei seondu.

Soovin mĂ€rkida, et olen pĂ”himĂ”tete poolt „keep it stupid simple” ja „less is more”, seega nii artikkel kui ka selles kirjeldatud sisu omavad omadusi, mis tulenevad nendest pĂ”himĂ”tetest.

Kujuteldav stsenaarium: Vaatame kĂ”ike bitcoini vahetuse nĂ€itel. Otsustasime kĂ€ivitada rubla, dollari, euro ja bitcoinide vahetuse ning meil on juba töötav lahendus, kuid teiste digitaalsete raha nagu Qiwi ja WebMoney puhul on meie Ă”iguskĂŒsimused lahendatud. Meil on valmis rakendus, mis toimib maksegateway'na rubla, dollari, euro ja teiste maksesĂŒsteemide jaoks. See on seotud meie pankakontodega ja omab mingit API-d meie lĂ”ppnĂ€idiste jaoks. Samuti on meil veebirakendus, mis toimib kasutajatele vahetuspunktina, sarnanedes tĂŒĂŒpilise Qiwi vĂ”i WebMoney kabinetiga — registreeruge, lisage kaart jne. See suhtleb meie gateway rakendusega, olgu see siis REST API kaudu kohalikus vĂ”rgus. NĂŒĂŒd otsustasime lisada bitcoine ja samal ajal uuendada infrastruktuuri, kuna algselt oli kĂ”ik kiirusest tingituna seatud virtuaalmasinatesse kontoris laua all... meie saidit hakati kasutama ja me hakkasime muretsema tööaja ja jĂ”udluse pĂ€rast.

Nii et alustame pĂ”hiasjast — serveri valik. Kuna meie nĂ€ite Ă€ri on vĂ€ike ja me usaldame hostimist (OVH), valime eelarvevariandi kus ei saa paigaldada sĂŒsteemi originaal .iso pildilt, kuid Ă€rge muretsege, IT-turbeosakond analĂŒĂŒsib kindlasti installitud pilti. Ja kui me kasvame, rendime oma lukustatud kappe ja piiratud fĂŒĂŒsilise juurdepÀÀsuga, vĂ”ib-olla isegi ehitame oma andmekeskuse. Igal juhul tasub meeles pidada, et riistvara rentimise ja valmis piltide installimise puhul on vĂ”imalus, et teie sĂŒsteemis on „hostija troojan”, mis enamasti ei ole mĂ”eldud teie jĂ€lgimiseks, vaid et pakkuda mugavamaid serverihalduse tööriistu.

Serveri seadistamine

Siin on kĂ”ik lihtne. Valime riistvara, mis sobib meie vajadustele. Siis valime FreeBSD pildi. VĂ”i ĂŒhendame (teise hostija ja oma riistvara puhul) IPMI vĂ”i monitori kaudu ja laadime FreeBSD .iso pildi kĂ€ivitamiseks. Orkestreeritud paigaldamiseks kasutan Ansible ja mfsbsd. Ainus asi, meie juhul Kimsufiga, valisime kohandatud paigaldamine , et kahe ketta peegelduses oleksid „avatud” ainult alglaadimis- ja /home partitsioonid, ĂŒlejÀÀnud kettaruumi krĂŒpteeritakse, kuid sellest rÀÀgime hiljem.

Bitcoin puuris?

SĂŒsteemi paigaldamine toimub tavapĂ€rasel viisil, ma ei hakka sellel peatuma, vaid toon vĂ€lja, et enne kasutuselevĂ”ttu tasub tĂ€helepanu pöörata tugedele valikutele, mida pakub bsdinstaller paigalduse lĂ”pus (kui paigaldad sĂŒsteemi ise):

Bitcoin puuris?

On hea materjal sellel teemal, lĂŒhidalt kordaksin seda siin.

Eelmainitud parameetreid on vĂ”imalik lubada ka juba installitud sĂŒsteemis. Selleks tuleb redigeerida laadija faili ja lubada tuuma 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 tasub veenduda, et sul on installitud uusim versioon sĂŒsteemist, ja teha kĂ”ik uuendused ja vĂ€rskendused. Meie juhul on nĂ€iteks vajalik uuendamine viimasele versioonile, kuna eelpaigaldatavad pildid jÀÀvad maha poole aasta-ĂŒhe aasta vĂ”rra. Samuti muudame SSH pordi teiseks, kui vaikimisi, lisame autentimise vĂ”tmete kaudu ja keelame parooli kaudu.

SeejĂ€rel seadistame aide, sĂŒsteemifailide konfiguratsiooni seisundi jĂ€lgimise. Ühest kĂŒljest saate sellest pĂ”hjalikumalt lugeda siin.

pkg install aide

ja redigeerime meie crontabi

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

Luba sĂŒsteemi auditeerimine

sysrc auditd_enable=YES

# service auditd start

Kuidas seda hallata, on suurepÀraselt kirjeldatud juhendist.

NĂŒĂŒd taaskĂ€ivitame ja alustame tarkvaraga serveris. Iga server toimib hĂŒperviisorina konteinerite vĂ”i tĂ€ielike virtuaalmasinate jaoks. SeetĂ”ttu on oluline, et protsessor toetaks VT-x ja EPT, kui plaanime kasutada tĂ€ielikku virtualiseerimist.

Konteinerite ja virtuaalmasinate haldamiseks kasutan cbsd alates olevole, soovin talle rohkem tervist ja Ônne selle suurepÀrase tööriista eest!

Konteinerid? Kas jÀlle docker?

Aga ei. FreeBSD Jailid — on suurepĂ€rane tööriist konteinerimiseks, ning mainitud cbsd nende konteinerite orkestreerimiseks, mille nimi on rakud.

Kletk on ÀÀrmiselt tĂ”hus lahendus infrastruktuuri loomiseks erinevate eesmĂ€rkide jaoks, kus lĂ”puks on vajalik eraldi teenuste vĂ”i protsesside tĂ€ielik isoleerimine. Sisuliselt on see klonni host-sĂŒsteemist, kuid ei nĂ”ua tĂ€ielikku „rauda“ virtualiseerimist. SeetĂ”ttu ei kulutata ressursse „kĂŒlg-OS-ile“, vaid ainult tehtavale tööle. Kui kletke kasutatakse sisemiste vajaduste jaoks, siis on see vĂ€ga mugav lahendus ressursi optimaalseteks kasutamiseks — hulk kletke ĂŒhel serveril vĂ”ivad igaĂŒks eraldi vajadusel kasutada kogu serveri ressursi. Arvestades, et erinevad alamteenused vajavad tavaliselt erinevatel aegadel lisavahendeid, saab ĂŒhest serverist maksimaalset tootlikkust, kui kletke Ă”igesti planeerida ja tasakaalustada serverite vahel. Vajadusel saab kletkedele seada ka piirangud kasutatavatele ressurssidele.

Bitcoin puuris?

Aga kuidas on korraliku virtualiseerimisega?

Nii palju kui mina tean, cbsd toetab töökorraldust bhyve ja XEN hĂŒpervĂ”rke. Teist ma pole kunagi kasutanud, aga esimene on suhteliselt noor hĂŒpervĂ”rk FreeBSD-lt. KĂ€sitleme nĂ€idet kasutamisest bhyve edasi nĂ€ites.

Hosti keskkonna seadistamine ja konfigureerimine

Kasutame FS-i ZFS. See on ÀÀrmiselt vĂ”imas tööriist serveri ruumi haldamiseks. ZFS-i abil on vĂ”imalik otse kettadelt luua erinevates seadetes olevaid maatrikseid, dĂŒnaamiliselt „kuumalt” ruumi suurendada, vahetada rikkeid saanud kettaid, hallata hetkeseisu ja palju, palju muud, mida vĂ”iks kirjeldada terve artiklite seeria jooksul. Tagasi meie serveri ja selle ketaste juurde. Paigaldamise alguses jĂ€ttis vaba ruumi ĆĄifreeritud osade jaoks. Miks see niimoodi? Selleks, et sĂŒsteem saaks automaatselt ĂŒles tĂ”usta ja SSH kaudu kuulata.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lisame ketta osa jÀÀkruumile

geli init /dev/ada0p4

sisestame meie ĆĄifreerimise parooli

geli attach /dev/ada0p4

taas sisestame parooli ja meil ilmub seade /dev/ada0p4.eli — see on meie ĆĄifreeritud ruum. SeejĂ€rel korrame sama ka /dev/ada1 ja teiste ketaste jaoks maatriksis. Ja loome uue ZFS bassein.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — no nĂ€ed, meie minimaalne töökomplekt on valmis. Peegeldav ketta massiiv juhuks, kui ĂŒks kolmest tĂ”rkub.

Loome andmebaasi uuel „puul“

zfs create vms/jails

pkg install cbsd — kĂ€ivitasime kĂ€su ja installime meie rakenduste haldamise tööriista.

PĂ€rast seda, kui cbsd on paigaldatud, tuleb see initsialiseerida:

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

Ja vastame hulga kĂŒsimustele, peamiselt vaikimisi vastustega.

*Kui kasutate krĂŒpteerimist, on oluline, et teenus cbsdd ei alustaks automaatselt, kuni olete kettad kĂ€sitsi vĂ”i automaatselt (meie nĂ€ites teeb seda zabbix) dekrĂŒpteerinud.

**Ma ei kasuta samuti NAT-i cbsd, vaid seadistan 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 kruntide jaoks
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

## Bitcoin vÔrgusisene port edastamine
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

Tuleb mĂ€rkida, et tulemĂŒĂŒripoliitikate seadmine on samuti eraldi teema, seega ei hakka ma sĂŒvenema BLOCK ALL poliitika ja valgete loendite seadistamisse, seda saab teha lugedes ametlikku dokumentatsiooni vĂ”i ĂŒkskĂ”ik milline suur hulk artikleid, mis on saadaval Google'is.

Noh, meil on cbsd paigaldatud, aeg luua meie esimene tööhobune — Bitcoin daemon rakenduses!

cbsd jconstruct-tui

Bitcoin puuris?

Siin nÀeme rakenduse loomise dialooge. PÀrast kÔigi vÀÀrtuste seadistamist loome!

Esimese rakenduse loomisel tuleb valida, mida kasutada rakenduste aluseks. Mina valin FreeBSD hoidlast kasutades kÀsku repo. See valik tehakse ainult konkreetse versiooni esimese rakenduse loomisel (saate majutada rakendusi igas versioonis, mis on vanem kui hostiversioon).

PĂ€rast seda, kui kĂ”ik on paigaldatud — kĂ€ivitame rakenduse!

# cbsd jstart bitcoind

Aga peame rakendusse paigaldama tarkvara.

# jls

   JID  IP Aadress     Hostinimi                   Tee
     1  192.168.0.1     bitcoind.space.com         /zroot/jails/jails/bitcoind

jexec bitcoind et pÀÀseda rakenduse terminali

ja juba rakenduses paigaldame tarkvara koos selle sĂ”ltuvustega (meie host-sĂŒ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

Rakendus Bitcoin on olemas, kuid me vajame anonĂŒĂŒmsust, kuna soovime ĂŒhendada mĂ”ned rakendused TORi vĂ”rku. Ja ĂŒldiselt on meie plaanides enamik rakendusest kahtlase tarkvaraga töötada ainult lĂ€bi proxy. TĂ€nu pf saabime NAT-i teatud IP-aadresside vahemikus lokaalses vĂ”rgus vĂ€lja lĂŒlitada ja lubame NAT-i ainult meie TOR-sĂ”lmele. Nii et isegi kui rakkude sisse pÀÀseb pahavara, ei saa ta tĂ”enĂ€oliselt ĂŒhendust vĂ€lismaailmaga, ja kui ta isegi suudab ĂŒhendust vĂ”tta, siis ei paljasta ta meie serveri IP-aadressi. SeetĂ”ttu loome veel ĂŒhe raku, et „edastada” teenuseid nagu „.onion”-teenus ja nagu vahepealne internetiĂŒhenduse jaoks eraldi rakkude jaoks.

# 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

Seame kuulama lokaalsel aadressil (kÔigile rakkudele on ligipÀÀsetav)

SOCKSPort 192.168.0.2:9050

Mida meil veel on puudu tÀielikuks Ônneks? Jah, me vajame teenust meie veebilehe jaoks, vÔib-olla isegi mitut. KÀivitame nginx-i, mis tÀidab reverse-proxy rolli ja hoolitseb Let's Encrypt sertifikaatide pikendamise eest.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Nii oleme 150 MB sÔltuvusi rakkudesse paigaldanud. Ja host on endiselt puhas.

Tagastame nginx-i seadistamise juurde hiljem, meil on vaja tÔsta veel kaks rakku meie makseteenuse jaoks nodejs ja rust ning veebirakenduse jaoks, mis mingil pÔhjusel töötab apache ja php peal, ja veel selle jaoks on vaja 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 pakette on isoleeritud

seejÀrel laadime gitiga meie rakenduse 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 arendajatele SSH juurdepÀÀsu otse puuri, nad teevad seal ise kÔik:

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

Port 2267 — muudame puuri SSH porti suvaliseks

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

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

Noh, teenus on kÀivitatud, jÀÀb ainult lisada reegel pf tulekahju sein

Vaadakem, millised IP-d meil puurides on ja kuidas meie "kohalik" vÀlja nÀeb

# jls

   JID  IP Aadress      Hostnimi                      Tee
     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 lisame reegli

# 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

ja kuna me juba siin oleme, lisame ka reegli reverse-proxy jaoks:

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

NĂŒĂŒd natuke bitcoini kohta

Mida meil on — meil on veebirakendus, mis on vĂ€ljastpoolt kergesti ligipÀÀsetav ja see suhtleb kohapeal meie maksevĂ€ravaga. NĂŒĂŒd peame seadistama töökeskkonna, et suhelda bitcoini vĂ”rku — node bitcoind see on lihtsalt demoon, mis toetab kohalikku koopiat aktuaalsest plokiahelast. Sellel demonil on RPC ja rahakoti funktsioon, kuid rakenduste arendamiseks on olemas mugavamad "ĂŒmbrikud". Alguses otsustasime paigaldada electrum — see on CLI rahakott. See rahakott kasutame kĂŒlmhoidlat meie bitcoiinide jaoks — need bitcoiinid, mida tuleb hoida "vĂ€lja" sĂŒsteemist, mis on kasutajatele kergesti ligipÀÀsetav ja ĂŒldse kaugel kĂ”igist. Sellel on ka GUI, nii et sama rahakotti kavatseme kasutada ka meie
lĂ€ptoppidel. Alguses kasutame electrumi avalike serveritega, hiljem ĂŒles tĂ”stame veel ĂŒhe kasti ElectrumX, et mitte kedagi sĂ”ltuda.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

veel 700 MB tarkvara on meil kastis

electrum:/@[8:53] # adduser

Kasutajanimi: wallet
TĂ€isnimi: 
Uid (jĂ€tta tĂŒhjaks vaikevÀÀrtuse jaoks): 
Sisselogimigrup [wallet]: 
Sisselogimigrup on wallet. Kas kutsuda wallet teistesse gruppidesse? []: 
Sisselogimisklass [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Kodujuurkataloog [/home/wallet]: 
Kodujuurkatalooge Ă”igused (jĂ€tta tĂŒhjaks vaikevÀÀrtuse jaoks): 
Kasutage paroolipÔhist autentimist? [yes]: no
Kas lukustada konto pÀrast loomist? [no]: 
Kasutajanimi   : wallet
Parool        : 
TĂ€isnimi      : 
Uid           : 1001
Klass         : 
RĂŒhmad        : wallet 
Kodu          : /home/wallet
Kodu reĆŸiim    : 
Shell         : /bin/tcsh
Lukustatud     : no
OK? (yes/no): yes
adduser: INFO: Kasutaja (wallet) on edukalt lisatud kasutajate andmebaasi.
Lisada teine kasutaja? (yes/no): no
Head aega!
electrum:/@[8:53] # su wallet

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

wallet@electrum:/ % electrum-3.6 create

{
    "msg": "Palun hoidke oma seeme turvalises kohas; kui te selle kaotate, ei saa te oma rahakotti taastada.",
    "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 loodud rahakott.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Meie on-chain rahakoti juurde saab tulevikus ĂŒhendust luua ainult piiratud ring inimesi. Et mitte avada juurdepÀÀsu vĂ€ljastpoolt selle rakenduse kaudu, toimub SSH kaudu ĂŒhendamine lĂ€bi TOR-i (selline detsentraliseeritud VPN variante). KĂ€ivitame rakenduse kaudu SSH, kuid ei puutu meie pf.conf faili hostis.

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

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

NĂŒĂŒd lĂŒlitame rahakotiga rakendusse internetiĂŒhenduse vĂ€lja. Seame sellele IP-aadressi teise alamvĂ”rgu ulatusest, mis ei ole NAT-itud. Esiteks muudame /etc/pf.conf hostil

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" muudame JAIL_IP_POOL="192.168.0.0/25", nii jÀÀvad kĂ”ik aadressid 192.168.0.126-255 ilma otsese internetiĂŒhenduseta. OmapĂ€rane tarkvaraline «air-gap» vĂ”rk. Ja NAT-reegel jÀÀb nagu oli

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

Laadime reeglid uuesti

# pfctl -f /etc/pf.conf

NĂŒĂŒd vĂ”tame ette meie rakenduse

# cbsd jconfig jname=electrum

Bitcoin puuris?

Bitcoin puuris?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Eemalda vana IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Seadista uus IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hm, kuid nĂŒĂŒd lĂ”petab ka sĂŒsteem töötamise. Kuid me saame mÀÀrata sĂŒsteemi proxy. Kuid on ĂŒks aga, TORis on see SOCKS5 proxy, ja mugavuse huvides tahaksime ka 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] # teenus polipo start

Noh, nĂŒĂŒd on meie sĂŒsteemis kaks proxy-serverit, ja mĂ”lemad suunavad lĂ€bi TOR: socks5://192.168.0.2:9050 ja http://192.168.0.6:8123

NĂŒĂŒd saame seadistada meie raha keskkonda

# 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 saab shell töötada proksi all. Kui soovime pakette installida, tuleb lisada /usr/local/etc/pkg.conf juurkontolt rakendusele

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

NĂŒĂŒd on aeg lisada TOR-i peidetud teenus meie SSH-teenuse aadressina rakenduse rahakotis.

# 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 kohalikust masinast. Aga kĂ”igepealt peate lisama meie SSH-vĂ”tme:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Ja kliendi Linux-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

Ühendame (Selle toimimiseks on vajalik kohalik TOR-deemon, mis kuulab porti 9050)

user@local ~$ ssh remotebtc

Hosti 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>) ' autentsust ei saa kehtestada.
ECDSA vÔtme sÔrmejÀlg on SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Kas olete kindel, et soovite jĂ€tkata ĂŒhenduse loomist (jah/ei/[sĂ”rmejĂ€lg])? jah
Hoiatus: 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) on pĂŒsivalt lisatud tuntud hostide loendisse.
FreeBSD 12.1-RELEASE-p1 GENERIC
Ketta ruumi sÀÀstmiseks kodukataloogis, kompressige harva kasutatavaid faile kÀsuga "gzip filename".
        -- Dru <genesis@istar.ca>
wallet@electrum:~ % logout

Edu!

Kohene ja mikromaksete jaoks on meil samuti vajalik node Lightning Network, see saab olema meie peamine tööriist Bitcoiniga. Me *c-lightning, mida kavatseme kasutada daemonina, on Sparko plug-in, mis on tÀieÔiguslik HTTP (REST) liides ja vÔimaldab töötada nii off-chain kui on-chain tehingutega. c-lightning toimimiseks on vajalik bitcoind node.

*on erinevad rakendused erinevatel programmeerimiskeeltel Lightning Networki protokollile. Nendest, mida oleme testinud, tundus c-lightning (kirjutatud C-s) kÔige stabiilsem ja ressursitÔhusam

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/@[10:23] # adduser

Kasutajanimi: 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 vajalikud paketid kompileeritakse ja installitakse, loome RPC kasutaja lightningd ĂŒhes bitcoind

# jexec bitcoind

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

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#luba ainult c-lightning
rpcallowip=192.168.0.7/32

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

Minu kaootiline navigeerimine rakkude vahel osutub mitte nii kaootiliseks, kui mĂ€rkida tööriist tmux, mis vĂ”imaldab ĂŒhe sessiooni raames luua mitmeid alam-sessioone terminalides. Analoog: ekraan

Bitcoin puuris?

Noh, me ei taha paljastada meie sĂ”lme tĂ”elist IP-aadressi ja soovime kĂ”iki rahalisi tehinguid teha TOR-i kaudu. SeetĂ”ttu on meil veel ĂŒks .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

nĂŒĂŒd loome konfiguratsiooni c-lightning jaoks

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 ~

kui samuti luua konfigureerimisfail bitcoin-cli jaoks, tööriist, mis suhtleb bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

kontrollime

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

[
  "test"
]

kÀivitame lightningd

lightning@lightning:~ % lightningd --daemon

Mina lightningd saab tööriista hallata lightning-cli, nÀiteks:

lightning-cli newaddr saada aadress uue sissetuleva makse jaoks

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all saada aadressile kÔik rahakoti raha (kÔik on-chain aadressid)

Samas ka kÀsklused off-chain operatsioonide jaoks lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay jne.

Aga rakendusega suhtlemiseks on meil REST Api

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

Teeme kokkuvÔtte

# jls

   JID  IP Adresse      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 konteinerit, igaĂŒhel oma ligipÀÀsutasemeid nii sisenevatel kui ka kohaliku vĂ”rgu vajadustel.

# zfs list

NIMI                    KASUTATUD  KÄTTESAADAV  VIIT  KINNITUSKOHT
zroot                   279G  1.48T    88K  \/zroot
zroot\/ROOT             1.89G  1.48T    88K  ei midagi
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Ă€ha, kasutab bitcoind kogu 190 GB ruumi. Ent mis siis, kui vajame veel ĂŒhte nodi testimiseks? Siin tuleb ZFS nagu tellitud. Koos cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com saame luua snapshot'i ja siduda uue raku selle snapshot'iga. Uuel rakul on tĂ€iesti oma ruum, kuid failisĂŒsteemis arvestatakse vaid erinevust praeguse oleku ja originaali vahel (sÀÀstame vĂ€hemalt 190 GB)

Iga rakku on oma eraldi ZFS andmestik ja see on ÀÀrmiselt mugav. ZFS vÔimaldab samuti teha erinevaid teisi toredaid asju, nÀiteks SSH kaudu snapshotide saatmine. Kirjeldamine jÀtame vahele, niigi on palju.

On samuti oluline mainida hosti kaugmonitorimise vajadust, meil on selleks Zabbix.

B — turvalisus

Mis puudutab turvalisust, lÀhtume infrastruktuuri kontekstis vÔtmete ning pÔhimÔtete alusest:

Privaatsus — Standardsete UNIX-laadsete sĂŒsteemide tööriistad tagavad selle pĂ”himĂ”tte rakendamise. Me jagame loogiliselt juurdepÀÀsu igale loogiliselt eraldatud sĂŒsteemi elemendile — rakule. JuurdepÀÀs toimub standardsete kasutaja autentimistehnikate kaudu kasutajate isiklike vĂ”tmete jĂ€rgi. KĂ”ik suhtlus rakkude vahel ja kuni lĂ”ppkoodideni toimub krĂŒpteeritud vormis. Diskide krĂŒpteeringu tĂ”ttu saame olla muredeta andmete turvalisuse osas, kui vahetame ketast vĂ”i migreerime teisele serverile. Ainus kriitiline juurdepÀÀs on juurdepÀÀs host-sĂŒsteemile, kuna see juurdepÀÀs tagab tavaliselt andmete ligipÀÀsu konteinerite sees.

Terviklikkus — Selle pĂ”himĂ”tte tĂ€itmine toimub mitmes erinevas tasandis. Esiteks on oluline mĂ€rkida, et serverivarustuse, ECC-mĂ€lu ja ZFS puhul hoolt andmine andmete terviklikkuse eest bititasemel on juba „kastist vĂ€ljas“. Kohesed snapshots vĂ”imaldavad varundamist igal ajal reaalajas. Mugavad rakkude eksportimise ja importimise tööriistad lihtsustavad rakkude replikatsiooni.

Saadavus — See on juba valikuline. See sĂ”ltub teie tuntusest ja sellest, kas teil on vaenlasi. Meie nĂ€ites tagasime rahakoti ligipÀÀsu ainult TOR-vĂ”rgust. Vajadusel saab tulemĂŒĂŒris blokeerida kĂ”ik ja lubada serverisse ligipÀÀsu ainult tunnelite (TOR vĂ”i VPN on teine kĂŒsimus) kaudu. Nii on server eraldatud vĂ€lisest maailmast nii palju kui vĂ”imalik, ja selle kĂ€ttesaadavust saame mĂ”jutada ainult meie ise.

Keeldumise vĂ”imalus — Ja see sĂ”ltub edasisest kasutusest ja Ă”igete kasutajaĂ”iguste poliitikate jĂ€rgimisest jne. Kuid Ă”ige lĂ€henemise korral auditeeritakse kĂ”ik kasutajate toimingud ning tĂ€nu krĂŒptograafilistele lahendustele on vĂ”imalik ĂŒheselt tuvastada, kes ja millal teatud toiminguid sooritas.

Muidugi pole kirjeldatud konfigureerimine absoluutselt nĂ€ide sellest, kuidas see alati olema peab; see on pigem ĂŒks nĂ€ide, kuidas see vĂ”ib olla, sĂ€ilitades vĂ€ga paindlikud skaleerimise ja kohandamise vĂ”imalused.

Aga kuidas on tÀieliku virtualiseerimisega?

TÀieliku virtualiseerimise kohta cbsd vahenditega saab. lugeda siit. Lisaks mainin, et tööde jaoks bhyve on vajalik aktiveerida mÔned tuuma parameetrid.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Nii et kui peaks olema vajadus Dockerisse minna, siis tĂ”stame ĂŒles mĂ”ne debiani ja edasi!

Bitcoin puuris?

Ja see ongi kÔik.

TĂ”enĂ€oliselt on see kĂ”ik, mida ma soovisin jagada. Kui teile artikkel meeldis, siis vĂ”ib mulle Bitcoin'ide saatmiseks kirjutada — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Kui soovite proovida rakendusi ja teil on veidi Bitcoine, siis vĂ”ite kĂŒlastada minu pet-project.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster