Bitcoin in 'n hok?

Dit het so gebeur dat ek 'n administrateur van rekenaarstelsels en netwerke van beroep is (in kort: 'n stelseladministrateur), en ek het kans gehad om prof. aktiwiteite van 'n wye verskeidenheid stelsels, insluitend dié wat [ekstra] hoë sekuriteitsmaatreëls vereis. Dit het ook gebeur dat ek 'n tyd gelede dit interessant gevind het bitcoin, en het dit nie net gebruik nie, maar ook verskeie mikrodienste bekendgestel om te leer hoe om onafhanklik met die bitcoin-netwerk te werk (ook bekend as p2p) vanuit die oogpunt van 'n ontwikkelaar (natuurlik, ek dev, so, verby gegaan). Maar ek praat nie van ontwikkeling nie, ek praat van 'n veilige en doeltreffende omgewing vir toepassings.

Finansiële Tegnologie (Fintech) gaan langs inligtingsekuriteit (infosec) en die eerste sonder die tweede kan werk, maar nie vir lank nie. Daarom wil ek my ervaring en gereedskapstel wat ek gebruik, wat soos insluit, deel FintechEn infosec, en terselfdertyd, en kan ook in 'n wyer of heeltemal ander doel gebruik word. In hierdie artikel sal ek nie soseer oor bitcoin praat nie, maar oor die infrastruktuurmodel vir die ontwikkeling en bedryf van finansiële (en nie net nie) dienste - in 'n woord, daardie dienste waar "B" saak maak. Dit geld beide vir die bitcoin-uitruiling en vir die mees tipiese korporatiewe dieretuin van dienste van 'n klein maatskappy met geen verband met bitcoin nie.

Ek wil daarop let dat ek 'n ondersteuner van die beginsels is "Hou dit dom eenvoudig" и "minder is meer", dus sal beide die artikel en wat daarin beskryf word die eienskappe hê waaroor hierdie beginsels handel.

Denkbeeldige scenario: Kom ons kyk na alles deur die voorbeeld van 'n bitcoin-ruiler te gebruik. Ons het besluit om die uitruil van roebels, dollars, euro's vir bitcoins en omgekeerd te begin, en ons het reeds 'n werkende oplossing, maar vir ander digitale geld soos qiwi en webmoney, d.w.s. ons het alle regskwessies gesluit, ons het 'n klaargemaakte toepassing wat dien as 'n betaalpoort vir roebels, dollars en euro's en ander betaalstelsels. Dit is gekoppel aan ons bankrekeninge en het 'n soort API vir ons eindtoepassings. Ons het ook 'n webtoepassing wat dien as 'n wisselaar vir gebruikers, wel, soos 'n tipiese qiwi- of webmoney-kabinet - skep 'n rekening, voeg 'n kaart by, ensovoorts. Dit kommunikeer met ons gateway-toepassing, al is dit via die REST API in die plaaslike area. En so het ons besluit om bitcoins te koppel en terselfdertyd die infrastruktuur op te gradeer, want. Aanvanklik was alles in 'n haas op virtuele bokse in die kantoor onder die tafel ... die webwerf het begin gebruik word, en ons het begin bekommer oor uptyd en werkverrigting.

Dus, kom ons begin met die hoof een - die keuse van 'n bediener. Omdat die besigheid in ons voorbeeld is klein en ons vertrou die gasheerverskaffer (OVH) wat ons sal kies begrotingsopsie waarin jy nie die stelsel vanaf die oorspronklike .iso-beeld kan installeer nie, maar dit maak nie saak nie, die IT-sekuriteitsafdeling sal beslis die geïnstalleerde beeld ontleed. En wanneer ons groot is, huur ons gewoonlik ons ​​kas agter slot en grendel met beperkte fisiese toegang, en miskien sal ons ons eie DC bou. Dit is in elk geval die moeite werd om te onthou dat wanneer u hardeware huur en gereedgemaakte beelde installeer, daar 'n kans is dat u 'n "trojan van die gasheer" in u stelsel sal hang, wat in die meeste gevalle nie bedoel is om op u te spioeneer nie. , maar om geriefliker bestuursgereedskap-bediener aan te bied.

