Bitkoins būrī?

Tā ir sanācis, ka esmu profesionālais datoru sistēmu un tīklu administrators (īsi: sisaadmin), un man ir bijusi iespēja strādāt vairāk nekā 10 gadus ar dažādām sistēmām, tostarp tām, kas prasa [pa|par]augstu drošību. Turklāt es kādu laiku atpakaļ atradu interesantu bitkoinu, un ne tikai izmantoju to, bet arī uzsāku vairākus mikropakalpojumus, lai mācītos strādāt ar bitkoinu tīklu (jo tas ir p2p) no izstrādātāja skatupunkta (es, protams, esmu tāds kā mācējs, bet nē). Bet es nerunāju par izstrādi, es runāju par drošu un efektīvu vidi lietotnēm. devFinanšu tehnoloģijas (

fintech) ir blakus informācijas drošībai (infosec), un pirmais bez otra var darboties, bet ne ilgi. Tāpēc es vēlos dalīties savā pieredzē un instrumentu komplektā, ko izmantoju, kas ietver, turklāt vienlaicīgi, un tas var tikt izmantots arī plašākā vai pavisam citā mērķī. Šajā rakstā es nenovērtēšu tikai bitkoinu, bet runāšu par infrastruktūras modeli finanšu (un ne tikai) pakalpojumu izstrādei un ekspluatācijai — vienkārši sakot, tiem pakalpojumiem, kur "B" ir nozīme. Tas attiecas gan uz bitkoinu biržu, gan uz tipisku mazo uzņēmumu pakalpojumu zoodārzu, kas nav saistīts ar bitkoinu. ) ir blakus informācijas drošībai (, gan ), un pirmais bez otra var darboties, bet ne ilgi. Tāpēc es vēlos dalīties savā pieredzē un instrumentu komplektā, ko izmantoju, kas ietverVēlos uzsvērt, ka esmu atbalstījis principus

«keep it stupid simple» «less is more» un , tāpēc gan raksts, gan tajā aprakstītais būs ar īpašībām, kas balstās uz šiem principiem.Iedomāts scenārijs:

Iedomāts scenārijs: Apskatīsim visu, izmantojot Bitcoin apmaiņas piemēru. Mēs nolēmām uzsākt rubļu, dolāru un eiro maiņu uz Bitcoin un atpakaļ, un mums jau ir funkcionāls risinājums. Tomēr attiecībā uz citām digitālajām valūtām, piemēram, Qiwi un WebMoney, ir atrisināti visi juridiskie jautājumi, un mums ir gatava lietotne, kas kalpo kā maksājumu vārteja rubļiem, dolāriem un eiro, kā arī citiem maksājumu sistēmām. Tā ir saistīta ar mūsu bankas kontiem un ir pieejams API mūsu gala lietotnēm. Mums ir arī tīmekļa lietotne, kas kalpo kā apmaiņas platforma lietotājiem, līdzīgi kā tipiska Qiwi vai WebMoney kabineta — izveidojiet kontu, pievienojiet karti un tā tālāk. Tā sazinās ar mūsu vārteju, pieņemsim, izmantojot REST API vietējā tīklā. Un mēs nolēmām pievienot Bitcoin un vienlaikus uzlabot infrastruktūru, jo sākumā viss tika steidzīgi uzstādīts uz virtuālajām mašīnām birojā zem galda… mājas lapa kļuva populāra, un mēs sākām uztraukties par darbspēju un veiktspēju.

Tātad, sāksim ar pamatlietu — servera izvēli. Tā kā bizness mūsu piemērā ir mazs un mēs uzticamies mūsu hostinga pakalpojumu sniedzējam (OVH), mēs izvēlēsim budžeta variantu , kurā nav iespējams uzstādīt sistēmu no oriģinālā .iso attēla, bet tas nekas, IT drošības nodaļa noteikti veiks analīzi uzstādītā attēla. Kad izaugsim, mēs pat īrēsim savus skapjus ar slēdzenēm un ierobežotu fizisko piekļuvi, vai varbūt pat uzbūvēsim savu datu centru. Jebkurā gadījumā, jāatceras, ka, īrējot aparatūru un instalējot gatavus attēlus, pastāv risks, ka jūsu sistēmā var būt "trojāns no hostinga", kas lielākoties nav domāts, lai jūs uzraudzītu, bet piedāvātu ērtākus serveru pārvaldības rīkus.

