Bitcoin egy ketrecben?

Történt ugyanis, hogy hivatásom szerint számítógépes rendszerek és hálózatok adminisztrátora (röviden: rendszergazda) vagyok, és valamivel több, mint 10 évig volt alkalmam elmondani prof. sokféle rendszer tevékenysége, beleértve azokat is, amelyek [szélsőséges] biztonsági intézkedéseket igényelnek. Az is előfordult, hogy valamikor érdekesnek találtam bitcoin, és nem csak használta, hanem több mikroszolgáltatást is elindított, hogy megtanuljon önállóan dolgozni a Bitcoin hálózattal (aka p2p végül is) fejlesztői szemszögből (én természetesen ezek közé tartozom dev, szóval, elhaladtam mellette). De nem a fejlesztésről beszélek, hanem az alkalmazások biztonságos és hatékony környezetéről.

Pénzügyi technológia (FINTECH) menjen az információbiztonság mellé (infosec) és az első működhet a második nélkül is, de nem sokáig. Ezért szeretném megosztani tapasztalataimat és az általam használt eszközkészletet, amely mindkettőt tartalmazza FINTECHÉs infosec, és egyben, és szélesebb körű vagy teljesen más célra is használható. Ebben a cikkben nem annyira a Bitcoinról fogok beszélni, hanem a pénzügyi (és nem csak) szolgáltatások fejlesztésének és működtetésének infrastrukturális modelljéről - egyszóval azokról a szolgáltatásokról, ahol a „B” számít. Ez vonatkozik mind a Bitcoin tőzsdére, mind a bitcoinnal semmilyen kapcsolatban nem álló kis cég legjellemzőbb vállalati állatkertjére.

Szeretném megjegyezni, hogy az elvek híve vagyok "legyen hülyeség egyszerű" и "a kevesebb több", ezért mind a cikk, mind a benne leírtak rendelkeznek azokkal a tulajdonságokkal, amelyekről ezek az elvek szólnak.

Képzelt forgatókönyv: Nézzünk meg mindent a bitcoin cserélő példáján. Úgy döntöttünk, hogy elindítjuk a rubel, dollár, euró cseréjét bitcoinra és vissza, és már van egy működő megoldásunk, de más digitális pénzekre, mint a qiwi és a webmoney, pl. Lezártunk minden jogi kérdést, van egy kész alkalmazásunk, amely fizetési átjáróként szolgál rubel, dollár és euró, valamint egyéb fizetési rendszerek számára. Bankszámláinkhoz kapcsolódik, és rendelkezik valamilyen API-val a végalkalmazásainkhoz. Van egy webes alkalmazásunk is, amely csereként működik a felhasználók számára, mint egy tipikus qiwi vagy webmoney fiók – hozzon létre egy fiókot, adjon hozzá kártyát stb. Kommunikál az átjáróalkalmazásunkkal, bár a helyi REST API-n keresztül. Ezért úgy döntöttünk, hogy összekapcsoljuk a bitcoinokat, és ezzel egyidejűleg frissítjük az infrastruktúrát, mert... Kezdetben mindent sietve raktak fel az irodában, az asztal alatti virtuális dobozokra... az oldalt elkezdték használni, és kezdtünk aggódni az üzemidő és a teljesítmény miatt.

Tehát kezdjük a fő dologgal - a szerver kiválasztásával. Mert a példánkban szereplő vállalkozás kicsi, és bízunk abban, hogy melyik szolgáltatót (OVH) választjuk költségvetési lehetőség amelyben az eredeti .iso image-ről nem lehet telepíteni a rendszert, de mindegy, az IT biztonsági osztály mindenképpen elemzi a telepített képet. És ha felnövünk, bérelünk saját szekrényt zár alatt, korlátozott fizikai hozzáféréssel, és talán megépítjük a saját DC-t. Mindenesetre nem árt észben tartani, hogy hardverbérlés és kész képek telepítése során fennáll annak az esélye, hogy a rendszerén lóg egy „trójai a hostertől”, aminek a legtöbb esetben nem az a célja, hogy kémkedjen. hanem kényelmesebb felügyeleti eszközöket kínálni szerver.

