Zgodilo se je, da sem po poklicu administrator računalniških sistemov in omrežij (na kratko: sysadmin) in imam več kot 10 let poklicnih izkušenj z različnimi sistemi, vključno tistimi, ki zahtevajo [po|za]višene ukrepe varnosti. Poleg tega sem pred časom odkril zanimanje za , in ne samo, da sem ga uporabljal, temveč sem zagnal tudi nekaj mikroservisov, da bi se naučil samostojno delati z bitcoin omrežjem (to je p2p, kot da) z vidika razvijalca (seveda sem le tak, ki sem mimo šel). Ampak ne govorim o razvoju, govorim o varnem in učinkovitom okolju za aplikacije. devFinančne tehnologije (
fintech) gredo z roko v roki z informacijsko varnostjo (infosec) in prve brez druge ne morejo delovati dolgo. Zato želim deliti svoje izkušnje in niz orodij, ki jih uporabljam, kar vključuje, in to hkrati, lahko pa se uporabljajo tudi v širši ali povsem drugačni namen. V tem članku ne bom govoril toliko o bitcoinu, ampak o infrastrukturnem modelu za razvoj in delovanje finančnih (in ne samo) storitev - v dveh besedah, tistih storitev, kjer ima 'B' pomene. To je uporabno tako za bitcoin borzo kot za klasičen korporativni zoo storitev majhnega podjetja, ki ni povezan z bitcoini. ) gredo z roko v roki z informacijsko varnostjo (, kot tudi ) in prve brez druge ne morejo delovati dolgo. Zato želim deliti svoje izkušnje in niz orodij, ki jih uporabljam, kar vključujeŽelim poudariti, da sem zagovornik načel
„keep it stupid simple“ „less is more“ in , zato bo članek in to, kar je v njem opisano, imelo lastnosti, o katerih govorijo ta načela.Domnevni scenarij:
Imaginaren scenarij: Poglejmo si primer z menjavo bitcoinov. Odločili smo se za zagon menjave rubljev, dolarjev in evrov za bitcoine in obratno, ter že imamo delujočo rešitev, vendar za druge digitalne valute, kot sta Qiwi in WebMoney, t.j. vse pravne zadeve so rešene. Imamo pripravljeno aplikacijo, ki deluje kot plačilni prehod za rublje, dolarje in evre ter druge plačilne sisteme. Povezana je z našimi bančnimi računi in ima določeno API za naše končne aplikacije. Prav tako imamo spletno aplikacijo, ki deluje kot menjalnica za uporabnike, podobno tipičnemu kabinetu Qiwi ali WebMoney — ustvarite račun, dodajte kartico in tako naprej. Komunicira z našo aplikacijo-prehodom, verjetno prek REST API v lokalnem omrežju. Odločili smo se, da vključimo bitcoine in hkrati nadgradimo infrastrukturo, saj je bilo vse sprva hitro vzpostavljeno na VirtualBoxih pod mizo v pisarni... spletno mesto se uporablja, mi pa smo postali zaskrbljeni glede uptime in zmogljivosti.
Torej, začnimo z osnovami — izbira strežnika. Ker je posel v našem primeru majhen in zaupamo gostitelju (OVH), izberemo , pri kateri ni mogoče namestiti sistema iz originalne slike .iso, vendar to ni težava, oddelek za IT varnost bo zagotovo opravil analizo nameščene slike. Ko bomo zrasli, lahko najetek svoj zaklenjen prostor in omejen fizični dostop, morda pa tudi zgradimo svoj podatkovni center. V vsakem primeru se je treba zavedati, da pri najemu strojne opreme in nameščanju prednastavljenih slik obstaja možnost, da imate v sistemu „trojanca od gostitelja“, ki je v večini primerov namenjen ne za nadzor nad vami, temveč za to, da ponudi bolj priročna orodja za upravljanje strežnika.
Namestitev strežnika
Tu je vse preprosto. Izberemo strojno opremo, ki ustreza našim potrebam. Nato izberemo sliko FreeBSD. Ali pa se povežemo (v primeru drugega gostitelja in lastne strojne opreme) preko IPMI ali s monitorjem in naložimo sliko .iso FreeBSD. Za orkestracijo namestitve uporabljam in . Edina izjema je, da smo v našem primeru s Kimsufi izbrali prilagojeno namestitev , da bi imela dva diska v zrcalu „odprti” le sistemski in /home particiji, preostali prostor diska pa bo šifriran, vendar o tem pozneje.

