Bitcoin häkissä?

Sattui niin, että olen ammatiltani tietokonejärjestelmien ja verkkojen ylläpitäjä (lyhyesti: järjestelmänvalvoja), ja minulla oli tilaisuus kertoa prof. useiden järjestelmien toimintaan, mukaan lukien ne, jotka vaativat [äärimmäisiä] turvatoimia. Kävi myös niin, että jokin aika sitten pidin siitä mielenkiintoista bitcoin, ja ei vain käyttänyt sitä, vaan lanseerasi myös useita mikropalveluita oppiakseen itsenäiseen työskentelyyn Bitcoin-verkon (aka p2p) kanssa kehittäjän näkökulmasta (olen tietysti yksi niistä dev, joten olin ohimennen). Mutta en tarkoita kehitystä, puhun turvallisesta ja tehokkaasta ympäristöstä sovelluksille.

Rahoitustekniikka (fintech) siirry tietoturvan viereen (Tietoturvaviranomainen) ja ensimmäinen voi toimia ilman toista, mutta ei kauan. Siksi haluan jakaa kokemukseni ja käyttämäni työkalusarjan, joka sisältää molemmat fintechJa Tietoturvaviranomainen, ja samaan aikaan, ja sitä voidaan käyttää myös laajempaan tai täysin eri tarkoitukseen. Tässä artikkelissa en kerro sinulle niinkään Bitcoinista, vaan infrastruktuurimallista rahoituspalvelujen (eikä vain) kehittämiseen ja toimintaan - sanalla sanoen niistä palveluista, joissa "B" on tärkeä. Tämä pätee sekä Bitcoin-pörssiin että tyypillisimpään yrityseläintarhaan pienyritykselle, joka ei liity Bitcoiniin millään tavalla.

Haluan huomauttaa, että olen periaatteiden kannattaja "Pidä se tyhmänä yksinkertaisena" и "vähemmän on enemmän"Siksi sekä artikkelilla että siinä kuvatulla on ominaisuuksia, joista nämä periaatteet liittyvät.

Kuvitteellinen skenaario: Katsotaanpa kaikkea bitcoin-vaihtimen esimerkillä. Päätimme käynnistää ruplan, dollarin, euron vaihdon bitcoineiksi ja takaisin, ja meillä on jo toimiva ratkaisu, mutta muulle digitaaliselle rahalle, kuten qiwille ja webmoneylle, ts. Olemme sulkeneet kaikki lakiasiat, meillä on valmis sovellus, joka toimii rupla-, dollari- ja euro- ja muiden maksujärjestelmien maksuporttina. Se on yhdistetty pankkitileihimme ja siinä on jonkinlainen API loppusovelluksiamme varten. Meillä on myös verkkosovellus, joka toimii käyttäjien vaihtajana, kuten tyypillinen qiwi- tai webmoney-tili - luo tili, lisää kortti ja niin edelleen. Se kommunikoi yhdyskäytäväsovelluksemme kanssa, vaikkakin paikallisen REST API:n kautta. Ja niin päätimme yhdistää bitcoinit ja samalla päivittää infrastruktuuria, koska... Aluksi kaikki laitettiin kiireessä virtuaalilaatikoihin toimistossa pöydän alle... sivustoa alettiin käyttää, ja aloimme olla huolissamme käytettävyydestä ja suorituskyvystä.

Joten aloitetaan pääasiasta - palvelimen valitsemisesta. Koska esimerkkimme yritys on pieni ja luotamme valitsemaansa isännöitsijään (OVH). budjettivaihtoehto jossa on mahdotonta asentaa järjestelmää alkuperäisestä .iso-kuvasta, mutta sillä ei ole väliä, tietoturvaosasto analysoi asennetun kuvan ehdottomasti. Ja kun kasvamme aikuisiksi, vuokraamme oman kaappimme lukon ja avaimen alla rajoitetulla fyysisellä pääsyllä, ja ehkä rakennamme oman DC: n. Joka tapauksessa kannattaa muistaa, että kun vuokraat laitteistoa ja asennat valmiita kuvia, on mahdollista, että järjestelmässäsi roikkuu "troijalainen isännöitsijältä", jonka ei useimmissa tapauksissa ole tarkoitettu vakoilemaan sinua. vaan tarjota kätevämpiä hallintatyökaluja palvelimelle.

