Bitcoini puuris?

Kuidas on nii juhtunud, et ma olen ametilt arvutisĂŒsteemide ja vĂ”rkude haldaja (lĂŒhemalt: sĂŒsteemihaldur) ning mul on olnud vĂ”imalus töötada erinevate sĂŒsteemidega rohkem kui 10 aasta jooksul, sealhulgas ka nendega, mis nĂ”uavad [ĐżĐŸ|за]vishenenĂœch ohutusmeetmeid. Ja veel on nii juhtunud, et mĂ”ni aeg tagasi avastasin endale huvitava bitcoini, ja ma ei ole lihtsalt seda kasutanud, vaid olen loonud mitmeid mikroteenuseid, et Ă”ppida iseseisvalt töötama bitcoini vĂ”rgus (see on ju p2p, nagu nad ĂŒtlevad) arendaja vaatepunktist (ma muidugi pole just kĂ”ige parem arendaja dev, lihtsalt mööda kĂ”ndinud). Aga ma ei rÀÀgi arendamisest, vaid turvalisest ja tĂ”husast keskkonnast rakendustele.

Rahatehnoloogiad (fintech) kĂ€ivad kĂ€sikĂ€es infotehnoloogia turvalisusega (infosec), ja ilma teiseta ei saa esimene kaua töötada. SeetĂ”ttu tahan jagada oma kogemusi ja tööriistade komplekti, mida kasutan, mis hĂ”lmab nii fintech, kui ka infosec, samal ajal kui see vĂ”iks olla kasutusel ka laiemates vĂ”i hoopis teistsugustes eesmĂ€rkides. Selles artiklis rÀÀgin mitte niivĂ”rd bitcoini, vaid infrastruktuuri mudelist rahanduse (ja mitte ainult) teenuste arendamiseks ja haldamiseks — lĂŒhidalt nendest teenustest, kus „B” on oluline. See on rakendatav nii bitcoiniga kauplemise platvormile kui ka tĂŒĂŒpilisele vĂ€ikese ettevĂ”tte teenuste zooloogiale, mis ei ole bitcoini otseselt seotud.

MĂ€rgin, et ma olen „keep it stupid simple” pĂ”himĂ”tete pooldaja „less is more” ja , seetĂ”ttu on nii artikkel kui ka selles kirjeldatud omamoodi omadused, mis pĂ”hinevad nende pĂ”himĂ”tete segu.Kujuteldav stsenaarium:

Kujuteldav stsenaarium: Vaatame kĂ”ike nĂ€ite kaudu Bitcoin vahetusest. Otsustasime kĂ€ivitada rubla, dollari ja euro vahetamist Bitcoinideks ja tagasi, ja meil on juba töötav lahendus, kuid teiste digitaalsete rahade, nagu QIWI ja Webmoney, osas on meie Ă”igusalased kĂŒsimused lahendatud. Meil on olemas rakendus, mis toimib maksevĂ€ravana rubla, dollari ja euro jaoks ning teiste maksesĂŒsteemide tarbeks. See on seotud meie pangakontodega ja sisaldab mingit API-d meie lĂ”ppprogrammide jaoks. Samuti on meil veebirakendus, mis toimib vahetuspunktina kasutajatele, nagu tĂŒĂŒpiline QIWI vĂ”i Webmoney kabinet — registreerige konto, lisage kaart ja nii edasi. See suhtleb meie vĂ€ravarakendusega, olgu see siis REST API kaudu kohalikus vĂ”rgus. Otsustasime nĂŒĂŒd ĂŒhenduda Bitcoinidega ja samal ajal uuendada infrastruktuuri, kuna alguses kĂ”ik tĂ”steti kiiresti Virtuaalboxide abil kontori all olevas lauas... veebilehte on hakatud 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 meie hostijat (OVH), valime eelarvevariandi , kus ei saa installida sĂŒsteemi originaalsest .iso pildist, kuid pole hullu, IT-turbeosakond viib kindlasti lĂ€bi analĂŒĂŒsi paigaldatud pildi suhtes. Kui me kasvame, siis rentime isegi oma lukustatud riidekapi piiratud fĂŒĂŒsilise ligipÀÀsuga, ehk ehitame oma andmekeskuse. Igatahes, tuleb meeles pidada, et kui rentida riistvara ja installida valmis pilte, on olemas vĂ”imalus, et teie sĂŒsteemis on „hostija troojal”, mis enamasti ei ole mĂ”eldud teid jĂ€lgimiseks, vaid et pakkuda mugavamaid serveri haldamise tööriistu.

