Bitcoin i en bur?

Det rÄkade vara sÄ att jag Àr datorsystem- och nÀtverksadministratör till yrket (kort sagt: sysadmin), och jag hade chansen att berÀtta om en mÀngd olika system, inklusive de som krÀver [höga] sÀkerhetsÄtgÀrder, under drygt 10 Ärs yrkesverksamhet. Och det rÄkade ocksÄ vara sÄ att jag för en tid sedan tyckte att det var intressant bitcoin, och inte bara anvÀnde det, utan lanserade ocksÄ flera mikrotjÀnster för att lÀra sig att arbeta med Bitcoin-nÀtverket (det Àr ju trots allt p2p) ur utvecklarens synvinkel (jag Àr inte direkt en dev, bara förbi). Men jag pratar inte om utveckling, jag pratar om en sÀker och effektiv miljö för applikationer.

Finansiell teknologi (fintech) gÄr hand i hand med informationssÀkerhet (INFOSEC) och den första kan fungera utan den andra, men inte lÀnge. Det Àr dÀrför jag vill dela med mig av min erfarenhet och den uppsÀttning verktyg jag anvÀnder, vilket inkluderar bÄda fintech, och INFOSEC, och samtidigt, och kan ocksÄ anvÀndas för ett bredare eller helt annat syfte. I den hÀr artikeln kommer jag inte att prata sÄ mycket om Bitcoin, utan om infrastrukturmodellen för utveckling och drift av finansiella (och inte bara) tjÀnster - med ett ord, de tjÀnster dÀr "B" spelar roll. Detta gÀller bÄde Bitcoin-börsen och den mest typiska företagszoo av tjÀnster för ett litet företag som inte Àr kopplat till Bitcoin pÄ nÄgot sÀtt.

Jag vill pÄpeka att jag Àr en föresprÄkare för principer. "hÄll det dumt enkelt" О "mindre Àr mer", dÀrför kommer bÄde artikeln och det som beskrivs i den att ha de egenskaper som dessa principer beskriver.

ImaginÀrt scenario: LÄt oss titta pÄ det med hjÀlp av exemplet med en bitcoin-vÀxlare. Vi bestÀmde oss för att lansera en vÀxling av rubel, dollar, euro mot bitcoins och vice versa, och vi har redan en fungerande lösning, men för andra digitala valutor som Qiwi och WebMoney, d.v.s. vi har alla juridiska frÄgor avklarade, finns det en fÀrdig applikation som fungerar som en betalningsgateway för rubel, dollar och euro och andra betalningssystem. Den Àr kopplad till vÄra bankkonton och har ett API för vÄra slutapplikationer. Vi har ocksÄ en webbapplikation som fungerar som en vÀxlare för anvÀndare, ja, som ett typiskt Qiwi- eller WebMoney-konto - skapa ett konto, lÀgg till ett kort och sÄ vidare. Den kommunicerar med vÄr gateway-applikation, om Àn via ett REST API i det lokala omrÄdet. Och sÄ bestÀmde vi oss för att koppla samman bitcoins och samtidigt uppgradera infrastrukturen, eftersom allt initialt hastigt hölls upp pÄ virtuella lÄdor pÄ kontoret under bordet ... webbplatsen började anvÀndas, och vi började oroa oss för drifttid och prestanda.

SĂ„, lĂ„t oss börja med det viktigaste – att vĂ€lja en server. Eftersom företaget i vĂ„rt exempel Ă€r litet och vi litar pĂ„ webbhotellet (OVH), kommer vi att vĂ€lja ett budgetalternativ dĂ€r det Ă€r omöjligt att installera systemet frĂ„n den ursprungliga .iso-avbildningen, men det spelar ingen roll, IT-sĂ€kerhetsavdelningen kommer definitivt att analysera den installerade avbildningen. Och nĂ€r vi blir stora kommer vi att hyra vĂ„rt eget skĂ„p under lĂ„s och bom med begrĂ€nsad fysisk Ă„tkomst, eller kanske till och med bygga vĂ„rt eget datacenter. I vilket fall som helst Ă€r det vĂ€rt att komma ihĂ„g att nĂ€r man hyr hĂ„rdvara och installerar fĂ€rdiga avbildningar finns det en chans att man har en "hoster's Trojan" hĂ€ngande i systemet, vilket i de flesta fall inte Ă€r avsett att spionera pĂ„ en, utan att erbjuda mer praktiska verktyg för serverhantering.