Szerver telepítés

Itt minden egyszerű. Az igényeinknek megfelelő hardvert választjuk ki. Ezután válassza ki a FreeBSD-képet. Nos, vagy IPMI-n keresztül vagy monitorral csatlakozunk (más hoster és saját hardver esetén), és betápláljuk az .iso FreeBSD képfájlt a letöltésbe. Zenekari felálláshoz használom Ansible и mfsbsd. Az egyetlen dolog, a mi esetünkben a kimsufival, mi választottuk egyéni telepítés ahhoz, hogy a tükörben lévő két lemezen csak a rendszerindító és a /home partíció legyen „nyitva”, a lemezterület többi része titkosítva lesz, de erről majd később.

Bitcoin egy ketrecben?

A rendszer telepítése szabványos módon történik, ezen nem térek ki, csak megjegyzem, hogy az üzembe helyezés előtt érdemes odafigyelni keményedés az általa kínált lehetőségeket bsdinstaller a telepítés végén (ha saját maga telepíti a rendszert):

Bitcoin egy ketrecben?

Van jó anyag ebben a témában röviden megismétlem itt.

A fent említett paraméterek engedélyezése már telepített rendszeren is lehetséges. Ehhez szerkeszteni kell a rendszerbetöltő fájlt, és engedélyezni kell a kernelparamétereket. *Az ee egy ilyen szerkesztő a BSD-ben

# 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

Győződjön meg arról is, hogy a rendszer legújabb verziója van telepítve, és hajtson végre minden frissítést és frissítést. Esetünkben például a legújabb verzióra kell frissíteni, mert... a telepítés előtti képek hat hónaptól egy évig elmaradnak. Nos, ott megváltoztatjuk az SSH-portot az alapértelmezetttől eltérőre, hozzáadjuk a kulcshitelesítést és letiltjuk a jelszó-hitelesítést.

Ezután konfiguráljuk aide, figyeli a rendszerkonfigurációs fájlok állapotát. Részletesebben olvashatsz itt.

pkg install aide

és szerkessze a crontabunkat

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

Mi is rendszer auditálás

sysrc auditd_enable=YES

# service auditd start

Ennek az ügynek a kezelését tökéletesen leírja vezetés.

Most újraindítjuk, és továbblépünk a szerveren lévő szoftverhez. Minden kiszolgáló egy hipervizor konténerekhez vagy teljes virtuális gépekhez. Ezért fontos, hogy a processzor támogassa a VT-x-et és az EPT-t, ha teljes virtualizációt tervezünk.

Az általam használt tárolók és virtuális gépek kezelésére cbsd -tól olevole, további egészséget és áldást kívánok neki ehhez a csodálatos hasznossághoz!

Konténerek? Megint Docker vagy mi?

De nem. FreeBSD Jails konténerezéshez kiváló eszköz, de az említett cbsd ezeknek a celláknak nevezett konténerek hangszerelésére.

A ketrec rendkívül hatékony megoldás a különféle célú infrastruktúra kiépítésére, ahol végső soron az egyes szolgáltatások vagy folyamatok teljes elkülönítésére van szükség. Lényegében a gazdarendszer klónja, de nem igényel teljes hardveres virtualizációt. Ennek köszönhetően az erőforrásokat nem a „vendég operációs rendszerre” költik, hanem csak az elvégzett munkára. Ha a cellákat belső igényekre használjuk, ez egy nagyon kényelmes megoldás az optimális erőforrás-felhasználáshoz – egy hardverkiszolgálón lévő cellák egyenként használhatják a teljes szervererőforrást, ha szükséges. Figyelembe véve, hogy általában a különböző alszolgáltatásokhoz további kiegészítőkre van szükség. erőforrások különböző időpontokban, maximális teljesítményt nyerhet ki egyetlen szerverről, ha megfelelően megtervezi és kiegyensúlyozza a cellákat a kiszolgálók között. Szükség esetén a celláknak korlátozásokat is lehet adni a felhasznált erőforrásra vonatkozóan.

Bitcoin egy ketrecben?