Serveri seadistamine

Siin on kĂ”ik lihtne. Valime riistvara, mis sobib meie vajadustele. SeejĂ€rel valime FreeBSD pildi. VĂ”i ĂŒhendame, kui tegemist on teise hostijaga ja oma riistvaraga, IPMI kaudu vĂ”i monitori ĂŒhendamisega ja laadime FreeBSD .iso pildi kĂ€ivitusele. Orkestreerimise installatsiooni jaoks kasutan Ansible ja mfsbsd. Ainus erinevus on, et meie juhul Kimsufi puhul, valisime kohandatud paigalduse , et kaks ketast peegeldamises oleksid „avatud“ ainult kĂ€ivitus- ja /home partitsioonide jaoks, ĂŒlejÀÀnud ketta ruum on krĂŒpteeritud, kuid sellest hiljem.

Bitcoini puuris?

SĂŒsteemi paigaldamine toimub standardse viisi jĂ€rgi, ma ei peatuks sellel, vaid mainin, et enne kasutusele vĂ”tmist tasub tĂ€helepanu pöörata karmistamine valikutele, mida pakub bsdinstaller paigaldamise lĂ”pus (kui paigaldate sĂŒsteemi ise):

Bitcoini puuris?

Jah hea materjal selle teema kohta, ma kordaksin seda lĂŒhidalt siin.

Ülalmainitud parameetreid on vĂ”imalik aktiveerida juba paigaldatud sĂŒsteemis. Selleks tuleb redigeerida laadimisfaili ja aktiveerida tuuma parameetrid. *ee — see 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

Tasub ka veenduda, et teil on installitud sĂŒsteemi viimane versioon, ja teha kĂ”ik uuendused ja uuendused. Meie juhul, nĂ€iteks, on vajalik uuendada viimaseni, kuna eelnevad pildid on poole aasta-kuni aasta vĂ”rra maas. Ja seal muudame SSH pordi erinevaks vaikeportist, lisame vĂ”tme autentimise ja keelame parooliga.

SeejĂ€rel seadistame aide, sĂŒsteemi konfiguratsioonifailide oleku jĂ€lgimise. Rohkem ĂŒksikasjalikult saab lugeda siit.

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

LĂŒlitame sisse sĂŒsteemi auditeerimine

sysrc auditd_enable=YES

# service auditd start

Kuidas seda haldada on suurepÀraselt kirjeldatud juhendist.

NĂŒĂŒd taaskĂ€ivitame ja alustame serveri tarkvaraga. Iga server on hĂŒperviisor 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 utiliidi eest!

Konteinerid? Kas jÀlle docker?

Aga ei. FreeBSD Jails — see on suurepĂ€rane vahend konteinerite loomiseks, ja mainitud cbsd nende konteinerite orkestreerimiseks, mille nimi on — rakud.

Kleidi on ÀÀrmiselt tĂ”hus lahendus infrastruktuuri loomiseks mitmesugustel eesmĂ€rkidel, kus lĂ”puks on vajalik erinevate teenuste vĂ”i protsesside tĂ€ielik isolatsioon. Sisuliselt on see kĂŒlalissĂŒsteemi kloon, kuid see ei vaja tĂ€ielikku „riistvaralist“ virtualiseerimist. SeetĂ”ttu ei kulutata ressursse „kĂŒlalis-OSile“, vaid ainult teostatavale tööle. Kui kleite kasutatakse sisemiste vajaduste tarbeks, on see vĂ€ga mugav lahendus ressursside optimaalseks kasutamiseks – rida kleite ĂŒhel fĂŒĂŒsilisel serveril vĂ”ivad igaĂŒhekshaaval vajaduse korral kasutada kogu serveri ressursi. Arvestades, et erinevate alateenuste jaoks on erinevatel aegadel vajalikud lisalĂ€henemised, saab ĂŒhest serverist maksimaalset jĂ”udlust, kui kliente Ă”igesti planeerida ja tasakaalustada eri serverite vahel. Vajadusel saab kleitidele ka seada piirangud kasutatavate ressursside osas.