Serverinstallation

Allt Àr enkelt hÀr. Vi vÀljer den hÄrdvara som passar vÄra behov. Sedan vÀljer vi FreeBSD-avbildningen. Eller sÄ ansluter vi (om det gÀller en annan vÀrd och vÄr egen hÄrdvara) via IPMI eller med en bildskÀrm och matar in den i den bootbara .iso FreeBSD-avbildningen. För orkestral installation anvÀnder jag Ansible О mfsbsdDet enda Àr att i vÄrt fall med kimsufi valde vi anpassad installation För att de tvÄ diskarna i spegeln endast ska ha boot- och /home-partitionerna "öppna" kommer resten av diskutrymmet att krypteras, men mer om det senare.

Bitcoin i en bur?

Systeminstallationen utförs pÄ ett standardiserat sÀtt, jag kommer inte att dröja mig kvar vid detta, jag kommer bara att notera att det Àr vÀrt att vara uppmÀrksam pÄ innan driften pÄbörjas. hÀrdning alternativ som erbjuder bsdinstaller i slutet av installationen (om du installerar systemet sjÀlv):

Bitcoin i en bur?

Det finns bra material angÄende detta Àmne, kommer jag kortfattat att upprepa det hÀr.

Det Àr ocksÄ möjligt att aktivera ovan nÀmnda parametrar pÄ ett redan installerat system. För att göra detta mÄste du redigera bootloader-filen och aktivera kÀrnparametrarna. *ee Àr en editor som denna 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

Det Àr ocksÄ vÀrt att se till att du har den senaste versionen av systemet installerad, och utför alla uppdateringar och uppgraderingarI vÄrt fall krÀvs till exempel en uppgradering till den senaste versionen, eftersom avbildningarna före installationen Àr sex mÄnader till ett Är efter. NÄvÀl, dÀr Àndrar vi SSH-porten till en annan Àn standardporten, lÀgger till autentisering med nycklar och inaktiverar med lösenord.

Sedan satte vi upp det aide, övervakar tillstÄndet för systemkonfigurationsfilerna. Du kan lÀsa mer om det hÀr hÀr.

pkg install aide

och redigera vÄr 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

SÀtta pÄ systemrevision

sysrc auditd_enable=YES

# service auditd start

Hur man administrerar denna frÄga beskrivs perfekt i ledarskap.

Nu startar vi om och fortsÀtter till programvaran pÄ servern. Varje server Àr en hypervisor för containrar eller fullstÀndiga virtuella maskiner. DÀrför Àr det viktigt att processorn stöder VT-x och EPT om vi planerar att anvÀnda fullstÀndig virtualisering.

För hantering av container och virtuella maskiner anvÀnder jag cbsd frÄn olevole, Jag önskar honom mer hÀlsa och vÀlsignelser för denna underbara nytta!

Containrar? Docker igen?

Men nej. FreeBSD-fÀngelser - detta Àr ett utmÀrkt verktyg för containerisering, och det nÀmnda cbsd för att orkestrera dessa behÄllare, som kallas celler.

En bur Àr en extremt effektiv lösning för att bygga infrastruktur för en mÀngd olika ÀndamÄl, dÀr fullstÀndig isolering av enskilda tjÀnster eller processer i slutÀndan krÀvs. I grund och botten Àr det en klon av vÀrdsystemet, men det krÀver inte fullstÀndig virtualisering av hÄrdvaran. Och tack vare detta lÀggs inte resurser pÄ "gÀst-OS", utan bara pÄ det arbete som utförs. NÀr burar anvÀnds för interna behov Àr detta en mycket bekvÀm lösning för optimal resursanvÀndning - ett gÀng burar pÄ en hÄrdvaruserver kan var och en separat anvÀnda hela serverresursen vid behov. Med tanke pÄ att olika deltjÀnster vanligtvis behöver ytterligare resurser vid olika tidpunkter kan man utvinna maximal prestanda frÄn en server om man planerar och obalanserar burarna mellan servrar pÄ rÀtt sÀtt. Vid behov kan man ocksÄ sÀtta begrÀnsningar för resursen som anvÀnds för burarna.

