Juhtus nii, et ametilt olen arvutisüsteemide ja võrkude administraator (lühidalt: süsteemiadministraator) ja mul oli veidi rohkem kui 10 aastat võimalus rääkida prof. mitmesuguste süsteemide tegevus, sealhulgas need, mis nõuavad [äärmuslikke] turvameetmeid. Juhtus ka nii, et mõni aeg tagasi tundus see mulle huvitav dev
, nii et ma sõitsin mööda). Aga ma ei räägi arendusest, vaid turvalisest ja tõhusast rakenduste keskkonnast.
Finantstehnoloogia (FINTECH) minge infoturbe kõrval (infosek) ja esimene võib töötada ilma teiseta, kuid mitte kaua. Seetõttu tahan jagada oma kogemust ja kasutatavat tööriistakomplekti, mis sisaldab mõlemat FINTECHJa infosek, ja samal ajal ning seda saab kasutada ka laiemalt või hoopis teistsugusel eesmärgil. Selles artiklis ei räägi ma mitte niivõrd Bitcoinist, vaid finantsteenuste (ja mitte ainult) arendamise ja toimimise infrastruktuuri mudelist - ühesõnaga nendest teenustest, kus B on oluline. See kehtib nii Bitcoini börsi kui ka väikese ettevõtte kõige tüüpilisema ettevõtte loomaaia kohta, mis pole Bitcoiniga kuidagi seotud.
Tahan märkida, et olen põhimõtete pooldaja "hoidke see loll lihtsana" и "vähem on rohkem"Seetõttu on nii artiklil kui ka selles kirjeldatul omadused, mida need põhimõtted puudutavad.
Kujutletav stsenaarium: Vaatame kõike bitcoini vahetaja näitel. Otsustasime käivitada rublade, dollarite, eurode vahetamise bitcoinide vastu ja tagasi ning meil on juba toimiv lahendus, kuid muu digitaalse raha jaoks nagu qiwi ja webmoney, st. Oleme lõpetanud kõik juriidilised küsimused, meil on valmis rakendus, mis toimib rublade, dollarite ja eurode ning muude maksesüsteemide makseväravana. See on ühendatud meie pangakontodega ja sellel on meie lõpprakenduste jaoks mingi API. Meil on ka veebirakendus, mis toimib kasutajate vahetajana, nagu tavaline qiwi või webmoney konto – loo konto, lisa kaart jne. See suhtleb meie lüüsirakendusega, ehkki kohaliku piirkonna REST API kaudu. Ja nii otsustasime ühendada bitcoinid ja samal ajal uuendada infrastruktuuri, sest... Esialgu pandi kõik kiiruga üles laua all kontoris asuvatesse virtuaalkastidesse... saiti hakati kasutama ning me hakkasime muretsema tööaja ja jõudluse pärast.
Niisiis, alustame peamisest - serveri valimisest. Sest meie näites olev ettevõte on väike ja me usaldame hostijat (OVH), mille me valime
Serveri installimine
Siin on kõik lihtne. Valime meie vajadustele vastava riistvara. Seejärel valige FreeBSD pilt. Noh, või ühendame (teise hosti ja oma riistvara puhul) IPMI või monitoriga ja söödame allalaaditavasse .iso FreeBSD kujutise. Orkestri seadistuste jaoks, mida ma kasutan
Süsteemi paigaldamine toimub tavapärasel viisil, ma ei peatu sellel, märgin ainult, et enne töö alustamist tasub tähelepanu pöörata karastamine valikuid, mida see pakub bsdinstaller
installimise lõpus (kui installite süsteemi ise):
On
Eelnimetatud parameetrid on võimalik lubada ka juba paigaldatud süsteemis. Selleks peate redigeerima alglaaduri faili ja lubama kerneli parameetrid. *ee on selline redaktor BSD-s
# 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
Samuti peaksite veenduma, et teil on installitud süsteemi uusim versioon ja
Siis sättisime aide
, jälgides süsteemi konfiguratsioonifailide olekut. Täpsemalt saab lugeda
pkg install aide
ja redigeerige meie 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
Me kaasame
sysrc auditd_enable=YES
# service auditd start
Kuidas seda asja hallata, on täpselt kirjeldatud
Nüüd taaskäivitame ja jätkame serveris oleva tarkvaraga. Iga server on konteinerite või täisvirtuaalmasinate hüperviisor. Seetõttu on oluline, et protsessor toetaks VT-x ja EPT, kui plaanime kasutada täielikku virtualiseerimist.
Kasutatavate konteinerite ja virtuaalmasinate haldamiseks
Konteinerid? Jälle Docker või mis?
Kuid mitte. cbsd
nende konteinerite, mida nimetatakse rakkudeks, orkestreerimiseks.
Puur on äärmiselt tõhus lahendus infrastruktuuri ehitamiseks erinevatel eesmärkidel, kus lõppkokkuvõttes on vaja üksikute teenuste või protsesside täielikku isoleerimist. Põhimõtteliselt on see hostsüsteemi kloon, kuid see ei nõua täielikku riistvara virtualiseerimist. Ja tänu sellele ei kulutata ressursse "külalise OS-ile", vaid ainult tehtavale tööle. Kui rakke kasutatakse sisemisteks vajadusteks, on see väga mugav lahendus optimaalseks ressursikasutuseks – hunnik rakke ühes riistvaraserveris saab igaüks eraldi kasutada kogu serveriressurssi vajadusel. Arvestades, et tavaliselt vajavad erinevad allteenused lisa. ressursse erinevatel aegadel, saate ühest serverist maksimaalse jõudluse eraldada, kui planeerite ja tasakaalustate lahtreid serverite vahel õigesti. Vajadusel saab lahtritele määrata ka kasutatava ressursi piirangud.
Aga täielik virtualiseerimine?
Niipalju kui mina tean cbsd
toetab tööd bhyve
ja XEN hüperviisorid. Teist pole ma kunagi kasutanud, aga esimene on suhteliselt uus bhyve
allolevas näites.
Hostikeskkonna installimine ja konfigureerimine
Kasutame FS-i
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
lisage ülejäänud ruumi ketta partitsioon
geli init /dev/ada0p4
sisestage meie krüpteerimisparool
geli attach /dev/ada0p4
Sisestame parooli uuesti ja meil on seade /dev/ada0p4.eli - see on meie krüptitud ruum. Seejärel kordame sama /dev/ada1 ja ülejäänud massiivi ketaste jaoks. Ja loome uue
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Meil on minimaalne lahingukomplekt valmis. Peegeldatud ketaste massiiv juhuks, kui üks kolmest ebaõnnestub.
Andmestiku loomine uues kogumis
zfs create vms/jails
pkg install cbsd
— lõime meeskonna ja panime paika oma rakkude haldamise.
Pärast cbsd
installitud, tuleb see lähtestada:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Noh, me vastame paljudele küsimustele, enamasti vaikevastustega.
*Kui kasutate krüptimist, on oluline, et deemon cbsdd
ei käivitunud automaatselt enne, kui dekrüpteerite kettad käsitsi või automaatselt (meie näites teeb seda zabbix)
**Ma ei kasuta ka NAT-i alates cbsd
ja ma konfigureerin selle ise pf
.
# sysrc pf_enable=YES
# ee /etc/pf.conf
IF_PUBLIC="em0"
IP_PUBLIC="1.23.34.56"
JAIL_IP_POOL="192.168.0.0/24"
#WHITE_CL="{ 127.0.0.1 }"
icmp_types="echoreq"
set limit { states 20000, frags 20000, src-nodes 20000 }
set skip on lo0
scrub in all
#NAT for jails
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
## Bitcoin network port forward
IP_JAIL="192.168.0.1"
PORT_JAIL="{8333}"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
# service pf start
# pfctl -f /etc/pf.conf
Tulemüüri poliitikate seadistamine on samuti eraldi teema, nii et ma ei lasku poliitika BLOKEERI KÕIK seadistamisse ja valgete nimekirjade seadistamisse, seda saate teha lugedes
Noh... meil on cbsd installitud, on aeg luua meie esimene tööhobune - puuris peetav Bitcoini deemon!
cbsd jconstruct-tui
Siin näeme lahtri loomise dialoogi. Kui kõik väärtused on seatud, loome!
Esimese lahtri loomisel peaksite valima, mida lahtrite alusena kasutada. Valin käsuga FreeBSD hoidlast distributsiooni repo
. See valik tehakse ainult konkreetse versiooni esimese lahtri loomisel (saate hostida mis tahes versiooni lahtreid, mis on hostiversioonist vanemad).
Kui kõik on paigaldatud, käivitame puuri!
# cbsd jstart bitcoind
Kuid me peame puuri installima tarkvara.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
kärjekonsooli pääsemiseks
ja juba lahtrisse installime tarkvara koos selle sõltuvustega (meie hostsüsteem jääb puhtaks)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Puuris on Bitcoin, kuid me vajame anonüümsust, sest tahame mõne puuriga ühenduse luua TOP võrgu kaudu. Üldiselt plaanime enamikku kahtlase tarkvaraga rakke käitada ainult puhverserveri kaudu. Tänu pf
Saate NAT-i keelata teatud IP-aadresside vahemiku jaoks kohalikus võrgus ja lubada NAT-i ainult meie TOR-sõlme jaoks. Seega, isegi kui pahavara lahtrisse satub, ei suhtle see suure tõenäosusega välismaailmaga ja kui see juhtub, siis ei avalda see meie serveri IP-d. Seetõttu loome teise lahtri teenuste edasisaatmiseks .onion-teenusena ja puhverserverina üksikutele rakkudele Interneti-juurdepääsuks.
# 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
Määrake kuulama kohalikul aadressil (saadaval kõigi lahtrite jaoks)
SOCKSPort 192.168.0.2:9050
Mida me veel täielikuks õnneks vajame? Jah, me vajame oma veebi jaoks teenust, võib-olla rohkem kui üht. Käivitame nginxi, mis toimib pöördpuhverserverina ja hoolitseb Let's Encrypti sertifikaatide uuendamise eest
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Ja nii me paigutasime 150 MB sõltuvusi puuri. Ja peremees on ikka puhas.
Tuleme hiljem tagasi nginxi seadistamise juurde, peame tõstma veel kaks lahtrit oma maksevärava jaoks nodejs ja roostes ning veebirakenduse, mis on millegipärast Apache'is ja PHP-s ning viimane nõuab ka MySQL andmebaasi.
# cbsd jsconstruct-tui
# cbsd jstart paygw
# jexec paygw
paygw:/@[15:55] # pkg install git node npm
paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
...ja veel 380 MB isoleeritud pakette
Järgmisena laadime alla oma rakenduse koos gitiga ja käivitame selle.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB paketid. puuris.
siin anname arendajale juurdepääsu SSH kaudu otse lahtrisse, nad teevad seal kõik ise:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
- muutke lahtri SSH-port suvaliseks
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Noh, teenus töötab, jääb üle vaid reegel lisada pf
tulemüüri
Vaatame, milline IP on meie rakkudel ja milline meie "kohalik piirkond" üldiselt välja näeb.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
2 192.168.0.2 tor.space.com /zroot/jails/jails/tor
3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev
4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw
5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp
ja lisage reegel
# ee /etc/pf.conf
## SSH for web-Devs
IP_JAIL="192.168.0.5"
PORT_JAIL="{ 2267 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
Noh, kuna oleme siin, lisame ka pöördpuhverserveri reegli:
## web-ports for nginx-rev
IP_JAIL="192.168.0.3"
PORT_JAIL="{ 80, 443 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
# pfctl -f /etc/pf.conf
Noh, nüüd natuke bitcoinidest
Meil on veebirakendus, mis on väljastpoolt avatud ja suhtleb kohapeal meie makseväravaga. Nüüd peame ette valmistama töökeskkonna Bitcoini võrgu endaga suhtlemiseks - sõlmega bitcoind
see on lihtsalt deemon, mis hoiab plokiahela kohalikku koopiat ajakohasena. Sellel deemonil on RPC ja rahakoti funktsionaalsus, kuid rakenduste arendamiseks on mugavamad "ümbrised". Alustuseks otsustasime panna electrum
on CLI rahakott.
sülearvutid. Praegu kasutame Electrumit avalike serveritega ja hiljem tõstame selle teise lahtrisse
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
veel 700 MB tarkvara meie puuris
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"
}
Nüüd on meil rahakott loodud.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Meie ahelas Nüüdsest saab rahakotiga ühenduse luua vaid piiratud arv inimesi. Selleks, et mitte avada juurdepääsu sellele lahtrile väljastpoolt, toimuvad ühendused SSH kaudu TOP-i (VPN-i detsentraliseeritud versioon) kaudu. Käivitame lahtris SSH, kuid ärge puudutage hostis meie pf.conf-i.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Nüüd lülitame rahakoti Interneti-juurdepääsuga raku välja. Anname sellele IP-aadressi teisest alamvõrguruumist, mis pole NAT-iga ühendatud. Kõigepealt muudame /etc/pf.conf
peremehe peal
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
muudame selle vastu JAIL_IP_POOL="192.168.0.0/25"
, seega ei ole kõigil aadressidel 192.168.0.126-255 otsest juurdepääsu Internetile. Omamoodi tarkvaraline "õhuvahe" võrk. Ja NAT-reegel jääb samaks
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Reeglite ülekoormamine
# pfctl -f /etc/pf.conf
Võtame nüüd oma raku
# 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, aga nüüd lakkab süsteem ise meil töötamast. Siiski saame määrata süsteemi puhverserveri. Kuid on üks asi, TOR-is on see SOCKS5 puhverserver ja mugavuse huvides sooviksime ka HTTP-puhverserverit.
# cbsd jsconstruct-tui
# cbsd jstart polipo
# jexec polipo
polipo:/@[9:28] # pkg install polipo
polipo:/@[9:28] # ee /usr/local/etc/polipo/config
socksParentProxy = "192.168.0.2:9050"
socksProxyType = socks5
polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
Noh, nüüd on meie süsteemis kaks puhverserverit ja mõlemad väljastavad TOR-i kaudu: socks5://192.168.0.2:9050 ja
Nüüd saame oma rahakoti keskkonda konfigureerida
# 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
Noh, nüüd töötab kest puhverserveri alt. Kui tahame pakette installida, peaksime lisama /usr/local/etc/pkg.conf
puuri juure alt
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Noh, nüüd on aeg lisada TOR peidetud teenus meie SSH-teenuse aadressiks rahakoti puuris.
# 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
See on meie ühenduse aadress. Kontrollime kohalikust masinast. Kuid kõigepealt peame lisama oma SSH-võtme:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Noh, Linuxi kliendimasinast
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
Ühendame (Selle toimimiseks vajate kohalikku TOR-deemonit, mis kuulab 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
Edu!
Kiir- ja mikromaksetega töötamiseks vajame ka sõlme c-lightning
toimimiseks vajalik bitcoind
aga jah.
*Lightning Networki protokolli on erinevates keeltes erinevad teostused. Nendest, mida testisime, tundus c-lightning (kirjutatud C-s) olevat kõige stabiilsem ja ressursitõhusam
# cbsd jsconstruct-tui
# cbsd jstart cln
# jexec cln
lightning:/@[10:23] # adduser
Username: lightning
...
lightning:/@[10:24] # pkg install git
lightning:/@[10:23] # su lightning
cd ~ && git clone https://github.com/ElementsProject/lightning
lightning@lightning:~ % exit
lightning:/@[10:30] # cd /home/lightning/lightning/
lightning:/home/lightning/lightning@[10:31] # pkg install autoconf automake gettext git gmp gmake libtool python python3 sqlite3 libsodium py36-mako bash bitcoin-utils
lightning:/home/lightning/lightning@[10:34] # ./configure && gmake && gmake install
Kuni kõik vajalik on kompileeritud ja installitud, loome jaoks RPC kasutaja lightningd
в bitcoind
# jexec bitcoind
bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf
rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#allow only c-lightning
rpcallowip=192.168.0.7/32
bitcoind:/@[10:39] # service bitcoind restart
Minu kaootiline lahtrite vahel vahetamine ei osutu nii kaootiliseks, kui utiliiti märkida tmux
, mis võimaldab luua ühe seansi jooksul mitu terminali alamseanssi. Analoog: screen
Niisiis, me ei soovi avaldada oma sõlme tegelikku IP-d ja tahame kõik finantstehingud läbi viia TOP-i kaudu. Seetõttu pole teist .sibulat vaja.
# 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
Nüüd loome c-lightningi konfiguratsiooni
lightning:/home/lightning/lightning@[10:31] # su lightning
lightning@lightning:~ % mkdir .lightning
lightning@lightning:~ % ee .lightning/config
alias=My-LN-Node
bind-addr=192.168.0.7:9735
rgb=ff0000
announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735
network=bitcoin
log-level=info
fee-base=0
fee-per-satoshi=1
proxy=192.168.0.2:9050
log-file=/home/lightning/.lightning/c-lightning.log
min-capacity-sat=200000
# sparko plugin
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko
sparko-host=192.168.0.7
sparko-port=9737
sparko-tls-path=sparko-tls
#sparko-login=mywalletusername:mywalletpassword
#sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
# for the example above the initialization logs (mixed with lightningd logs) should print something 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 ~
Samuti peate looma bitcoin-cli konfiguratsioonifaili, utiliidi, mis suhtleb bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
Kontrollima
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
käivitada lightningd
lightning@lightning:~ % lightningd --daemon
Ise lightningd
saate utiliiti juhtida lightning-cli
, näiteks:
lightning-cli newaddr
hankige uue sissetuleva makse aadress
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
saatke kogu rahakotis olev raha aadressile (kõik ketisisesed aadressid)
Samuti käsud ahelaväliste toimingute jaoks lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
jne
Noh, rakendusega suhtlemiseks on meil REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Kokkuvõtteks
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
2 192.168.0.2 tor.space.com /zroot/jails/jails/tor
3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev
4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw
5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp
7 192.168.0.200 electrum.space.com /zroot/jails/jails/electrum
8 192.168.0.6 polipo.space.com /zroot/jails/jails/polipo
9 192.168.0.7 lightning.space.com /zroot/jails/jails/cln
Meil on konteinerite komplekt, millest igaühel on oma juurdepääsutase nii kohalikust võrgust kui ka sellele.
# 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
Nagu näete, võtab bitcoind kõik 190 GB ruumi. Mis siis, kui vajame testide jaoks teist sõlme? Siin on ZFS kasulik. Abiga cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
saate luua hetktõmmise ja lisada sellele pildile uue lahtri. Uuel lahtril on oma ruum, kuid failisüsteemis võetakse arvesse ainult praeguse oleku ja originaali erinevust (säästame vähemalt 190 GB)
Iga lahter on oma eraldiseisev ZFS-i andmestik ja see on äärmiselt mugav.
Samuti väärib märkimist vajadus hosti kaugjälgimise järele, selleks on meil olemas
B - ohutus
Turvalisuse osas alustame infrastruktuuri kontekstis peamistest põhimõtetest:
Konfidentsiaalsus - UNIX-laadsete süsteemide standardtööriistad tagavad selle põhimõtte rakendamise. Eraldame loogiliselt juurdepääsu igale loogiliselt eraldiseisvale süsteemi elemendile – lahtrile. Juurdepääs tagatakse tavalise kasutaja autentimise kaudu, kasutades kasutajate isiklikke võtmeid. Kogu side lõpprakkude vahel ja nende vahel toimub krüpteeritud kujul. Tänu ketta krüptimisele ei pea me ketta asendamisel või teise serverisse migreerumisel muretsema andmete ohutuse pärast. Ainus kriitiline juurdepääs on juurdepääs hostsüsteemile, kuna selline juurdepääs võimaldab üldiselt juurdepääsu konteinerites olevatele andmetele.
Ausus „Selle põhimõtte rakendamine toimub mitmel erineval tasandil. Esiteks on oluline märkida, et serveri riistvara, ECC mälu puhul hoolitseb ZFS juba “kastist väljas” andmete terviklikkuse eest infobittide tasemel. Kiired hetktõmmised võimaldavad teil igal ajal lennult varukoopiaid teha. Mugavad rakkude ekspordi/impordi tööriistad muudavad rakkude replikatsiooni lihtsaks.
Kättesaadavus - See on juba vabatahtlik. Sõltub teie kuulsuse tasemest ja sellest, et teil on vihkajaid. Meie näites tagasime, et rahakott oli ligipääsetav ainult TOP-võrgust. Vajadusel saab tulemüüris kõik blokeerida ja lubada serverile ligipääsu ainult tunnelite kaudu (TOR või VPN on teine asi). Seega on server välismaailmast nii palju kui võimalik ära lõigatud ja ainult meie ise saame selle kättesaadavust mõjutada.
Keeldumise võimatus - Ja see sõltub edasisest toimimisest ja kasutajaõiguste, juurdepääsu jms õigete eeskirjade järgimisest. Kuid õige lähenemise korral auditeeritakse kõiki kasutaja tegevusi ning tänu krüptograafilistele lahendustele on võimalik üheselt tuvastada, kes ja millal teatud toiminguid tegi.
Loomulikult ei ole kirjeldatud konfiguratsioon absoluutne näide sellest, kuidas see alati olema peaks, vaid pigem üks näide sellest, kuidas see võib olla, säilitades samas väga paindlikud skaleerimis- ja kohandamisvõimalused.
Aga täielik virtualiseerimine?
Teave täieliku virtualiseerimise kohta cbsd abil saate bhyve
Peate lubama mõned kerneli valikud.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Nii et kui teil on järsku vaja dokk käivitada, installige mõni debian ja minge!
See on kõik
See on vist kõik, mida ma jagada tahtsin. Kui teile artikkel meeldis, võite saata mulle mõned bitcoinid -
Allikas: www.habr.com