Bitcoini puuris?

Aga mis on tÀieliku virtualiseerimisega?

Nii palju kui mina tean, cbsd toetab töö bhyve ja XEN hĂŒperviisoreid. Teist ma pole kunagi kasutanud, aga esimene on suhteliselt noor hĂŒperviisor FreeBSD-lt. Vaadakem kasutamise nĂ€idet bhyve jĂ€rgnevates nĂ€idetes.

Hosti keskkonna installimine ja seadistamine

Kasutame FS ZFS. See on ÀÀrmiselt vĂ”imas tööriist serveri ruumi haldamiseks. ZFS-i abil saab otse kettadest luua erinevate konfiguratsioonidega kombe, dĂŒnaamiliselt „kuumalt“ laiendada ruumi, vahetada defektsed kettad, hallata snapshot’e ja palju muud, mida vĂ”iks kirjeldada terve artiklisarja jooksul. Naaseme meie serveri ja selle ketaste juurde. Paigaldamise alguses jĂ€tame kettale vaba ruumi krĂŒpteeritud sektsioonide jaoks. Miks? Selleks, et sĂŒsteem tĂ”useks automaatselt ja kuulaks SSH kaudu.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lisame kettasektsiooni jÀÀkruumile

geli init /dev/ada0p4

sisestame meie krĂŒpteerimisparooli

geli attach /dev/ada0p4

sisestame uuesti parooli ja meil on seade /dev/ada0p4.eli — see on meie krĂŒpteeritud ruum. SeejĂ€rel kordame sama protseduuri /dev/ada1 ja ĂŒlejÀÀnud ketaste jaoks maatriksis. Ja loome uue ZFS bassein.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — nĂŒĂŒd on meil minimaalne lahinguparandus valmis. Peegeldavad kettad juhuks, kui ĂŒks kolmest ebaĂ”nnestub.

Loome uue "puli" andmekogumi

zfs create vms/jails

pkg install cbsd — kĂ€itasime kĂ€sku ja installime meie koode haldamise tarkvara.

PĂ€rast seda, kui cbsd see on installitud, peab selle initsialiseerima:

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

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

*Kui kasutate krĂŒptimist, on oluline, et teenus cbsdd ei kĂ€ivitu automaatselt, kuni te ei dekrĂŒpteeri kettaid kĂ€sitsi vĂ”i automaatselt (meie nĂ€ites teeb seda zabbix)

**Ma ei kasuta 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

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

## Bitcoin vÔrgupordi 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

Tulemuste seadmine on ka eraldi teema, seetĂ”ttu ei kavatse ma sĂŒveneda poliitikasse BLOCK ALL ja valge nimekiri seadistamisse, seda saab teha lugedes ametlikku dokumentatsiooni vĂ”i ĂŒkskĂ”ik millist suurt hulka artikleid, mis on Google’is saadaval.

Noh 
 meil on cbsd installitud, on aeg luua meie esimene tööloom — bitcoini teenus kojas!

cbsd jconstruct-tui

Bitcoini puuris?

Siin nÀeme koha loomise dialooge. PÀrast kÔikide vÀÀrtuste seadmist loome!

Esimese koha loomisel tuleb valida, mida kasutada kohtade aluseks. Valin FreeBSD hoidlast distributsiooni kÀsuga repo. See valik tehakse ainult konkreetse versiooni esimese koha loomisel (esinevad kÔikide versioonide kohad, mis on vanemad kui hosti versioon).

PĂ€rast kĂ”ike installimist — kĂ€ivita koht!