Bitcoin i en bur?

Vad sÀgs om fullstÀndig virtualisering?

SÄ vitt jag vet cbsd stöder arbete bhyve och XEN-hypervisorer. Jag har aldrig anvÀnt den andra, men den första Àr relativt ung hypervisor frÄn FreeBSDVi ska titta pÄ ett exempel pÄ anvÀndning bhyve i exemplet nedan.

Installera och konfigurera vÀrdmiljön

Vi anvÀnder FS ZFSDetta Àr ett extremt kraftfullt verktyg för att hantera serverutrymme. Tack vare ZFS kan du direkt bygga arrayer med olika konfigurationer frÄn diskar, dynamiskt "hot" expandera utrymme, Àndra döda diskar, hantera snapshots och mycket, mycket mer som kan beskrivas i en hel serie artiklar. LÄt oss ÄtergÄ till vÄr server och dess diskar. I början av installationen lÀmnade vi ledigt utrymme pÄ diskarna för krypterade partitioner. Varför Àr det sÄ? Detta Àr sÄ att systemet skulle starta automatiskt och lyssna via SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lÀgg till en diskpartition i det ÄterstÄende utrymmet

geli init /dev/ada0p4

vi anger vÄrt krypteringslösenord

geli attach /dev/ada0p4

Skriv in lösenordet igen sĂ„ fĂ„r vi enheten /dev/ada0p4.eli – detta Ă€r vĂ„rt krypterade utrymme. Sedan upprepar vi samma sak för /dev/ada1 och resten av diskarna i arrayen. Och vi skapar en ny. ZFS-pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Ja, vi har den minimala stridsutrustningen redo. En speglad uppsÀttning diskar ifall en av de tre gÄr sönder.

Skapa en datauppsÀttning i en ny "pool"

zfs create vms/jails

pkg install cbsd — vi startade kommandot och konfigurerade hanteringen för vĂ„ra celler.

efter cbsd installerad mÄste den initialiseras:

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

Tja, vi svarar pÄ en massa frÄgor, mestadels med standardsvar.

*Om du anvÀnder kryptering Àr det viktigt att daemonen cbsdd startar inte automatiskt förrÀn du dekrypterar diskarna manuellt eller automatiskt (i vÄrt exempel gör zabbix detta)

**Jag anvÀnder inte heller NAT frÄn cbsd, och jag satte upp den sjÀlv 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

Att konfigurera brandvÀggspolicyer Àr ocksÄ ett separat Àmne, sÄ jag kommer inte att gÄ in pÄ detaljer om att konfigurera policyn BLOCK ALL och konfigurera vitlistor, detta kan göras genom att lÀsa officiell dokumentation eller nÄgon av det enorma antalet artiklar som finns tillgÀngliga pÄ Google.

NÄvÀl... vi har cbsd installerat, dags att skapa vÄr första arbetshÀst - en Bitcoin-demon i en bur!

cbsd jconstruct-tui

Bitcoin i en bur?

HÀr ser vi dialogrutan för att skapa celler. NÀr alla vÀrden har stÀllts in skapar vi dem!

NÀr du skapar din första cell mÄste du vÀlja vad du ska anvÀnda som bas för cellerna. Jag vÀljer kÀllkoden frÄn FreeBSD-arkivet med kommandot repoDetta val görs endast nÀr den första cellen i en specifik version skapas (du kan vara vÀrd för celler av vilken version som helst som Àr Àldre Àn vÀrdversionen).

NÀr allt Àr installerat lanserar vi cellen!

# cbsd jstart bitcoind

Men vi behöver installera programvara i buren.

# jls

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

jexec bitcoind för att komma in i mobilkonsolen

och redan inuti cellen installerar vi programvaran med dess beroenden (vÄrt vÀrdsystem förblir rent)

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

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

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

Det finns Bitcoin i buren, men vi behöver anonymitet, eftersom vi vill ansluta till vissa burar via TOR-nÀtverket. Och generellt sett planerar vi att spinna de flesta burarna med misstÀnkt programvara endast via en proxy. Tack. pf Du kan inaktivera NAT för ett visst intervall av IP-adresser i det lokala nÀtverket och endast tillÄta NAT för vÄr TOR-nod. SÄledes, Àven om skadlig kod kommer in i buren, kommer den troligtvis inte att kommunicera med omvÀrlden, och om den gör det kommer den inte att avslöja vÄr servers IP. DÀrför skapar vi en annan bur för att "vidarebefordra" tjÀnster som en ".onion"-tjÀnst och som en proxy för internetÄtkomst för enskilda 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