Namestitev sistema poteka na standarden način, ne bom se na tem ustavil, le opazil bom, da mora pred začetkom uporabe biti pozornost namenjena utrjevanju možnostim, ki jih ponuja bsdinstaller na koncu namestitve (če sistem nameščate sami):

Je na to temo, na kratko ga tukaj ponovim.
Vključiti zgoraj omenjene nastavitve je mogoče tudi na že nameščenem sistemu. Za to morate urediti datoteko zaganjalnika in vključiti nastavitve jedra. *ee — to je tak urednik v BSD
# 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=1Prav tako je treba zagotoviti, da imate nameščeno najnovejšo različico sistema, in . V našem primeru, na primer, je potrebna nadgradnja na najnovejšo različico, saj prednameščene slike zaostajajo za šest mesecev do enega leta. No, in tam spremeni SSH vrata na drugačna od privzetih, doda avtentikacijo s ključi in onemogoči geslo.
Nato nastavimo aide, spremljanje stanja konfiguracijskih datotek sistema. Bolj podrobno lahko preberete .
pkg install aide
in uredimo naš cronjob
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/$MYFILENAMEAktiviramo
sysrc auditd_enable=YES
# service auditd start
Kako to upravljati je odlično opisano v .
Zdaj se znova zaženemo in se lotimo programske opreme na strežniku. Vsak strežnik predstavlja hipervizor za kontejnerje ali polne virtualne stroje. Zato je pomembno, da procesor podpira VT-x in EPT, če nameravamo uporabiti polno virtualizacijo.
Kot upravljanje kontejnerjev in virtualnih strojev uporabljam od , želim mu veliko zdravja in blagoslovov za to čudovito orodje!
Kontejnerji? Spet docker ali kaj?
A ne. — to je odlično orodje za kontejnerizacijo, omenjeni cbsd pa za orkestracijo teh kontejnerjev, ki jim ime — kletke.
Kletka je izredno učinkovita rešitev za gradnjo infrastrukture za različne namene, kjer je potreben popoln nadzor nad ločenimi storitvami ali procesi. Dejansko gre za klon gostiteljske metode, vendar ne zahteva popolne virtualizacije „strojne opreme“. Viri se zato ne porabljajo za „gostiteljski OS“, temveč samo za opravljeno delo. Ko se kletke uporabljajo za notranje potrebe, so to zelo priročne rešitve za optimalno izkoriščanje virov — veliko kletk na enem fizičnem strežniku lahko vsaka posebej po potrebi izkoristi celoten vir strežnika. Glede na to, da različnim podstoritev običajno na različne načine potrebujemo dodatne vire, lahko iz enega strežnika izvlečemo maksimalno zmogljivost, če pravilno načrtujemo in razporedimo kletke med strežniki. Po potrebi je tudi mogoče omejiti vire, ki jih kletke uporabljajo.