# cbsd jstart bitcoind

Aga me peame koopa installima tarkvara.

# jls

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

jexec bitcoind et pÀÀseda koha kÀsureale

ja juba sees koopa sees installime 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

Bitcoini kojas on, aga meil on vaja anonĂŒĂŒmsust, sest tahame mĂ”nda kohta ĂŒhendada TOR-vĂ”rgus. Ja ĂŒldiselt plaanime kĂ€itada enamikku kohti kahtlase tarkvaraga ainult lĂ€bi proksi. TĂ€nu pf NAT saab vĂ€lja lĂŒlitada teatud IP-aadresside vahemikule kohaliku vĂ”rgu sees ja lubada NAT ainult meie TOR-sĂ”lmele. Seega, isegi kui pahavara satub kasti, siis tĂ”enĂ€oliselt ei pÀÀse taĂŒhendusse vĂ€lismaailmaga, ja kui see juhtub, siis ei avalda ta meie serveri IP-aadressi. SeetĂ”ttu loome veel ĂŒhe kasti, et «edastada» teenuseid nagu «.onion»-teenus ja kui proxy internetiĂŒhenduseks eraldi kastidele.

# 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 kohalikul aadressil (kÔikidele kastidele on ligipÀÀs)

SOCKSPort 192.168.0.2:9050

Mida meil veel puudub tĂ€ielikuks Ă”nneks? Jah, meil on vaja teenust meie veebilehe jaoks, vĂ”ib-olla isegi rohkem kui ĂŒhte. KĂ€ivitame nginx'i, mis tĂ€idab vastupropĂŒĂŒdija 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

Ja nĂŒĂŒd 150 MB sĂ”ltuvusi paigaldasime kasti. Ja host on endiselt puhas.

Naaseme nginx'i seadistamise juurde hiljem, peame tÔstma veel kaks kasti meie maksevÀrava jaoks nodejs-is ja rustis ning veebirakenduse jaoks, mis mingil pÔhjusel on apache ja php, ning viimasel on vaja 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 pakette isoleeritud

SeejÀrel toetame giti kaudu meie rakendust 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. kastis.

Siin anname arendajale SSH juurdepÀÀsu otse kasti, nad teevad seal ise kÔik Àra:

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

Port 2267 — muudame kasti SSH pordi suvaliseks

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

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

Noh, nĂŒĂŒd on teenus kĂ€ivitatud, alles jÀÀb reegli lisamine pf tulede seinale

Vaadake, millised IP-d meil kastides on ja kuidas meie «kohalik» vÀlja nÀeb

# jls

   JID  IP Aadress      Hostinimi                      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

Kuna me siin oleme, lisame ka reegli vastupropĂŒĂŒdija 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

Noh, ja nĂŒĂŒd veidi bitcoini kohta

Mida me omame — meil on veebirakendus, mis on saadaval vĂ€ljastpoolt, ja see suhtleb kohalikult meie maksevĂ€ravaga. NĂŒĂŒd peame ette valmistama töökoha, et suhelda bitcoini vĂ”rgu enda — sĂ”lmega. bitcoind See on lihtsalt demon, mis toetab kohaliku koopiat akutaalsest plokiahelast. Sellel demonil on RPC ja rahakoti funktsioon, kuid rakenduste arendamiseks on olemas mugavamad "mĂ€hised". Esmalt otsustasime installida electrum — CLI rahakoti. Seda rahakotti kasutame meie Bitcoinide "kĂŒlmhoidla" jaoks - need Bitcoinid, mida tuleb hoida "vĂ€lja" sĂŒsteemist, mis on kasutajatele kergesti ligipÀÀsetav ja ĂŒldiselt kaugel kĂ”igest. Sellel on ka GUI, seega plaanime kasutada sama rahakotti ka meie
sĂŒlearvutites. Alguses kasutame elektreumit avalike serveritega, ja hiljem tĂ”stame veel ĂŒhes puuris 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 puuris

electrum: /@[8:53] # adduser

