Tak sa stalo, že som profesionálny administrátor počítačových systémov a sietí (skratka: sysadmin) a v priebehu viac ako 10 rokov profesionálnej činnosti som pracoval s najrôznejšími systémami, vrátane tých, ktoré vyžadujú [po|za]výšené opatrenia bezpečnosti. A navyše, nejaký čas dozadu som našiel pre seba zaujímavé , a nielenže som ho používal, ale aj som spustil niekoľko mikro-služieb, aby som sa naučil samostatne pracovať so sieťou bitcoinu (je to p2p, ako inak) z pohľadu vývojára (som samozrejme iba taký amatér, prechádzal som okolo). Ale nejde mi o vývoj, ale o bezpečné a efektívne prostredie pre aplikácie. devFinančné technológie (
fintech) idú ruka v ruke s informačnou bezpečnosťou (infosec) a prvé bez druhého môže fungovať, ale len na krátko. Preto sa chcem podeliť so svojimi skúsenosťami a súborom nástrojov, ktoré používam, ktoré zahŕňajú aj, pričom súčasne, a môžu byť použité aj v širšom alebo úplne inom účele. V tomto článku nebudem rozprávať len o bitcoine, ale skôr o modeli infraštruktúry pre vývoj a prevádzku finančných (a nielen) služieb — jedným slovom, tých služieb, kde „B“ má význam. To platí ako pre bitcoinovú burzu, tak pre typek typického korporátneho „zoo“ služieb malej firmy, ktorá nemá s bitcoinom nič spoločné. ) idú ruka v ruke s informačnou bezpečnosťou (, tak aj ) a prvé bez druhého môže fungovať, ale len na krátko. Preto sa chcem podeliť so svojimi skúsenosťami a súborom nástrojov, ktoré používam, ktoré zahŕňajú ajChcem zdôrazniť, že som zastáncom zásad
„keep it stupid simple“ „less is more“ a , preto článok, ako aj to, čo je v ňom popísané, bude mať vlastnosti, o ktorých hovorí tieto zásady.Predstavovaný scenár:
Imaginárny scenár Pozrime sa na príklad bitcoinového zmenárne. Rozhodli sme sa spustiť zmenu rubľov, dolárov, eur na bitcoiny a späť, a už máme fungujúce riešenie, ale pre iné digitálne meny ako Qiwi a Webmoney, t. j. máme vyriešené všetky právne otázky, existuje pripravená aplikácia, ktorá slúži ako platobná brána pre ruble, doláre a eurá a iné platobné systémy. Je prepojená s našimi bankovými účtami a má nejaké API pre naše koncové aplikácie. Takisto máme webovú aplikáciu, ktorá slúži ako zmenáreň pre používateľov, niečo ako typický účet Qiwi alebo Webmoney - založte si účet, pridajte kartu a podobne. Komunikuje s našou bránou, nech už cez REST API v lokálnej sieti. A tak sme sa rozhodli pripojiť bitcoiny a zároveň upgradovať infraštruktúru, pretože pôvodne sme to celé rýchlo nastavili na VirtualBoxoch v kancelárii pod stolom… web sa stal populárnym a začali sme mať obavy o dostupnosť a výkon.
Takže začneme s ním najdôležitejším - výberom servera. Keďže podnikanie v našom príklade je malé a dôverujeme poskytovateľovi hostingu (OVH), vyberieme kde nie je možné nainštalovať systém z originálneho obrazu .iso, ale nič sa nedeje, oddelenie IT bezpečnosti určite vykoná analýzu nainštalovaného obrazu. A keď sa rozrastieme, prenajmeme si uzamknutú skriňu a obmedzený fyzický prístup, alebo možno postavíme vlastné dátové centrum. V každom prípade si treba pamätať, že pri prenájme hardvéru a inštalácii hotových obrazov existuje šanca, že vo vašej sústave bude „trójsky kôň od poskytovateľa hostingu“, ktorý väčšinou nie je určený na sledovanie, ale na ponúkanie pohodlnejších nástrojov na správu servera.
Inštalácia servera
Tu je všetko jednoduché. Vyberáme hardvér, ktorý vyhovuje našim potrebám. Potom vyberieme obraz FreeBSD. Alebo sa pripojíme (v prípade iného poskytovateľa a vlastného hardvéru) cez IPMI alebo s monitorom a vložíme do bootovania .iso obrazu FreeBSD. Na orchestrálne inštalácie používam a . Jediná vec, v našom prípade s Kimsufi, sme vybrali vlastnú inštaláciu aby mali dva disky v zrkadle „otvorené“ len pre systémovú a /home partíciu, zvyšok disku bude zašifrované, ale o tom neskôr.