Kaj pa popolna virtualizacija?
Kolikor vem, cbsd podpira delovanje bhyve ter XEN hipervizorje. Nikoli nisem uporabljal drugega, prvi pa je razmeroma mlad . Zdaj bomo preučili primer uporabe bhyve v spodnjem primeru.
Namestitev in nastavitev gostiteljskega okolja
Uporabljamo FS . To je izredno močno orodje za upravljanje prostora na strežniku. Z ZFS lahko neposredno iz diskov gradimo nizov različnih konfiguracij, dinamično „v živo“ širimo prostor, menjamo umrle diske, upravljamo s posnetki in še mnogo, mnogo drugega, kar bi lahko opisovali v celotni seriji člankov. Vrnimo se k našemu strežniku in njegovim diskom. Na začetku namestitve smo na diskih pustili prost prostor za šifrirane particije. Zakaj tako? To zato, da bi se sistem samodejno zagnal in poslušal prek SSH.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
dodamo particijo diska na preostali prostor
geli init /dev/ada0p4
vpišemo našo šifrirno geslo
geli attach /dev/ada0p4
spet vpišemo geslo in dobimo napravo /dev/ada0p4.eli — to je naš šifriran prostor. Potem ponovimo enako za /dev/ada1 in ostale diske v nizu. In ustvarimo nov .
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — no, zdaj imamo minimalni borbeni sklop pripravljen. Zrcalni niz diskov v primeru okvare enega od treh.
Ustvarjamo niz podatkov na novem „pulu“
zfs create vms/jails
pkg install cbsd — zagnali smo ukaz in namestili upravljanje za naše celice.
Potem ko cbsd je nameščen, ga je treba inicializirati:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
in odgovarjamo na kup vprašanj, večinoma z odgovori po privzetku.
*Če uporabljate šifriranje, je pomembno, da demon cbsdd ne zažene samodejno, dokler ne dešifrirate diskov ročno ali samodejno (v našem primeru to dela zabbix)
**Prav tako ne uporabljam NAT od cbsd, ampak ga nastavim sam v 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 za celice
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
## Bitcoin omrežni prenos
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
Nastavitev politik požarnega zidu je tudi posebna tema, zato se ne bom poglabljal v nastavitev politike BLOCK ALL in nastavitev belih seznamov, to lahko storite z branjem ali katere koli od številnih člankov, ki so na voljo na googlu.
No, imamo nameščen cbsd, čas je, da ustvarimo našo prvo delovno konja — Bitcoin demon v celici!
cbsd jconstruct-tui