Servera uzstādīšana

Šeit viss ir vienkārši. Mēs izvēlamies aparatūru, kas atbilst mūsu vajadzībām. Pēc tam izvēlamies FreeBSD attēlu. Vai nu pieslēdzamies (ja izmantosim citu hostingu un savu aparatūru) pa IPMI vai ar monitoru un iekraujam FreeBSD .iso attēlu. Orkestrācijas uzstādīšanai es izmantoju Ansible un mfsbsd. Vienīgais ir tas, ka mūsu gadījumā ar Kimsufi mēs izvēlējāmies pielāgotu instalāciju , lai diviem diskiem spoguļa režīmā būtu "atvērtas" tikai startēšanas un /home partīcijas, pārējā diska vieta tiks šifrēta, bet par to vēlāk.

Bitkoins būrī?

Sistēmas uzstādīšana notiek standarta veidā, es neaizkavēšos pie tā, vienīgi atzīmēšu, ka pirms darbības uzsākšanas ir vērts pievērst uzmanību uz stingrināšana , ko piedāvā bsdinstaller uzstādīšanas beigās (ja jūs paši uzstādāt sistēmu):

Bitkoins būrī?

Ir labs materiāls par šo tēmu, īsi es to šeit atkārtošu.

Iespējams, ka iepriekšminētos parametrus var aktivizēt arī jau uzstādītā sistēmā. Tam nepieciešams rediģēt boot failu un aktivizēt kodola parametrus. *ee — šāds redaktors ir 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

Tāpat ir vērts pārliecināties, ka jums ir uzstādīta jaunākā sistēmas versija, un veikt visus atjauninājumus un jauninājumus. Mūsu gadījumā, piemēram, nepieciešams jauninājums uz jaunāko versiju, jo iepriekš instalētie attēli ir atpalikuši par pusgadu vai gadu. Un tur mēs mainām SSH portu uz citu nekā noklusējuma, pievienojam autentifikāciju ar atslēgām un atslēdzam piekļuvi ar paroli.

Pēc tam konfigurējam aide, sistēmas konfigurācijas failu stāvokļa monitoringu. Plašāku informāciju var izlasīt šeit.

pkg install aide

un rediģējam mūsu krontabu

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

Ieslēdzam sistēmas audita veikšana

sysrc auditd_enable=YES

# service auditd start

Kā šo lietu administrēt ir lieliski aprakstīts rozinājumā.

Tagad pārstartējam un sākam ar programmatūru uz servera. Katrs serveris kalpo kā hipervizors konteineriem vai pilnām virtuālajām mašīnām. Tādēļ ir svarīgi, lai procesors atbalstītu VT-x un EPT, ja plānojam izmantot pilnu virtualizāciju.

Konteineru un virtuālo mašīnu pārvaldīšanai es izmantoju cbsd no olevole, novēlu viņam daudz veselības un labumu par šo brīnišķīgo utilītu!

Konteineri? Atkal docker vai kā?

Bet nē. FreeBSD Jails — tas ir lielisks rīks konteinerizācijai, bet iepriekš minētais cbsd ir šo konteineru orķestrēšanai, kura nosaukums — šūnas.

Kleita ir ļoti efektīvs risinājums infrastruktūras veidošanai dažādiem mērķiem, kur galu galā nepieciešama pilnīga atsevišķu pakalpojumu vai procesu izolācija. Patiesībā tas ir hostinga sistēmas klons, bet tam nav nepieciešama pilnīga „dzelžu” virtualizācija. Tādēļ resursi netiek iztērēti „viesu OS”, bet tikai veicamajam darbam. Kad kleitas tiek izmantotas iekšējām vajadzībām, tās ir ļoti ērts risinājums resursu optimālai izmantošanai – daudzas kleitas uz viena dzelzs servera var katra atsevišķi izmantot visu servera resursu vajadzības gadījumā. Ņemot vērā, ka dažādiem apakšpakalpojumiem parasti ir nepieciešami papildu resursi dažādos laikos, no viena servera var iegūt maksimālu veiktspēju, ja pareizi plāno un sadala kleitas starp serveriem. Ja nepieciešams, kleitām var uzlikt ierobežojumus attiecībā uz izmantotajiem resursiem.