Inštalácia systému prebieha štandardným spôsobom, na to sa nezastavím, len si všimnite, že pred začatím prevádzky je dobré zamerať sa na hardenovanie možnosti, ktoré ponúka bsdinstaller na konci inštalácie (ak systém inštalujete sami):

Existuje na túto tému, v skratke ho tu zopakujem.
Aktivovať vyššie uvedené parametre je možné aj na už nainštalovanom systéme. Na to je potrebné upraviť súbor bootloaderu a povoliť parametre jadra. *ee — to je editor v 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=1Rovnako by ste sa mali uistiť, že máte nainštalovanú najnovšiu verziu systému a V našom prípade, napríklad, je potrebné upgrade na najnovšiu verziu, pretože predinštalované obrazy zaostávajú o pol roka až rok. A tam meníme SSH port na niečo iné ako predvolené, pridávame autentifikáciu pomocou kľúčov a zakazujeme heslom.
Potom nastavíme aide, monitorovanie stavu konfiguračných súborov systému. Podrobnejšie si môžete prečítať .
pkg install aide
a upravíme náš crontab
crontab -e
06 01 * * 0-6 /root/chkaide.sh
#! /bin/sh
#chkaide.sh
MYDATE=`date +%Y-%m-%d`
MYFILENAME="Aide-"$MYDATE.txt
/bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME
/usr/local/bin/aide --check > /tmp/myAide.txt
/bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME
/bin/echo "**************************************" >> /tmp/$MYFILENAME
/usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME
/bin/echo "****************DONE******************" >> /tmp/$MYFILENAMEAktivujte
sysrc auditd_enable=YES
# service auditd start
Ako to administratívne zvládať, je výborne popísané v .
Teraz sa reštartujeme a začíname so softvérom na serveri. Každý server predstavuje hypervízor pre kontajnery alebo plnohodnotné virtuálne stroje. Preto je dôležité, aby procesor podporoval VT-x a EPT, ak plánujeme používať plnú virtualizáciu.
Ako správcu kontajnerov a virtuálnych strojov používam od , prajem mu veľa zdravia a požehnania za túto skvelú utilitu!
Kontajnery? Zase docker, čo?
Ale nie. — sú vynikajúci nástroj na kontajnerizáciu, a ten spomínaný cbsd na orchestráciu týchto kontajnerov, ktorého meno je — klietky.
Klietka je mimoriadne efektívne riešenie na budovanie infraštruktúry na rôzne účely, kde je nakoniec potrebná úplná izolácia jednotlivých služieb alebo procesov. V podstate ide o klon hostiteľského systému, ktorý však nevyžaduje úplnú virtualizáciu „hardvéru“. A vďaka tomu sa prostriedky nezameriavajú na „hostiteľský OS“, ale iba na vykonávanú prácu. Keď sa klietky používajú na interné účely, je to veľmi praktické riešenie pre optimálne využitie zdrojov – množstvo klietok na jednom fyzickom serveri môže každá samostatne využívať celý výkon servera podľa potreby. Keďže rôzne podslužby zvyčajne potrebujú dodatočné zdroje v rôznych časoch, je možné z jedného servera vytlačiť maximálny výkon, ak sa klietky správne naplánujú a rozložia medzi servermi. Ak je to potrebné, klietkam sa takisto môžu nastaviť obmedzenia týkajúce sa využívaných zdrojov.