Tukaj vidimo dialog za ustvarjanje celice. Ko so vse vrednosti nastavljene, ustvarimo!
Pri ustvarjanju prve celice je treba izbrati, kaj uporabiti kot osnovo za celice. Jaz izbiram distribucijo iz repozitorija FreeBSD z ukazom repo. Ta izbira se izvede le pri ustvarjanju prve celice določene različice (gostiti je možno celice vseh različic, ki so starejše od različice gostitelja).
Ko je vse nameščeno — zagnamo celico!
# cbsd jstart bitcoind
Toda v celico moramo namestiti programsko opremo.
# jls
JID IP naslov Ime gostitelja Pot
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoindjexec bitcoind da pridemo v konzolo celice
in že znotraj celice namestimo programsko opremo z njenimi odvisnostmi (naš gostiteljski sistem ostaja čist)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Bitcoin v celici je, vendar potrebujemo anonimnost, ker se želimo povezati z nekaterimi celicami preko omrežja TOR. Načeloma imamo v načrtu, da večino celic s sumljivo programsko opremo obračamo samo preko proxy strežnika. Hvala pf Možno vypnúť NAT pre určité rozmedzie IP adries v lokálnej sieti a povoliť NAT len pre náš TOR uzol. Takže, aj keď do klietky vnikne zlomyseľný kód, pravdepodobne sa nedostane do kontaktu so svetom, a ak aj áno, neodhalí IP našich serverov. Preto vytvárame ďalšiu klietku, pre „prenos“ služieb ako „.onion“ služba a ako proxy pre prístup na internet pre samostatné klietky.
# 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
Nastavíme počúvanie na lokálnej adrese (prístupná pre všetky klietky)
SOCKSPort 192.168.0.2:9050
Čo nám ešte chýba na úplné šťastie. Áno, potrebujeme službu pre náš web, možno aj nie jednu. Spustíme nginx, ktorý bude plniť úlohu reverznej proxy a postará sa o predĺženie certifikátov Let’s Encrypt.
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev: /@[15:47] # pkg install nginx py36-certbot
A tak sme umiestnili 150 MB závislostí do klietky. A hostiteľ je stále čistý.
K nastavovaniu nginx sa vrátime neskôr, potrebujeme tiež zdvihnúť ďalšie dve klietky pre náš platobný bránu na nodejs a rust a webovú aplikáciu, ktorá z nejakého dôvodu beží na apáči a php, a pre poslednú potrebujeme databázu MySQL.
# 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
… a ešte 380 MB balíkov izolovaných
Ďalej si stiahneme naše aplikácie cez git a spustíme ich.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp: /@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB balíkov. v klietke.
Tu dávame prístup vývojárom cez SSH priamo do klietky, oni si tam všetko spravia sami:
webapp: /@[16:02] # ee /etc/ssh/sshd_config
Port 2267 — meníme port SSH klietky na akýkoľvek ľubovoľný
webapp: /@[16:02] # sysrc sshd_enable=YES
webapp: /@[16:02] # service sshd start
No a je to, služba je spustená, zostáva pridať pravidlo do pf firewall
Pozrime sa, aké IP adresy máme pre klietky a ako vyzerá naša „lokálka“
# 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/webappa pridáme pravidlo
# 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
No a keď sme tu, pridáme aj pravidlo na reverznú proxy:
## 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
Teraz trochu o bitcoinoch
Čo máme — máme webovú aplikáciu, ktorá je dostupná zvonku, a tá lokálne komunikuje s našou platobnou bránou. Teraz potrebujeme pripraviť pracovné prostredie pre interakciu so samotnou sieťou bitcoinu — uzlom bitcoind to je le demon, ki podpira lokalno kopijo aktualne blokchaina. Ta demon ima RPC in funkcionalnost denarnice, vendar za razvoj aplikacij obstajajo bolj priročne 'ovijke'. Najprej smo se odločili namestiti electrum — to je CLI denarnica. bo pri nas uporabljena kot 'hladna shramba' za naše bitcoine — na splošno tiste bitcoine, ki jih je treba shraniti 'izven' sistema dostopnega uporabnikom in sploh čim dlje od vseh. Ima tudi GUI, zato točno takšno denarnico nameravamo uporabljati na
prenosnikih. Zaenkrat bomo elektrum uporabljali s javnimi strežniki, kasneje pa v še eni kletki postavili , da ne bi bili od nikogar odvisni.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:\/@[8:45] # pkg install py36-electrum
še 700 MB programske opreme imamo v kletki
electrum:\/@[8:53] # adduser
Uporabniško ime: wallet
Polno ime:
Uid (pustite prazno za privzeto):
Skupina za prijavo [wallet]:
Skupina za prijavo je wallet. Ali želite povabiti wallet v druge skupine? []:
Razred prijave [default]:
Shell (sh csh tcsh nologin) [sh]: tcsh
Domovska mapa [\/home\/wallet]:
Dovoljenja za domačo mapo (pustite prazno za privzeto):
Ali želite uporabiti avtentikacijo na osnovi gesel? [yes]: no
Zakleniti račun po ustvaritvi? [no]:
Uporabniško ime : wallet
Geslo : <disabled>
Polno ime :
Uid : 1001
Razred :
Skupine : wallet
Domov : \/home\/wallet
Domači način :
Shell : \/bin\/tcsh
Zaklenjeno : no
OK? (yes\/no): yes
adduser: INFO: Uspešno dodan (wallet) v uporabniški imenik.
Dodati še enega uporabnika? (yes\/no): no
Nasvidenje!
electrum:\/@[8:53] # su walletelectrum:\/@[8:53] # su wallet
wallet@electrum:\/ % electrum-3.6 create
{
"msg": "Prosimo, obdržite svoj seed na varnem mestu; če ga izgubite, ne boste mogli obnoviti svojega denarnice.",
"path": "\/usr\/home\/wallet\/.electrum\/wallets\/default_wallet",
"seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}Torej imamo zdaj ustvarjeno denarnico.
wallet@electrum:\/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]wallet@electrum:\/ % electrum-3.6 help
Naša on-chain denarnica bo v prihodnje dostopna le omejenemu krogu ljudi. Da ne bi odprli dostopa od zunaj v to kletko, bodo povezave preko SSH potekale preko TOR (takšna decentralizirana različica VPN). Začnemo s SSH v kletki, vendar ne dotaknemo našega pf.conf na gostitelju.
electrum:\/@[9:00] # sysrc sshd_enable=YES
electrum:\/@[9:00] # service sshd start
Zdaj bomo kletko z denarnico odrezali od interneta. Dali ji bomo IP-naslov iz drugega prostora podomrežja, ki se ne NAT-a. Najprej bomo spremenili /etc/pf.conf na gostitelju
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0\/24" spremenili v JAIL_IP_POOL="192.168.0.0\/25", tako da vsi naslovi 192.168.0.126-255 ne bodo imeli neposrednega dostopa do interneta. Nekakšna programska 'air-gap' omrežja. In NAT pravilo ostaja takšno, kot je bilo.
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Osvežujemo pravila
# pfctl -f /etc/pf.conf
Zdaj se lotimo naše celice
# cbsd jconfig jname=electrum


jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Odstranite staro IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Nastavite novo IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200Hm, toda zdaj nam bo prenehal delovati tudi sistem. Vendar lahko navedemo sistemski proxy. A obstaja eno 'ampak', pri TOR-u je to SOCKS5 proxy, za udobje bi potrebovali še 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 = socks5polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
No, zdaj imava v našem sistemu dva proxy strežnika, oba pa preusmerjata preko TOR: socks5://192.168.0.2:9050 in
Zdaj lahko nastavimo okolje našega denarnice
# 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:8123No, zdaj bo shell delal preko proxyja. Če želimo namestiti pakete, je dobro dodati v /usr/local/etc/pkg.conf iz pod root-a celice
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}No, zdaj je prišel čas, da dodamo TOR skrito storitev kot naslov našega SSH servisa v celici denarnice.
# 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.onionTukaj je naš naslov za povezovanje. Poglejmo iz lokalnega računalnika. Ampak najprej moramo dodati naš SSH ključ:
wallet@electrum:/ % mkdir ~/ .ssh
wallet@electrum:/ % ee ~/ .ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@localNo in s klientskega linux računalnika
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
Povezujemo se (Za to, da deluje, potrebujete lokalni TOR demon, ki posluša na 9050)
user@local ~$ ssh remotebtc
Avtentičnost gostitelja 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion ()' ni mogoče potrditi.
ECDSA ključni odtis je SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Ali ste prepričani, da se želite nadaljevati v povezovanju (yes/no/[fingerprint])? yes
Opozorilo: 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) je bil trajno dodan na seznam znanih gostiteljev.
FreeBSD 12.1-RELEASE-p1 GENERIC
Za prihranek prostora na disku v vašem domačem direktoriju, stisnite datoteke, ki jih redko
uporabite z "gzip filename".
-- Dru
wallet@electrum:~ % logout
Uspeh!
Za delo z instantnimi in mikroplačili potrebujemo tudi vozlišče. , to je vlastně náš hlavní pracovní nástroj s bitcoiny. U *, který hodláme použít jako démona, existuje , který je plnohodnotným HTTP (REST) rozhraním a umožňuje pracovat jak s off-chain transakcemi, tak s on-chain transakcemi. c-lightning pro fungování potřebuje bitcoind uzel.
*existují různé implementace na různých JAZY protokolu Lightning Network. Z těch, které jsme otestovali, se c-lightning (napsaný v C) jevil jako nejstabilnější a nejvíce efektivní na zdroje
# cbsd jsconstruct-tui
# cbsd jstart cln
# jexec cln
lightning:/@[10:23] # adduser
Uživatelské jméno: 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
Zatímco se kompilují a instalují všechny potřebné věci, vytvoříme uživatele RPC pro lightningd u bitcoind
# jexec bitcoind
bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf
rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
# povoleno pouze c-lightning
rpcallowip=192.168.0.7/32bitcoind:/@[10:39] # service bitcoind restart
Moje chaotické přepínání mezi buňkami se ukazuje jako vůbec ne chaotické, pokud zmíníme utilitu tmux, která umožňuje v rámci jedné relace vytvářet mnoho podsestav terminálů. Analog: screen