Bitkoins būrī?

Bet kas notiek ar pilnu virtualizāciju?

Cik man zināms, cbsd atbalsta bhyve un XEN hiperdivizorus. Otru es nekad neesmu lietojis, bet pirmais ir salīdzinoši jauns hiperdivizors no FreeBSD. Mēs apskatīsim piemēru izmantošanai bhyve piemērā turpmāk.

Hosta vidēšanas uzstādīšana un konfigurēšana

Mēs izmantojam FS ZFS. Tas ir ļoti jaudīgs rīks uz servera telpas pārvaldībai. Pateicoties ZFS, var tieši no diskiem veidot visdažādākās konfigurācijas masīvus, dinamiski „karstajā” paplašināt telpu, mainīt mirušos diskus, pārvaldīt snapshots un daudz, daudz citu, ko var aprakstīt veselas sērijas rakstiem. Atgriezīsimies pie mūsu servera un tā diskiem. Uzstādīšanas sākumā mēs disku brīvajā vietā atstājām vietu šifrētajiem nodalījumiem. Kāpēc tā? Tas ir lai sistēma automātiski uzsāktos un klausītos pa SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

pievienojam diska nodalījumu atlikušajai vietai

geli init /dev/ada0p4

ievadam mūsu šifrēšanas paroli

geli attach /dev/ada0p4

atkal ievadam paroli un mums parādās ierīce /dev/ada0p4.eli — tā ir mūsu šifrētā telpa. Pēc tam atkārtojam to pašu priekš /dev/ada1 un pārējiem diskiem masīvā. Un izveidojam jaunu ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — nu, lūk, mēs esam gatavi minimālajam kaujas komplektam. Disku spoguļu masīvs gadījumam, ja viens no trim iziet no ierindas.

Izveidojam datu kopu jaunajā «pulē»

zfs create vms/jails

pkg install cbsd — izpildījām komandu un uzstādot vadības sistēmu mūsu kamerām.

Pēc tam, kad cbsd tā ir uzstādīta, to nepieciešams inicializēt:

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

un atbildam uz daudz jautājumiem, lielākoties ar noklusējuma atbildēm.

*Ja izmantojat šifrēšanu, ir svarīgi, lai demons cbsdd automātiski nesāktos, kamēr jūs manuāli vai automātiski nenoskaidrojat diskus (mūsu piemērā to dara zabbix)

**Tāpat es neizmantoju NAT no cbsd, bet iestata to pats 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

Politiku konfigurācija ugunsmūrī ir arī atsevišķa tēma, tāpēc es neiedziļināšos BLOCK ALL politikas un baltā saraksta konfigurācijā, to var izdarīt, izlasot oficiālo dokumentāciju vai jebkuru no milzīgā skaita rakstu, kas pieejami Google.

Nu, mums ir uzstādīta cbsd, ir pienācis laiks izveidot mūsu pirmo darbu zirgu – bitcoina demonā kamerā!

cbsd jconstruct-tui

Bitkoins būrī?

Šeit mēs redzam kameras izveides dialogu. Pēc tam, kad esam iestatījuši visus vērtības, izveidojam!

Izveidojot pirmo kameru, jāizvēlas, ko izmantot kā bāzi kamerām. Es izvēlos distribūciju no FreeBSD krātuves ar komandu repo. Šī izvēle tiek veikta tikai izveidojot pirmo kameru konkrētai versijai (var izmitināt kameras jebkurām versijām, kas ir jaunākas par hosta versiju).

Pēc tam, kad viss ir uzstādīts — palaidiet kameru!

# cbsd jstart bitcoind