Mi a helyzet a teljes virtualizációval?

Amennyire én tudom, cbsd támogatja a munkát bhyve és XEN hipervizorok. A másodikat még nem használtam, de az első viszonylag új hypervisor a FreeBSD-től. Nézzünk egy példát a felhasználásra bhyve az alábbi példában.

A gazdagép környezet telepítése és konfigurálása

FS-t használunk ZFS. Ez egy rendkívül hatékony eszköz a szerverterület kezelésére. A ZFS-nek köszönhetően közvetlenül létrehozhat különféle konfigurációk tömbjeit lemezekről, dinamikusan "hot" bővítheti a helyet, megváltoztathatja a kimerült lemezeket, kezelheti a pillanatképeket és még sok minden mást, amit cikkek egész sorában lehet leírni. Térjünk vissza a szerverünkre és annak lemezeire. A telepítés elején szabad helyet hagytunk a lemezeken a titkosított partíciók számára. Miert van az? Ez azért van így, hogy a rendszer automatikusan felébredjen és SSH-n keresztül figyeljen.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

adjon hozzá egy lemezpartíciót a fennmaradó helyre

geli init /dev/ada0p4

írja be a titkosítási jelszavunkat

geli attach /dev/ada0p4

Újra megadjuk a jelszót, és van egy /dev/ada0p4.eli eszközünk - ez a titkosított területünk. Ezután megismételjük ugyanezt a /dev/ada1-nél és a tömb többi lemezénél. És létrehozunk egy újat ZFS medence.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Nos, készen áll a minimális harci készlet. Lemezek tükrözött tömbje arra az esetre, ha a három közül valamelyik meghibásodik.

Adatkészlet létrehozása egy új „készletben”

zfs create vms/jails

pkg install cbsd — létrehoztunk egy csapatot és felállítottuk sejtjeink menedzsmentjét.

Után cbsd telepítve kell inicializálni:

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

Nos, egy csomó kérdésre válaszolunk, többnyire alapértelmezett válaszokkal.

*Ha titkosítást használ, fontos, hogy a démon cbsdd nem indul el automatikusan, amíg nem dekódoltad manuálisan vagy automatikusan (példánkban ezt a zabbix végzi)

** Nem használok NAT-ot sem cbsd, és magam konfigurálom 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

A tűzfal házirendek beállítása szintén egy külön téma, ezért nem megyek bele mélyebben a MINDENT BLOCK házirendjének beállításába és az engedélyezési listák beállításába, ezt megteheti, ha elolvassa hivatalos dokumentáció vagy a Google-on elérhető hatalmas számú cikk bármelyike.

Nos... telepítettük a cbsd-t, ideje megalkotni első igáslónkat - a ketrecbe zárt Bitcoin démont!

cbsd jconstruct-tui

Bitcoin egy ketrecben?

Itt látjuk a cella létrehozási párbeszédpanelt. Miután minden értéket beállítottunk, alkossunk!

Az első cella létrehozásakor ki kell választania, hogy mi legyen a cellák alapja. A paranccsal kiválasztok egy disztribúciót a FreeBSD tárolóból repo. Ez a választás csak egy adott verzió első cellájának létrehozásakor történik (bármilyen verzió celláját tárolhatja, amely régebbi, mint a gazdagép verziója).

Miután mindent felszereltünk, elindítjuk a ketrecet!

# cbsd jstart bitcoind

De szoftvert kell telepítenünk a ketrecbe.

# jls

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

jexec bitcoind hogy bejusson a cellakonzolba

és már a cellán belül telepítjük a szoftvert a függőségeivel (gazdarendszerünk tiszta marad)

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

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

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