Palvelimen asennus

Täällä kaikki on yksinkertaista. Valitsemme tarpeisiimme sopivan laitteiston. Valitse sitten FreeBSD-kuva. No, tai yhdistämme (jos kyseessä on toinen isäntä ja oma laitteistomme) IPMI:n kautta tai näytöllä ja syötämme .iso FreeBSD-kuvan lataukseen. Käytän orkesteriasetuksiin Ansible и mfsbsd. Ainoa asia, meidän tapauksessamme kimsufin kanssa, valitsimme mukautettu asennus jotta kahdella peilissä olevalla levyllä olisi vain käynnistys- ja /home-osiot "avoimina", loput levytilasta salataan, mutta siitä lisää myöhemmin.

Bitcoin häkissä?

Järjestelmän asennus tapahtuu normaalilla tavalla, en viivyttele tässä, huomautan vain, että ennen käytön aloittamista on syytä kiinnittää huomiota karkaisu sen tarjoamia vaihtoehtoja bsdinstaller asennuksen lopussa (jos asennat järjestelmän itse):

Bitcoin häkissä?

On hyvä materiaali tästä aiheesta, toistan sen lyhyesti tässä.

On myös mahdollista ottaa käyttöön edellä mainitut parametrit jo asennetussa järjestelmässä. Tätä varten sinun on muokattava käynnistyslataustiedostoa ja otettava käyttöön ytimen parametrit. *ee on tällainen editori BSD:ssä

# 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

Varmista myös, että sinulla on asennettuna järjestelmän uusin versio ja suorittaa kaikki päivitykset ja päivitykset. Meidän tapauksessamme esimerkiksi päivitys uusimpaan versioon vaaditaan, koska... esiasennuskuvat viivästyvät kuudesta kuukaudesta vuoteen. No, siellä vaihdamme SSH-portin johonkin muuhun kuin oletusporttiin, lisäämme avaintodennusta ja poistamme salasanan todennuksen käytöstä.

Sitten konfiguroimme aide, valvoo järjestelmän asetustiedostojen tilaa. Voit lukea tarkemmin täällä.

pkg install aide

ja muokkaa crontab-sivuamme

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

Sisällytämme järjestelmän auditointi

sysrc auditd_enable=YES

# service auditd start

Tämän asian hoitaminen on kuvattu täydellisesti kohdassa johto.

Nyt käynnistetään uudelleen ja siirrytään palvelimen ohjelmistoon. Jokainen palvelin on hypervisor säilöille tai täysille virtuaalikoneen. Siksi on tärkeää, että prosessori tukee VT-x:ää ja EPT:tä, jos aiomme käyttää täyttä virtualisointia.

Käytän säiliöiden ja virtuaalikoneiden hallintaan cbsd alkaen olevole, Toivon hänelle lisää terveyttä ja siunauksia tähän upeaan apuvälineeseen!

Säiliöt? Docker taas vai mitä?

Mutta ei. FreeBSD vankilat on erinomainen työkalu konttien kuljetukseen, mutta mainittu cbsd ohjata näitä säiliöitä, joita kutsutaan soluiksi.

Häkki on äärimmäisen tehokas ratkaisu infrastruktuurin rakentamiseen erilaisiin tarkoituksiin, joissa viime kädessä vaaditaan yksittäisten palvelujen tai prosessien täydellistä eristämistä. Pohjimmiltaan se on isäntäjärjestelmän klooni, mutta se ei vaadi täyttä laitteiston virtualisointia. Ja tämän ansiosta resursseja ei käytetä "vieraskäyttöjärjestelmään", vaan vain suoritettavaan työhön. Kun soluja käytetään sisäisiin tarpeisiin, tämä on erittäin kätevä ratkaisu optimaaliseen resurssien käyttöön - joukko soluja yhdellä laitteistopalvelimella voi tarvittaessa käyttää erikseen koko palvelinresurssia. Ottaen huomioon, että yleensä erilaiset alapalvelut tarvitsevat lisää. resursseja eri aikoina, voit saada maksimaalisen suorituskyvyn yhdestä palvelimesta, jos suunnittelet ja tasapainotat solut palvelinten välillä oikein. Tarvittaessa soluille voidaan asettaa myös rajoituksia käytettävälle resurssille.