Bet mums ir nepieciešams instatēt programmatūru kamerā.

# jls

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

jexec bitcoind lai iekļūtu kameras konsolē

un iekšpusē kameras uzstājam programmatūru ar tās atkarībām (mūsu hosta sistēma paliek tīra)

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

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

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

Bitcoīns kamerā ir, bet mums nepieciešama anonimitāte, jo vēlamies pieslēgties dažām kamerām caur TOR tīklu. Un vispār, mūsu plānos ir lielāko daļu kameru ar aizdomīgu programmatūru darbināt tikai caur proxy. Pateicoties pf Var iespējams atslēgt NAT noteiktam IP adresu diapazonam lokālajā tīklā un atļaut NAT tikai mūsu TOR mezglam. Tādējādi, pat ja ļaunprogrammatūra nonāk šūnā, visdrīzāk tā nesazināsies ar ārējo pasauli, un, ja arī sazināsies, tad neatklās mūsu servera IP adresi. Tāpēc mēs izveidosim vēl vienu šūnu, lai "pāradresētu" pakalpojumus kā "onion" pakalpojumu un kā proxy piekļuvei internetam atsevišķām šūnām.

# 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

Iestatām klausīšanu uz lokālās adreses (pieejama visām šūnām)

SOCKSPort 192.168.0.2:9050

Ko mums vēl trūkst pilnīgai laimei? Jā, mums nepieciešams pakalpojums mūsu tīmeklim, varbūt pat vairāki. Palaižam nginx, kas pildīs reverse-proxy funkciju un rūpēsies par Let’s Encrypt sertifikātu pagarināšanu.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Un lūk, 150 MB atkarību mēs esam ievietojuši šūnā. Un hosts joprojām ir tīrs.

Atgriezīsimies pie nginx konfigurācijas vēlāk, mums ir nepieciešams uzstādīt vēl divas šūnas mūsu maksājumu vārtiem, kas balstās uz nodejs un rust, un tīmekļa lietotni, kas kādā veidā darbojas uz apache un php, kā arī pēdējai nepieciešama MySQL datubāze.

# 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

… un vēl 380 MB pakotņu izolēti.

Tālāk mēs ar git uzlejam mūsu lietotni un to palaižam.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB pakotņu. šūnā.

Te mēs sniedzam izstrādātājiem piekļuvi pa SSH tieši uz šūnu, viņi tur paši visu izdarīs:

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

Port 2267 — mainām SSH šūnas portu uz jebkuru nejaušu

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

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

Nu lūk, pakalpojums ir palaists, atliek pievienot noteikumu pf ugunsmūrim

Paskatīsimies, kādi ir mūsu IP adreses šūnām un kā izskatās mūsu "lokālais" tīkls

# 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

Un pievienosim noteikumu

# ee /etc/pf.conf

## SSH for web-Devs
IP_JAIL="192.168.0.5"
PORT_JAIL="{ 2267 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

nu un, kad jau esam šeit, pievienosim arī noteikumu par reverse-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

Nu bet tagad nedaudz par bitcoiniem

Ko mēs esam ieguvuši — mums ir tīmekļa lietotne, kas ir pieejama no ārpuses, un tā lokāli sazinās ar mūsu maksājumu vārtiem. Tagad mums ir jāizveido darba vide, lai mijiedarbotos ar pašas bitcoin tīklu — mezglu bitcoind tas ir tikai demons, kas atbalsta lokālo akta blockchain kopiju. Šim demonam ir RPC un makrēšanas funkcionalitāte, tomēr lietojumprogrammu attīstībai ir ērti «apvalki». Sākumā mēs nolēmām uzstādīt electrum — tas ir CLI maks. Šis maks tiks izmantots kā «aukstais glabāšanas» risinājums mūsu bitkoiniem — kopumā tie bitkoini, kurus būs nepieciešams glabāt «ārpus» lietotājiem pieejamās sistēmas un pat tālāk no visiem. Tam ir arī GUI, tāpēc tādu pašu maks mēs plānojam izmantot uz
saviem klēpjdatoriem. Pagaidām izmantosim electrum ar publiskiem serveriem, bet vēlāk citā šūnā uzstādīsim ElectrumX, lai pavisam nepaļautos uz citiem.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