Vi stÀller in lyssnande pÄ en lokal adress (tillgÀngligt för alla celler)

SOCKSPort 192.168.0.2:9050

Vad mer behöver vi för att vara helt nöjda? Ja, vi behöver en tjÀnst för vÄr webb, kanske mer Àn en. LÄt oss lansera nginx, som kommer att fungera som en omvÀnd proxy och ta hand om att förnya Let's Encrypt-certifikat.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Och sÄ placerade vi 150 MB beroenden i buren. Och vÀrden Àr fortfarande ren.

LÄt oss ÄtergÄ till konfigurationen av nginx senare, vi behöver skapa ytterligare tvÄ celler för vÄr betalningsgateway pÄ nodejs och rust och en webbapplikation, som av nÄgon anledning Àr pÄ Apache och PHP, och den senare krÀver ocksÄ en MySQL-databas.

# 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

...och ytterligare 380 MB isolerade paket

DÀrefter laddar vi ner vÄr applikation med git och startar 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-paket i en bur.

hÀr ger vi utvecklaren Ätkomst via SSH direkt in i buren, de kommer att göra allt sjÀlva:

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

Port 2267 — Ă€ndra cellens SSH-port till vilken godtycklig port som helst

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

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

TjÀnsten har lanserats, allt som ÄterstÄr Àr att lÀgga till en regel pf brandvÀgg

LÄt oss se vilka IP-adresser vi har för celler och hur vÄr "lokala" IP-adress ser ut i allmÀnhet.

# 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

och lÀgg till 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ÄvÀl, eftersom vi Àr hÀr, lÄt oss ocksÄ lÀgga till en regel för omvÀnd 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 lite om bitcoins

Det vi har Ă€r att vi har en webbapplikation som Ă€r tillgĂ€nglig externt, och den kommunicerar lokalt med vĂ„r betalningsgateway. Nu behöver vi förbereda en arbetsmiljö för att interagera med sjĂ€lva Bitcoin-nĂ€tverket - en nod. bitcoind Det Ă€r bara en daemon som hĂ„ller en lokal kopia av blockkedjan uppdaterad. Denna daemon har RPC- och plĂ„nboksfunktionalitet, men det finns mer praktiska "wrappers" för att utveckla applikationer. Till att börja med bestĂ€mde vi oss för att installera electrum — detta Ă€r en CLI-plĂ„nbok. Denna plĂ„nbok Vi kommer att anvĂ€nda den som ett "kallförrĂ„d" för vĂ„ra bitcoins – i princip de bitcoins som behöver lagras "utanför" systemet, Ă„tkomliga för anvĂ€ndare och generellt sett borta frĂ„n alla. Den har ocksĂ„ ett grafiskt grĂ€nssnitt, sĂ„ vi kommer att anvĂ€nda samma plĂ„nbok pĂ„ vĂ„r.
bÀrbara datorer. För tillfÀllet kommer vi att anvÀnda elektrum med publika servrar, och senare kommer vi att installera det i en annan cell ElectrumX, för att inte vara beroende av nÄgon alls.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

Vi har ytterligare 700 MB programvara i vÄr 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 skapat en plÄnbok.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Till vÄr pÄ-kedja PlÄnboken kommer framöver endast att kunna ansluta till en begrÀnsad krets av mÀnniskor. För att inte öppna Ätkomst utifrÄn till denna bur kommer SSH-anslutningar att ske via TOR (en decentraliserad version av VPN). Vi startar SSH i buren, men rör inte vÄr pf.conf pÄ vÀrden.

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

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

Nu ska vi inaktivera internetÄtkomsten för cellen med plÄnboken. Vi kommer att ge den en IP-adress frÄn ett annat subnÀtutrymme som inte Àr NAT-baserat. Först kommer vi att Àndra /etc/pf.conf pÄ vÀrden

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" lÄt oss byta till JAIL_IP_POOL="192.168.0.0/25", sÄ alla adresser 192.168.0.126-255 kommer inte att ha direkt tillgÄng till internet. Ett slags mjukvarubaserad "luftgap"-nÀtverk. Och NAT-regeln förblir som den var

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