Bediener installasie

Alles is eenvoudig hier. Ons kies die yster wat by ons behoeftes pas. Kies dan die FreeBSD-beeld. Wel, of ons koppel (in die geval van 'n ander gasheer en ons eie hardeware) via IPMI of met 'n monitor en voer die .iso FreeBSD-beeld in die selflaai. Vir orkesopstelling gebruik ek Ansible и mfsbsd. Die enigste ding, in ons geval met kimsufi, het ons gekies pasgemaakte installasie sodat twee skywe in die spieël slegs die selflaai- en / tuispartisies “oop” het, sal die res van die skyfspasie geïnkripteer word, maar meer daaroor later.

Bitcoin in 'n hok?

Die stelsel is op 'n standaard manier geïnstalleer, ek sal nie hieroor stilstaan ​​nie, ek sal net daarop let dat u aandag moet skenk aan voordat u begin werk. verharding opsies wat bied bsdinstaller aan die einde van die installasie (as jy die stelsel self installeer):

Bitcoin in 'n hok?

Daar is goeie materiaal oor hierdie onderwerp, sal ek dit kortliks hier herhaal.

Dit is ook moontlik om die bogenoemde parameters op 'n reeds geïnstalleerde stelsel te aktiveer. Om dit te doen, moet jy die selflaaiprogram-lêer wysig en kernopsies aktiveer. *ee is die BSD-redakteur

# 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

Dit is ook die moeite werd om seker te maak dat jy die nuutste weergawe van die stelsel geïnstalleer het, en voer alle opdaterings en opgraderings uit. In ons geval, byvoorbeeld, 'n opgradering na die nuutste weergawe is nodig, want. pre-installasie beelde is ses maande of 'n jaar agter. Wel, daar verander ons die SSH-poort na 'n ander een as die verstek, voeg verifikasie deur sleutels by en deaktiveer met wagwoord.

Toe stel ons op aide, die monitering van die status van stelselkonfigurasielêers. Jy kan meer uitvoerig lees hier.

pkg install aide

en wysig ons 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

Skakel aan stelsel oudit

sysrc auditd_enable=YES

# service auditd start

Hoe om hierdie besigheid te administreer word perfek beskryf in leierskap.

Nou herlaai ons en gaan voort na die sagteware op die bediener. Elke bediener is 'n hypervisor vir houers of volledige virtuele masjiene. Daarom is dit belangrik dat die verwerker VT-x en EPT ondersteun as ons van plan is om volle virtualisasie te gebruik.

As 'n bestuur van houers en virtuele masjiene gebruik ek cbsd van olevole, Ek wens hom meer gesondheid en seëninge toe vir hierdie wonderlike nut!

Houers? Weer Docker of wat?

En hier is dit nie. FreeBSD-tronke is 'n goeie hulpmiddel vir containerization, maar die genoemde cbsd om hierdie houers, wie se naam selle is, te orkestreer.

'n Hok is 'n uiters doeltreffende oplossing vir die bou van infrastruktuur vir 'n verskeidenheid doeleindes, waar, as gevolg daarvan, volledige isolasie van individuele dienste of prosesse vereis word. Dit is in wese 'n kloon van die gasheerstelsel, maar vereis nie volledige hardeware-virtualisering nie. En danksy dit word hulpbronne nie aan die "gas-bedryfstelsel" bestee nie, maar slegs aan die werk wat gedoen word. Wanneer selle vir interne behoeftes gebruik word, is dit 'n baie gerieflike oplossing vir optimale gebruik van die hulpbron - 'n klomp selle op een ysterbediener kan elkeen individueel die hele bedienerhulpbron gebruik indien nodig. Met inagneming dat gewoonlik verskillende subdienste addisioneel benodig. hulpbronne op verskillende tye, kan jy maksimum werkverrigting van een bediener onttrek as jy selle tussen bedieners korrek beplan en debalanseer. Indien nodig, kan selle ook limiete stel op die hulpbron wat gebruik word.

Bitcoin in 'n hok?

Wat van volledige virtualisering?

Sover ek weet cbsd werk ondersteun bhyve en XEN-hipervisors. Ek het nog nooit die tweede een gebruik nie, maar die eerste een is relatief jonk Hypervisor van FreeBSD. Ons sal kyk na 'n voorbeeld van gebruik bhyve in die voorbeeld hieronder.

Installeer en konfigureer die gasheeromgewing

Ons gebruik FS ZFS. Dit is 'n uiters kragtige hulpmiddel vir die bestuur van bedienerspasie. Danksy ZFS kan jy direk skikkings van verskeie konfigurasies vanaf skywe bou, spasie "warm" dinamies uitbrei, dooie skywe verander, foto's bestuur, en nog baie, baie meer wat in 'n hele reeks artikels beskryf kan word. Kom ons keer terug na ons bediener en sy skywe. Aan die begin van die installasie op die skywe het ons vrye spasie vir geënkripteerde partisies gelaat. Hoekom is dit? Dit is om te verseker dat die stelsel outomaties styg en via SSH luister.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

voeg 'n skyfpartisie by die oorblywende spasie

geli init /dev/ada0p4

ons ry ons enkripsie wagwoord in

geli attach /dev/ada0p4

weer voer ons die wagwoord in en ons het 'n toestel /dev/ada0p4.eli - dit is ons geïnkripteer spasie. Dan herhaal ons dieselfde vir /dev/ada1 en die res van die skywe in die skikking. En ons skep 'n nuwe een ZFS swembad.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - wel, ons het 'n minimum gevegstel gereed. 'n Spieëlskikking skywe ingeval een van die drie misluk.

Ons skep 'n datastel op 'n nuwe "poel"

zfs create vms/jails

pkg install cbsd - het die span geloods en die bestuur vir ons selle opgestel.

Na cbsd geïnstalleer is, moet dit geïnisialiseer word:

# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv

wel, ons beantwoord 'n klomp vrae, meestal met verstekantwoorde.

*As jy enkripsie gebruik, is dit belangrik dat die daemon cbsdd het nie outomaties begin totdat jy die skywe handmatig of outomaties dekripteer nie (in ons voorbeeld word dit deur zabbix gedoen)

**Ek gebruik ook nie NAT vanaf cbsd, maar ek konfigureer dit self in 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

Die opstel van firewall-beleide is ook 'n aparte onderwerp, so ek sal nie delf in die opstel van die BLOCK ALL-beleid en die opstel van witlyste nie, dit kan gedoen word deur te lees amptelike dokumentasie of enige van die groot aantal artikels wat op Google beskikbaar is.

Goed ... ons het cbsd geïnstalleer, tyd om ons eerste werkesel te bou, die ingehokte bitcoin daemon!

cbsd jconstruct-tui

Bitcoin in 'n hok?

Hier sien ons die selskepping-dialoog. Nadat al die waardes gestel is, skep ons!

Wanneer jy die eerste sel skep, moet jy kies wat om as basis vir die selle te gebruik. Ek kies 'n verspreiding uit die FreeBSD-bewaarplek met die opdrag repo. Hierdie keuse word slegs gemaak wanneer die eerste hok van 'n spesifieke weergawe geskep word (jy kan hokke aanbied van enige weergawe wat ouer as die gasheerweergawe is).

Nadat alles geïnstalleer is, begin ons die hok!

# cbsd jstart bitcoind

Maar ons moet sagteware in die hok installeer.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind om in die selkonsole te kom

en reeds binne die hok installeer ons die sagteware met sy afhanklikhede (ons gasheerstelsel bly skoon)

bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils

bitcoind:/@[15:30] # sysrc bitcoind_enable=YES

bitcoind:/@[15:30] # service bitcoind start

Daar is Bitcoin in die hok, maar ons het anonimiteit nodig, want ons wil via die TOR-netwerk aan sommige hokke koppel. Oor die algemeen beplan ons om die meeste van die selle met verdagte sagteware slegs deur 'n instaanbediener te draai. Te danke aan pf jy kan NAT deaktiveer na 'n spesifieke reeks IP-adresse in die plaaslike netwerk, en NAT slegs vir ons TOR-nodus toelaat. Dus, selfs as wanware die sel binnedring, sal dit heel waarskynlik nie die buitewêreld kontak nie, en indien wel, sal dit nie die IP van ons bediener openbaar nie. daarom skep ons 'n ander sel om dienste te "aanstuur" as 'n ".onion"-diens en as 'n proxy vir internettoegang na individuele selle.

# 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

Ons gaan luister op die plaaslike adres (beskikbaar vir alle selle)

SOCKSPort 192.168.0.2:9050

Wat anders kort ons vir volkome geluk. Ja, ons benodig 'n diens vir ons web, miskien meer as een. Kom ons begin nginx, wat as 'n omgekeerde proxy sal optree en sorg vir die hernuwing van Let's Encrypt-sertifikate

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

nginx-rev:/@[15:47] # pkg install nginx py36-certbot

En hier sit ons 150 MB afhanklikhede in 'n hok. En die gasheer is nog skoon.

Kom ons keer later terug na die opstel van nginx, ons moet nog twee selle insamel vir ons betalingspoort op nodejs en roes en 'n webtoepassing, wat om een ​​of ander rede op Apache en PHP is, en laasgenoemde benodig ook 'n MySQL-databasis.

# 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

... en nog 380 MB pakkette geïsoleer

dan laai ons ons toepassing af met git en hardloop dit.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql

450 MB pakkette. in 'n hok.

hier gee ons die ontwikkelaar toegang via SSH direk in die hok, hulle sal alles self daar doen:

webapp:/@[16:02] # ee /etc/ssh/sshd_config

Port 2267 - verander die SSH-poort van die sel na enige arbitrêre

webapp:/@[16:02] # sysrc sshd_enable=YES

webapp:/@[16:02] # service sshd start

Wel, die diens loop, dit bly om die reël by te voeg pf firewall

Kom ons kyk watter IP's ons vir selle het en hoe ons "lokaal" in die algemeen lyk

# 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

en voeg 'n reël by

# 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

wel, aangesien ons hier is, sal ons ook 'n reël oor omgekeerde proxy byvoeg:

## 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

Wel, nou 'n bietjie oor bitcoins.

Wat ons het, is dat ons 'n webtoepassing het wat van buite toeganklik is, en dit kommunikeer plaaslik met ons betaalpoort. Nou moet ons 'n werksomgewing voorberei vir interaksie met die bitcoin-netwerk self - node bitcoind dit is net 'n daemoon wat 'n plaaslike kopie van die blokketting op datum hou. Hierdie daemon het RPC- en beursie-funksionaliteit, maar daar is geriefliker "wrappers" vir toepassingsontwikkeling. Om mee te begin, het ons besluit om te sit electrum is 'n CLI-beursie. Hierdie beursie ons sal dit as 'n "koue stoorplek" vir ons bitcoins gebruik - in die algemeen daardie bitcoins wat "buite" die stelsel gestoor moet word wat toeganklik is vir gebruikers en oor die algemeen weg van almal. Dit het ook 'n GUI, so ons gaan dieselfde beursie op ons webwerf gebruik.
skootrekenaars. Vir eers sal ons electrum met publieke bedieners gebruik, en later in 'n ander sel sal ons verhoog ElectrumXom glad nie van iemand afhanklik te wees nie.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

electrum:/@[8:45] # pkg install py36-electrum

nog 700 MB sagteware in ons hok

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"
}