A čo sa deje s plnou virtualizáciou?
Podľa mojich informácií, cbsd podporuje prácu bhyve a hypervízory XEN. Druhý som nikdy nepoužíval, ale ten prvý je relatívne mladý . Pozríme sa na príklad využitia bhyve v nasledujúcom príklade.
Inštalácia a konfigurácia hostiteľského prostredia
Používame FS . Je to mimoriadne silný nástroj na správu priestoru na serveri. Vďaka ZFS môžeme priamo z diskov vytvárať pole rôznych konfigurácií, dynamicky „za chodu“ rozširovať priestor, meniť poškodené disky, spravovať snímky a mnoho, mnoho ďalšieho, čo by sa dalo opísať v celej sérii článkov. Vráťme sa k našemu serveru a jeho diskom. Na začiatku inštalácie sme na diskoch nechali voľný priestor pre šifrované oddiely. Prečo tak? Je to kvôli tomu, aby sa systém automaticky spúšťal a počúval cez SSH.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
pridáme oddiel disku na zostávajúce miesto
geli init /dev/ada0p4
zadáme naše šifrovacie heslo
geli attach /dev/ada0p4
opäť zadáme heslo a získame zariadenie /dev/ada0p4.eli — to je náš zašifrovaný priestor. Potom opakujeme to isté pre /dev/ada1 a ostatné disky v poli. A vytvoríme nový .
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — no, máme minimálny bojový arzenál pripravený. Zrkadlové pole diskov na prípad, že by jeden z trojice zlyhal.
Vytvárame dataset na novom „pool-e“
zfs create vms/jails
pkg install cbsd — spustili sme príkaz a inštalujeme správu pre naše klietky.
Akonáhle cbsd je nainštalovaný, treba ho inicializovať:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
a odpovedáme na množstvo otázok, väčšinou odpoveďami podľa predvolených nastavení.
*Ak používate šifrovanie, je dôležité, aby démon cbsdd nenastartoval automaticky, kým manuálne alebo automaticky (v našom príklade to robí zabbix) neodšifrujete disky.
**Takisto nepoužívam NAT od cbsd, ale nastavil som si ho sám v 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
Nastavenie politík firewallu je tiež samostatná téma, preto sa nebudem hlbšie zaoberať nastavením politiky BLOCK ALL a nastaveniami bielych zoznamov, to sa dá urobiť prečítaním alebo akéhokoľvek z množstva článkov dostupných na googli.
Takže… máme nainštalovaný cbsd, je čas vytvoriť našu prvú pracovnú „koničku“ — démon Bitcoinu v klietke!
cbsd jconstruct-tui