Överbelasta reglerna

# pfctl -f /etc/pf.conf

Nu tar vi tag i vÄr bur.

# cbsd jconfig jname=electrum

Bitcoin i en bur?

Bitcoin i en bur?

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 slutar sjÀlva systemet att fungera för oss. Vi kan dock ange en systemproxy. Men det finns en sak, pÄ TOR Àr det en SOCKS5-proxy, och för enkelhetens skull skulle vi ocksÄ vilja ha 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

Nu har vi tvÄ proxyservrar i vÄrt system, och bÄda skickar ut via TOR: socks5://192.168.0.2:9050 och http://192.168.0.6:8123

Nu kan vi konfigurera vÄr plÄnboksmiljö.

# 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 kommer skalet att fungera under proxyn. Om vi ​​vill installera paket, dĂ„ bör vi lĂ€gga till /usr/local/etc/pkg.conf frĂ„n under roten av buren

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

NÄvÀl, nu Àr det dags att lÀgga till TOR hidden service som adressen till vÄr SSH-tjÀnst i plÄnbokslÄdan.

# 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

HÀr Àr vÄr adress för anslutningen. LÄt oss kontrollera frÄn den lokala maskinen. Men först mÄste vi lÀgga till vÄr SSH-nyckel:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Tja, och frÄn klientens Linux-maskin

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