A ketrecben van Bitcoin, de szükségünk van az anonimitásra, mert szeretnénk néhány ketrechez csatlakozni a TOP hálózaton keresztül. Általában azt tervezzük, hogy a legtöbb gyanús szoftverrel rendelkező cellát csak proxyn keresztül futtatjuk. Köszönet pf A NAT-ot letilthatja egy bizonyos IP-címtartományban a helyi hálózaton, és csak a TOR-csomóponton engedélyezheti a NAT-ot. Így, ha a rosszindulatú program be is kerül a cellába, nagy valószínűséggel nem kommunikál a külvilággal, és ha mégis, akkor nem fedi fel szerverünk IP-jét. Ezért létrehozunk egy másik cellát a szolgáltatások „.hagyma” szolgáltatásként való „továbbításához”, valamint az egyes cellákhoz való internet-hozzáférés proxyjaként.

# 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

Helyi címen történő figyelés beállítása (minden cellához elérhető)

SOCKSPort 192.168.0.2:9050

Mi kell még a teljes boldogsághoz? Igen, szükségünk van egy szolgáltatásra a webünkhöz, talán többre is. Indítsuk el az nginx-et, amely fordított proxyként működik, és gondoskodik a Let's Encrypt tanúsítványok megújításáról

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Így 150 MB függőséget helyeztünk el egy ketrecben. És a házigazda még mindig tiszta.

Később térjünk vissza az nginx beállításához, még két cellát kell emelnünk a fizetési átjárónk számára a nodej-eken és a rust-on és egy webalkalmazást, ami valamiért Apache-ban és PHP-ben van, utóbbihoz pedig MySQL adatbázis is szükséges.

# 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

...és további 380 MB csomag elkülönítve

Ezután letöltjük az alkalmazásunkat a git-tel, és elindítjuk.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB-os csomagok. ketrecben.

itt a fejlesztőnek SSH-n keresztül adunk hozzáférést közvetlenül a cellához, ott mindent maguk csinálnak:

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

Port 2267 — módosítsa a cella SSH-portját tetszőlegesre

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

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

Nos, a szolgáltatás fut, csak hozzá kell adni a szabályt pf tűzfal

Nézzük meg, milyen IP-vel rendelkeznek a celláink, és hogyan néz ki általában a „helyi területünk”.

# 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

és adjunk hozzá egy szabályt

# 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

Nos, mivel itt tartunk, adjunk hozzá egy szabályt a fordított proxyhoz is:

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

Nos, most egy kicsit a bitcoinokról

Van egy webalkalmazásunk, amely kívülről elérhető, és helyileg beszél a fizetési átjárónkkal. Most fel kell készítenünk egy munkakörnyezetet magával a Bitcoin hálózattal - a csomóponttal - való interakcióhoz bitcoind ez csak egy démon, amely naprakészen tartja a blokklánc helyi másolatát. Ez a démon rendelkezik RPC és pénztárca funkcióval, de vannak kényelmesebb „csomagolók” az alkalmazásfejlesztéshez. Kezdetnek úgy döntöttünk, hogy feltesszük electrum egy CLI pénztárca. Ezt a pénztárcát „Hűtőtárhelyként” fogjuk használni bitcoinjaink számára – általában azokat a bitcoinokat, amelyeket a rendszeren „kívül” kell tárolni a felhasználók számára elérhető helyen, és általában mindenkitől távol. GUI-ja is van, így ugyanazt a pénztárcát fogjuk használni a miénkben
laptopok. Egyelőre nyilvános szerverekkel fogjuk használni az Electrumot, majd később egy másik cellába emeljük ElectrumXhogy egyáltalán ne függjön senkitől.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

további 700 MB szoftver a ketrecünkben

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

Most létrehoztunk egy pénztárcát.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

A miénknek on-lánc Ezentúl csak korlátozott számú ember csatlakozhat majd a pénztárcához. Annak érdekében, hogy kívülről ne nyissa meg a hozzáférést ehhez a cellához, az SSH-n keresztüli kapcsolatok a TOP-on (a VPN decentralizált változata) keresztül történnek. Elindítjuk az SSH-t a cellában, de ne érintsük meg a pf.conf fájlt a gazdagépen.

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

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

Most kapcsoljuk ki a cellát a pénztárca internet-hozzáférésével. Adjunk neki egy másik alhálózati területről származó IP-címet, amely nem NAT-os. Először is változtassunk /etc/pf.conf a gazdán

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" változtassunk rá JAIL_IP_POOL="192.168.0.0/25", így az összes 192.168.0.126-255 címnek nem lesz közvetlen hozzáférése az internethez. Egyfajta szoftveres „légrés” hálózat. És a NAT szabály továbbra is olyan, mint volt

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