Nou het ons 'n beursie geskep.

wallet@electrum:/ % electrum-3.6 listaddresses

[
    "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
    "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
    "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
    ...
    "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
    "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]

wallet@electrum:/ % electrum-3.6 help

Aan ons on-ketting Van nou af sal slegs 'n beperkte kring mense aan die beursie kan koppel. Om nie toegang van buite na hierdie sel oop te maak nie, sal SSH-verbindings deur TOR (so 'n gedesentraliseerde weergawe van VPN) plaasvind. Ons begin SSH in die hok, maar raak nie ons pf.conf op die gasheer nie.

electrum:/@[9:00] # sysrc sshd_enable=YES

electrum:/@[9:00] # service sshd start

Laat ons nou die internetverbinding in die hok met die beursie afskakel. Kom ons gee dit 'n IP-adres van 'n ander subnetruimte wat nie NATized is nie. Kom ons verander eers /etc/pf.conf op die gasheer

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" verander na JAIL_IP_POOL="192.168.0.0/25", dus sal alle adresse 192.168.0.126-255 nie direkte toegang tot die internet hê nie. 'n Soort sagteware "air-gap" netwerk. En die NAT-reël bly soos dit was

nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

Oorlaai van die reëls

# pfctl -f /etc/pf.conf

Nou vat ons ons hok aan

