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 , 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 , 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 un . 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.

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):

Ir 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=1Tāpat ir vērts pārliecināties, ka jums ir uzstādīta jaunākā sistēmas versija, un . 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 .
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/$MYFILENAMEIeslēdzam
sysrc auditd_enable=YES
# service auditd start
Kā šo lietu administrēt ir lieliski aprakstīts .
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 no , novēlu viņam daudz veselības un labumu par šo brīnišķīgo utilītu!
Konteineri? Atkal docker vai kā?
Bet nē. — 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.

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

Š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/bitcoindjexec 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/webappUn 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. 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 , 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 makselectrum: / @[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


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.200Hmm, 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 = socks5polipo: /@[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
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:8123Nu, 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:22tor: /@[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.onionLū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@localNu 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 , faktiski tas būs mūsu galvenais darba rīks ar bitkoinu. Pie *, kuru mēs plānojam izmantot kā demonu, ir , 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/32bitcoind:/@[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

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:9735tor:/@[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.onionTagad 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īgulightning@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=testpā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
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-dataKā 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. 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 .
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 . 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!

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 — . Ja vēlaties izmēģināt būrus darbībā un ir nedaudz bitkoinu, tad varat apmeklēt manu .
Avots: habr.com