A szabályok túlterhelése

# pfctl -f /etc/pf.conf

Most pedig vegyük fel a cellánkat

# cbsd jconfig jname=electrum

Bitcoin egy ketrecben?

Bitcoin egy ketrecben?

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, de most már maga a rendszer leáll helyettünk. Megadhatunk azonban egy rendszerproxyt. De van egy dolog, a TOR-on egy SOCKS5 proxy, és a kényelem kedvéért szeretnénk HTTP proxyt is.

# 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

Nos, most két proxyszerver van a rendszerünkben, és mindkettő a TOR-n keresztül történik: socks5://192.168.0.2:9050 és http://192.168.0.6:8123

Most már konfigurálhatjuk a pénztárca környezetünket

# 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

Nos, most a shell proxy alól fog működni. Ha csomagokat akarunk telepíteni, akkor hozzá kell adnunk /usr/local/etc/pkg.conf a ketrec gyökere alól

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

Nos, itt az ideje, hogy hozzáadjuk a TOR rejtett szolgáltatást SSH szolgáltatásunk címeként a pénztárcacellában.

# 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

Ez a kapcsolati címünk. Nézzük a helyi gépről. De először hozzá kell adnunk az SSH kulcsunkat:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Nos, egy Linux kliens gépről

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

Kapcsolódjunk (Ahhoz, hogy ez működjön, szükség van egy helyi TOR démonra, amely figyel a 9050-re)

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

Siker!

Az azonnali és mikrofizetések használatához szükségünk van egy csomópontra is Villámhálózat, valójában ez lesz a fő munkaeszközünk a Bitcoinnal. U*c-villámamelyet démonként fogunk használni Sparko plugin, amely egy teljes értékű HTTP (REST) ​​interfész, és lehetővé teszi a láncon kívüli és a láncon belüli tranzakciók kezelését. c-lightning működéséhez szükséges bitcoind de igen.

*A Lightning Network protokollnak különböző megvalósításai vannak különböző nyelveken. Az általunk teszteltek közül a c-lightning (C-vel írva) tűnt a legstabilabbnak és erőforrás-hatékonyabbnak.

# 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

Amíg minden szükséges le van fordítva és telepítve, hozzunk létre egy RPC felhasználót a számára 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

A cellák közötti kaotikus váltásom nem olyan kaotikus, ha figyelembe vesszük a segédprogramot tmux, amely lehetővé teszi több terminál almunka létrehozását egy munkameneten belül. Hasonló: screen

Bitcoin egy ketrecben?

Tehát nem szeretnénk felfedni csomópontunk valódi IP-címét, hanem minden pénzügyi tranzakciót a TOP-on keresztül szeretnénk lebonyolítani. Ezért egy másik .hagyma nem szükséges.

# 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

Most hozzunk létre egy konfigurációt a c-lightning számára

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 ~

Ezenkívül létre kell hoznia egy konfigurációs fájlt a bitcoin-cli-hez, egy olyan segédprogramhoz, amely kommunikál vele bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

jelölje be

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

[
  "test"
]

dob lightningd

lightning@lightning:~ % lightningd --daemon

Önmaga lightningd vezérelheti a segédprogramot lightning-cli, például:

lightning-cli newaddr megkapja a címet az új bejövő fizetéshez

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all küldje el a pénztárcában lévő összes pénzt a címre (az összes láncon belüli cím)

Parancsok a láncon kívüli műveletekhez is lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay és így tovább.

Nos, az alkalmazással való kommunikációhoz van egy REST Api

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

Összefoglalva:

# 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 egy ketrecben?

Van egy konténerkészletünk, amelyek mindegyike saját hozzáférési szinttel rendelkezik mind a helyi hálózatból, mind a hálózathoz.

# 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