# cbsd jconfig jname=electrum

Bitcoin in 'n hok?

Bitcoin in 'n hok?

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, maar nou sal die stelsel self ophou werk vir ons. Ons kan egter 'n stelselinstaanbediener spesifiseer. Maar daar is een ding, op TOR is dit 'n SOCKS5-instaanbediener, en vir gerief sou ons ook 'n HTTP-instaanbediener hê.

# 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

Wel, nou het ons twee instaanbedieners in ons stelsel, en albei voer via TOR uit: socks5: //192.168.0.2:9050 en http://192.168.0.6:8123

Nou kan ons ons beursie-omgewing opstel

# 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

Wel, nou sal die dop onder die proxy werk. As ons pakkette wil installeer, moet ons byvoeg /usr/local/etc/pkg.conf van onder die wortel van die sel af

pkg_env: {
               http_proxy: "http://my_proxy_ip:8123",
           }

Wel, nou is dit tyd om die TOR-verborge diens as die adres van ons SSH-diens in die beursiehok by te voeg.

# 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

Hier is ons verbindingsadres. Kom ons kyk vanaf die plaaslike masjien. Maar eers moet ons ons SSH-sleutel byvoeg:

wallet@electrum:/ % mkdir ~/.ssh

wallet@electrum:/ % ee ~/.ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