vēl 700 MB programmatūras mums ir šūnā

electrum: / @[8:53] # adduser

Lietotājvārds: maks
Pilns vārds: 
Uid (atstājiet tukšu, lai izmantotu noklusējumu): 
Pieteikšanās grupa [maks]: 
Pieteikšanās grupa ir maks. Ielūdziet maku citās grupās? []: 
Pieteikšanās klase [noklusējuma]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Mājas direktorija [ / home / maks]: 
Mājas direktorijas atļaujas (atstājiet tukšu, lai izmantotu noklusējumu): 
Vai izmantot autentifikāciju, pamatojoties uz paroli? [jā]: nē
Aizslēgt kontu pēc izveidošanas? [nē]: 
Lietotājvārds   : maks
Parole      : 
Pilnais vārds  : 
Uid        : 1001
Klase      : 
Grupas     : maks 
Mājas       : / home / maks
Mājas režīms  : 
Shell      : / bin / tcsh
Aizslēgts     : nē
OK? (jā / nē): jā
adduser: INFO: Veiksmīgi pievienots (maks) lietotāju datubāzei.
Pievienot citu lietotāju? (jā / nē): nē
Uz redzēšanos!
electrum: / @[8:53] # su maks

electrum: / @[8:53] # su maks

maks@electrum: / % electrum-3.6 create

{
    "msg": "Lūdzu, turiet savu sēklu drošā vietā; ja to pazaudēsit, netiksiet spējīgs atjaunot savu maku.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}

Tagad mums ir izveidots maks.

maks@electrum: / % electrum-3.6 listaddresses

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

maks@electrum: / % electrum-3.6 help

Mūsu on-chain makam turpmāk varēs piekļūt tikai ierobežots personu loks. Lai nenopenītu piekļuvi ārpusei šai šūnai, savienojumi pa SSH notiks caur TOR (decentralizēta VPN versija). Palaižam SSH šūnā, bet neskatāmies uz mūsu pf.conf uz viesdatori.

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

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

Tagad atslēgsim šūnā ar maku iznākšanu internetā. Piešķirsim tai IP adresi no citas apakšnetes telpas, kas netiek NAT-ēta. Sākumā nomainīsim /etc/pf.conf uz viesdatora

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" nomainīsim uz JAIL_IP_POOL="192.168.0.0/25", tādējādi visi adresi 192.168.0.126-255 nebūs tiešais interneta pieejamība. Ēdamīgs programmatūras „air-gap” tīkls. Un NAT noteikums paliek nemainīgs

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

Pārslēdzam noteikumus

# pfctl -f /etc/pf.conf

Tagad pievēršamies savai šūnai

# cbsd jconfig jname=electrum

Bitkoins būrī?

Bitkoins būrī?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Noņemam veco IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Iestatām jauno IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hmm, bet tagad mūsu sistēma pārstās darboties. Tomēr mēs varam norādīt sistēmas proxy. Bet ir viens „bet”, uz TOR tas ir SOCKS5 proxy, bet ērtībai mums arī nepieciešams 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, tagad mūsu sistēmā ir divi proxy serveri, un abiem izvade ir caur TOR: socks5://192.168.0.2:9050 un http://192.168.0.6:8123

Tagad varam iestatīt mūsu maka vidi

# jexec electrum

electrum: /@[9:45] # su wallet

wallet@electrum: / % ee ~/ .cshrc

#in the end of file proxy config
setenv http_proxy http://192.168.0.6:8123
setenv https_proxy http://192.168.0.6:8123

Nu, tagad shell darbosies caur proxy. Ja vēlamies instalēt pakotnes, tad ir vērts pievienot /usr/local/etc/pkg.conf no rūta šūnas

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

Nu, tagad ir laiks pievienot TOR slēpto pakalpojumu kā mūsu SSH pakalpojuma adresi šūnā maka.

# 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

Lūk, mūsu adrese savienojumam. Pārbaudīsim no vietējā datora. Bet vispirms jāpieņem mūsu SSH atslēga:

wallet@electrum: / % mkdir ~/ .ssh

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

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

Nu un no klienta Linux mašīnas

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

Pievienojamies (Lai tas darbotos, nepieciešams vietējais TOR ports, kas klausās uz 9050)

user@local ~$ ssh remotebtc

Viesu autentiskums 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<nav hostip proxy komandas>)' nevar tikt noteikts.
ECDSA atslēgas pirksta nospiedums ir SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Vai tiešām vēlaties turpināt savienojumu (jā/nē/[pirksta nospiedums])? jā
Brīdinājums: uz visiem laikiem pievienots 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) pazīstamo resursu sarakstam.
FreeBSD 12.1-RELEASE-p1 GENERIC 
Lai saglabātu diska vietu savā mājas direktorijā, kompresējiet failus, ko reti
izmanto ar "gzip faila nosaukums".
        -- Dru <genesis@istar.ca>