Bitcoin häkissä?

Entä täydellinen virtualisointi?

Sikäli kuin tiedän cbsd tukee työtä bhyve ja XEN-hypervisorit. Toista en ole koskaan käyttänyt, mutta ensimmäinen on suhteellisen uusi hypervisor FreeBSD:ltä. Katsotaan esimerkkiä käytöstä bhyve alla olevassa esimerkissä.

Isäntäympäristön asentaminen ja määrittäminen

Käytämme FS:ää ZFS. Tämä on erittäin tehokas työkalu palvelintilan hallintaan. ZFS:n ansiosta voit suoraan rakentaa levyiltä erilaisia ​​​​kokoonpanoja, laajentaa dynaamisesti "kuumaa" tilaa, vaihtaa kuolleita levyjä, hallita tilannekuvia ja paljon muuta, mitä voidaan kuvata useissa artikkeleissa. Palataan palvelimellemme ja sen levyille. Asennuksen alussa jätimme levyille vapaata tilaa salatuille osiolle. Miksi niin? Tämä on niin, että järjestelmä herää automaattisesti ja kuuntelee SSH:n kautta.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

lisää levyosio jäljellä olevaan tilaan

geli init /dev/ada0p4

syötä salaussalasanamme

geli attach /dev/ada0p4

Annamme salasanan uudelleen ja meillä on laite /dev/ada0p4.eli - tämä on salattu tilamme. Sitten toistetaan sama /dev/ada1:lle ja muille taulukon levyille. Ja luomme uuden ZFS-allas.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Meillä on minimitaistelusarja valmiina. Peilattu levyjoukko siltä varalta, että jokin kolmesta epäonnistuu.

Tietojoukon luominen uudelle "poolille"

zfs create vms/jails

pkg install cbsd — Perustimme tiimin ja perustimme solujemme hallinnan.

jälkeen cbsd asennettuna, se on alustettava:

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

No, vastaamme joukkoon kysymyksiä, useimmiten oletusvastauksilla.

*Jos käytät salausta, on tärkeää, että demoni cbsdd ei käynnistynyt automaattisesti, ennen kuin purat levyjen salauksen manuaalisesti tai automaattisesti (esimerkissämme tämän tekee zabbix)

**En myöskään käytä NAT:ia alkaen cbsdja määritän sen itse 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

Palomuurikäytäntöjen määrittäminen on myös erillinen aihe, joten en mene syvälle ESTÄÄ KAIKKI -käytännön määrittämiseen ja sallittujen listojen asettamiseen, voit tehdä sen lukemalla virallinen dokumentaatio tai jokin Googlen valtavasta määrästä artikkeleita.

No... meillä on cbsd asennettuna, on aika luoda ensimmäinen työhevosemme - häkissä oleva Bitcoin-demoni!

cbsd jconstruct-tui

Bitcoin häkissä?

Tässä näemme solun luomisikkunan. Kun kaikki arvot on asetettu, luodaan!

Kun luot ensimmäistä soluasi, sinun tulee valita, mitä solujen pohjana käytetään. Valitsen jakelun FreeBSD-varastosta komennolla repo. Tämä valinta tehdään vain luotaessa tietyn version ensimmäistä solua (voit isännöidä minkä tahansa version soluja, jotka ovat vanhempia kuin isäntäversio).

Kun kaikki on asennettu, käynnistämme häkin!

# cbsd jstart bitcoind

Mutta meidän on asennettava ohjelmisto häkkiin.

# jls

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

jexec bitcoind päästäksesi solukonsoliin

ja jo solun sisällä asennamme ohjelmiston riippuvuuksineen (isäntäjärjestelmämme pysyy puhtaana)

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

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

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

Häkissä on Bitcoinia, mutta tarvitsemme nimettömyyttä, koska haluamme muodostaa yhteyden joihinkin häkkeihin TOP-verkon kautta. Yleensä aiomme käyttää useimpia soluja epäilyttävillä ohjelmistoilla vain välityspalvelimen kautta. Kiitokset pf Voit poistaa NAT:n käytöstä tietyltä paikallisverkon IP-osoitteilta ja sallia NATin vain TOR-solmussamme. Näin ollen vaikka haittaohjelma pääsisi soluun, se ei todennäköisesti kommunikoi ulkomaailman kanssa, ja jos tulee, se ei paljasta palvelimemme IP-osoitetta. Siksi luomme toisen solun palveluiden "välittämiseksi" ".sipuli"-palveluna ja välityspalvelimena yksittäisten solujen Internetiin pääsyä varten.