Wel, vanaf 'n Linux-kliëntmasjien

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

Verbind (Om dit te laat werk, benodig jy 'n plaaslike TOR-demoon wat op 9050 luister)

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

Sukses!

Om met kits- en mikrobetalings te werk, het ons ook 'n nodus nodig Weerlig NetwerkTrouens, dit sal ons hoofwerkinstrument met bitcoin wees. *c-weerlig, wat ons as 'n daemoon gaan gebruik, is Sparko-inprop, wat 'n volwaardige HTTP (REST)-koppelvlak is en jou toelaat om met beide buite-kettingtransaksies en on-kettingtransaksies te werk. c-lightning nodig om te funksioneer bitcoind maar ja.

*daar is verskillende implementerings op verskillende PL's van die Lightning Network-protokol. Van die wat ons getoets het, was c-bliksem (geskryf in C) die mees stabiele en hulpbrondoeltreffendste.

# 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

Terwyl u alles saamstel en installeer wat u nodig het, laat ons 'n RPC-gebruiker skep 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

My chaotiese omskakeling tussen selle blyk tog nie so chaoties te wees as ek die nut nagaan nie tmux, wat jou toelaat om baie subsessies van terminale binne een sessie te skep. Analoog: screen

Bitcoin in 'n hok?

Ok, ons wil nie die regte IP van ons nodus openbaar nie, en ons wil alle finansiële transaksies deur die TOR uitvoer. Daarom is nog een .ui nodig.

# 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

kom ons skep nou 'n konfigurasie vir 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 ~

jy moet ook 'n konfigurasielêer vir bitcoin-cli skep, 'n hulpprogram waarmee kommunikeer bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

tjek

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

bekendstelling lightningd

lightning@lightning:~ % lightningd --daemon

Homself lightningd nut kan beheer word lightning-cli, byvoorbeeld:

lightning-cli newaddr kry adres vir nuwe inkomende betaling

{
   "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
   "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all stuur al die geld van die beursie (van alle on-ketting adresse) na die adres

Ook opdragte vir buite-ketting bedrywighede lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay en so aan

Wel, vir kommunikasie met die toepassing, het ons 'n REST Api

curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'

Som op

# 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

Bitcoin in 'n hok?

Ons het 'n stel houers, elk met sy eie vlak van toegang vanaf en na die plaaslike netwerk.

# 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

Soos jy kan sien, neem bitcoind al 190 GB spasie op. Maar wat as ons nog 'n nodus nodig het vir toetse? Dit is waar ZFS handig te pas kom. Met hulp cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com jy kan 'n kiekie skep en 'n nuwe sel aan hierdie kiekie koppel. Die nuwe sel sal heeltemal sy eie spasie hê, maar slegs die verskil tussen die huidige toestand en die oorspronklike sal in die FS in ag geneem word (spaar ten minste 190 GB)

Elke sel is sy eie aparte ZFS-datastel, en dit is uiters gerieflik. ZFS laat ook toe doen allerhande ander oulike goed soos om foto's oor SSH te stuur. Ons sal dit nie beskryf nie, so daar is reeds baie.

Dit is ook die moeite werd om te let op die behoefte aan afstandmonitering van die gasheer, wat ons vir hierdie doeleindes het Zabbix.

B - sekuriteit

Wat sekuriteit betref, kom ons begin by die sleutelbeginsels in die konteks van infrastruktuur:

Vertroulikheid - Standaardgereedskap van UNIX-agtige stelsels dwing hierdie beginsel af. Ons skei logies toegang tot elke logies aparte element van die stelsel - 'n sel. Toegang word verskaf deur standaard gebruikersverifikasie deur die gebruikers se private sleutels te gebruik. Alle kommunikasie tussen en na eindselle is geïnkripteer. Danksy skyfkodering kan ons nie bekommerd wees oor die veiligheid van data tydens skyfvervanging of migrasie na 'n ander bediener nie. Die enigste kritieke toegang is toegang tot die gasheerstelsel, aangesien sulke toegang oor die algemeen toegang bied tot data binne houers.

Integriteit — Die implementering van hierdie beginsel vind op verskeie verskillende vlakke plaas. Eerstens is dit belangrik om daarop te let dat in die geval van bedienerhardeware, ECC-geheue, ZFS sorg vir data-integriteit op die vlak van inligtingstukkies uit die boks. Onmiddellike foto's laat jou toe om enige tyd te rugsteun. Gerieflike seluitvoer-/invoergereedskap maak selreplikasie maklik.

beskikbaarheid - Dit is opsioneel. Hang af van die graad van jou roem en die feit dat jy haters het. In ons voorbeeld het ons verseker dat die beursie uitsluitlik vanaf die TOR-netwerk toeganklik was. Indien nodig, kan u alles op die firewall blokkeer en toegang tot die bediener uitsluitlik deur tonnels toelaat (TOR of VPN is 'n ander saak). Die bediener sal dus soveel as moontlik van die buitewêreld afgesny wees, en net ons self kan die beskikbaarheid daarvan beïnvloed.

Onmoontlikheid van weiering - En dit hang af van verdere werking en voldoening aan die korrekte beleide vir gebruikersregte, toegang, ens. Maar met die regte benadering word alle gebruikersaksies geoudit, en danksy kriptografiese oplossings is dit moontlik om uniek te identifiseer wie en wanneer sekere aksies uitgevoer word.

Natuurlik is die beskryfde konfigurasie nie 'n absolute voorbeeld van hoe dit altyd moet wees nie, maar eerder een van die voorbeelde van hoe dit kan wees, terwyl dit baie buigsame skaal- en aanpassingsopsies behou.

Maar wat van volle virtualisering?

Oor volledige virtualisering met behulp van cbsd, kan jy lees hier. Ek sal dit net byvoeg vir werk bhyve sommige kernopsies moet geaktiveer word.

# cat /etc/rc.conf

...
kld_list="vmm if_tap if_bridge nmdm"
...

# cat /boot/loader.conf

...
vmm_load="YES"
...

So as daar skielik 'n behoefte is om 'n docker te begin, dan verhoog ons 'n paar debian en gaan voort!

Bitcoin in 'n hok?

Dis al

Miskien is dit al wat ek wou deel. As jy van die artikel gehou het, kan jy vir my bitcoins gooi - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. As jy die selle in aksie wil probeer en 'n paar bitcoins wil hê, kan jy na my troeteldier projek.

Bron: will.com