wallet@electrum:~ % logout

Veiksmīgi!

Lai strādātu ar tūlītējiem un mikro maksājumiem, mums arī nepieciešams mezgls Lightning Network, faktiski tas būs mūsu galvenais darba rīks ar bitkoinu. Pie *c-lightning, kuru mēs plānojam izmantot kā demonu, ir Sparko spraudnis, kas ir pilnvērtīgs HTTP (REST) saskarne un ļauj strādāt gan ar off-chain, gan ar on-chain darījumiem. c-lightning tā darbībai nepieciešama bitcoind noda.

*ir dažādas realizācijas dažādās programmēšanas valodās Lightning Network protokolam. No tām, ko mēs testējām, c-lightning (uzrakstīts C valodā) izrādījās visstabilākā un resursu efektīvākā

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/@[10:23] # adduser

Lietotājvārds: 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

Kamēr kompilē un instalē visu nepieciešamo, izveidosim RPC lietotāju priekš lightningd par bitcoind

# jexec bitcoind

bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#atļaut tikai c-lightning
rpcallowip=192.168.0.7/32

bitcoind:/@[10:39] # service bitcoind restart

Mana haotiskā pārvietošanās starp šūnām izrādās nav tik haotiska, ja atzīmējam utilītu tmux, kas ļauj vienas sesijas ietvaros izveidot daudzas apakšsesijas termināļiem. Analogs: screen

Bitkoins būrī?

Tātad, mēs nevēlamies atklāt mūsu noda reālo IP, un vēlamies veikt visas finanšu operācijas caur TOR. Tāpēc mums ir nepieciešams vēl viens .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

Tagad izveidosim konfigurāciju c-lightning

lightning:/home/lightning/lightning@[10:31] # su lightning

lightning@lightning:~ % mkdir .lightning

lightning@lightning:~ % ee .lightning/config

alias=Mana-LN-Noda
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 spraudnis
# 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
# iepriekš minētajiem inicializācijas žurnāliem (sajauktiem ar lightningd žurnāliem) vajadzētu drukāt kaut ko līdzīgu

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 ~

Jā izveido arī konfigurācijas fails bitcoin-cli, rīkam, kas sazinās ar bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

pārbaudām

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

[
  "test"
]

palaižam lightningd

lightning@lightning:~ % lightningd --daemon

Pašreiz lightningd var pārvaldīt rīku lightning-cli, piemēram:

lightning-cli newaddr iegūt adresi jaunam ienākošam maksājumam

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all nosūtīt uz adresi visus maksāšanas līdzekļus (visas on-chain adreses)

Tāpat ir komandas off-chain operācijām lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay utt.

Nu, saziņai ar lietotni mums ir REST Api

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

Apkoposim

# 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

Bitkoins būrī?

Mums ir komplekts konteineru, katrs ar savu piekļuves līmeni gan no vietējā, gan no ārējā tīkla.

# 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

