Det skete sådan, at jeg af erhverv er administrator af computersystemer og netværk (kort sagt: systemadministrator), og jeg fik lejlighed til at fortælle prof. i lidt mere end 10 år. aktiviteterne i en lang række systemer, herunder dem, der kræver [ekstremt] sikkerhedsforanstaltninger. Det skete også, at jeg for noget tid siden fandt det interessant dev
, så jeg gik forbi). Men jeg taler ikke om udvikling, jeg taler om et sikkert og effektivt miljø for applikationer.
Finansiel teknologi (fintech) gå ved siden af informationssikkerhed (INFOSEC) og den første kan fungere uden den anden, men ikke længe. Derfor vil jeg dele min erfaring og det sæt værktøjer, jeg bruger, som omfatter begge dele fintechOg INFOSEC, og på samme tid, og kan også bruges til et bredere eller helt andet formål. I denne artikel vil jeg fortælle dig ikke så meget om Bitcoin, men om infrastrukturmodellen til udvikling og drift af finansielle (og ikke kun) tjenester - med et ord, de tjenester, hvor "B" betyder noget. Dette gælder både for Bitcoin-udvekslingen og for den mest typiske virksomhedszoo af tjenester fra en lille virksomhed, der ikke er forbundet med Bitcoin på nogen måde.
Jeg vil gerne bemærke, at jeg er tilhænger af principperne "hold det dumt enkelt" и "mindre er mere", derfor vil både artiklen og det der er beskrevet i den have de egenskaber, som disse principper handler om.
Imaginært scenarie: Lad os se på alt ved at bruge eksemplet med en bitcoin-veksler. Vi besluttede at lancere udvekslingen af rubler, dollars, euros for bitcoins og tilbage, og vi har allerede en fungerende løsning, men for andre digitale penge som qiwi og webmoney, dvs. Vi har lukket alle juridiske spørgsmål, vi har en færdig applikation, der fungerer som en betalingsgateway for rubler, dollars og euro og andre betalingssystemer. Den er forbundet til vores bankkonti og har en form for API til vores slutapplikationer. Vi har også en webapplikation, der fungerer som en udveksler for brugere, ja, som en typisk qiwi- eller webmoney-konto - opret en konto, tilføj et kort og så videre. Den kommunikerer med vores gateway-applikation, dog via REST API i lokalområdet. Og så besluttede vi at forbinde bitcoins og samtidig opgradere infrastrukturen, fordi... I første omgang blev alt sat op i en fart på virtualboxes på kontoret under bordet... siden begyndte at blive brugt, og vi begyndte at bekymre os om oppetid og ydeevne.
Så lad os starte med det vigtigste - at vælge en server. Fordi virksomheden i vores eksempel er lille, og vi stoler på den hoster (OVH), vi vil vælge
Server installation
Alt er enkelt her. Vi vælger den hardware, der passer til vores behov. Vælg derefter FreeBSD-billedet. Nå, eller vi forbinder (i tilfælde af en anden hoster og vores egen hardware) via IPMI eller med en skærm og fodrer .iso FreeBSD-billedet ind i download. Til en orkesteropsætning bruger jeg
Installation af systemet sker på en standard måde, jeg vil ikke dvæle ved dette, jeg vil kun bemærke, at det er værd at være opmærksom på før driften starter hærdning muligheder, det tilbyder bsdinstaller
i slutningen af installationen (hvis du selv installerer systemet):
Der er
Det er også muligt at aktivere de ovennævnte parametre på et allerede installeret system. For at gøre dette skal du redigere bootloader-filen og aktivere kerneparametre. *ee er en editor som denne i 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
Du bør også sikre dig, at du har den nyeste version af systemet installeret, og
Så konfigurerer vi aide
, overvågning af status for systemkonfigurationsfiler. Du kan læse mere detaljeret
pkg install aide
og rediger vores 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
Tænde for
sysrc auditd_enable=YES
# service auditd start
Hvordan man administrerer denne sag er perfekt beskrevet i
Nu genstarter vi og fortsætter til softwaren på serveren. Hver server er en hypervisor for containere eller komplette virtuelle maskiner. Derfor er det vigtigt, at processoren understøtter VT-x og EPT, hvis vi planlægger at bruge fuld virtualisering.
Til at administrere containere og virtuelle maskiner bruger jeg
Containere? Docker igen eller hvad?
Og her ikke. cbsd
at orkestrere disse beholdere, som kaldes celler.
Buret er en ekstremt effektiv løsning til opbygning af infrastruktur til en række forskellige formål, hvor fuldstændig isolering af individuelle tjenester eller processer i sidste ende er påkrævet. Grundlæggende er det en klon af værtssystemet, men det kræver ikke fuld hardwarevirtualisering. Og takket være dette bruges ressourcer ikke på "gæsteoperativsystemet", men kun på det arbejde, der udføres. Når celler bruges til interne behov, er dette en meget praktisk løsning til optimal ressourceudnyttelse - en flok celler på én hardwareserver kan hver for sig bruge hele serverressourcen, hvis det er nødvendigt. I betragtning af, at forskellige undertjenester normalt har brug for yderligere. ressourcer på forskellige tidspunkter, kan du udtrække maksimal ydeevne fra én server, hvis du planlægger og afbalancerer cellerne mellem serverne korrekt. Om nødvendigt kan celler også gives begrænsninger på den anvendte ressource.
Hvad med fuld virtualisering?
Som jeg ved, cbsd
understøtter arbejdet bhyve
og XEN hypervisorer. Jeg har aldrig brugt den anden, men den første er forholdsvis ny bhyve
i eksemplet nedenfor.
Installation og konfiguration af værtsmiljøet
Vi bruger FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
tilføje en diskpartition til den resterende plads
geli init /dev/ada0p4
indtast vores krypteringsadgangskode
geli attach /dev/ada0p4
Vi indtaster adgangskoden igen, og vi har en enhed /dev/ada0p4.eli - dette er vores krypterede rum. Derefter gentager vi det samme for /dev/ada1 og resten af diskene i arrayet. Og vi skaber en ny
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Nå, vi har minimumskampsættet klar. Et spejlet array af diske, hvis en af de tre fejler.
Oprettelse af et datasæt på en ny "pulje"
zfs create vms/jails
pkg install cbsd
— vi lancerede et team og oprettede ledelse for vores celler.
Efter cbsd
installeret, skal det initialiseres:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Nå, vi besvarer en masse spørgsmål, for det meste med standardsvar.
*Hvis du bruger kryptering, er det vigtigt, at dæmonen cbsdd
startede ikke automatisk, før du dekrypterede diskene manuelt eller automatisk (i vores eksempel er dette gjort af zabbix)
**Jeg bruger heller ikke NAT fra cbsd
, og jeg konfigurerer det selv i 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
Opsætning af firewall-politikker er også et separat emne, så jeg vil ikke gå dybt ind i opsætningen af BLOKER ALLE-politikken og opsætning af hvidlister, det kan du gøre ved at læse
Nå... vi har cbsd installeret, det er tid til at skabe vores første arbejdshest - den burede Bitcoin-dæmon!
cbsd jconstruct-tui
Her ser vi dialogboksen for oprettelse af celler. Når alle værdierne er blevet sat, lad os skabe!
Når du opretter din første celle, bør du vælge, hvad du vil bruge som base for cellerne. Jeg vælger en distribution fra FreeBSD-lageret med kommandoen repo
. Dette valg foretages kun, når du opretter den første celle i en specifik version (du kan være vært for celler af enhver version, der er ældre end værtsversionen).
Når alt er installeret, starter vi buret!
# cbsd jstart bitcoind
Men vi skal installere software i buret.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
for at komme ind i cellekonsollen
og allerede inde i cellen installerer vi softwaren med dens afhængigheder (vores værtssystem forbliver rent)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Der er Bitcoin i buret, men vi har brug for anonymitet, fordi vi vil oprette forbindelse til nogle bure via TOP-netværket. Generelt planlægger vi kun at køre de fleste celler med mistænkelig software via en proxy. Tak til pf
Du kan deaktivere NAT for et bestemt område af IP-adresser på det lokale netværk og kun tillade NAT for vores TOR-node. Selv hvis malware kommer ind i cellen, vil den højst sandsynligt ikke kommunikere med omverdenen, og hvis den gør det, vil den ikke afsløre IP'en på vores server. Derfor opretter vi en anden celle til at "viderestille" tjenester som en ".onion"-tjeneste og som en proxy for adgang til internettet til individuelle celler.
# 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
Indstil til at lytte på en lokal adresse (tilgængelig for alle celler)
SOCKSPort 192.168.0.2:9050
Hvad har vi ellers brug for for fuldstændig lykke? Ja, vi har brug for en tjeneste til vores web, måske mere end én. Lad os lancere nginx, som vil fungere som en omvendt proxy og sørge for at forny Let's Encrypt-certifikater
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Så vi placerede 150 MB afhængigheder i et bur. Og værten er stadig ren.
Lad os vende tilbage til opsætningen af nginx senere, vi skal have to celler mere til vores betalingsgateway på nodejs og rust og en webapplikation, som af en eller anden grund er i Apache og PHP, og sidstnævnte kræver også en MySQL-database.
# 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
...og yderligere 380 MB isolerede pakker
Dernæst downloader vi vores applikation med git og starter den.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB pakker. i et bur.
her giver vi udvikleren adgang via SSH direkte til cellen, de vil gøre alt der selv:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— skift cellens SSH-port til en hvilken som helst vilkårlig
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Tjenesten kører, det eneste der er tilbage er at tilføje reglen til pf
firewall
Lad os se, hvilken IP vores celler har, og hvordan vores "lokalområde" generelt ser ud.
# 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
og tilføje en regel
# 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
Nå, da vi er her, lad os også tilføje en regel for omvendt 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
Nå, nu lidt om bitcoins
Det, vi har, er, at vi har en webapplikation, der er eksponeret eksternt, og den taler lokalt til vores betalingsgateway. Nu skal vi forberede et arbejdsmiljø til at interagere med selve Bitcoin-netværket - noden bitcoind
det er bare en dæmon, der holder den lokale kopi af blockchain opdateret. Denne dæmon har RPC- og tegnebogsfunktionalitet, men der er mere praktiske "indpakninger" til applikationsudvikling. Til at begynde med besluttede vi at sætte electrum
er en CLI-pung.
bærbare computere. For nu vil vi bruge Electrum med offentlige servere, og senere vil vi hæve det i en anden celle
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
yderligere 700 MB software i vores bur
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"
}
Nu har vi lavet en tegnebog.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Til vores on-kæde Kun et begrænset antal personer vil være i stand til at oprette forbindelse til tegnebogen fra nu af. For ikke at åbne adgang til denne celle udefra, vil forbindelser via SSH ske gennem TOP (en decentral version af VPN). Vi starter SSH i cellen, men rører ikke vores pf.conf på værten.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Lad os nu slukke for cellen med tegnebogens internetadgang. Lad os give den en IP-adresse fra et andet undernetrum, der ikke er NATeret. Lad os først ændre os /etc/pf.conf
på værten
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
lad os ændre det til JAIL_IP_POOL="192.168.0.0/25"
, således vil alle adresser 192.168.0.126-255 ikke have direkte adgang til internettet. En slags software "air-gap" netværk. Og NAT-reglen forbliver, som den var
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Overbelastning af reglerne
# pfctl -f /etc/pf.conf
Lad os nu tage fat på vores celle
# 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, men nu holder selve systemet op med at virke for os. Vi kan dog angive en systemproxy. Men der er én ting, på TOR er det en SOCKS5 proxy, og for nemheds skyld vil vi også gerne have en 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
Nå, nu er der to proxy-servere i vores system, og begge udsendes via TOR: socks5://192.168.0.2:9050 og
Nu kan vi konfigurere vores tegnebogsmiljø
# 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
Nå, nu vil skallen arbejde fra under en proxy. Hvis vi vil installere pakker, skal vi tilføje til /usr/local/etc/pkg.conf
fra under roden af buret
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Nå, nu er det tid til at tilføje den skjulte TOR-tjeneste som adressen på vores SSH-tjeneste i tegnebogen.
# 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
Dette er vores forbindelsesadresse. Lad os tjekke fra den lokale maskine. Men først skal vi tilføje vores SSH-nøgle:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Nå, fra en Linux-klientmaskine
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
Lad os forbinde (For at dette skal virke, har du brug for en lokal TOR-dæmon, der lytter på 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
Succes!
For at arbejde med øjeblikkelige og mikrobetalinger har vi også brug for en node c-lightning
nødvendig for at fungere bitcoind
Men ja.
*Der er forskellige implementeringer af Lightning Network-protokollen på forskellige sprog. Af dem, vi testede, virkede c-lightning (skrevet i C) den mest stabile og ressourceeffektive
# 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
Mens alt nødvendigt er kompileret og installeret, lad os oprette en RPC-bruger til 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
Mit kaotiske skift mellem celler viser sig ikke at være så kaotisk, hvis du bemærker nytten tmux
, som giver dig mulighed for at oprette flere terminalundersessioner inden for en session. Analog: screen
Så vi ønsker ikke at afsløre den rigtige IP af vores node, og vi ønsker at udføre alle finansielle transaktioner gennem TOP. Derfor er endnu et .løg ikke nødvendigt.
# 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
Lad os nu oprette en konfiguration til 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 ~
du skal også oprette en konfigurationsfil til bitcoin-cli, et hjælpeprogram, der kommunikerer med bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
kontrol
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
lancering lightningd
lightning@lightning:~ % lightningd --daemon
Sig selv lightningd
du kan styre værktøjet lightning-cli
, for eksempel:
lightning-cli newaddr
få adressen til en ny indgående betaling
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
send alle pengene i pungen til adressen (alle on-chain-adresser)
Også kommandoer til off-chain operationer lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
etc.
Nå, til kommunikation med applikationen har vi en REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Opsummere
# 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
Vi har et sæt containere med hver sit adgangsniveau både fra og til det lokale netværk.
# 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
Som du kan se, optager bitcoind alle 190 GB plads. Hvad hvis vi har brug for en anden node til test? Det er her, ZFS kommer til nytte. Med hjælp cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
du kan oprette et snapshot og vedhæfte en ny celle til dette snapshot. Den nye celle vil have sin egen plads, men kun forskellen mellem den nuværende tilstand og den originale vil blive taget i betragtning i filsystemet (vi sparer mindst 190 GB)
Hver celle er sit eget separate ZFS-datasæt, og det er ekstremt praktisk.
Det er også værd at bemærke behovet for fjernovervågning af værten, til disse formål har vi
B - sikkerhed
Med hensyn til sikkerhed, lad os tage udgangspunkt i nøgleprincipperne i forbindelse med infrastruktur:
Privacy Policy - Standardværktøjer af UNIX-lignende systemer sikrer implementeringen af dette princip. Vi adskiller logisk adgang til hvert logisk adskilt element i systemet - en celle. Adgang gives gennem standardbrugergodkendelse ved hjælp af brugernes personlige nøgler. Al kommunikation mellem og til slutcellerne foregår i krypteret form. Takket være diskkryptering behøver vi ikke bekymre os om datasikkerheden, når vi udskifter en disk eller migrerer til en anden server. Den eneste kritiske adgang er adgang til værtssystemet, da sådan adgang generelt giver adgang til data inde i containere.
Integritet ”Implementeringen af dette princip sker på flere forskellige niveauer. For det første er det vigtigt at bemærke, at i tilfælde af serverhardware, ECC-hukommelse, sørger ZFS allerede "out of the box" for dataintegritet på niveau med informationsbits. Øjeblikkelige snapshots giver dig mulighed for at lave sikkerhedskopier når som helst på farten. Praktiske celleeksport-/importværktøjer gør cellereplikering enkel.
tilgængelighed - Dette er allerede valgfrit. Afhænger af graden af din berømmelse og det faktum, at du har hadere. I vores eksempel sikrede vi, at tegnebogen udelukkende var tilgængelig fra TOP-netværket. Hvis det er nødvendigt, kan du blokere alt på firewallen og tillade adgang til serveren udelukkende gennem tunneler (TOR eller VPN er en anden sag). Dermed vil serveren være afskåret fra omverdenen så meget som muligt, og kun vi selv vil kunne påvirke dens tilgængelighed.
Umulighed af afslag - Og dette afhænger af videre drift og overholdelse af de korrekte politikker for brugerrettigheder, adgang mv. Men med den rigtige tilgang bliver alle brugerhandlinger auditeret, og takket være kryptografiske løsninger er det muligt entydigt at identificere, hvem der udførte bestemte handlinger og hvornår.
Den beskrevne konfiguration er naturligvis ikke et absolut eksempel på, hvordan den altid skal være, den er snarere et eksempel på, hvordan den kan være, samtidig med at den bibeholder meget fleksible skalerings- og tilpasningsmuligheder.
Hvad med fuld virtualisering?
Om fuld virtualisering ved hjælp af cbsd kan du bhyve
Du skal aktivere nogle kerneindstillinger.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Så hvis du pludselig har brug for at starte en docker, så installer noget debian og gå!
Det er alt
Det var vist alt, jeg ville dele. Hvis du kunne lide artiklen, så kan du sende mig nogle bitcoins -
Kilde: www.habr.com