Okazis, ke profesie mi estas administranto de komputilaj sistemoj kaj retoj (mallonge: sistemadministranto), kaj mi havis la okazon rakonti al prof. iom pli ol 10 jarojn. la agadoj de vasta gamo de sistemoj, inkluzive de tiuj, kiuj postulas [ekstremajn] sekureciniciatojn. Okazis ankaŭ, ke antaŭ iom da tempo mi trovis ĝin interesa dev
, do, mi estis preterpasanta). Sed mi ne parolas pri evoluo, mi parolas pri sekura kaj efika medio por aplikoj.
Financa teknologio (fintech) iru apud informa sekureco (infosek) kaj la unua povas funkcii sen la dua, sed ne longe. Tial mi volas kunhavigi mian sperton kaj la aron da iloj, kiujn mi uzas, kiu inkluzivas ambaŭ fintech, kaj infosek, kaj samtempe, kaj ankaŭ povas esti uzata por pli larĝa aŭ tute alia celo. En ĉi tiu artikolo mi rakontos al vi ne tiom pri Bitcoin, sed pri la infrastruktura modelo por la disvolviĝo kaj funkciado de financaj (kaj ne nur) servoj - unuvorte, tiuj servoj kie "B" gravas. Ĉi tio validas kaj por la Bitcoin-interŝanĝo kaj por la plej tipa kompania zoo de servoj de malgranda kompanio neniel ligita kun Bitcoin.
Mi ŝatus rimarki, ke mi estas subtenanto de la principoj "teni ĝin stulta simpla" и "malpli estas pli", do, kaj la artikolo kaj tio, kio estas priskribita en ĝi, havos la ecojn, pri kiuj temas ĉi tiuj principoj.
Imaga scenaro: Ni rigardu ĉion uzante la ekzemplon de bitcoin-interŝanĝilo. Ni decidis lanĉi la interŝanĝon de rubloj, dolaroj, eŭroj por bitcoins kaj reen, kaj ni jam havas funkciantan solvon, sed por alia cifereca mono kiel qiwi kaj webmoney, t.e. Ni fermis ĉiujn leĝajn aferojn, ni havas pretan aplikaĵon, kiu servas kiel pagpordo por rubloj, dolaroj kaj eŭroj kaj aliaj pagsistemoj. Ĝi estas konektita al niaj bankkontoj kaj havas ian API por niaj finaj aplikoj. Ni ankaŭ havas TTT-aplikaĵon kiu funkcias kiel interŝanĝilo por uzantoj, nu, kiel tipa qiwi aŭ retmonkonto - kreu konton, aldonu karton, ktp. Ĝi komunikas kun nia enirejo-aplikaĵo, kvankam per la REST API en la loka areo. Kaj do ni decidis konekti bitcoins kaj samtempe altgradigi la infrastrukturon, ĉar... Komence, ĉio estis metita en haste sur virtualkestoj en la oficejo sub la tablo... la retejo komencis esti uzata, kaj ni komencis zorgi pri funkciado kaj rendimento.
Do, ni komencu per la ĉefa afero - elekti servilon. Ĉar la komerco en nia ekzemplo estas malgranda kaj ni fidas la gastiganton (OVH), kiun ni elektos
Instalado de servilo
Ĉio estas simpla ĉi tie. Ni elektas la aparataron, kiu konvenas al niaj bezonoj. Tiam elektu la FreeBSD-bildon. Nu, aŭ ni konektas (kaze de alia gastiganto kaj nia propra aparataro) per IPMI aŭ per monitoro kaj nutras la bildon .iso FreeBSD en la elŝuton. Por orkestra aranĝo mi uzas
Instalado de la sistemo okazas laŭ norma maniero, mi ne pritraktos ĉi tion, mi nur rimarkos, ke antaŭ ol ekfunkciigi, indas atenti. obstinigxo ebloj kiujn ĝi proponas bsdinstaller
ĉe la fino de la instalado (se vi mem instalas la sistemon):
Ekzistas
Eblas ankaŭ ebligi la supre menciitajn parametrojn sur jam instalita sistemo. Por fari tion, vi devas redakti la ŝargilon-dosieron kaj ebligi kernajn parametrojn. *ee estas redaktilo kiel ĉi tiu en BSD
# ee /etc/rc.conf
...
#sec hard
clear_tmp_enable="YES"
syslogd_flags="-ss"
sendmail_enable="NONE"
# ee /etc/sysctl.conf
...
#sec hard
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=$(jot -r 1 9999)
security.bsd.stack_guard_page=1
Vi ankaŭ devas certigi, ke vi havas la lastan version de la sistemo instalita, kaj
Tiam ni agordas aide
, monitorante la staton de sistemaj agordaj dosieroj. Vi povas legi pli detale
pkg install aide
kaj redakti nian 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
Ni inkluzivas
sysrc auditd_enable=YES
# service auditd start
Kiel administri ĉi tiun aferon estas perfekte priskribita en
Nun ni rekomencas kaj iras al la programaro sur la servilo. Ĉiu servilo estas hiperviziero por ujoj aŭ plenaj virtualaj maŝinoj. Tial gravas, ke la procesoro subtenas VT-x kaj EPT se ni planas uzi plenan virtualigon.
Por administri ujojn kaj virtualajn maŝinojn mi uzas
Ujoj? Docker denove aŭ kio?
Sed ne. cbsd
orkestri ĉi tiujn ujojn, kiujn oni nomas ĉeloj.
La kaĝo estas ekstreme efika solvo por konstrui infrastrukturon por diversaj celoj, kie kompleta izolado de individuaj servoj aŭ procezoj estas finfine postulata. Esence, ĝi estas klono de la gastiga sistemo, sed ĝi ne postulas plenan aparataron virtualigon. Kaj danke al ĉi tio, rimedoj ne estas elspezitaj por la "gasta OS", sed nur por la laboro farita. Kiam ĉeloj estas uzataj por internaj bezonoj, ĉi tio estas tre oportuna solvo por optimuma uzado de rimedoj - amaso da ĉeloj sur unu aparataro-servilo povas ĉiu individue uzi la tutan servilan rimedon se necese. Konsiderante, ke kutime malsamaj subservoj bezonas pliajn. rimedoj en malsamaj tempoj, vi povas ĉerpi maksimuman rendimenton de unu servilo se vi ĝuste planas kaj ekvilibrigas la ĉelojn inter serviloj. Se necese, ĉeloj ankaŭ povas ricevi limigojn pri la uzata rimedo.
Kio pri plena virtualigo?
Koncerne al mi scias, cbsd
subtenas laboron bhyve
kaj XEN-hiperviziiloj. Mi neniam uzis la duan, sed la unua estas relative nova bhyve
en la malsupra ekzemplo.
Instalado kaj Agordo de la Gastiganta Medio
Ni uzas FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
aldonu diskdiskon al la restanta spaco
geli init /dev/ada0p4
enigu nian ĉifradan pasvorton
geli attach /dev/ada0p4
Ni enigas la pasvorton denove kaj ni havas aparaton /dev/ada0p4.eli - ĉi tiu estas nia ĉifrita spaco. Tiam ni ripetas la samon por /dev/ada1 kaj la resto de la diskoj en la tabelo. Kaj ni kreas novan
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Nu, ni havas la minimuman batalkompleton preta. Spegulita aro de diskoj en kazo unu el la tri malsukcesas.
Kreante datumaron sur nova "naĝejo"
zfs create vms/jails
pkg install cbsd
— ni lanĉis teamon kaj starigis administradon por niaj ĉeloj.
Post cbsd
instalita, ĝi devas esti pravigita:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Nu, ni respondas multajn demandojn, plejparte kun defaŭltaj respondoj.
*Se vi uzas ĉifradon, gravas ke la demono cbsdd
ne komenciĝis aŭtomate ĝis vi deĉifri la diskojn permane aŭ aŭtomate (en nia ekzemplo tio estas farita per zabbix)
**Mi ankaŭ ne uzas NAT de cbsd
, kaj mi mem agordas ĝin en 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
Agordo de fajroŝirmilaj politikoj ankaŭ estas aparta temo, do mi ne profundiĝos pri agordo de la politiko BLOKU ĈIUJ kaj starigo de blankaj listoj, vi povas fari tion legante.
Nu... ni havas cbsd instalitan, estas tempo krei nian unuan laborĉevalon - la enkaĝigitan Bitcoin-demonon!
cbsd jconstruct-tui
Ĉi tie ni vidas la dialogon pri kreado de ĉeloj. Post kiam ĉiuj valoroj estas fiksitaj, ni kreu!
Kreante vian unuan ĉelon, vi devas elekti kion uzi kiel bazon por la ĉeloj. Mi elektas distribuon el la deponejo de FreeBSD per la komando repo
. Ĉi tiu elekto estas farita nur dum kreado de la unua ĉelo de specifa versio (vi povas gastigi ĉelojn de iu ajn versio kiu estas pli malnova ol la gastiga versio).
Post kiam ĉio estas instalita, ni lanĉas la kaĝon!
# cbsd jstart bitcoind
Sed ni devas instali programaron en la kaĝo.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
por eniri la ĉelan konzolon
kaj jam ene de la ĉelo ni instalas la programaron kun ĝiaj dependecoj (nia gastiga sistemo restas pura)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Estas Bitcoin en la kaĝo, sed ni bezonas anonimecon ĉar ni volas konekti al iuj kaĝoj per la TOP-reto. Ĝenerale, ni planas ruli plej multajn ĉelojn kun suspektinda programaro nur per prokurilo. Danke al pf
Vi povas malŝalti NAT por certa gamo da IP-adresoj en la loka reto, kaj permesi NAT nur por nia TOR-nodo. Tiel, eĉ se malware eniros en la ĉelon, ĝi plej verŝajne ne komunikados kun la ekstera mondo, kaj se ĝi faros, ĝi ne malkaŝos la IP de nia servilo. Tial ni kreas alian ĉelon por "sendi" servojn kiel servon ".onion" kaj kiel prokurilon por aliri la Interreton al individuaj ĉeloj.
# 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
Agordi por aŭskulti ĉe loka adreso (havebla por ĉiuj ĉeloj)
SOCKSPort 192.168.0.2:9050
Kion alian ni bezonas por kompleta feliĉo? Jes, ni bezonas servon por nia retejo, eble pli ol unu. Ni lanĉu nginx, kiu funkcios kiel inversa prokurilo kaj zorgos pri renovigo de Let's Encrypt atestiloj
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Kaj tiel ni metis 150 MB da dependecoj en kaĝon. Kaj la gastiganto estas ankoraŭ pura.
Ni revenu al agordo de nginx poste, ni devas levi du pliajn ĉelojn por nia pagpordejo sur nodejs kaj rust kaj TTT-aplikaĵo, kiu ial estas en Apache kaj PHP, kaj ĉi-lasta ankaŭ postulas MySQL-datumbazon.
# 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
...kaj pliaj 380 MB da pakaĵoj izolitaj
Poste ni elŝutas nian aplikaĵon per git kaj lanĉas ĝin.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB-pakaĵoj. en kaĝo.
ĉi tie ni donas al la programisto aliron per SSH rekte al la ĉelo, ili faros ĉion tie mem:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— ŝanĝu la SSH-pordon de la ĉelo al iu ajn arbitra
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Nu, la servo funkcias, restas nur aldoni la regulon al pf
fajroŝirmilo
Ni vidu kian IP havas niaj ĉeloj kaj kiel nia "loka areo" ĝenerale aspektas.
# 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
kaj aldonu regulon
# 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
Nu, ĉar ni estas ĉi tie, ni ankaŭ aldonu regulon por inversa prokurilo:
## 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
Nu, nun iomete pri bitcoins
Kion ni havas, ni havas TTT-aplikaĵon kiu estas elmontrita ekstere kaj ĝi parolas loke al nia pagpordejo. Nun ni devas prepari labormedion por interagi kun la Bitcoin-reto mem - la nodo bitcoind
ĝi estas nur demono, kiu tenas la lokan kopion de la blokĉeno ĝisdatigita. Ĉi tiu demono havas RPC kaj monujo-funkciecon, sed ekzistas pli oportunaj "envolvaĵoj" por aplikaĵa disvolviĝo. Por komenci, ni decidis meti electrum
estas CLI-monujo.
tekkomputiloj. Nuntempe ni uzos Electrum kun publikaj serviloj, kaj poste ni levos ĝin en alia ĉelo
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
pliaj 700 MB da programaro en nia kaĝo
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"
}
Nun ni havas monujon kreita.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Al nia surĉene Nur limigita nombro da homoj povos konektiĝi al la monujo de nun. Por ne malfermi aliron al ĉi tiu ĉelo de ekstere, konektoj per SSH okazos per TOP (malcentralizita versio de VPN). Ni lanĉas SSH en la ĉelo, sed ne tuŝas nian pf.conf sur la gastiganto.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Nun ni malŝaltu la ĉelon kun la interreta aliro de la monujo. Ni donu al ĝi IP-adreson de alia subreta spaco, kiu ne estas NATigita. Unue ni ŝanĝu /etc/pf.conf
sur la gastiganto
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
ni ŝanĝu ĝin al JAIL_IP_POOL="192.168.0.0/25"
, tiel ĉiuj adresoj 192.168.0.126-255 ne havos rektan aliron al Interreto. Speco de programara "aera breĉo" reto. Kaj la regulo NAT restas tia, kia ĝi estis
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Troŝarĝante la regulojn
# pfctl -f /etc/pf.conf
Nun ni alprenu nian ĉelon
# 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, sed nun la sistemo mem ĉesos funkcii por ni. Tamen ni povas specifi sisteman prokurilon. Sed estas unu afero, ĉe TOR ĝi estas SOCKS5-prokurilo, kaj por oportuno ni ankaŭ ŝatus HTTP-prokurilon.
# 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
Nu, nun estas du prokuraj serviloj en nia sistemo, kaj ambaŭ eligas per TOR: socks5://192.168.0.2:9050 kaj
Nun ni povas agordi nian monujo-medion
# 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
Nu, nun la ŝelo funkcios de sub prokurilo. Se ni volas instali pakaĵojn, tiam ni devus aldoni al /usr/local/etc/pkg.conf
de sub la radiko de la kaĝo
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Nu, nun estas tempo aldoni la kaŝitan servon TOR kiel la adreson de nia SSH-servo en la monujo-ĉelo.
# 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
Jen nia konekta adreso. Ni kontrolu de la loka maŝino. Sed unue ni devas aldoni nian SSH-ŝlosilon:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Nu, de Linuksa klienta maŝino
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
Ni konektu (Por ke tio funkciu, vi bezonas lokan TOR-demonon kiu aŭskultas ĉe 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
Sukceso!
Por labori kun tujaj kaj mikro-pagoj, ni ankaŭ bezonas nodon c-lightning
necesa por funkciado bitcoind
sed jes.
*Estas malsamaj efektivigoj de la protokolo Lightning Network en malsamaj lingvoj. El tiuj, kiujn ni provis, c-fulmo (skribita en C) ŝajnis la plej stabila kaj rimedo-efika
# 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
Dum ĉio necesa estas kompilita kaj instalita, ni kreu RPC-uzanto por 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
Mia ĥaosa ŝanĝado inter ĉeloj montriĝas ne tiom ĥaosa se vi notas la utilecon tmux
, kiu ebligas al vi krei plurajn finajn subsesiojn ene de unu sesio. Analogo: screen
Do, ni ne volas malkaŝi la realan IP de nia nodo, kaj ni volas fari ĉiujn financajn transakciojn per TOP. Tial, alia .cepo ne estas bezonata.
# 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
Nun ni kreu agordon por c-fulmo
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 ~
vi ankaŭ bezonas krei agordan dosieron por bitcoin-cli, ilo kun kiu komunikas bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
kontroli
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
lanĉo lightningd
lightning@lightning:~ % lightningd --daemon
Li mem lightningd
vi povas kontroli la utilecon lightning-cli
ekzemple:
lightning-cli newaddr
ricevi la adreson por nova envenanta pago
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
sendu la tutan monon en la monujo al la adreso (ĉiuj enĉenaj adresoj)
Ankaŭ komandoj por eksterĉenaj operacioj lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
ktp
Nu, por komunikado kun la aplikaĵo ni havas REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Ni sumigu la rezultojn
# 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
Ni havas aron da ujoj, ĉiu kun sia propra nivelo de aliro kaj de kaj al la loka reto.
# 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
Kiel vi povas vidi, bitcoind okupas ĉiujn 190 GB da spaco. Kio se ni bezonas alian nodon por testado? Jen kie ZFS utilas. Kun helpo cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
vi povas krei momentfoton kaj alfiksi novan ĉelon al ĉi tiu momentfoto. La nova ĉelo havos sian propran spacon, sed nur la diferenco inter la nuna stato kaj la originalo estos konsiderata en la dosiersistemo (ni ŝparos almenaŭ 190 GB)
Ĉiu ĉelo estas sia aparta ZFS-datumaro, kaj ĉi tio estas ege oportuna.
Ĝi ankaŭ indas noti la bezonon de fora monitorado de la gastiganto, por ĉi tiuj celoj ni havas
B - sekureco
Koncerne sekurecon, ni komencu de la ŝlosilaj principoj en la kunteksto de infrastrukturo:
Konfidenco - Normaj iloj de UNIX-similaj sistemoj certigas la efektivigon de ĉi tiu principo. Ni logike apartigas aliron al ĉiu logike aparta elemento de la sistemo - ĉelo. Aliro estas disponigita per norma uzantaŭtentigo uzante personajn ŝlosilojn de la uzantoj. Ĉiu komunikado inter kaj ĝis la fino ĉeloj okazas en ĉifrita formo. Danke al disko-ĉifrado, ni ne devas zorgi pri la sekureco de datumoj dum anstataŭigo de disko aŭ migrado al alia servilo. La nura kritika aliro estas aliro al la gastiga sistemo, ĉar tia aliro ĝenerale disponigas aliron al datenoj ene de ujoj.
Integreco "La efektivigo de ĉi tiu principo okazas sur pluraj malsamaj niveloj. Unue, estas grave rimarki, ke en la kazo de servila aparataro, ECC-memoro, ZFS jam "el la skatolo" prizorgas datuman integrecon je la nivelo de informaj bitoj. Tujaj momentfotoj permesas vin fari sekurkopiojn iam ajn sur la flugo. Konvenaj ĉelaj eksportaj/importaj iloj simpligas ĉelreproduktadon.
Disponibilidad - Ĉi tio jam estas laŭvola. Dependas de la grado de via famo kaj de la fakto, ke vi havas malamikojn. En nia ekzemplo, ni certigis, ke la monujo estis alirebla ekskluzive de la TOP-reto. Se necese, vi povas bloki ĉion sur la fajroŝirmilo kaj permesi aliron al la servilo ekskluzive per tuneloj (TOR aŭ VPN estas alia afero). Tiel, la servilo estos fortranĉita de la ekstera mondo kiel eble plej multe, kaj nur ni mem povos influi ĝian haveblecon.
Neebleco de rifuzo - Kaj tio dependas de plua funkciado kaj plenumo de la ĝustaj politikoj pri uzantrajtoj, aliro, ktp. Sed kun la ĝusta aliro, ĉiuj agoj de uzantoj estas reviziitaj, kaj danke al kriptografaj solvoj eblas senambigue identigi, kiu faris iujn agojn kaj kiam.
Kompreneble, la priskribita agordo ne estas absoluta ekzemplo de kiel ĝi ĉiam devus esti, ĝi estas prefere unu ekzemplo de kiel ĝi povas esti, konservante tre flekseblajn skalo- kaj personigokapablojn.
Kio pri plena virtualigo?
Pri plena virtualigo uzante cbsd vi povas bhyve
Vi devas ebligi kelkajn kernajn opciojn.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Do se vi subite bezonas komenci docker, tiam instalu iun debianon kaj iru!
Tio estas ĉio
Mi supozas, ke tio estas ĉio, kion mi volis dividi. Se vi ŝatis la artikolon, tiam vi povas sendi al mi kelkajn bitcoins -
fonto: www.habr.com