Tu vidíme dialóg pre vytváranie klietky. Po nastavení všetkých hodnôt vytvoríme!
Pri vytváraní prvej klietky je potrebné vybrať, čo použiť ako základ pre klietky. Ja si vyberám distribúciu z repozitára FreeBSD príkazom repo. Tento výber prebieha iba pri vytváraní prvej klietky konkrétnej verzie (môžete hostiť klietky akýchkoľvek verzií, ktoré sú staršie ako verzia hostiteľa).
Akonáhle je všetko nainštalované — spúšťame klietku!
# cbsd jstart bitcoind
Ale potrebujeme do klietky nainštalovať softvér.
# jls
JID IP Adresa Názov hostiteľa Cesta
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoindjexec bitcoind aby sme sa dostali do konzoly klietky
a už v klietke inštalujeme softvér s jeho závislosťami (náš hostiteľský systém zostáva čistý)
bitcoind:@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:@[15:30] # sysrc bitcoind_enable=YES
bitcoind:@[15:30] # service bitcoind start
Bitcoin je v klietke, ale potrebujeme anonymitu, pretože chceme sa pripájať k niektorým klietkam cez sieť TOR. A všeobecne plánujeme väčšinu klietok s podozrivým softvérom prevádzkovať iba cez proxy. Vďaka pf Môžeme vypnúť NAT pre určitý rozsah IP adries v lokálnej sieti a povoliť NAT iba pre náš TOR uzol. Takže aj keď sa do klietky dostane škodlivý program, pravdepodobne nebude mať prístup k vonkajšiemu svetu, a ak aj bude, neodhalí IP našich serverov. Preto vytvárame ďalšiu klietku pre "presmerovanie" služieb ako "onion" službu a ako proxy pre prístup na internet pre samostatné klietky.
# 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
Nastavíme na počúvanie na lokálnej adrese (prístupné pre všetky klietky)
SOCKSPort 192.168.0.2:9050
Čo nám ešte chýba k úplnému šťastiu? Áno, potrebujeme službu pre náš web, možno aj niekoľko. Spustíme nginx, ktorý bude slúžiť ako reverse-proxy a postará sa o predĺženie certifikátov Let's Encrypt.
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
A tak sme umiestnili 150 MB závislostí do klietky. A hostiteľ je stále čistý.
Návrat k nastaveniu nginx neskôr; potrebujeme vytvoriť ďalšie dve klietky pre náš platobný bránu na nodejs a rust a webovú aplikáciu, ktorá z nejakého dôvodu beží na Apache a PHP, pričom posledná vyžaduje databázu MySQL.
# 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
… a ešte 380 MB balíkov izolovane
ďalej nahráme našu aplikáciu prostredníctvom gitu a spustíme ju.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB balíkov. v klietke.
Tu poskytujeme prístup developerom cez SSH priamo do klietky, oni to tam urobia sami:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267 — meníme port SSH klietky na akýkoľvek ľubovoľný
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
No, služba je spustená, zostáva pridať pravidlo do pf firewall
Pozrime sa, aké IP adresy máme u klietok a ako vyzerá naša „lokálka“
# 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/webappa pridáme pravidlo
# 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 a keď už sme tu, pridáme aj pravidlo pre 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
A teraz trochu o bitcoinoch
Čo máme — máme webovú aplikáciu, ktorá je externá a lokálne komunikuje s našou platobnou bránou. Teraz potrebujeme pripraviť pracovné prostredie na interakciu so samotnou bitcoinovou sieťou — uzol bitcoind toto je len démon, ktorý podporuje lokálnu kópiu akútneho blockchainu. Tento démon má RPC a funkciu peňaženky, avšak na vývoj aplikácií sú k dispozícii pohodlnejšie „obaly“. Na začiatok sme sa rozhodli nainštalovať electrum — to je CLI peňaženka. u nás bude používaná ako „studené úložisko“ pre naše bitcoiny — vlastne tie bitcoiny, ktoré musia byť uložené „mimo“ systému prístupného používateľom a vo všeobecnosti ďaleko od všetkých. Má tiež GUI, takže takúto peňaženku plánujeme použiť aj na
laptopoch. Zatiaľ budeme používať electrum s verejnými servermi, a neskôr vo vytvoríme v ďalšej klietke , aby sme boli úplne nezávislí.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum: /@[8:45] # pkg install py36-electrum
ešte 700 MB softvéru máme v klietke
electrum: /@[8:53] # adduser
Meno používateľa: wallet
Celé meno:
Uid (nechajte prázdne pre predvolené hodnoty):
Login skupina [wallet]:
Login skupina je wallet. Pozvať wallet do iných skupín? []:
Login trieda [default]:
Shell (sh csh tcsh nologin) [sh]: tcsh
Domovský adresár [ /home/wallet]:
Práva domovského adresára (nechajte prázdne pre predvolené hodnoty):
Použiť autentifikáciu na základe hesla? [áno]: nie
Zablokovať účet po vytvorení? [nie]:
Meno používateľa: wallet
Heslo:
Celé meno:
Uid: 1001
Trieda:
Skupiny: wallet
Domov: /home/wallet
Režim domova:
Shell: /bin/tcsh
Zamknuté: nie
OK? (áno/nie): áno
adduser: INFO: Úspešne pridané (wallet) do databázy používateľov.
Pridať ďalšieho používateľa? (áno/nie): nie
Zbohom!
electrum: /@[8:53] # su walletelectrum: /@[8:53] # su wallet
wallet@electrum: / % electrum-3.6 create
{
"msg": "Prosím, uchovajte svoj seed na bezpečnom mieste; ak ho stratíte, nebudete môcť obnoviť svoju peňaženku.",
"path": "/usr/home/wallet/.electrum/wallets/default_wallet",
"seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}Teraz máme vytvorenú peňaženku.
wallet@electrum: / % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]wallet@electrum: / % electrum-3.6 help
K našej on-chain peňaženke sa odteraz bude môcť pripojiť iba obmedzený okruh osôb. Aby sme neotvárali prístup zvonka do tejto klietky, pripojenia cez SSH budú prebiehať cez TOR (decentralizovaná verzia VPN). Spúšťame SSH v klietke, ale nedeštrukujte náš pf.conf na hostiteľovi.
electrum: /@[9:00] # sysrc sshd_enable=YES
electrum: /@[9:00] # service sshd start
Teraz odpojmeme klietku s peňaženkou od internetu. Pridelíme jej IP adresu z inej podsiete, ktorá nie je NAT-ovaná. Najprv zmeníme /etc/pf.conf na hostiteľovi
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24" zmeníme na JAIL_IP_POOL="192.168.0.0/25", tak všetky adresy 192.168.0.126-255 nebudú mať priamy prístup na internet. Akoby softvérová „air-gap“ sieť. A NAT pravidlo ostáva také isté.
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Prehrávame pravidlá
# pfctl -f /etc/pf.conf
Teraz sa pustíme do našej bunky
# cbsd jconfig jname=electrum


jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Odstrániť starú IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Nastaviť novú IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200Hm, ale teraz prestane fungovať aj samotný systém. No môžeme špecifikovať systémový proxy. Ale je tu jedno ale, na TOR to je SOCKS5 proxy, a pre pohodlie by sme potrebovali aj 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
No a teraz máme v našom systéme dva proxy servery, oba sú pripojené cez TOR: socks5://192.168.0.2:9050 a
Teraz môžeme nastaviť prostredie našej peňaženky
# 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:8123Tak, teraz bude shell fungovať pod proxy. Ak chceme inštalovať balíky, mali by sme pridať do /usr/local/etc/pkg.conf z pod roota bunky
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}A teraz prišiel čas pridať TOR skrytú službu ako adresu našej SSH služby v bunke peňaženky.
# 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.onionTu je naša adresa na pripojenie. Poďme to skontrolovať z lokálneho počítača. Ale najprv musíme pridať náš SSH kľúč:
wallet@electrum:/ % mkdir ~/ .ssh
wallet@electrum:/ % ee ~/ .ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@localA s klientským linuxovým počítačom
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
Pripojíme sa (Pre správnu funkciu je potrebný lokálny TOR demon, ktorý počúva na 9050)
user@local ~$ ssh remotebtc
Autentickosť hostiteľa 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion ()' nemôže byť potvrdená.
ECDSA kľúčená odtlačok je SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Ste si istý, že chcete pokračovať v pripojení (yes/no/[fingerprint])? yes
Varovanie: Trvale pridané 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) do zoznamu známych hostiteľov.
FreeBSD 12.1-RELEASE-p1 GENERIC
Aby ste ušetrili miesto na disku vo vašom domácom adresári, komprimujte súbory, ktoré zriedka používate príkazom "gzip filename".
-- Dru
wallet@electrum:~ % logout
Úspech!
Na prácu s okamžitými a mikro-transakciami potrebujeme tiež nodu , vlastne to bude náš hlavný pracovný nástroj s Bitcoinom. U *, ktorý plánujeme použiť ako démona, má , ktorý je plnohodnotným HTTP (REST) rozhraním a umožňuje pracovať ako s off-chain transakciami, tak aj s on-chain transakciami. c-lightning na fungovanie potrebujeme bitcoind nódu.
*existujú rôzne implementácie rôznych programovacích jazykov protokolu Lightning Network. Z tých, ktoré sme testovali, sa c-lightning (napísaný v C) javil ako najstabilnejší a najefektívnejší z hľadiska zdrojov.
# cbsd jsconstruct-tui
# cbsd jstart cln
# jexec cln
lightning: /@[10:23] # adduser
Používateľské meno: 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
Kým sa všetko potrebné kompiluje a inštaluje, vytvoríme RPC používateľa pre lightningd v bitcoind
# jexec bitcoind
bitcoind: /@[10:36] # ee /usr/local/etc/bitcoin.conf
rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
# umožniť iba c-lightning
rpcallowip=192.168.0.7/32bitcoind: /@[10:39] # service bitcoind restart
Moje chaotické prechádzanie medzi bunkami sa ukazuje, že nie je také chaotické, ak si všimneme utilitu tmux, ktorá umožňuje v rámci jednej relácie vytvárať množstvo podrelácií terminálov. Analóg: screen

