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 ja 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 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 и Ainuke 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.

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

On 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=1Samuti tasub veenduda, et teil on installitud süsteemi uusim versioon ja Nä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. .
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/$MYFILENAMEMe kaasame
sysrc auditd_enable=YES
# service auditd start
Selle asja haldamine on täpselt kirjeldatud .
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 pärit , Soovin talle selle imelise utiliidi jaoks rohkem tervist ja õnnistust!
Konteinerid? Jälle Docker?
Kuid mitte. - 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.

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. Vaatleme kasutusnäidet bhyve allolevas näites.
Hostikeskkonna installimine ja seadistamine
Me kasutame FS-i See 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. .
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 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

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/bitcoindjexec 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/webappja 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. 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. , 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 walletelectrum:/@[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


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.200Hmm, 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 = socks5polipo:/@[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
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:8123Nüü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:22tor:/@[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.onionSiin 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@localNoh, 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 , see saab tegelikult olema meie peamine töövahend bitcoiniga. U *, mida me deemoni rollis kasutama hakkame, on , 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/32bitcoind:/@[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

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:9735tor:/@[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.onionNüü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 likelightning@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=testme 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
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-dataNagu 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. 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 .
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 Lisan 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!

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