LÄt oss ansluta (För att detta ska fungera behöver du en lokal TOR-daemon som lyssnar 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 <genesis@istar.ca>
wallet@electrum:~ % logout

FramgÄng!

För att arbeta med omedelbara betalningar och mikrobetalningar behöver vi ocksÄ en nod. BlixtnÀtverk, detta kommer faktiskt att vara vÄrt huvudsakliga arbetsverktyg med bitcoin. U *c-blixtar, som vi ska anvÀnda som en demon, Àr Sparko-plugin, vilket Àr ett fullfjÀdrat HTTP (REST)-grÀnssnitt och tillÄter arbete med bÄde off-chain-transaktioner och on-chain-transaktioner. c-lightning krÀvs för att fungera bitcoind nod.

*Det finns olika implementeringar av Lightning Network-protokollet i olika PL:er. Av de vi testade verkade c-lightning (skrivet i C) vara det mest stabila och resurseffektiva.

# 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

Medan allt kompileras och installeras, lĂ„t oss skapa en RPC-anvĂ€ndare för 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

Mitt kaotiska vÀxling mellan celler visar sig inte vara sÄ kaotiskt om man markerar verktyget tmux, vilket lÄter dig skapa flera terminalundersessioner inom en session. Analog: screen

Bitcoin i en bur?

SÄ vi vill inte visa den riktiga IP-adressen för vÄr nod, och vi vill genomföra alla finansiella transaktioner via TOR. Det Àr dÀrför vi behöver ytterligare en .onion.

# 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

Nu ska vi skapa en konfiguration för 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 behöver ocksÄ skapa en konfigurationsfil för bitcoin-cli, ett verktyg som kommunicerar med bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

vi kontrollerar

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

[
  "test"
]

lansera lightningd

lightning@lightning:~ % lightningd --daemon

SjÀlv lightningd du kan hantera verktyget lightning-cli, till exempel:

lightning-cli newaddr hÀmta adress för ny inkommande betalning

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all skicka alla plÄnbokspengar (alla adresser pÄ kedjan) till adressen

Även kommandon för operationer utanför kedjan lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay etc.

För kommunikation med applikationen har vi REST Api.

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

Summera

# 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 i en bur?

Vi har en uppsÀttning containrar, var och en med sin egen ÄtkomstnivÄ bÄde frÄn och till det lokala nÀtverket.

# 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 ni ser tar bitcoind upp alla 190 GB utrymme. TÀnk om vi behöver ytterligare en nod för testning? ZFS Àr ett bra val hÀr. Med hjÀlp av cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Du kan skapa en ögonblicksbild och lÀnka en ny cell till denna ögonblicksbild. Den nya cellen kommer att ha sitt eget utrymme, men endast skillnaden mellan det aktuella tillstÄndet och det ursprungliga kommer att beaktas i FS (vi kommer att spara minst 190 GB)

Varje cell Àr sin egen separata ZFS-datauppsÀttning, och detta Àr extremt bekvÀmt. ZFS tillÄter ocksÄ göra diverse andra coola saker, som att skicka snapshots via SSH. Vi kommer inte att beskriva detta, det finns redan mycket.

Det Àr ocksÄ vÀrt att notera behovet av fjÀrrövervakning av vÀrden, för dessa ÀndamÄl har vi Zabbix.

B - sÀkerhet

NÀr det gÀller sÀkerhet, lÄt oss börja med de viktigaste principerna i infrastruktursammanhang:

Sekretess — Standardverktyg för UNIX-liknande system sĂ€kerstĂ€ller implementeringen av denna princip. Vi separerar logiskt Ă„tkomst till varje logiskt separat element i systemet – en cell. Åtkomst tillhandahĂ„lls genom standardanvĂ€ndarautentisering med anvĂ€ndarnas personliga nycklar. All kommunikation mellan och till de slutliga cellerna Ă€r krypterad. Tack vare diskkryptering kan vi vara sĂ€kra pĂ„ datasĂ€kerheten vid diskbyte eller migrering till en annan server. Den enda kritiska Ă„tkomsten Ă€r Ă„tkomst till vĂ€rdsystemet, eftersom sĂ„dan Ă„tkomst i allmĂ€nhet ger Ă„tkomst till data inuti containrar.

integritet — Denna princip implementeras pĂ„ flera olika nivĂ„er. För det första Ă€r det viktigt att notera att nĂ€r det gĂ€ller serverhĂ„rdvara, ECC-minne, tar ZFS redan "out of the box" hand om dataintegritet pĂ„ informationsbitsnivĂ„. Omedelbara ögonblicksbilder lĂ„ter dig göra sĂ€kerhetskopior nĂ€r som helst och pĂ„ sprĂ„ng. Praktiska verktyg för att exportera och importera celler gör det enkelt att replikera celler.

tillgĂ€nglighet — Detta Ă€r valfritt. Det beror pĂ„ hur kĂ€nd du Ă€r och om du har hatare. I vĂ„rt exempel sĂ„g vi till att plĂ„nboken endast Ă€r tillgĂ€nglig frĂ„n TOR-nĂ€tverket. Om det behövs kan du blockera allt pĂ„ brandvĂ€ggen och tillĂ„ta Ă„tkomst till servern endast via tunnlar (TOR eller VPN Ă€r en annan frĂ„ga). PĂ„ sĂ„ sĂ€tt kommer servern att vara avskuren frĂ„n omvĂ€rlden sĂ„ mycket som möjligt, och bara vi sjĂ€lva kommer att kunna pĂ„verka dess tillgĂ€nglighet.

Omöjlighet att vĂ€gra — Och detta beror pĂ„ vidare utnyttjande och efterlevnad av korrekta policyer för anvĂ€ndarrĂ€ttigheter, Ă„tkomst etc. Men med rĂ€tt tillvĂ€gagĂ„ngssĂ€tt granskas alla anvĂ€ndarĂ„tgĂ€rder, och tack vare kryptografiska lösningar Ă€r det möjligt att tydligt identifiera vem och nĂ€r vissa Ă„tgĂ€rder utfördes.

Naturligtvis Àr den beskrivna konfigurationen inte ett absolut exempel pÄ hur det alltid borde vara, utan snarare ett av exemplen pÄ hur det kan vara, samtidigt som mycket flexibel skalbarhet och anpassningsmöjligheter bibehÄlls.

Vad sÀgs om fullstÀndig virtualisering?

Om fullstÀndig virtualisering med hjÀlp av cbsd kan du lÀs hÀrJag vill bara tillÀgga att för verkens skull bhyve Vissa kÀrnalternativ mÄste aktiveras.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

SÄ om det plötsligt finns ett behov av att starta Docker, dÄ startar vi lite Debian och kör pÄ!

Bitcoin i en bur?

Det Àr allt

Jag tror det var allt jag ville dela med mig. Om du gillade artikeln kan du ge mig lite bitcoins - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttcOm du vill testa cellerna i aktion och fÄ lite bitcoins kan du besöka min husdjursprojekt.

KĂ€lla: will.com