Takže, nechceme odhalit skutečnou IP našeho uzlu a chceme provádět všechny finanční operace přes TOR. Proto potřebujeme další .onion.
# 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.onionnyní vytvoříme konfiguraci pro c-lightning
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
# pro výše uvedený příklad by měly inicializační logy (smíšené s logy lightningd) vytisknout něco jakolightning@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 ~
prav tako je treba ustvariti konfiguracijsko datoteko za bitcoin-cli, orodje, ki komunicira z bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=testpreverjamo
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]zagnemo lightningd
lightning@lightning:~ % lightningd --daemon
Sam lightningd lahko upravljaš z orodjem lightning-cli, na primer:
lightning-cli newaddr pridobiti naslov za novo prihajajoče plačilo
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all poslati vse denarja denarnice (vseh on-chain naslovov) na naslov
Prav tako ukazi za off-chain operacije lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay itd.
Za komunikacijo z aplikacijo imamo REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Sklenimo
# jls
JID IP naslov Ime gostitelja Pot
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
Imamo nabor kontejnerjev, vsak z lastnim nivojem dostopa iz in v lokalno omrežje.
# zfs list
IME UPORABLJENO NA VOLJO OBNOVA TOČKA MOUNT
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-dataKot je razvidno, bitcoind zavzema vseh 190 GB prostora. Kaj pa, če potrebujemo še eno vozlišče za teste? Tu je ZFS še kako prav. cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Można utworzyć zrzut i powiązać nową komórkę z tym zrzutem. Nowa komórka będzie miała całkowicie swoją przestrzeń, ale w systemie plików będzie brana pod uwagę tylko różnica między bieżącym stanem a oryginałem (zaoszczędzimy przynajmniej 190 GB).
Każda komórka to osobny zestaw danych ZFS, co jest bardzo wygodne. robić wiele innych fajnych rzeczy, takich jak wysyłanie zrzutów przez SSH. Nie będziemy tego opisywać, i tak już jest wiele informacji.
Warto również zauważyć konieczność zdalnego monitorowania hosta, mamy do tych celów .
B — bezpieczeństwo
Jeśli chodzi o bezpieczeństwo, zacznijmy od kluczowych zasad w kontekście infrastruktury:
Zasebnost — Standardowe narzędzia systemów podobnych do UNIX-a zapewniają realizację tej zasady. Logicznym sposobem dzielimy dostęp do każdego logicznie oddzielnego elementu systemu — komórki. Dostęp uzyskuje się poprzez standardową autoryzację użytkowników za pomocą kluczy osobistych. Cała komunikacja między a do końcowych komórek odbywa się w formie zaszyfrowanej. Dzięki szyfrowaniu dysków nie musimy się martwić o bezpieczeństwo danych podczas wymiany dysku lub migracji na inny serwer. Jedynym krytycznym dostępem jest dostęp do systemu gospodarza, ponieważ ten dostęp zapewnia w ogólnym przypadku dostęp do danych wewnątrz kontenerów.
Celovitost — Realizacja tej zasady odbywa się na kilku różnych poziomach. Po pierwsze, ważne jest, aby zauważyć, że w przypadku sprzętu serwerowego, pamięć ECC, ZFS już „prosto z pudełka” dba o integralność danych na poziomie bitów informacji. Natychmiastowe zrzuty pozwalają na wykonywanie kopii zapasowych w dowolnym momencie w trybie online. Wygodne narzędzia do eksportowania i importowania komórek ułatwiają replikację komórek.
Dostopnost — To już jest opcjonalne. Zależy od stopnia twojej rozpoznawalności oraz faktu posiadania wrogów. W naszym przykładzie zapewniliśmy dostępność portfela wyłącznie z sieci TOR. W razie potrzeby można na zaporze zablokować wszystko i zezwolić na dostęp do serwera wyłącznie przez tunele (TOR lub VPN to inna sprawa). W ten sposób serwer będzie odcięty od zewnętrznego świata, tak bardzo jak to możliwe, a wpływ na jego dostępność będziemy mieli tylko my sami.
Niezawodność — To ovisi od daljnjeg korištenja i poštivanja pravih politika korisničkih prava, pristupa itd. No, uz pravi pristup, sve aktivnosti korisnika se auditiraju, a zahvaljujući kriptografskim rješenjima moguće je jednoznačno identificirati tko i kada je izvršio određene radnje.
Naravno, opisana konfiguracija nije apsolutni primjer kako bi to uvijek trebalo biti, to je više primjer kako može izgledati, zadržavajući vrlo fleksibilne mogućnosti skaliranja i prilagodbe.
A što je s punom virtualizacijom?
O punoj virtualizaciji se može govoriti pomoću cbsd. . Samo ću dodati da je potrebno uključiti neke parametre jezgre. bhyve kld_list="vmm if_tap if_bridge nmdm"
# cat /etc/rc.conf
...# cat /boot/loader.conf
vmm_load="YES"Dakle, ako postoji potreba za pokretanjem Dockera, onda podižemo neku debian verziju i naprijed!

To je to.
Mislim da je to sve što sam htio podijeliti. Ako vam se svidio članak, možete mi poslati malo bitcoina — . Ako želite isprobati kaveze u akciji i imate malo bitcoina, možete otići na moj .
Izvor: habr.com