Kā redzams, bitcoind aizņem 190 GB vietas. Bet kas notiks, ja mums būs nepieciešama vēl viena noda testēšanai? Šeit ZFS ir ļoti noderīgs. Ar tā palīdzību cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com var izveidot snapshots un piesaistīt jaunu šūnu šim snapshotam. Jaunajai šūnai būs pilnīgi sava vieta, bet tajā pašā laikā failu sistēmā tiks ņemta vērā tikai atšķirība starp pašreizējo stāvokli un oriģinālu (ietaupīsim vismaz 190 GB)

Katram šūnam ir sava atsevišķa ZFS datu kopa, un tas ir ārkārtīgi ērti. ZFS arī ļauj veikt dažādas citas foršas lietas, piemēram, nosūtīt snapshots pa SSH. Par to nerunāsim, tāpat jau ir daudz.

Vērts arī pieminēt nepieciešamību pēc attālinātas hosta uzraudzības, mums šiem mērķiem Zabbix.

B — drošība

Runājot par drošību, sāksim ar galvenajiem principiem infrastruktūras kontekstā:

Konfidencialitāte — Standarta rīki UNIX līdzīgām sistēmām nodrošina šī principa izpildi. Mēs loģiski sadalām piekļuvi katram loģiski atsevišķam sistēmas elementam — šūnai. Piekļuve notiek, izmantojot standarta lietotāju autentifikāciju ar individuālajiem lietotāju atslēgām. Visa komunikācija starp un līdz galējām šūnām notiek šifrētā veidā. Pateicoties disku šifrēšanai, mēs varam neuztraukties par datu drošību, kad mainām disku vai migrējam uz citu serveri. Vienīgā kritiskā piekļuves vieta ir piekļuve hosta sistēmai, jo šāda piekļuve nodrošina piekļuvi datiem konteineru iekšienē.

Integritāte — Šī principa izpilde notiek vairākos dažādos līmeņos. Pirmkārt, ir svarīgi atzīmēt, ka serveru iekārtām, ECC atmiņai, ZFS jau „no kastes” rūpējas par datu integritāti informācijas bitu līmenī. Momentāni snapshots ļauj veikt dublēšanu jebkurā brīdī reālajā laikā. Ērti eksportēšanas-importēšanas rīki šūnu replikācijai padara to vieglu.

Pieejamība — Tas jau ir opcionalitāte. Atkarībā no jūsu atpazīstamības pakāpes un naidnieku esamības. Mūsu piemērā mēs nodrošinājām maka pieejamību tikai no TOR tīkla. Ja nepieciešams, var bloķēt visu ugunsmūrī un atļaut piekļuvi serverim tikai caur tuneļiem (TOR vai VPN ir cits jautājums). Tādējādi servers tiks atdalīts no ārpasaules tik ļoti, cik tas ir iespējams, un par tā pieejamību varēsim ietekmēt tikai mēs paši.

Neiznīcināmība — Tas ir atkarīgs no turpmākās ekspluatācijas un pareizo lietotāja tiesību, piekļuves utt. politiku ievērošanas. Bet pie pareiza pieejas mūsu lietotāju darbības tiek auditētas, un, pateicoties kriptogrāfiskiem risinājumiem, ir iespējams precīzi identificēt, kurš un kad veica noteiktas darbības.

Protams, aprakstītā konfigurācija nav absolūts piemērs, kā tam vajadzētu vienmēr būt; tas vairāk ir viens no piemēriem, kā tam var būt, saglabājot ļoti elastīgas paplašināšanas un pielāgošanas iespējas.

Kā tad ir ar pilno virtualizāciju?

Par pilno virtualizāciju ar cbsd līdzekļiem var runāt izlasīt šeit. Es tikai piebildīšu, ka darbam bhyve ir nepieciešams ieslēgt dažus kodola parametrus.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Tātad, ja ir nepieciešamība uzsākt Docker, tad uzsāciet kādu Debian un uz priekšu!

Bitkoins būrī?

Lūk, arī viss

Domāju, tas ir viss, ko es vēlējos dalīties. Ja jums patika raksts, tad man varēji iemest bitkoinus — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Ja vēlaties izmēģināt būrus darbībā un ir nedaudz bitkoinu, tad varat apmeklēt manu pet-project.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster