Desilo se da sam po zanimanju administrator računarskih sistema i mreža (ukratko: sistem administrator), a nešto više od 10 godina imao sam priliku da govorim prof. aktivnosti širokog spektra sistema, uključujući one koji zahtijevaju [ekstremne] sigurnosne mjere. Desilo se i da mi je prije nekog vremena bilo zanimljivo dev
, dakle, prolazio sam). Ali ne govorim o razvoju, govorim o sigurnom i efikasnom okruženju za aplikacije.
finansijska tehnologija (FinTech) idi pored informacione sigurnosti (infosec) a prvi može raditi i bez drugog, ali ne dugo. Zato želim podijeliti svoje iskustvo i skup alata koje koristim, a koji uključuje oboje FinTech, i infosec, a istovremeno, a može se koristiti i u širu ili potpuno drugačiju svrhu. U ovom članku ću vam reći ne toliko o Bitcoinu, već o infrastrukturnom modelu za razvoj i rad finansijskih (i ne samo) usluga - jednom riječju, onih usluga kod kojih je "B" bitno. Ovo se odnosi i na bitcoin burzu i na najtipičniji korporativni zoološki vrt usluga male kompanije koja nije ni na koji način povezana s Bitcoinom.
Želim da napomenem da sam pristalica principa "neka bude glupo jednostavno" и "manje je više", stoga će i članak i ono što je u njemu opisano imati svojstva o kojima se ti principi bave.
Imaginarni scenario: Pogledajmo sve na primjeru bitcoin izmjenjivača. Odlučili smo da pokrenemo razmjenu rubalja, dolara, eura za bitcoine i nazad, i već imamo radno rješenje, ali za drugi digitalni novac kao što su qiwi i webmoney, tj. Zatvorili smo sva pravna pitanja, imamo gotovu aplikaciju koja služi kao prolaz za plaćanje rublja, dolara i eura i drugih platnih sistema. Povezan je s našim bankovnim računima i ima neku vrstu API-ja za naše krajnje aplikacije. Imamo i web aplikaciju koja služi kao izmjenjivač za korisnike, pa, kao tipični qiwi ili webmoney račun - kreirajte račun, dodajte karticu itd. Komunicira s našom aplikacijom gateway-a, iako preko REST API-ja u lokalnom području. I tako smo odlučili da povežemo bitcoine i istovremeno unapredimo infrastrukturu, jer... U početku se sve na brzinu postavljalo na virtuelne kutije u kancelariji ispod stola... sajt je počeo da se koristi, a mi smo počeli da brinemo o vremenu rada i performansama.
Dakle, počnimo s glavnom stvari - odabirom servera. Jer posao u našem primjeru je mali i vjerujemo hosteru (OVH) kojeg ćemo izabrati
Instalacija servera
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) preko IPMI-a ili sa monitorom i ubacimo .iso FreeBSD sliku u preuzimanje. Za orkestarsku postavu koristim
Instalacija sistema se odvija na standardni način, neću se zadržavati na tome, samo ću napomenuti da prije početka rada vrijedi obratiti pažnju kaljenje opcije koje nudi bsdinstaller
na kraju instalacije (ako sami instalirate sistem):
Postoje
Također je moguće omogućiti gore navedene parametre na već instaliranom sistemu. Da biste to učinili, trebate urediti datoteku pokretača i omogućiti parametre kernela. *ee je uređivač poput ovog 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 biti sigurni da imate instaliranu najnoviju verziju sistema i
Zatim konfigurišemo aide
, nadgledanje statusa konfiguracijskih datoteka sistema. Možete pročitati više detalja
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 ovom materijom savršeno je opisano u
Sada ponovo pokrećemo sistem i nastavljamo sa softverom na serveru. Svaki server je hipervizor za kontejnere ili pune virtuelne mašine. Stoga je važno da procesor podržava VT-x i EPT ako planiramo da koristimo punu virtuelizaciju.
Za upravljanje kontejnerima i virtuelnim mašinama koje koristim
Kontejneri? Opet Docker ili šta?
Ali ne. cbsd
za orkestriranje ovih kontejnera, koji se nazivaju ćelije.
Kavez je izuzetno efikasno rešenje za izgradnju infrastrukture za različite namene, gde je na kraju potrebna potpuna izolacija pojedinačnih usluga ili procesa. U suštini, to je klon host sistema, ali ne zahteva potpunu virtuelizaciju hardvera. I zahvaljujući tome, resursi se ne troše na „gostujući OS“, već samo na rad koji se obavlja. Kada se ćelije koriste za interne potrebe, ovo je vrlo zgodno rješenje za optimalno korištenje resursa - gomila ćelija na jednom hardverskom serveru može svaka pojedinačno koristiti cijeli resurs servera ako je potrebno. S obzirom na to da su obično različite podusluge potrebne dodatne. resurse u različito vrijeme, možete izvući maksimalne performanse sa jednog servera ako pravilno planirate i balansirate ćelije između servera. Ako je potrebno, ćelijama se također mogu dati ograničenja na korišteni resurs.
Šta je sa potpunom virtuelizacijom?
Koliko znam cbsd
podržava rad bhyve
i XEN hipervizori. Drugi nikad nisam koristio, ali prvi je relativno nov bhyve
u primjeru ispod.
Instalacija i konfiguracija okruženja domaćina
Koristimo FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
dodajte particiju diska u preostali prostor
geli init /dev/ada0p4
unesite našu šifru za šifriranje
geli attach /dev/ada0p4
Ponovo unosimo lozinku i imamo uređaj /dev/ada0p4.eli - ovo je naš šifrirani prostor. Zatim ponavljamo isto za /dev/ada1 i ostale diskove u nizu. I kreiramo novu
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Pa, mi imamo spreman minimalni borbeni komplet. Zrcaljeni niz diskova u slučaju da jedan od tri pokvari.
Kreiranje skupa podataka na novom "pulu"
zfs create vms/jails
pkg install cbsd
— pokrenuli smo tim i postavili menadžment za naše ćelije.
Nakon cbsd
instaliran, potrebno ga je inicijalizirati:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Pa, odgovaramo na gomilu pitanja, uglavnom sa standardnim odgovorima.
*Ako koristite enkripciju, važno je da demon cbsdd
nije pokrenut automatski dok ne dešifrujete diskove ručno ili automatski (u našem primjeru to radi zabbix)
**Također ne koristim NAT iz cbsd
, i sam ga konfiguriram 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 zaštitnog zida je također posebna tema, tako da neću ulaziti duboko u postavljanje BLOCK ALL politike i postavljanje bijelih lista, to možete učiniti čitanjem
Pa... imamo instaliran cbsd, vrijeme je da kreiramo našeg prvog radnog konja - Bitcoin demona u kavezu!
cbsd jconstruct-tui
Ovdje vidimo dijalog za kreiranje ćelije. Nakon što su sve vrijednosti postavljene, krenimo!
Kada kreirate svoju prvu ćeliju, trebali biste odabrati šta ćete koristiti kao osnovu za ćelije. Odaberem distribuciju iz FreeBSD spremišta pomoću naredbe repo
. Ovaj izbor se vrši samo prilikom kreiranja prve ćelije određene verzije (možete ugostiti ćelije bilo koje verzije koja je starija od verzije hosta).
Nakon što je sve postavljeno, pokrećemo 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đete u ćelijsku konzolu
i već unutar ćelije instaliramo softver sa njegovim zavisnostima (naš host sistem 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 nam je potrebna anonimnost jer želimo da se povežemo sa nekim kavezima preko TOP mreže. Općenito, planiramo pokrenuti većinu ćelija sa sumnjivim softverom samo preko proxyja. Hvala za pf
Možete onemogućiti NAT za određeni raspon IP adresa na lokalnoj mreži i dozvoliti NAT samo za naš TOR čvor. Dakle, čak i ako zlonamjerni softver uđe u ćeliju, on najvjerovatnije neće komunicirati sa vanjskim svijetom, a ako i dođe, neće otkriti IP našeg servera. Stoga kreiramo još jednu ćeliju za „prosleđivanje“ usluga kao „.onion“ servis 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 za slušanje na lokalnoj adresi (dostupno za sve ćelije)
SOCKSPort 192.168.0.2:9050
Šta nam je još potrebno za potpunu sreću? Da, potrebna nam je usluga za naš web, možda više od jedne. Pokrenimo nginx, koji će djelovati kao reverse-proxy i brinuti 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 zavisnosti u kavez. A domaćin je i dalje čist.
Vratimo se kasnije na podešavanje nginxa, potrebno je da podignemo još dvije ćelije za naš gateway za plaćanje na nodejs i rust i web aplikaciju koja je iz nekog razloga u Apache i PHP-u, a za ovu drugu je potrebna i 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 sa git-om 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
450 MB paketa. u kavezu.
ovdje dajemo programeru pristup preko SSH-a direktno u ćeliju, oni će tamo sve raditi sami:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— promijenite SSH port ćelije na bilo koji proizvoljan
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Pa, servis radi, ostaje samo dodati pravilo pf
firewall
Hajde da vidimo kakav IP imaju naše ćelije i kako generalno izgleda naša "lokalna oblast".
# 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, pošto smo tu, dodajmo i pravilo za reverse-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
Pa, sada malo o bitcoinima
Ono što imamo je da imamo web aplikaciju koja je eksterno izložena i lokalno razgovara sa našim pristupom za plaćanje. Sada treba da pripremimo 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 funkciju RPC-a i novčanika, ali postoje zgodniji "omoti" za razvoj aplikacija. Za početak smo odlučili staviti electrum
je CLI novčanik.
laptopovi. Za sada ćemo koristiti Electrum sa javnim serverima, a kasnije ćemo ga podići u drugoj ćeliji
# 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
Za naše na lancu Samo ograničen broj ljudi će od sada moći da se poveže na novčanik. Kako se ne bi otvorio pristup ovoj ćeliji izvana, veze preko SSH-a će se odvijati preko 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 pristupom Internetu novčanika. Hajde da mu damo IP adresu iz drugog podmrežnog prostora koji nije NAT. Prvo da se promijenimo /etc/pf.conf
na domaćinu
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
promenimo to u JAIL_IP_POOL="192.168.0.0/25"
, tako da sve adrese 192.168.0.126-255 neće imati direktan pristup Internetu. Neka vrsta softverske mreže “air-gap”. I NAT pravilo ostaje kao što je bilo
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Preopterećenje pravila
# pfctl -f /etc/pf.conf
Hajdemo sada na 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
Hm, ali sada će sam sistem prestati raditi za nas. Međutim, možemo odrediti sistemski proxy. Ali postoji jedna stvar, na TOR-u je to SOCKS5 proxy, a radi pogodnosti bismo također željeli 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 u našem sistemu postoje dva proxy servera i oba izlaze preko 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 shell raditi ispod proxyja. Ako želimo da instaliramo pakete, onda treba da ih dodamo /usr/local/etc/pkg.conf
ispod korena kaveza
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Pa, sada je vrijeme da dodate skrivenu uslugu TOR 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 veze. Provjerimo sa lokalne mašine. 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, sa Linux klijentske mašine
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
Hajde da se povežemo (Da bi ovo funkcioniralo, 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
Uspeh!
Za rad sa trenutnim i mikro-plaćanjima, potreban nam je i čvor c-lightning
potrebno za funkcionisanje bitcoind
ali da.
*Postoje različite implementacije Lightning Network protokola na različitim jezicima. Od onih koje smo testirali, c-lightning (napisan u C) se činio najstabilnijim i najefikasnijim
# 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, napravimo 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
Moje haotično prebacivanje između ćelija se ispostavilo da nije tako haotično ako zapazite uslužni program tmux
, koji vam omogućava da kreirate više terminalskih podsesija unutar jedne sesije. analogno: screen
Dakle, ne želimo da otkrivamo stvarnu IP adresu našeg čvora, i želimo da sve finansijske transakcije obavljamo preko TOP-a. Dakle, još jedan 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
Sada napravimo 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 morate kreirati konfiguracijsku datoteku za bitcoin-cli, uslužni program koji komunicira s njim bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
ček
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
lansiranje lightningd
lightning@lightning:~ % lightningd --daemon
Sam lightningd
možete kontrolisati uslužni program lightning-cli
, na primjer:
lightning-cli newaddr
dobiti adresu za novu dolaznu uplatu
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
pošaljite sav novac u novčaniku na adresu (sve adrese na lancu)
Također komande za vanlančane operacije lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
itd.
Pa, za komunikaciju sa aplikacijom imamo REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Hajde da sumiramo rezultate
# 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 kontejnera, svaki sa svojim nivoom pristupa i sa i na lokalnu mrežu.
# 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, bitcoind zauzima svih 190 GB prostora. Šta ako nam treba 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 kreirati snimak i priložiti novu ćeliju ovom snimku. Nova ćelija će imati svoj prostor, ali će samo razlika između trenutnog stanja i originala biti uzeta u obzir u sistemu datoteka (uštedićemo najmanje 190 GB)
Svaka ćelija je zaseban ZFS skup podataka, i to je izuzetno zgodno.
Također je vrijedno napomenuti potrebu za daljinskim nadzorom hosta, za ove namjene imamo
B - sigurnost
Što se tiče sigurnosti, krenimo od ključnih principa u kontekstu infrastrukture:
Povjerljivost - Standardni alati sistema sličnih UNIX-u osiguravaju implementaciju ovog principa. Logički razdvajamo pristup svakom logički odvojenom elementu sistema - ćeliji. Pristup je omogućen standardnom autentifikacijom korisnika pomoću ličnih ključeva korisnika. Sva komunikacija između i do krajnjih ćelija odvija se u šifriranom obliku. Zahvaljujući šifriranju diska, ne moramo brinuti o sigurnosti podataka prilikom zamjene diska ili migracije na drugi server. Jedini kritičan pristup je pristup host sistemu, pošto takav pristup generalno obezbeđuje pristup podacima unutar kontejnera.
Integritet “Primjena ovog principa se odvija na nekoliko različitih nivoa. Prvo, važno je napomenuti da se u slučaju serverskog hardvera, ECC memorije, ZFS već „iz kutije“ brine o integritetu podataka na nivou informacionih bitova. Trenutni snimci vam omogućavaju da napravite sigurnosne kopije u bilo kojem trenutku u hodu. Pogodni alati za izvoz/uvoz ćelija čine replikaciju ćelije jednostavnom.
Dostupnost - Ovo je već opciono. Zavisi od stepena tvoje slave i činjenice da imaš hejtere. U našem primjeru osigurali smo da je novčanik dostupan isključivo sa TOP mreže. Ako je potrebno, možete blokirati sve na firewall-u i dozvoliti pristup serveru isključivo kroz tunele (TOR ili VPN su druga stvar). Tako će server biti što je moguće više odsječen od vanjskog svijeta i samo mi sami ćemo moći utjecati na njegovu dostupnost.
Nemogućnost odbijanja - A to zavisi od daljeg rada i poštivanja ispravnih politika za korisnička prava, pristup itd. Ali uz pravi pristup, sve radnje korisnika se revidiraju, a zahvaljujući kriptografskim rješenjima moguće je nedvosmisleno identificirati ko je i kada izvršio određene radnje.
Naravno, opisana konfiguracija nije apsolutni primjer kako bi uvijek trebala biti, to je prije jedan primjer kako može biti, uz zadržavanje vrlo fleksibilnih mogućnosti skaliranja i prilagođavanja.
Šta je sa potpunom virtuelizacijom?
O potpunoj virtuelizaciji koristeći cbsd 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"
...
Dakle, ako iznenada trebate pokrenuti docker, onda instalirajte neki debian i krenite!
To je sve
Valjda je to sve što sam htio podijeliti. Ako vam se svidio članak, možete mi poslati neke bitcoine -
izvor: www.habr.com