Tako se dogodilo da sam po struci administrator računalnih sustava i mreža (ukratko: sistemski administrator), a imao sam priliku nešto više od 10 godina reći prof. aktivnosti širokog spektra sustava, uključujući one koji zahtijevaju [ekstremne] sigurnosne mjere. Dogodilo se i da mi je prije nekog vremena bilo zanimljivo dev
, dakle, bio sam u prolazu). Ali ne govorim o razvoju, govorim o sigurnom i učinkovitom okruženju za aplikacije.
Financijska tehnologija (fintech) prijeđite na informacijsku sigurnost (infosec) i prvi može raditi bez drugog, ali ne dugo. Zato želim podijeliti svoje iskustvo i skup alata koje koristim, a koji uključuje oboje fintechI infosec, a ujedno, a može se koristiti i za širu ili sasvim drugu svrhu. U ovom članku neću govoriti toliko o Bitcoinu, koliko o modelu infrastrukture za razvoj i rad financijskih (i ne samo) usluga - jednom riječju, onih usluga kojima je "B" važno. To se odnosi i na razmjenu Bitcoina i na najtipičniji korporativni zoološki vrt usluga male tvrtke koja ni na koji način nije povezana s Bitcoinom.
Napominjem da sam pristalica načela "neka bude jednostavno" и "manje je više", stoga će i članak i ono što je u njemu opisano imati svojstva o kojima govore ova načela.
Imaginarni scenarij: Pogledajmo sve na primjeru izmjenjivača bitcoina. Odlučili smo pokrenuti razmjenu rublja, dolara, eura za bitcoine i natrag i već imamo radno rješenje, ali za drugi digitalni novac poput qiwi i webmoney, tj. Riješili smo sva pravna pitanja, imamo gotovu aplikaciju koja služi kao pristupnik za plaćanje za rublje, dolare i eure i druge sustave plaćanja. Povezan je s našim bankovnim računima i ima neku vrstu API-ja za naše krajnje aplikacije. Također imamo web aplikaciju koja djeluje kao izmjenjivač za korisnike, pa, kao tipični qiwi ili webmoney račun - kreirajte račun, dodajte karticu i tako dalje. Komunicira s našom aplikacijom pristupnika, iako putem REST API-ja u lokalnom području. I tako smo odlučili povezati bitcoine i ujedno unaprijediti infrastrukturu, jer... U početku je sve bilo na brzinu postavljeno na virtualne kutije u uredu ispod stola... stranica se počela koristiti, a mi smo počeli brinuti o neprekidnom radu i performansama.
Dakle, počnimo s glavnom stvari - odabirom poslužitelja. Jer posao u našem primjeru je mali i vjerujemo hosteru (OVH) kojeg ćemo izabrati
Instalacija poslužitelja
Ovdje je sve jednostavno. Biramo hardver koji odgovara našim potrebama. Zatim odaberite FreeBSD sliku. Pa, ili se povezujemo (u slučaju drugog hostera i vlastitog hardvera) putem IPMI-ja ili s monitorom i stavljamo .iso FreeBSD sliku u preuzimanje. Za orkestralni postav koji koristim
Instalacija sustava odvija se na standardan način, neću se zadržavati na ovome, samo ću primijetiti da prije početka rada vrijedi obratiti pozornost na kaljenje opcije koje nudi bsdinstaller
na kraju instalacije (ako sami instalirate sustav):
Tu je
Također je moguće omogućiti gore navedene parametre na već instaliranom sustavu. Da biste to učinili, morate urediti datoteku pokretačkog programa i omogućiti parametre kernela. *ee je ovakav editor u BSD-u
# 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
Također biste trebali provjeriti imate li instaliranu najnoviju verziju sustava i
Zatim konfiguriramo aide
, praćenje statusa konfiguracijskih datoteka sustava. Detaljnije možete pročitati
pkg install aide
i uredite naš crontab
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
Uključi
sysrc auditd_enable=YES
# service auditd start
Kako upravljati ovim pitanjem savršeno je opisano u
Sada se ponovno pokrećemo i prelazimo na softver na poslužitelju. Svaki poslužitelj je hipervizor za spremnike ili pune virtualne strojeve. Stoga je važno da procesor podržava VT-x i EPT ako planiramo koristiti punu virtualizaciju.
Za upravljanje spremnicima i virtualnim strojevima koje koristim
Kontejneri? Opet doker ili što?
Ali ne. cbsd
za orkestriranje ovih spremnika, koji se nazivaju stanice.
Kavez je iznimno učinkovito rješenje za izgradnju infrastrukture za razne namjene, gdje je u konačnici potrebna potpuna izolacija pojedinih usluga ili procesa. U biti, to je klon host sustava, ali ne zahtijeva punu hardversku virtualizaciju. I zahvaljujući tome, resursi se ne troše na "gostujući OS", već samo na posao koji se obavlja. Kada se ćelije koriste za interne potrebe, ovo je vrlo zgodno rješenje za optimalno korištenje resursa - hrpa ćelija na jednom hardverskom poslužitelju može svaka pojedinačno koristiti cijeli resurs poslužitelja ako je potrebno. S obzirom da obično različite podusluge trebaju dodatne. resursa u različito vrijeme, možete izvući maksimalnu izvedbu iz jednog poslužitelja ako ispravno planirate i uravnotežite ćelije između poslužitelja. Ako je potrebno, ćelijama se također mogu dati ograničenja u korištenim resursima.
Što je s potpunom virtualizacijom?
Koliko ja znam cbsd
podupire rad bhyve
i XEN hipervizori. Drugi nisam nikad koristio, ali prvi je relativno nov bhyve
u donjem primjeru.
Instaliranje i konfiguriranje host okruženja
Koristimo FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
dodajte particiju diska na preostali prostor
geli init /dev/ada0p4
unesite našu lozinku za šifriranje
geli attach /dev/ada0p4
Ponovno unosimo lozinku i imamo uređaj /dev/ada0p4.eli - ovo je naš šifrirani prostor. Zatim ponavljamo isto za /dev/ada1 i ostatak diskova u nizu. I stvaramo novi
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Pa imamo spreman minimalni borbeni pribor. Zrcaljeni niz diskova u slučaju kvara jednog od tri.
Stvaranje skupa podataka na novom "poolu"
zfs create vms/jails
pkg install cbsd
— pokrenuli smo tim i uspostavili menadžment za naše ćelije.
Nakon cbsd
instaliran, treba ga inicijalizirati:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Pa, odgovaramo na hrpu pitanja, uglavnom sa zadanim odgovorima.
*Ako koristite enkripciju, važno je da demon cbsdd
nije pokrenut automatski dok ne dekriptirate diskove ručno ili automatski (u našem primjeru to radi zabbix)
**Također ne koristim NAT iz cbsd
, i sam ga konfiguriram u 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
Postavljanje pravila vatrozida također je posebna tema, stoga neću ulaziti duboko u postavljanje pravila BLOKIRAJ SVE i postavljanje popisa dopuštenih, to možete učiniti čitanjem
Pa... imamo instaliran cbsd, vrijeme je da stvorimo našu prvu radnu snagu - Bitcoin demona u kavezu!
cbsd jconstruct-tui
Ovdje vidimo dijalog za stvaranje ćelije. Nakon što su postavljene sve vrijednosti, idemo stvarati!
Kada stvarate svoju prvu ćeliju, trebali biste odabrati što ćete koristiti kao bazu za ćelije. Odaberem distribuciju iz FreeBSD repozitorija pomoću naredbe repo
. Ovaj izbor se vrši samo kada se stvara prva ćelija određene verzije (možete ugostiti ćelije bilo koje verzije koja je starija od verzije glavnog računala).
Nakon što je sve instalirano, lansiramo kavez!
# cbsd jstart bitcoind
Ali moramo instalirati softver u kavez.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
da uđu u konzolu ćelije
i već unutar ćelije instaliramo softver s njegovim ovisnostima (naš host sustav ostaje čist)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
U kavezu je Bitcoin, ali treba nam anonimnost jer se želimo spojiti na neke kaveze preko TOP mreže. Općenito, većinu ćelija sa sumnjivim softverom planiramo pokretati samo putem proxyja. Zahvaljujući pf
Možete onemogućiti NAT za određeni raspon IP adresa na lokalnoj mreži i dopustiti NAT samo za naš TOR čvor. Dakle, čak i ako zlonamjerni softver uđe u ćeliju, najvjerojatnije neće komunicirati s vanjskim svijetom, a ako i uđe, neće otkriti IP našeg poslužitelja. Stoga stvaramo drugu ćeliju za "prosljeđivanje" usluga kao ".onion" uslugu i kao proxy za pristup Internetu pojedinačnim ćelijama.
# 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
Postavite slušanje na lokalnoj adresi (dostupno za sve ćelije)
SOCKSPort 192.168.0.2:9050
Što nam još treba za potpunu sreću? Da, trebamo uslugu za naš web, možda više od jedne. Pokrenimo nginx, koji će djelovati kao obrnuti proxy i pobrinuti se za obnavljanje Let's Encrypt certifikata
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
I tako smo stavili 150 MB ovisnosti u kavez. A domaćin je i dalje čist.
Vratimo se kasnije na postavljanje nginxa, moramo podići još dvije ćelije za naš payment gateway na nodejs i rust te web aplikaciju, koja je iz nekog razloga u Apacheu i PHP-u, a za potonji također treba MySQL baza podataka.
# 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
...i još 380 MB izoliranih paketa
Zatim preuzimamo našu aplikaciju pomoću gita i pokrećemo je.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
Paketi od 450 MB. u kavezu.
ovdje razvojnom programeru dajemo pristup putem SSH-a izravno ćeliji, oni će tamo sve učiniti sami:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— promijenite SSH port ćelije u bilo koji proizvoljan
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Pa, usluga radi, preostaje samo dodati pravilo pf
vatrozid
Pogledajmo koji IP imaju naše ćelije i kako općenito izgleda naše "lokalno područje".
# 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
i dodajte pravilo
# 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
Pa, kad smo već ovdje, dodajmo i pravilo za obrnuti 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
E, sad malo o bitcoinima
Ono što imamo jest da imamo web aplikaciju koja je eksterno izložena i komunicira lokalno s našim pristupnikom plaćanja. Sada moramo pripremiti radno okruženje za interakciju sa samom Bitcoin mrežom - čvorom bitcoind
to je samo demon koji održava lokalnu kopiju blockchaina ažurnom. Ovaj demon ima RPC i funkciju novčanika, ali postoje prikladniji "omotači" za razvoj aplikacija. Za početak smo odlučili staviti electrum
je CLI novčanik.
prijenosna računala. Za sada ćemo koristiti Electrum s javnim poslužiteljima, a kasnije ćemo ga podići u drugu ćeliju
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
još 700 MB softvera u našem kavezu
electrum:/@[8:53] # adduser
Username: wallet
Full name:
Uid (Leave empty for default):
Login group [wallet]:
Login group is wallet. Invite wallet into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/wallet]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : wallet
Password : <disabled>
Full Name :
Uid : 1001
Class :
Groups : wallet
Home : /home/wallet
Home Mode :
Shell : /bin/tcsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (wallet) to the user database.
Add another user? (yes/no): no
Goodbye!
electrum:/@[8:53] # su wallet
electrum:/@[8:53] # su wallet
wallet@electrum:/ % electrum-3.6 create
{
"msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.",
"path": "/usr/home/wallet/.electrum/wallets/default_wallet",
"seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}
Sada imamo kreiran novčanik.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Našim na lancu Od sada će se samo ograničeni broj ljudi moći spojiti na novčanik. Kako ne bi otvorili pristup ovoj ćeliji izvana, veze putem SSH-a odvijat će se putem TOP-a (decentralizirana verzija VPN-a). Pokrećemo SSH u ćeliji, ali ne diramo naš pf.conf na hostu.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Sada isključimo ćeliju s internetskim pristupom novčanika. Dajmo mu IP adresu iz drugog podmrežnog prostora koji nije NAT-ovan. Prvo da se presvučemo /etc/pf.conf
na domaćinu
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
promijenimo to u JAIL_IP_POOL="192.168.0.0/25"
, stoga sve adrese 192.168.0.126-255 neće imati izravan pristup Internetu. Neka vrsta softverske “zračne” mreže. I NAT pravilo ostaje kao što je bilo
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Preopterećenje pravilima
# pfctl -f /etc/pf.conf
Sada uzmimo našu ćeliju
# 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.200
Hmm, ali sad će nam sam sustav prestati raditi. Međutim, možemo navesti proxy sustava. Ali ima jedna stvar, na TOR-u je to SOCKS5 proxy, a zbog praktičnosti bismo željeli i 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] # service polipo start
Pa, sada postoje dva proxy poslužitelja u našem sustavu, i oba izlaze putem TOR-a: socks5://192.168.0.2:9050 i
Sada možemo konfigurirati naše okruženje novčanika
# 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
Pa, sada će ljuska raditi ispod proxyja. Ako želimo instalirati pakete, onda bismo trebali dodati /usr/local/etc/pkg.conf
ispod korijena kaveza
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Pa, sada je vrijeme da dodate TOR skrivenu uslugu kao adresu naše SSH usluge u ćeliju novčanika.
# 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
Ovo je naša adresa za vezu. Provjerimo s lokalnog stroja. Ali prvo moramo dodati naš SSH ključ:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Pa, s Linux klijentskog stroja
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
Povežimo se (Da bi ovo radilo, potreban vam je lokalni TOR demon koji sluša 9050)
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 <[email protected]>
wallet@electrum:~ % logout
Uspjeh!
Za rad s instant i mikro-plaćanjima također nam je potreban čvor c-lightning
potrebna za funkcioniranje bitcoind
ali da.
*Postoje različite implementacije protokola Lightning Network na različitim jezicima. Od onih koje smo testirali, čini se da je c-lightning (napisano u C-u) najstabilniji i resursno učinkovitiji
# 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
Dok je sve potrebno kompajlirano i instalirano, kreirajmo RPC korisnika za lightningd
в bitcoind
# jexec bitcoind
bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf
rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#allow only c-lightning
rpcallowip=192.168.0.7/32
bitcoind:/@[10:39] # service bitcoind restart
Ispada da moje kaotično prebacivanje između ćelija nije tako kaotično ako primijetite korisnost tmux
, koji vam omogućuje stvaranje više podsesija terminala unutar jedne sesije. Analogno: screen
Dakle, ne želimo otkriti pravi IP našeg čvora, a sve financijske transakcije želimo provoditi preko TOP-a. Stoga, drugi .luk nije potreban.
# 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
Kreirajmo sada konfiguraciju za 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
# 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 ~
također trebate izraditi konfiguracijsku datoteku za bitcoin-cli, uslužni program koji komunicira s bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
provjeravanje
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
lansirati lightningd
lightning@lightning:~ % lightningd --daemon
sam lightningd
možete kontrolirati uslužni program lightning-cli
, na primjer:
lightning-cli newaddr
dobiti adresu za novu pristiglu uplatu
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
pošalji sav novac u novčaniku na adresu (sve on-chain adrese)
Također naredbe za operacije izvan lanca lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
i tako dalje
Pa, za komunikaciju s aplikacijom imamo REST API
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Sumirati
# 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
Imamo skup spremnika, svaki sa svojom vlastitom razinom pristupa iz lokalne mreže i prema njoj.
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 279G 1.48T 88K /zroot
zroot/ROOT 1.89G 1.48T 88K none
zroot/ROOT/default 1.89G 17.6G 1.89G /
zroot/home 88K 1.48T 88K /home
zroot/jails 277G 1.48T 404M /zroot/jails
zroot/jails/bitcoind 190G 1.48T 190G /zroot/jails/jails-data/bitcoind-data
zroot/jails/cln 653M 1.48T 653M /zroot/jails/jails-data/cln-data
zroot/jails/electrum 703M 1.48T 703M /zroot/jails/jails-data/electrum-data
zroot/jails/nginx-rev 190M 1.48T 190M /zroot/jails/jails-data/nginx-rev-data
zroot/jails/paygw 82.4G 1.48T 82.4G /zroot/jails/jails-data/paygw-data
zroot/jails/polipo 57.6M 1.48T 57.6M /zroot/jails/jails-data/polipo-data
zroot/jails/tor 81.5M 1.48T 81.5M /zroot/jails/jails-data/tor-data
zroot/jails/webapp 360M 1.48T 360M /zroot/jails/jails-data/webapp-data
Kao što vidite, bitcoin zauzima svih 190 GB prostora. Što ako trebamo još jedan čvor za testiranje? Ovdje ZFS dobro dolazi. Uz pomoć cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
možete stvoriti snimku i priložiti novu ćeliju ovoj snimci. Nova ćelija će imati svoj prostor, ali će se u datotečnom sustavu uzeti u obzir samo razlika između trenutnog stanja i originala (uštedjet ćemo najmanje 190 GB)
Svaka ćelija je zaseban ZFS skup podataka, a to je izuzetno zgodno.
Također je vrijedno napomenuti potrebu za daljinskim nadzorom hosta, za ove potrebe imamo
B - sigurnost
Što se tiče sigurnosti, pođimo od ključnih načela u kontekstu infrastrukture:
Povjerljivost - Standardni alati UNIX-sličnih sustava osiguravaju implementaciju ovog principa. Logički odvajamo pristup svakom logički zasebnom elementu sustava - ćeliji. Pristup je omogućen standardnom autentifikacijom korisnika korištenjem osobnih ključeva korisnika. Sva komunikacija između i do krajnjih stanica odvija se u šifriranom obliku. Zahvaljujući enkripciji diska, ne moramo brinuti o sigurnosti podataka prilikom zamjene diska ili migracije na drugi poslužitelj. Jedini kritični pristup je pristup glavnom sustavu, budući da takav pristup općenito omogućuje pristup podacima unutar spremnika.
integritet “Provedba ovog načela odvija se na nekoliko različitih razina. Prvo, važno je napomenuti da u slučaju serverskog hardvera, ECC memorije, ZFS već “out of the box” brine o integritetu podataka na razini informacijskih bitova. Trenutačne snimke omogućuju vam izradu sigurnosnih kopija u bilo kojem trenutku u hodu. Prikladni alati za izvoz/uvoz stanica čine replikaciju stanica jednostavnom.
dostupnost - Ovo je već izborno. Ovisi o stupnju vaše slave i činjenici da imate hejtere. U našem smo primjeru osigurali da novčanik bude dostupan isključivo s TOP mreže. Po potrebi možete blokirati sve na firewallu i omogućiti pristup serveru isključivo kroz tunele (TOR ili VPN je druga stvar). Tako će poslužitelj biti maksimalno odsječen od vanjskog svijeta, a samo ćemo mi sami moći utjecati na njegovu dostupnost.
Nemogućnost odbijanja - A to ovisi o daljnjem radu i usklađenosti s ispravnim politikama za korisnička prava, pristup itd. No uz pravilan pristup, sve radnje korisnika se revidiraju, a zahvaljujući kriptografskim rješenjima moguće je nedvosmisleno identificirati tko je i kada izvršio određene radnje.
Naravno, opisana konfiguracija nije apsolutni primjer kako bi uvijek trebala biti, prije je jedan primjer kako može biti, a da pritom zadrži vrlo fleksibilne mogućnosti skaliranja i prilagodbe.
Što je s potpunom virtualizacijom?
O potpunoj virtualizaciji pomoću cbsd-a možete bhyve
Morate omogućiti neke opcije kernela.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Pa ako iznenada trebate pokrenuti docker, onda instalirajte neki debian i samo naprijed!
To je sve
Pretpostavljam da je to sve što sam htio podijeliti. Ako vam se svidio članak, možete mi poslati nešto bitcoina -
Izvor: www.habr.com