Taip jau susiklostė, kad pagal profesiją esu kompiuterinių sistemų ir tinklų administratorius (trumpiau: sistemos administratorius), o kiek daugiau nei 10 metų turėjau galimybę pasakyti prof. įvairių sistemų veikla, įskaitant tas, kurioms reikalingos [ekstremalios] saugumo priemonės. Taip pat atsitiko, kad prieš kurį laiką man tai buvo įdomu dev
, taigi, ėjau pro šalį). Bet aš nekalbu apie plėtrą, aš kalbu apie saugią ir efektyvią aplinką programoms.
Finansinės technologijos (fintech) pereiti prie informacijos saugumo (infosek) ir pirmasis gali veikti be antrojo, bet neilgai. Todėl noriu pasidalinti savo patirtimi ir naudojamų įrankių rinkiniu, kuris apima abu fintechIr infosek, ir tuo pačiu, taip pat gali būti naudojamas platesnei ar visiškai kitokiam tikslui. Šiame straipsnyje papasakosiu ne tiek apie Bitcoin, kiek apie finansinių (ir ne tik) paslaugų kūrimo ir veiklos infrastruktūros modelį – žodžiu, apie tas paslaugas, kuriose svarbus „B“. Tai taikoma ir Bitcoin biržai, ir tipiškiausiam mažos įmonės, niekaip nesusijusios su Bitcoin, paslaugų zoologijos sodui.
Noriu pažymėti, kad esu principų šalininkas "laikyk tai kvaila paprasta" и "mažiau yra daugiau", todėl ir straipsnis, ir tai, kas jame aprašyta, turės tas savybes, apie kurias kalba šie principai.
Įsivaizduojamas scenarijus: Pažvelkime į viską naudodami bitkoinų keitiklio pavyzdį. Nusprendėme pradėti keisti rublius, dolerius, eurus į bitkoinus ir atgal, ir jau turime veikiantį sprendimą, bet į kitus skaitmeninius pinigus kaip qiwi ir webmoney, t.y. Išsprendėme visus teisinius klausimus, turime paruoštą programą, kuri tarnauja kaip mokėjimo vartai rubliais, doleriais ir eurais bei kitomis mokėjimo sistemomis. Jis susietas su mūsų banko sąskaitomis ir turi tam tikrą API, skirtą mūsų galinėms programoms. Taip pat turime žiniatinklio programą, kuri veikia kaip vartotojų mainai, na, kaip įprasta qiwi ar webmoney sąskaita – susikurkite paskyrą, pridėkite kortelę ir pan. Jis palaiko ryšį su mūsų šliuzo programa, nors ir per REST API vietinėje srityje. Taigi nusprendėme prijungti bitkoinus ir tuo pačiu atnaujinti infrastruktūrą, nes... Iš pradžių viskas buvo paskubomis išdėliota virtualiose dėžėse biure po stalu... svetainė pradėjo naudotis, pradėjome nerimauti dėl veikimo laiko ir našumo.
Taigi, pradėkime nuo pagrindinio dalyko – serverio pasirinkimo. Nes mūsų pavyzdyje pateiktas verslas yra mažas ir mes pasitikime prieglobos prieglobsčiu (OVH), kurį pasirinksime
Serverio diegimas
Čia viskas paprasta. Mes pasirenkame įrangą, kuri atitinka mūsų poreikius. Tada pasirinkite FreeBSD vaizdą. Na, arba jungiamės (kito prieglobos ir savo techninės įrangos atveju) per IPMI arba su monitoriumi ir įkeliame .iso FreeBSD vaizdą į atsisiuntimą. Aš naudoju orkestro sąrankai
Sistemos diegimas vyksta standartiniu būdu, aš apie tai nesigilinsiu, tik pažymėsiu, kad prieš pradedant eksploatuoti verta atkreipti dėmesį į grūdinimas siūlomų variantų bsdinstaller
diegimo pabaigoje (jei sistemą įdiegiate patys):
Yra
Taip pat galima įjungti aukščiau minėtus parametrus jau įdiegtoje sistemoje. Norėdami tai padaryti, turite redaguoti įkrovos failą ir įjungti branduolio parametrus. *ee yra BSD redaktorius
# 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
Taip pat turėtumėte įsitikinti, kad įdiegta naujausia sistemos versija ir
Tada konfigūruojame aide
, stebi sistemos konfigūracijos failų būseną. Išsamiau galite perskaityti
pkg install aide
ir redaguoti mūsų 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
Įjunkite
sysrc auditd_enable=YES
# service auditd start
Kaip sutvarkyti šį reikalą, puikiai aprašyta
Dabar paleidžiame iš naujo ir pereiname prie programinės įrangos serveryje. Kiekvienas serveris yra konteinerių arba pilnų virtualių mašinų hipervizorius. Todėl svarbu, kad procesorius palaikytų VT-x ir EPT, jei planuojame naudoti pilną virtualizaciją.
Naudoju konteineriams ir virtualiosioms mašinoms valdyti
Konteineriai? Vėl Dokeris ar kaip?
Bet ne. cbsd
orkestruoti šiuos konteinerius, kurie vadinami ląstelėmis.
Narvas yra itin efektyvus sprendimas kuriant infrastruktūrą įvairiems tikslams, kai galiausiai reikalinga visiška atskirų paslaugų ar procesų izoliacija. Iš esmės tai yra pagrindinės sistemos klonas, tačiau jam nereikia visos aparatinės įrangos virtualizacijos. Ir dėl to ištekliai išleidžiami ne „svečio OS“, o tik atliekamam darbui. Kai ląstelės naudojamos vidiniams poreikiams, tai yra labai patogus sprendimas optimaliam resursų naudojimui – krūva celių viename aparatiniame serveryje gali prireikus kiekviena atskirai naudoti visą serverio resursą. Atsižvelgiant į tai, kad dažniausiai skirtingoms subpaslaugoms reikia papildomų. išteklius skirtingu laiku, galite išgauti maksimalų vieno serverio našumą, jei tinkamai suplanuosite ir subalansuosite ląsteles tarp serverių. Jei reikia, langeliams taip pat gali būti taikomi naudojamų išteklių apribojimai.
Ką apie visišką virtualizaciją?
Kiek žinau cbsd
palaiko darbą bhyve
ir XEN hipervizoriai. Antrojo niekada nenaudojau, bet pirmasis palyginti naujas bhyve
toliau pateiktame pavyzdyje.
Prieglobos aplinkos diegimas ir konfigūravimas
Mes naudojame FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
pridėti disko skaidinį prie likusios vietos
geli init /dev/ada0p4
įveskite mūsų šifravimo slaptažodį
geli attach /dev/ada0p4
Dar kartą įvedame slaptažodį ir turime įrenginį /dev/ada0p4.eli – tai mūsų užšifruota erdvė. Tada tą patį pakartojame /dev/ada1 ir likusiems masyvo diskams. Ir sukuriame naują
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Na, mes turime paruošę minimalų kovos komplektą. Veidrodinis diskų masyvas, jei vienas iš trijų sugestų.
Duomenų rinkinio sukūrimas naujame „banke“
zfs create vms/jails
pkg install cbsd
— sukūrėme komandą ir nustatėme savo ląstelių valdymą.
Po cbsd
įdiegtas, jį reikia inicijuoti:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Na, mes atsakome į daugybę klausimų, dažniausiai pateikiame numatytuosius atsakymus.
*Jei naudojate šifravimą, svarbu, kad demonas cbsdd
neprasidėjo automatiškai, kol neiššifravote diskų rankiniu būdu arba automatiškai (mūsų pavyzdyje tai atlieka zabbix)
**Aš taip pat nenaudoju NAT nuo cbsd
, ir aš pats ją konfigūruoju 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
Užkardos politikos nustatymas taip pat yra atskira tema, todėl nesigilinsiu į strategijos BLOKUOTI VISKĄ ir baltųjų sąrašų nustatymą, tai galite padaryti perskaitę
Na... mes įdiegėme cbsd, laikas sukurti savo pirmąjį darbinį arkliuką – narvelį įkalintą Bitcoin demoną!
cbsd jconstruct-tui
Čia matome langelio kūrimo dialogą. Nustačius visas vertybes, kurkime!
Kurdami pirmąjį langelį turėtumėte pasirinkti, ką naudoti kaip langelių pagrindą. Pasirenku distribuciją iš FreeBSD saugyklos su komanda repo
. Šis pasirinkimas atliekamas tik kuriant pirmą konkrečios versijos langelį (galite priimti bet kurios versijos, senesnės už pagrindinio kompiuterio versiją, langelius).
Viską sumontavus, paleidžiame narvą!
# cbsd jstart bitcoind
Bet mes turime įdiegti programinę įrangą narve.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
patekti į ląstelių konsolę
ir jau ląstelės viduje įdiegiame programinę įrangą su jos priklausomybėmis (mūsų pagrindinė sistema išlieka švari)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Narve yra Bitcoin, bet mums reikia anonimiškumo, nes norime prisijungti prie kai kurių narvų per TOP tinklą. Apskritai, daugumą ląstelių su įtartina programine įranga planuojame paleisti tik per tarpinį serverį. Ačiū pf
Galite išjungti NAT tam tikram IP adresų diapazonui vietiniame tinkle ir leisti NAT tik mūsų TOR mazgui. Taigi, net jei kenkėjiška programa pateks į ląstelę, ji greičiausiai nebendraus su išoriniu pasauliu, o jei taip, tai neatskleis mūsų serverio IP. Todėl sukuriame kitą langelį, kad galėtume „persiųsti“ paslaugas kaip „.onion“ paslaugą ir kaip tarpinį serverį, skirtą prieiti prie interneto prie atskirų langelių.
# 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
Nustatyti klausytis vietiniu adresu (galima visuose langeliuose)
SOCKSPort 192.168.0.2:9050
Ko dar reikia pilnai laimei? Taip, mums reikia savo žiniatinklio paslaugos, galbūt daugiau nei vienos. Paleiskime nginx, kuris veiks kaip atvirkštinis tarpinis serveris ir pasirūpins Let's Encrypt sertifikatų atnaujinimu
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Taigi į narvą įdėjome 150 MB priklausomybių. O šeimininkas vis dar švarus.
Grįžkime prie nginx nustatymo vėliau, turime pakelti dar du langelius mūsų mokėjimo šliuzui ant nodejs ir rust ir žiniatinklio aplikacijos, kuri kažkodėl yra Apache ir PHP, o pastarajai taip pat reikalinga MySQL duomenų bazė.
# 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
...ir dar 380 MB atskirtų paketų
Tada atsisiunčiame savo programą su git ir paleidžiame ją.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB paketai. narve.
čia suteikiame kūrėjui prieigą per SSH tiesiai į langelį, jie ten viską padarys patys:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
- pakeiskite ląstelės SSH prievadą į bet kurį savavališką
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Na, paslauga veikia, belieka pridėti taisyklę pf
užkarda
Pažiūrėkime, kokį IP turi mūsų ląstelės ir kaip apskritai atrodo mūsų „vietinė sritis“.
# 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
ir pridėkite taisyklę
# 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
Na, kadangi esame čia, taip pat pridėkime atvirkštinio tarpinio serverio taisyklę:
## 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
Na, o dabar šiek tiek apie bitkoinus
Mes turime žiniatinklio programą, kuri veikia išorėje ir vietiniu mastu bendrauja su mūsų mokėjimo šliuzu. Dabar turime paruošti darbo aplinką sąveikai su pačiu Bitcoin tinklu – mazgu bitcoind
tai tik demonas, kuris nuolat atnaujina vietinę blokų grandinės kopiją. Šis demonas turi RPC ir piniginės funkcionalumą, tačiau yra ir patogesnių programų kūrimo „įvyniojimų“. Pirmiausia nusprendėme įdėti electrum
yra CLI piniginė.
nešiojamieji kompiuteriai. Kol kas Electrum naudosime su viešaisiais serveriais, o vėliau kelsime kitame langelyje
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
dar 700 MB programinės įrangos mūsų narve
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"
}
Dabar turime sukurtą piniginę.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Mūsų ant grandinės Nuo šiol prie piniginės galės prisijungti tik ribotas skaičius žmonių. Kad nebūtų atidaryta prieiga prie šio langelio iš išorės, ryšiai per SSH vyks per TOP (decentralizuota VPN versija). Paleidžiame SSH langelyje, bet neliečiame pagrindinio kompiuterio mūsų pf.conf.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Dabar išjunkite mobilųjį telefoną su piniginės interneto prieiga. Suteikime jam IP adresą iš kitos potinklio erdvės, kuri nėra NAT. Pirmiausia pasikeiskime /etc/pf.conf
ant šeimininko
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
pakeiskime į JAIL_IP_POOL="192.168.0.0/25"
, taigi visi adresai 192.168.0.126-255 neturės tiesioginės prieigos prie interneto. Tam tikras programinės įrangos „oro tarpo“ tinklas. Ir NAT taisyklė lieka tokia, kokia buvo
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Taisyklių perkrovimas
# pfctl -f /etc/pf.conf
Dabar paimkime savo kamerą
# 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, bet dabar pati sistema pas mus nustos veikti. Tačiau galime nurodyti sistemos tarpinį serverį. Tačiau yra vienas dalykas, TOR tai yra SOCKS5 tarpinis serveris, o patogumui taip pat norėtume HTTP tarpinio serverio.
# 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
Na, dabar mūsų sistemoje yra du tarpiniai serveriai ir abu išveda per TOR: socks5://192.168.0.2:9050 ir
Dabar galime konfigūruoti savo piniginės aplinką
# 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
Na, dabar apvalkalas veiks iš tarpinio serverio. Jei norime įdiegti paketus, turėtume pridėti prie /usr/local/etc/pkg.conf
iš po narvo šaknies
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Na, dabar laikas pridėti paslėptą TOR paslaugą kaip mūsų SSH paslaugos adresą piniginės langelyje.
# 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
Tai mūsų ryšio adresas. Patikrinkime iš vietinės mašinos. Bet pirmiausia turime pridėti savo SSH raktą:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Na, iš Linux kliento mašinos
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
Prisijunkite (Kad tai veiktų, jums reikia vietinio TOR demono, kuris klausosi 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
Sėkmė!
Norint dirbti su momentiniais ir mikro mokėjimais, mums taip pat reikia mazgo c-lightning
reikalingas funkcionavimui bitcoind
bet taip.
*Yra įvairių „Lightning Network“ protokolo įdiegimų skirtingomis kalbomis. Iš tų, kuriuos išbandėme, c-lightning (parašyta C) atrodė stabiliausias ir efektyviausias išteklius
# 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
Kol viskas, ko reikia, yra sukompiliuota ir įdiegta, sukurkime RPC vartotoją 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
Mano chaotiškas perjungimas tarp langelių pasirodo ne toks chaotiškas, jei atkreipsite dėmesį į naudingumą tmux
, kuri leidžia sukurti kelis terminalo poseansus per vieną sesiją. Analogas: screen
Taigi, mes nenorime atskleisti tikrojo savo mazgo IP, o norime atlikti visas finansines operacijas per TOP. Todėl kito .svogūno nereikia.
# 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
Dabar sukurkime c-lightning konfigūraciją
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 ~
taip pat turite sukurti bitcoin-cli konfigūracijos failą, programą, kuri palaiko ryšį bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
patikrinti
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
paleisti lightningd
lightning@lightning:~ % lightningd --daemon
Pats lightningd
galite valdyti naudingumą lightning-cli
, pavyzdžiui:
lightning-cli newaddr
gauti naujo gaunamo mokėjimo adresą
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
siųsti visus piniginėje esančius pinigus nurodytu adresu (visi tinkle esantys adresai)
Taip pat komandos off-chain operacijoms lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
tt
Na, bendravimui su programa turime REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Apibendrinant
# 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
Turime konteinerių rinkinį, kurių kiekvienas turi savo prieigos lygį tiek iš vietinio tinklo, tiek prie jo.
# 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
Kaip matote, bitcoind užima visus 190 GB vietos. Ką daryti, jei mums reikia kito mazgo testams? Čia praverčia ZFS. Su pagalba cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
galite sukurti momentinę nuotrauką ir prie šios nuotraukos pridėti naują langelį. Naujasis langelis turės savo erdvę, tačiau failų sistemoje bus atsižvelgta tik į skirtumą tarp dabartinės būsenos ir originalo (sutaupysime mažiausiai 190 GB)
Kiekviena ląstelė yra atskiras ZFS duomenų rinkinys, ir tai labai patogu.
Taip pat verta atkreipti dėmesį į nuotolinio pagrindinio kompiuterio stebėjimo poreikį, šiems tikslams mes turime
B – sauga
Kalbant apie saugumą, pradėkime nuo pagrindinių principų infrastruktūros kontekste:
Konfidencialumas – Šio principo įgyvendinimą užtikrina standartiniai UNIX tipo sistemų įrankiai. Logiškai atskiriame prieigą prie kiekvieno logiškai atskiro sistemos elemento – ląstelės. Prieiga suteikiama naudojant standartinį vartotojo autentifikavimą naudojant asmeninius vartotojų raktus. Visas ryšys tarp ir į galutinius langelius vyksta užšifruota forma. Disko šifravimo dėka mes neturime jaudintis dėl duomenų saugumo keičiant diską ar perkeliant į kitą serverį. Vienintelė svarbi prieiga yra prieiga prie pagrindinės sistemos, nes tokia prieiga paprastai suteikia prieigą prie duomenų konteineriuose.
Vientisumas „Šio principo įgyvendinimas vyksta keliais skirtingais lygmenimis. Pirma, svarbu pažymėti, kad serverio aparatinės įrangos, ECC atminties atveju ZFS jau „iš dėžutės“ rūpinasi duomenų vientisumu informacijos bitų lygyje. Momentinės momentinės nuotraukos leidžia bet kuriuo metu pasidaryti atsargines kopijas. Patogūs langelių eksporto / importavimo įrankiai palengvina ląstelių replikaciją.
Prieinamumas – Tai jau neprivaloma. Priklauso nuo jūsų šlovės laipsnio ir nuo to, ar turite neapykantų. Savo pavyzdyje užtikrinome, kad piniginė būtų pasiekiama tik iš TOP tinklo. Jei reikia, užkardoje galite užblokuoti viską ir leisti prieiti prie serverio tik per tunelius (TOR ar VPN – kitas reikalas). Taigi serveris bus kuo labiau atkirstas nuo išorinio pasaulio ir tik mes patys galėsime daryti įtaką jo pasiekiamumui.
Neįmanoma atsisakyti - Ir tai priklauso nuo tolesnio veikimo ir teisingos vartotojų teisių, prieigos ir pan. Bet taikant teisingą požiūrį, visi vartotojo veiksmai yra audituojami, o kriptografinių sprendimų dėka galima vienareikšmiškai nustatyti, kas ir kada atliko tam tikrus veiksmus.
Žinoma, aprašyta konfigūracija nėra absoliutus pavyzdys, kaip ji visada turėtų būti, tai veikiau vienas iš pavyzdžių, kaip ji gali būti, išlaikant labai lanksčias mastelio keitimo ir pritaikymo galimybes.
Ką apie visišką virtualizaciją?
Apie visišką virtualizaciją naudojant cbsd galite bhyve
Turite įjungti kai kurias branduolio parinktis.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Taigi, jei staiga reikia paleisti dokerį, įdiekite debianą ir pirmyn!
Tai viskas
Manau, tai viskas, kuo norėjau pasidalinti. Jei jums patiko straipsnis, galite atsiųsti man keletą bitkoinų -
Šaltinis: www.habr.com