# 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

Aseta kuuntelemaan paikallisessa osoitteessa (käytettävissä kaikissa soluissa)

SOCKSPort 192.168.0.2:9050

Mitä muuta tarvitsemme täydelliseen onneen? Kyllä, tarvitsemme palvelun verkkoomme, ehkä useamman kuin yhden. Käynnistetään nginx, joka toimii käänteisenä välityspalvelimena ja huolehtii Let's Encrypt -sertifikaattien uusimisesta

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Ja niin laitoimme 150 Mt riippuvuutta häkkiin. Ja isäntä on edelleen puhdas.

Palataan nginxin asettamiseen myöhemmin, meidän on nostettava kaksi solua lisää maksuyhdyskäytävällemme nodejille ja rustille sekä web-sovellus, joka on jostain syystä Apachessa ja PHP:ssä, ja jälkimmäinen vaatii myös MySQL-tietokannan.

# cbsd jsconstruct-tui

# cbsd jstart paygw

# jexec paygw

paygw:/@[15:55] # pkg install git node npm

paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

...ja vielä 380 Mt paketteja eristettynä

Seuraavaksi lataamme sovelluksemme gitin kanssa ja käynnistämme sen.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB paketit. häkissä.

tässä annamme kehittäjälle pääsyn SSH:n kautta suoraan soluun, he tekevät kaiken siellä itse:

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

Port 2267 - muuta solun SSH-portti mihin tahansa mielivaltaiseen

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

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

No, palvelu on käynnissä, jäljellä on vain lisätä sääntö pf palomuuri

Katsotaanpa, mikä IP-osoite soluillamme on ja miltä "paikallinen alueemme" yleensä näyttää.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind
     2  192.168.0.2     tor.space.com                 /zroot/jails/jails/tor
     3  192.168.0.3     nginx-rev.space.com           /zroot/jails/jails/nginx-rev
     4  192.168.0.4     paygw.space.com               /zroot/jails/jails/paygw
     5  192.168.0.5     webapp.my.domain              /zroot/jails/jails/webapp

ja lisää sääntö

# 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

No, koska olemme täällä, lisätään myös käänteisen välityspalvelimen sääntö:

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

No, nyt vähän bitcoineista

Meillä on ulkoisesti esillä oleva verkkosovellus, joka puhuu paikallisesti maksuyhdyskäytävämme kanssa. Nyt meidän on valmisteltava työympäristö vuorovaikutukseen itse Bitcoin-verkon - solmun - kanssa bitcoind se on vain demoni, joka pitää lohkoketjun paikallisen kopion ajan tasalla. Tässä demonissa on RPC- ja lompakkotoiminnot, mutta sovellusten kehittämiseen on myös kätevämpiä "kääreitä". Aluksi päätimme laittaa electrum on CLI-lompakko. Tämä lompakko käytämme sitä "kylmävarastona" bitcoineillemme - yleensä ne bitcoineille, jotka on säilytettävä järjestelmän "ulkopuolella" käyttäjien saatavilla ja yleensä kaukana kaikilta. Siinä on myös graafinen käyttöliittymä, joten aiomme käyttää samaa lompakkoa
kannettavat tietokoneet. Toistaiseksi käytämme Electrumia julkisten palvelimien kanssa, ja myöhemmin nostamme sen toiseen soluun ElectrumXjotta ei ole riippuvainen kenestäkään.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

vielä 700 Mt ohjelmistoa häkissämme

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

Nyt meillä on lompakko luotu.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Meidän on-ketju Vain rajoitettu määrä ihmisiä voi tästä lähtien muodostaa yhteyden lompakkoon. Jotta pääsy tähän soluun ei avautuisi ulkopuolelta, yhteydet SSH:n kautta tapahtuvat TOP:n (VPN:n hajautetun version) kautta. Käynnistämme SSH:n solussa, mutta emme kosketa isäntäkoneen pf.conf-tiedostoa.

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

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