Kasutajanimi: rahakott
TĂ€isnimi: 
Uid (jĂ€ta tĂŒhjaks vaikimisi): 
Sisselogimisgrupp [rahakott]: 
Sisselogimisgrupp on rahakott. Kas kutsuda rahakott teistesse gruppidesse? []: 
Sisselogimisklass [vaikimisi]: 
KĂ€sk (sh csh tcsh nologin) [sh]: tcsh
Kodu kataloog [ /home/rahakott]: 
Kodu katalooge Ă”igused (jĂ€ta tĂŒhjaks vaikimisi): 
Kas kasutada parooliga autentimist? [jah]: ei
Kas lukustada konto pÀrast loomist? [ei]: 
Kasutajanimi: rahakott
Parool: <vĂ€lja lĂŒlitatud>
TĂ€isnimi: 
Uid: 1001
Klass: 
Grupp: rahakott
Kodu: /home/rahakott
Kodu reĆŸiim: 
KĂ€sk: /bin/tcsh
Lukustatud: ei
OK? (jah/ei): jah
adduser: INFO: edukalt lisatud (rahakott) kasutajate andmebaasi.
Lisa teine kasutaja? (jah/ei): ei
Head aega!
electrum: /@[8:53] # su rahakott

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

rahakott@electrum: / % electrum-3.6 loo

{
    "msg": "Palun hoidke oma seeme ohutus kohas; kui kaotate selle, ei saa te oma rahakotti taastada.",
    "path": " /usr/home/rahakott/.electrum/wallets/default_wallet",
    "seed": "kadestav vÔit siga materjal ribad noor löök visuaalne okei kaktus juhuslik lind"
}

NĂŒĂŒd oleme loonud rahakoti.

rahakott@electrum: / % electrum-3.6 listaddresses

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

rahakott@electrum: / % electrum-3.6 abi

Meie on-chain rahakotiga saab edaspidi ĂŒhendust vĂ”tta vaid piiratud ring inimesi. Et mitte avada juurdepÀÀsu vĂ€ljast sellele puurile, toimub ĂŒhendused SSH kaudu lĂ€bi TOR (selline detsentraliseeritud VPNi variant). KĂ€ivitame puuris 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 rahakoti puuri Internetist vĂ€lja. Paneme sellele IP-aadressi teise alamsubtiirist, mis ei ole NAT-itud. Esiteks muudame /etc/pf.conf hostis

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" muudame JAIL_IP_POOL="192.168.0.0/25", seega ei oma kĂ”ik aadressid 192.168.0.126-255 otsest Interneti-ĂŒhendust. TĂ”eline tarkvaraline «air-gap» vĂ”rk. Ja NAT reegel jÀÀb samaks

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

Laadime reeglid uuesti

# pfctl -f /etc/pf.conf

NĂŒĂŒd viime ellu meie «raku»

# cbsd jconfig jname=electrum

Bitcoini puuris?

Bitcoini 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

Hmm, kuid nĂŒĂŒd ei tööta ka sĂŒsteem ise. Siiski saame mÀÀrata sĂŒsteemi puhverserveri. Kuid on ĂŒks probleem: TOR-s 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, millest mĂ”lemad suunavad kaudu TOR: socks5://192.168.0.2:9050 ja http://192.168.0.6:8123

NĂŒĂŒd on vĂ”imalik seadistada meie rahakoti 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

Nii, nĂŒĂŒd töötab shell puhverserveri kaudu. Kui soovime pakette installeerida, siis peaksime lisama /usr/local/etc/pkg.conf rooti rakust

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

NĂŒĂŒd on aeg lisada TORi varjatud teenus meie SSH teenuse aadressiks rahakoti rakus.

# 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 aadress ĂŒhendamiseks. Kontrollime oma lokaalsest masinast. Kuid kĂ”igepealt tuleb lisada meie SSH-vĂ”ti:

wallet@electrum:/ % mkdir ~/ .ssh

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

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

Ja klient Linux masina pealt

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 (Selleks, et see töötaks, on vajalik lokaalne TORi demon, mis kuulab aadressil 9050)