Takže, nechceme odhaľovať reálnu IP našej nód a chceme vykonávať všetky finančné operácie prostredníctvom TOR. Preto potrebujeme ešte jeden .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.onionteraz vytvoríme konfiguráciu pre c-lightning
lightning: /home/lightning/lightning@[10:31] # su lightning
lightning@lightning:~ % mkdir .lightning
lightning@lightning:~ % ee .lightning/config
alias=My-LN-Node
bind-addr=192.168.0.7:9735
rgb=ff0000
announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735
network=bitcoin
log-level=info
fee-base=0
fee-per-satoshi=1
proxy=192.168.0.2:9050
log-file=/home/lightning/.lightning/c-lightning.log
min-capacity-sat=200000
# sparko plugin
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko
sparko-host=192.168.0.7
sparko-port=9737
sparko-tls-path=sparko-tls
#sparko-login=mywalletusername:mywalletpassword
#sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
# pre vyššie uvedený príklad by sa mali inicializačné protokoly (zmiešané s protokolmi lightningd) vytlačiť niečo také akolightning@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 ~
je potrebné vytvoriť aj konfiguračný súbor pre bitcoin-cli, nástroj, ktorý komunikuje s bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=testkontrolujeme
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]spúšťame lightningd
lightning@lightning:~ % lightningd --daemon
Sám lightningd môžete spravovať nástroj lightning-cli, napríklad:
lightning-cli newaddr získať adresu pre novú prichádzajúcu platbu
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all odoslať na adresu všetky peniaze z peňaženky (všetkých on-chain adries)
Takisto príkazy pre off-chain operácie lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay atď.
No a pre komunikáciu s aplikáciou máme REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Zhrnieme to
# jls
JID IP Adresa Názov servera Cesta
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
Máme súbor kontajnerov, každý s vlastnou úrovňou prístupu do lokálnej siete aj z nej.
# zfs list
NÁZOV POUŽITÉ K DISPOZÍCII ODKAZ 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-dataAko vidno, bitcoind zaberá všetkých 190 GB priestoru. A čo ak potrebujeme ďalší uzol na testy? Tu prichádza k slovu ZFS. S jeho pomocou cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Môžete vytvoriť snapshot a priradiť novú bunku k tomuto snapshotu. Nová bunka bude mať úplne svoj vlastný priestor, ale v súborovom systéme sa bude zohľadňovať len rozdiel medzi aktuálnym stavom a originálom (ušetříme minimálne 190 GB)
Každá bunka je svojím vlastným oddeleným datasetom ZFS, čo je mimoriadne pohodlné. vykonávať rôzne ďalšie cool veci, ako napríklad posielanie snapshotov cez SSH. O tom sa nebudeme rozpisovať, aj tak už je toho dosť.
Rovnako treba spomenúť potrebu vzdialeného monitorovania hostiteľa, na tento účel .
B – bezpečnosť
Čo sa týka bezpečnosti, poďme vychádzať z kľúčových princípov v kontexte infraštruktúry:
Ochrana súkromia – Štandardné nástroje UNIX-podobných systémov zabezpečujú splnenie tohto princípu. Logicky delíme prístup k každému logicky oddelenému prvku systému – bunke. Prístup je realizovaný prostredníctvom štandardnej užívateľskej autentifikácie pomocou osobných kľúčov používateľov. Celá komunikácia medzi a do konečných buniek prebieha v šifrovanej forme. Vďaka šifrovaniu diskov sa môžeme bez obáv postarať o bezpečnosť dát počas výmeny disku alebo migrácie na iný server. Jediný kritický prístup je prístup k host-systému, pretože taký prístup zvyčajne zabezpečuje prístup k dátam vo vnútri kontajnerov.
Integrita – Splnenie tohto princípu prebieha na niekoľkých rôznych úrovniach. Po prvé, je dôležité poznamenať, že v prípade serverového hardvéru, ECC pamäť, ZFS už „z krabice“ dbá na integritu dát na úrovni bitov informácií. Okamžité snapshoty umožňujú vykonávať zálohovanie v akomkoľvek čase za behu. Praktické nástroje na export-import buniek zjednodušujú replikáciu buniek.
Dostupnosť – Tu už ide o voľbu. Závisí od úrovne vašej známosti a od skutočnosti, či máte odporcov. V našom prípade sme zabezpečili dostupnosť peňaženky výlučne z TOR siete. Ak je to potrebné, môže sa na firewalle zablokovať všetko a umožniť prístup na server výlučne cez tunely (TOR alebo VPN, to je iná otázka). Takto bude server odrezaný od vonkajšieho sveta, pokiaľ je to možné, a na jeho dostupnosť budeme môcť vplývať len my sami.
Nemožnosť odstúpenia — To závisí od ďalšieho používania a dodržiavania správnych politík používateľských práv, prístupu atď. Ale pri správnom prístupe sú všetky činnosti používateľov auditované a vďaka kryptografickým riešeniam je možné jednoznačne identifikovať, kto a kedy vykonal určité akcie.
Samozrejme, popísaná konfigurácia nie je absolútnym príkladom toho, ako by to malo byť vždy, je to skôr jeden z príkladov, ako to môže vyzerať pri zachovaní veľmi pružných možností škálovania a prispôsobenia.
A čo úplná virtualizácia?
O úplnej virtualizácii prostredníctvom cbsd mozem povedať . Len dodám, že pre prácu bhyve je potrebné zapnúť niektoré parametre jadra.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...# cat /boot/loader.conf
...
vmm_load="YES"
...Takže ak náhodou existuje potreba spustiť Docker, môžeme vziať nejaký Debian a dopredu!

A to je všetko
Asi to je všetko, čím som sa chcel podeliť. Ak sa vám článok páčil, môžete mi poslať nejaké bitcoiny — . Ak chcete vyskúšať bunky v akcii a máte trochu bitcoinov, môžete sa pozrieť na môj .
Zdroj: habr.com