Mint látható, a bitcoind mind a 190 GB-ot elfoglalja. Mi van, ha egy másik csomópontra van szükségünk a teszteléshez? Itt jön jól a ZFS. Segítséggel cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com létrehozhat egy pillanatképet, és új cellát csatolhat ehhez a pillanatképhez. Az új cellának saját területe lesz, de a fájlrendszerben csak a jelenlegi és az eredeti állapot közötti különbséget veszik figyelembe (legalább 190 GB-ot spórolunk)

Minden cella különálló ZFS-adatkészlettel rendelkezik, és ez rendkívül kényelmes. A ZFS is lehetővé teszi számos más nagyszerű dolgot csinálhat, például pillanatképeket küldhet SSH-n keresztül. Nem írjuk le, már sok van.

Érdemes megjegyezni a gazdagép távfelügyeletének szükségességét is, erre a célra van Zabbix.

B - biztonság

Ami a biztonságot illeti, induljunk ki a kulcsfontosságú elvekből az infrastruktúra összefüggésében:

Titoktartás - A UNIX-szerű rendszerek szabványos eszközei biztosítják ennek az elvnek a megvalósítását. Logikailag elkülönítjük a hozzáférést a rendszer minden egyes logikailag különálló eleméhez - egy cellához. A hozzáférést szabványos felhasználói hitelesítéssel biztosítják a felhasználók személyes kulcsaival. Minden kommunikáció a végcellák között és a végcellák felé titkosított formában történik. A lemeztitkosításnak köszönhetően nem kell aggódnunk az adatok biztonsága miatt, amikor lemezt cserélünk vagy másik szerverre költözünk. Az egyetlen kritikus hozzáférés a gazdarendszerhez való hozzáférés, mivel az ilyen hozzáférés általában hozzáférést biztosít a konténerekben lévő adatokhoz.

Sértetlenség „Ennek az elvnek a megvalósítása több különböző szinten történik. Először is fontos megjegyezni, hogy a szerverhardver, az ECC memória esetében a ZFS már „out of the box” gondoskodik az adatintegritásról az információs bitek szintjén. Az azonnali pillanatképek segítségével bármikor, menet közben készíthet biztonsági másolatot. A kényelmes cellaexportálási/-importálási eszközök egyszerűvé teszik a sejtreplikációt.

elérhetőség - Ez már nem kötelező. Függ a hírneved mértékétől és attól, hogy vannak gyűlölőid. Példánkban biztosítottuk, hogy a pénztárca kizárólag a TOP hálózatról legyen elérhető. Ha szükséges, mindent blokkolhat a tűzfalon, és kizárólag alagutakon keresztül engedélyezheti a szerverhez való hozzáférést (a TOR vagy a VPN más kérdés). Így a szerver lehetőség szerint el lesz zárva a külvilágtól, és csak mi magunk tudjuk befolyásolni az elérhetőségét.

Az elutasítás lehetetlensége - És ez a további működéstől és a megfelelő szabályzatok betartásától függ a felhasználói jogokra, hozzáférésre stb. De a megfelelő megközelítéssel minden felhasználói műveletet auditálnak, és a kriptográfiai megoldásoknak köszönhetően egyértelműen azonosítható, hogy ki és mikor hajtott végre bizonyos műveleteket.

Természetesen a leírt konfiguráció nem egy abszolút példa arra, hogy mindig milyennek kell lennie, inkább csak egy példa arra, hogyan lehet, miközben megőrzi a nagyon rugalmas skálázási és testreszabási lehetőségeket.

Mi a helyzet a teljes virtualizációval?

A teljes virtualizációról a cbsd használatával tudod olvassa el itt. Csak a munka miatt teszem hozzá bhyve Engedélyeznie kell néhány kernelbeállítást.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Tehát ha hirtelen el kell indítania egy dokkolót, telepítsen egy debiant, és menjen!

Bitcoin egy ketrecben?

Ez minden

Azt hiszem, ez minden, amit meg akartam osztani. Ha tetszett a cikk, küldhetsz nekem néhány bitcoint - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Ha szeretné kipróbálni a sejteket működés közben, és van bitcoinja, akkor ugorjon az én oldalamra kisállat-projekt.

Forrás: will.com