user@local ~$ ssh remotebtc

Hosti autentsus 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' ei ole seotud.
ECDSA vÔtme sÔrmejÀlg on SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Kas olete kindel, et soovite jĂ€tkata ĂŒhendamist (jah/ei/[sĂ”rmejĂ€lg])? jah
Hoiatus: 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) on alalise nimekirja tuntud hostide hulka lisatud.
FreeBSD 12.1-RELEASE-p1 GENERIC 
Kettaruumi sÀÀstmiseks oma kodudirektoris, komprimeerige harva kasutatavad failid kÀsuga "gzip filename".
        -- Dru <genesis@istar.ca>
wallet@electrum:~ % logout

Edu!

Kiirete ja mikro maksete jaoks on meil samuti vajalik node Lightning Network, see see ŃŃ‚ĐŸ Đ±ŃƒĐŽĐ”Ń‚ meie peamine tööriist Bitcoini jaoks. U *c-lightning, mida me plaanime kasutada daemonina, on Sparko plugin, mis on tĂ€ielik HTTP (REST) liides ja vĂ”imaldab töötada nii off-chain tehingutega kui ka on-chain tehingutega. c-lightning töötamiseks on vajalik bitcoind node.

*on erinevaid rakendusi erinevates programmeerimiskeeltes Lightning Networki protokollile. Nendest, mida oleme testinud, tundus c-lightning (kirjutatud C-s) kÔige stabiilsem ja ressursisÀÀstlikum

# 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

Kuna kÔik vajalik compileerub ja installitakse, loome RPC kasutaja lightningd ja 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 liikumine rakkude vahel ei olegi nii kaootiline, kui mĂ€rkida utiliit tmux, mis vĂ”imaldab ĂŒhe seansi sees luua mitmeid all-seansse terminalides. Analoog: screen

Bitcoini puuris?

Nii, me ei soovi meie node'i tegelikku IP-d paljastada ja tahame kĂ”iki finantstehingute lĂ€bi TOR-i teha. Seega on meil veel ĂŒks .onion vajalik.

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

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

lightning@lightning:~ % mkdir .lightning

lightning@lightning:~ % ee .lightning/config

alias=Minu-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
# eespoolt peaks initsialiseerimise logid (segatuna lightningd logidega) printima midagi nagu

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 tuleb luua konfiguratsioonifail bitcoin-cli jaoks, mis on 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

Ise lightningd saab kasutada tööriista lightning-cli, nÀiteks:

lightning-cli newaddr saada aadress uue siseneva makse jaoks

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

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

Samuti on kÀsklused off-chain operatsioonide 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'

Teeme kokkuvÔtte

# jls

   JID  IP Aadress      Hostinimi                      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
     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

Bitcoini puuris?

Meil on kogu rida konteinerite, igaĂŒhel oma ligipÀÀsud nii sise- kui ka kohaliku vĂ”rgu kaudu.

# zfs list

NIMI                    KASUTATUD  VABA  SUHTEN  MÄNGUPUNKT
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

Kuidas nĂ€ha, bitcoind vĂ”tab kĂ”ik 190 GB ruumi. Aga mis juhtub, kui vajame veel ĂŒht node'i testimiseks? Siin on ZFS just Ă”igel ajal. Aitavad cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com On vĂ”imalik luua hetkeseis ja siduda uus konteiner sellega. Uuel konteineril on tĂ€ielik oma ruum, kuid failisĂŒsteemis arvestatakse ainult erinevust praeguse seisundi ja originaali vahel (sÀÀstame vĂ€hemalt 190 GB).

Iga konteiner on omaette ZFS andmestik, mis on ÀÀrmiselt mugav. ZFS vĂ”imaldab ka teha muid lahedaid asju, nagu nĂ€iteks hetkeseisude saatmine SSH kaudu. Me ei hakka seda nĂŒĂŒd kirjeldama, sest juba on palju infot.

Oluline on mÀrkida ka hosti kaugseire vajadust, meie jaoks on selleks Zabbix.

B — turvalisus