Sammuta nyt solu, jossa on lompakon Internet-yhteys. Annetaan sille IP-osoite toisesta aliverkkotilasta, jota ei ole NATed. Ensin vaihdetaan /etc/pf.conf isännässä

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" muutetaan se JAIL_IP_POOL="192.168.0.0/25", joten kaikilla osoitteilla 192.168.0.126-255 ei ole suoraa pääsyä Internetiin. Eräänlainen ohjelmisto "ilmaväli"-verkko. Ja NAT-sääntö pysyy entisellään

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

Sääntöjen ylikuormittaminen

# pfctl -f /etc/pf.conf

Otetaan nyt solumme vastaan

# cbsd jconfig jname=electrum

Bitcoin häkissä?

Bitcoin häkissä?

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, mutta nyt itse järjestelmä lakkaa toimimasta meillä. Voimme kuitenkin määrittää järjestelmän välityspalvelimen. Mutta on yksi asia, TOR:ssa se on SOCKS5-välityspalvelin, ja mukavuussyistä haluaisimme myös HTTP-välityspalvelimen.

# 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

No, nyt järjestelmässämme on kaksi välityspalvelinta, jotka molemmat tuottavat TOR:n kautta: socks5://192.168.0.2:9050 ja http://192.168.0.6:8123

Nyt voimme määrittää lompakkoympäristömme

# 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

No, nyt kuori toimii välityspalvelimen alta. Jos haluamme asentaa paketteja, meidän pitäisi lisätä /usr/local/etc/pkg.conf häkin juuren alta

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

No, nyt on aika lisätä TOR piilotettu palvelu SSH-palvelumme osoitteeksi lompakkosoluun.

# 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

Tämä on yhteysosoitteemme. Katsotaanpa paikalliselta koneelta. Mutta ensin meidän on lisättävä SSH-avain:

wallet@electrum:/ % mkdir ~/.ssh

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

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

No, Linux-asiakaskoneelta

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

Otetaan yhteyttä (Jotta tämä toimisi, tarvitset paikallisen TOR-daemonin, joka kuuntelee 9050:tä)

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

Selvä!

Tarvitsemme myös solmun työskennelläksemme pika- ja mikromaksujen kanssa SalamaverkkoItse asiassa tämä on tärkein työvälineemme Bitcoinin kanssa. U*c-salamajota aiomme käyttää demonina Sparko-laajennus, joka on täysimittainen HTTP (REST) ​​-liittymä ja jonka avulla voit työskennellä sekä ketjun ulkopuolisten että ketjun sisäisten tapahtumien kanssa. c-lightning tarvitaan toimintaan bitcoind mutta kyllä.

*Lightning Network -protokollalla on erilaisia ​​toteutuksia eri kielillä. Testaamistamme c-lightning (kirjoitettu C-kielellä) vaikutti vakaimmalta ja resurssitehokkaammalta.

# 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

Kun kaikki tarvittava on käännetty ja asennettu, luodaan RPC-käyttäjä 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

Kaoottinen vaihtamiseni solujen välillä ei ole niin kaoottista, jos huomaat hyödyn tmux, jonka avulla voit luoda useita päätealiistuntoja yhden istunnon aikana. Analoginen: screen

Bitcoin häkissä?

Joten emme halua paljastaa solmumme todellista IP-osoitetta, ja haluamme suorittaa kaikki rahoitustapahtumat TOP:n kautta. Siksi toista sipulia ei tarvita.

# 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

Luodaan nyt konfiguraatio c-lightningille

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 ~

sinun on myös luotava määritystiedosto bitcoin-cli-apuohjelmalle, joka kommunikoi bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

tarkistaa

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

[
  "test"
]

tuoda markkinoille lightningd

lightning@lightning:~ % lightningd --daemon

Itse lightningd voit hallita apuohjelmaa lightning-cli, esimerkiksi:

lightning-cli newaddr saat osoitteen uutta saapuvaa maksua varten

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all lähetä kaikki lompakon rahat osoitteeseen (kaikki ketjun osoitteet)

Myös komennot ketjun ulkopuolisiin toimintoihin lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay ja niin edelleen.

No, sovelluksen kanssa kommunikointiin meillä on REST Api

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

Yhteenvetona

# 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 häkissä?

Meillä on joukko säiliöitä, joista jokaisella on oma pääsytaso sekä paikallisverkosta että siihen.

# 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

Kuten näet, bitcoind vie kaikki 190 Gt tilaa. Entä jos tarvitsemme toisen solmun testejä varten? Tässä ZFS on hyödyllinen. Avulla cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com voit luoda tilannekuvan ja liittää uuden solun tähän tilannekuvaan. Uuteen soluun tulee oma tila, mutta tiedostojärjestelmässä huomioidaan vain ero nykyisen tilan ja alkuperäisen välillä (säästämme vähintään 190 Gt)

Jokainen solu on oma erillinen ZFS-tietosarjansa, ja tämä on erittäin kätevää. Myös ZFS sallii tehdä monia muita hienoja asioita, kuten lähettää tilannekuvia SSH:n kautta. Emme kuvaile sitä, sitä on jo paljon.

On myös syytä huomata isännän etävalvonnan tarve näihin tarkoituksiin Zabbix.

B - turvallisuus

Mitä tulee turvallisuuteen, lähdetään perusperiaatteista infrastruktuurin kontekstissa:

Luottamuksellisuus - UNIX-tyyppisten järjestelmien vakiotyökalut varmistavat tämän periaatteen toteutumisen. Erotamme loogisesti pääsyn jokaiseen loogisesti erilliseen järjestelmän elementtiin - soluun. Pääsy tarjotaan tavallisella käyttäjätodennuksen avulla käyttäjien henkilökohtaisilla avaimilla. Kaikki viestintä solujen välillä ja niiden välillä tapahtuu salatussa muodossa. Levyn salauksen ansiosta meidän ei tarvitse huolehtia tietojen turvallisuudesta, kun vaihdat levyä tai siirrymme toiselle palvelimelle. Ainoa kriittinen pääsy on pääsy isäntäjärjestelmään, koska tällainen pääsy tarjoaa yleensä pääsyn säiliöiden sisällä oleviin tietoihin.

eheys ”Tämän periaatteen toteutus tapahtuu useilla eri tasoilla. Ensinnäkin on tärkeää huomata, että palvelinlaitteiston, ECC-muistin, tapauksessa ZFS huolehtii jo "pakkauksesta" tiedon eheydestä informaatiobittien tasolla. Pikakuvien avulla voit tehdä varmuuskopioita milloin tahansa lennossa. Kätevät solujen vienti-/tuontityökalut tekevät solujen replikaatiosta yksinkertaista.

saatavuus – Tämä on jo vapaaehtoista. Riippuu maineesi asteesta ja siitä, että sinulla on vihaajia. Esimerkissämme varmistimme, että lompakko oli käytettävissä vain TOP-verkosta. Tarvittaessa voit estää kaiken palomuurin ja sallia pääsyn palvelimeen yksinomaan tunneleiden kautta (TOR tai VPN on toinen asia). Siten palvelin on mahdollisimman erillään ulkomaailmasta, ja vain me itse voimme vaikuttaa sen saatavuuteen.

Kieltäytymisen mahdottomuus - Ja tämä riippuu jatkotoiminnasta ja oikeiden käyttöoikeuksia, pääsyä jne. koskevien käytäntöjen noudattamisesta. Mutta oikealla lähestymistavalla kaikki käyttäjän toimet auditoidaan ja salausratkaisujen ansiosta voidaan yksiselitteisesti tunnistaa, kuka tietyt toiminnot suoritti ja milloin.

Kuvattu konfiguraatio ei tietenkään ole ehdoton esimerkki siitä, miten sen pitäisi aina olla, se on pikemminkin esimerkki siitä, miten se voi olla, samalla kun se säilyttää erittäin joustavat skaalaus- ja mukautusmahdollisuudet.

Entä täydellinen virtualisointi?

Tietoja täydellisestä virtualisoinnista cbsd:llä voit lue täältä. Lisään sen vain työn takia bhyve Sinun on otettava käyttöön joitakin ytimen asetuksia.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Joten jos sinun täytyy yhtäkkiä käynnistää telakointiasema, asenna debian ja mene!

Bitcoin häkissä?

Siinä kaikki

Luulen, että tämä on kaikki, mitä halusin jakaa. Jos pidit artikkelista, voit lähettää minulle bitcoineja - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Jos haluat kokeilla soluja toiminnassa ja saada bitcoineja, voit mennä minun lemmikki-projekti.

Lähde: will.com