Mis puutub turvalisusse, siis lÀhtume infrastruktuuri kontekstis pÔhiprintsipaalidest:

Privaatsus — Tavalised UNIX-sarnaste sĂŒsteemide tööriistad tagavad selle printsipaali tĂ€itmise. Me jagame loogiliselt juurdepÀÀsu igale loogiliselt eraldi sĂŒsteemi — konteinerile. JuurdepÀÀs toimub standardse kasutaja autentimise kaudu kasutajate privaatsete vĂ”tmete abil. Kogu side konteinerite vahel ja lĂ”ppkonteineriteni toimub krĂŒpteeritud kujul. Aitame andmete turvalisuse tagamisega, kasutades ketaste krĂŒpteerimist, nii et meil ei ole vaja muretseda andmete sĂ€ilitamise pĂ€rast ketaste vahetamise vĂ”i teisele serverile migreerimise ajal. Ainus kriitiline juurdepÀÀs on host-sĂŒsteemi juurdepÀÀs, kuna selline juurdepÀÀs tagab ĂŒldjuhul juurdepÀÀsu konteinerite andmetele.

Integriteet — Selle printsipaali tĂ€itmine toimub mitmesugustel tasanditel. Esiteks on oluline mĂ€rkida, et serveri riistvara korral hoolitseb ECC mĂ€lu ja ZFS juba "kĂ€ibelt" andmete terviklikkuse eest bitti tasemel. Kohesed hetkeseisud vĂ”imaldavad varundamist igal ajal reaalajas. Mugavad konteinerite eksportimise ja importimise tööriistad muudavad konteinerite replikeerimise lihtsaks.

Saadavus — See on juba vabatahtlik. SĂ”ltub teie tuntuse tasemest ja sellest, kas teil on ka vihkajaid. Meie nĂ€ites oleme taganud rahakoti kĂ€ttesaadavuse ainult TOR-vĂ”rgust. Vajadusel saab tulemĂŒĂŒris blokeerida kogu muu liikluse ja lubada juurdepÀÀsu serverile ainult tunnelite (TOR vĂ”i VPN on teine kĂŒsimus) kaudu. Nii jÀÀb server vĂ”imalikult kaugele vĂ€lismaailmast, ja mĂ”jutada selle kĂ€ttesaadavust saame ainult meie ise.

Keeldumatuse printsiip — See sĂ”ltub edasisest kasutamisest ja Ă”igete kasutajaĂ”iguste poliitikate jĂ€rgimisest jne. Kuid Ă”ige lĂ€henemise tĂ”ttu auditeeritakse kĂ”iki kasutajate tegevusi ja tĂ€nu krĂŒptograafilistele lahendustele on vĂ”imalik ĂŒhemĂ”tteliselt tuvastada, kes ja millal mingisuguseid tegevusi sooritas.

Muidugi ei ole kirjeldatud konfiguratsioon absoluutne nĂ€ide sellest, kuidas see alati olema peaks, vaid pigem ĂŒks nĂ€ide, kuidas see vĂ”ib olla, sĂ€ilitades samas vĂ€ga elastsed skaleerimis- ja kohandamisvĂ”imalused.

Aga kuidas on tÀieliku virtualiseerimisega?

TĂ€ieliku virtualiseerimise kohta cbsd kaudu saab rÀÀkida. lugeda siit. Lisaksin vaid, et tööks on bhyve vajalikud mĂ”ned tuuma parameetrid sisse lĂŒlitada.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="JAH"
...

Nii et kui mingil pĂ”hjusel on vaja Dockerit kasutada, siis paneme ĂŒles mĂ”ne Debian'i ja edasi!

Bitcoini puuris?

Ja see on kÔik.

TĂ”enĂ€oliselt on see kĂ”ik, mida soovisin jagada. Kui teile artikkel meeldis, siis vĂ”ite mulle mĂ”ned bitcoind saata — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Kui soovite proovida kettesid tegutsemas ja teil on natuke bitcoine, siis vĂ”ite kĂŒlastada minu pet-project.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster