Bitcoin a ketrecben?

Úgy alakult, hogy számítógépes rendszerek és hálózatok adminisztrátora vagyok (röviden: rendszergazda), és több mint 10 évnyi szakmai tevékenységem alatt számos különböző rendszert megismertem, beleértve azokat is, amelyek [megnövekedett|szigorúbb] biztonsági intézkedéseket igényelnek. Ezen kívül egy ideje találtam érdekesnek bitcoint, és nemcsak használtam, hanem több mikro-szolgáltatást is indítottam, hogy megtanuljam, hogyan lehet saját magam dolgozni a bitcoin hálózaton (hiszen p2p, vagy mi a franc) fejlesztői szempontból (bár én valójában nem vagyok igazán az, csak úgy jártam arra). De nem a fejlesztésről beszélek, hanem a biztonságos és hatékony környezetről az alkalmazások számára. devA pénzügyi technológiák (

fintech) a hálózatbiztonsággal (infosec) együtt járnak, és az egyik a másik nélkül működhet, de nem tart sokáig. Ezért szeretném megosztani a tapasztalataimat és azoknak az eszközöknek a sorozatát, amelyeket használok, beleértve a, ráadásul egyszerre, és szélesebb, vagy akár teljesen más célokra is felhasználható. Ebben a cikkben nem annyira a bitcoinról fogok beszélni, hanem az infrastruktúra modelljéről a pénzügyi (és nemcsak) szolgáltatások fejlesztésére és üzemeltetésére – egy szóval azokról a szolgáltatásokról, ahol a „B” fontos szerepet játszik. Ez alkalmazható egy bitcoin tőzsdére, valamint egy olyan tipikus vállalati szolgáltatásállományra is, amelynek a bitcoinhoz semmi köze. ) a hálózatbiztonsággal (, valamint ) együtt járnak, és az egyik a másik nélkül működhet, de nem tart sokáig. Ezért szeretném megosztani a tapasztalataimat és azoknak az eszközöknek a sorozatát, amelyeket használok, beleértve aSzeretném megjegyezni, hogy a

„keep it stupid simple” „less is more” és elvek híve vagyok, ezért mind az írás, mind a benne leírtak ezeknek az elveknek a tulajdonságaival fognak rendelkezni.Képzelt forgatókönyv:

Воображаемый сценарий: Nézzük meg mindezt egy Bitcoin váltó példáján. Eldöntöttük, hogy forintot, dollárt, eurót váltunk Bitcoinra és vissza, és már van egy működő megoldásunk, de más digitális pénzekre, mint a Qiwi és Webmoney is kiterjesztjük, szóval minden jogi kérdést elintéztünk. Van egy kész alkalmazásunk, amely fizetési átjáróként működik forint, dollár és euró, valamint más fizetési rendszerek számára. Ez összekapcsolódik a bankszámláinkkal, és van egy API-nk a végső alkalmazásainkhoz. Emellett van egy webalkalmazásunk, amely a felhasználók számára váltóként funkcionál, hasonlóan egy tipikus Qiwi vagy Webmoney fiókhoz – hozzon létre fiókot, adjon hozzá egy kártyát és így tovább. Ez kapcsolódik a mi átjárónkhoz, például REST API-n keresztül a helyi hálózaton. Most úgy döntöttünk, hogy csatlakoztatjuk a bitcoint, és közben frissítjük az infrastruktúrát, mivel kezdetben mindent sietve állítottunk be virtuális boxokon az irodában az asztal alatt... a weboldalt kezdték használni, és mi aggódni kezdtünk a működési idő és teljesítmény miatt.

Tehát kezdjük a lényeget - a szerver kiválasztása. Mivel a vállalkozásunk ebben a példában kicsi, és megbízunk a szolgáltatóban (OVH), választunk egy költséghatékony megoldást , amelynél nem lehet telepíteni az operációs rendszert az eredeti .iso képből, de ez nem baj, az IT biztonsági osztály mindenképpen elemzi az telepített képet. Amikor növekszünk, szinte biztos, hogy bérelni fogunk egy saját, zárt szekrényt korlátozott fizikai hozzáféréssel, esetleg saját adatközpontot is építünk. Mindenesetre érdemes megjegyezni, hogy amikor hardvert bérelünk és kész képeket telepítünk, van esély arra, hogy a rendszerben egy „hosztektől származó trójai” fog lógni, amely a legtöbb esetben nem az Ön megfigyelésére szolgál, hanem hogy kényelmesebb szerverkezelési eszközöket ajánljon.

Szerver telepítése

Itt minden egyszerű. Kiválasztjuk az igényeinknek megfelelő hardvereket. Ezután kiválasztjuk a FreeBSD képet. Vagy csatlakozunk (más hosztnál és saját hardvernél) IPMI-vel vagy monitorral, és betesszük a rendszerbetöltőbe a FreeBSD .iso képet. Az orchestral telepítéshez én a Ansible és mfsbsdprogramot használom. Az egyetlen dolog, hogy a kimsufi esetében mi a custom installation -t választottuk, hogy a tükörben lévő két merevlemez csak a boot és a /home partíciók „nyitottak” legyenek, a lemez többi része titkosítva lesz, de erről később.

Bitcoin a ketrecben?

A rendszer telepítése standard módon történik, nem állok meg ezen, csak megjegyzem, hogy a használat megkezdése előtt érdemes figyelni hardenelés az opciókra, amelyeket ajánl bsdinstaller a telepítés végén (ha saját magad telepíted a rendszert):

Bitcoin a ketrecben?

Van jó anyag erről a témáról, röviden itt megismétlem.

A fent említett paramétereket már telepített rendszeren is aktiválhatod. Ehhez módosítani kell a betöltő fájlt és engedélyezni a kernel paramétereket. *ee — egy 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

Azt is érdemes megbizonyosodni, hogy a legújabb verzió van telepítve, és végrehajtani minden frissítést és upgrade-et. A mi esetünkben például a legújabb verzióra való frissítés szükséges, mivel a telepített képek hat hónappal egy évvel le vannak maradva. És ott megváltoztatjuk az SSH portot az alapértelmezetten eltérőre, hozzáadjuk a kulcs alapú hitelesítést és letiltjuk a jelszavas bejelentkezést.

Ezután beállítjuk aide, a rendszer konfigurációs fájljainak állapotának megfigyelésére. Bővebben olvashatsz itt.

pkg install aide

és szerkesztjük 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

Engedélyezzük rendszeri auditálás

sysrc auditd_enable=YES

# service auditd start

Hogyan kell ezt jól adminisztrálni, azt remekül leírták a kézikönyvben.

Most újraindítjuk a rendszert, és elkezdjük a szoftverbeállítást a szerveren. Minden szerver hipervizorként működik, vagy konténerek vagy teljes virtuális gépek számára. Ezért fontos, hogy a processzor támogassa a VT-x és EPT-t, ha teljes virtualizálást tervezünk használni.

Konténerek és virtuális gépek menedzselésére én a cbsd-t tól olevole, sok egészséget és áldást kívánok ennek a nagyszerű segédprogramnak!

Konténerek? Ismét a docker kérdése?

De hogy is van ez. FreeBSD Jails — ez egy kiváló eszköz a konténerezzéshez, míg az említett cbsd-t azoknak a konténereknek az orchestrationjára készült, amelyek neve — cellák.

A konténer egy rendkívül hatékony megoldás különböző célú infrastruktúrák kiépítésére, ahol végül teljes izolációra van szükség az egyes szolgáltatások vagy folyamatok között. Alapvetően ez a gazda rendszer klónja, de nincs szükség teljes hardver virtualizációra. Így az erőforrások nem az "ügyfél operációs rendszerre" költődnek, hanem csak a végrehajtandó feladatra. Amikor a konténereket belső igényekhez használják, ez egy nagyon kényelmes megoldás az erőforrások optimális kihasználására — több konténer is egyetlen fizikai szerveren külön-külön maximálisan kihasználhatja a szerver erőforrásait, ha szükséges. Figyelembe véve, hogy általában különböző alárendelt szolgáltatások különböző időpontokban igényelnek extra forrásokat, egyetlen szerverből maximális teljesítményt lehet kihozni, ha a konténereket megfelelően tervezik és elosztják a szerverek között. Szükség esetén a konténerekhez erőforrás-használati korlátokat is be lehet állítani.

Bitcoin a ketrecben?

Mi a helyzet a teljes virtualizációval?

Amennyire tudom, cbsd-t támogatja a bhyve és XEN hipervízort. A másodikat sosem használtam, de az első egy viszonylag fiatal hipervízor a FreeBSD-től. A következőkben bemutatunk egy példát a használatára. bhyve Példa alatt fogjuk ezt bemutatni.

A host környezet telepítése és beállítása

Használunk egy fájlrendszert ZFS. Ez egy rendkívül erőteljes eszköz a szerveren elérhető tárhely kezelésére. A ZFS segítségével közvetlenül a lemezekből építhetünk különböző konfigurációjú tömböket, dinamikusan "melegében" bővíthetjük a tárhelyet, cserélhetjük a hibás lemezeket, kezelhetjük a pillanatfelvételeket és még sok mást, amiről egy egész sorozatot lehetne írni. Térjünk vissza a szerverünkhöz és annak lemezeihez. A telepítés elején szabad területet hagytunk a lemezeken a titkosított partíciók számára. Miért? Azért, hogy a rendszer automatikusan fel tudjon állni, és SSH-n figyelni tudjon.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

hozzáadjuk a lemez partíciót a fennmaradó helyre

geli init /dev/ada0p4

megadjuk a titkosítási jelszavunkat

geli attach /dev/ada0p4

ismét beírjuk a jelszót, és megjelenik a /dev/ada0p4.eli eszköz — ez a mi titkosított terünk. Ezután ugyanezt megismételjük a /dev/ada1 és a többi lemez esetében a tömbben. És létrehozzuk az új ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — nos, készen van a minimális működőképes készletünk. Tükör tömb a lemezekből, ha az egyik a három közül meghibásodik.

Új „pool”-on adatbázist hozunk létre

zfs create vms/jails

pkg install cbsd — végrehajtottuk a parancsot, és telepítjük a menedzsmentet a sejtjeinkhez.

Miután cbsd-t telepítve lett, inicializálni kell:

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

nos, és rengeteg kérdésre válaszolunk, főleg az alapértelmezett válaszokkal.

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

**Én sem NAT-ot használok a cbsd-t, hanem én állítom be őt 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 a sejtekhez
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

## Bitcoin hálózati port előre-irányítás
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 politikák beállítása külön téma, ezért nem mélyedek el a BLOCK ALL politika és a fehérlisták beállításában, ezt elolvashatja az apiGroups-ról és a kimenetről vagy bármely más hatalmas mennyiségű cikkben, ami elérhető a Google-ben.

Nos… telepítettük a cbsd-t, ideje létrehozni az első munkalovunkat — a Bitcoin démonunkat a sejten belül!

cbsd jconstruct-tui

Bitcoin a ketrecben?

Itt a sejt létrehozási párbeszédablakát látjuk. Miután minden értéket beállítottunk, létrehozzuk!

Az első sejt létrehozásakor ki kell választani, hogy mit használjunk alapként a sejtek számára. Én a FreeBSD tárolóból választom a repo. Ez a választás csak az adott verzió első sejtjének létrehozásakor történik (bármekkora verziójú sejteket hosztolhatunk, ami újabb mint a hoszt verziója).

Miután minden telepítve van — elindítjuk a sejtet!

# cbsd jstart bitcoind

De először szoftvereket kell telepítenünk a sejtbe.

# jls

   JID  IP Cím      Hostnév                      Útvonal
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind hogy belépjünk a sejt konzoljába

és már a sejt belsejében telepítjük a szoftvert a függőségeivel (a hoszt rendszerü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 Bitcoin a sejten belül van, de anonim ként kell maradnunk, mert néhány sejtet szeretnénk csatlakoztatni a TOR hálózaton. És egyáltalán, a legtöbb sejtet gyanús szoftverekkel proxy-n keresztül akarjuk futtatni. Köszönhetően pf Lehetőség van a NAT-t egy adott IP-cím tartományra letiltani a helyi hálózaton, és lehetővé tenni a NAT-t csak a TOR-csomópontunk számára. Így még ha egy rosszindulatú program bekerül a cellába, akkor valószínűleg nem tud kapcsolatba lépni a külső világgal, és ha mégis, nem fogja felfedni a szerverünk IP-címét. Ezért létrehozunk egy új cellát a szolgáltatások "továbbításához", mint a ".onion"-szolgáltatás és mint egy proxy, amelyen keresztül az interneten kereshetnek a különböző cellák.

# 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

Tegyük a helyi címre hallgatni (minden cella számára elérhető)

SOCKSPort 192.168.0.2:9050

Mi hiányzik még a teljes boldogsághoz? Igen, szükségünk van egy szolgáltatásra a webünk számára, lehet, hogy nem is egyre. Indítsuk el az nginx-et, amely a reverse-proxy szerepét fogja betölteni é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

Íme, 150 MB függőség került a cellába. Az állomás továbbra is tiszta.

Később visszatérünk az nginx beállításához, először még szükségünk van két cella létrehozására a nodejs és rust alapú fizetési átjárónknak, és egy webalkalmazásnak, ami valami okból Apache-on és PHP-n fut, ráadásul az utolsónak szüksége van egy MySQL adatbázisra.

# 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 még 380 MB csomag izolaálva.

Ezután git-en keresztül betöltjük az alkalmazásunkat é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 csomag a cellában.

Itt SSH hozzáférést biztosítunk a fejlesztőknek a cellába, ők mindent megoldanak:

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

Port 2267 — megváltoztatjuk a cella SSH portját bármilyen tetszőleges számra

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

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

Most már elindult a szolgáltatás, hátra van még egy szabály hozzáadása a pf tűzfalhoz

Nézzük meg, milyen IP-címek vannak a cellákban, és hogy néz ki egyáltalán a "helyi hálózatunk".

# jls

   JID  IP cím      Gazda                      Ösvény
     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 hozzáadunk 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 vagyunk, adjunk hozzá egy szabályt a reverse-proxy-ra 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

Most egy kicsit a bitcoinokról

Mit is adunk? Van egy webalkalmazásunk, amely elérhető kívülről, és ami lokálisan kommunikál a fizetési átjárónkkal. Most fel kell készülnünk a Bitcoin hálózattal való interakcióra – a node-ra. bitcoind Ez csupán egy démon, amely egy helyi példányát tartja fenn az aktuális blokkláncnak. Ennek a démonnak van RPC és pénztárca funkciója, azonban alkalmazások fejlesztéséhez kényelmesebb "burkolatok" léteznek. Először úgy döntöttünk, hogy telepítjük electrum — ez egy CLI pénztárca. Ez a pénztárca külön tárolásként fog szolgálni a bitcoinjaink számára — ezek azok a bitcoinok, amelyeket "kívül" kell tartanunk a felhasználók számára elérhető rendszeren és távol mindentől. Van GUI-ja is, így egy ilyen pénztárcát szeretnénk használni a
laptopjainkon. Egyelőre az Electrumot nyilvános szerverekkel használjuk, később pedig egy másik ketrecben beállítunk ElectrumX, hogy teljesen függetlenek legyünk bárkitől sem.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

még 700 MB szoftverünk van a ketrecben

electrum: /@[8:53] # adduser

Felhasználónév: wallet
Teljes név: 
Uid (hagyja üresen az alapértelmezetthez): 
Bejelentkezési csoport [wallet]: 
A bejelentkezési csoport wallet. Meghívjuk a wallet-ot más csoportokba? []: 
Bejelentkezési osztály [alapértelmezett]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Otthoni könyvtár [ /home/wallet]: 
Otthoni könyvtár engedélyek (hagyja üresen az alapértelmezetthez): 
Használjon jelszó alapú hitelesítést? [igen]: nem
Zárja le a fiókot a létrehozás után? [nem]: 
Felhasználónév   : wallet
Jelszó        : <letiltva>
Teljes név     : 
Uid            : 1001
Osztály       : 
Csoportok      : wallet
Otthon         : /home/wallet
Otthoni mód    : 
Shell         : /bin/tcsh
Zárolva       : nem
OK? (igen/nem): igen
adduser: INFO: Sikeresen hozzáadta (wallet) a felhasználói adatbázishoz.
Hozzon létre egy másik felhasználót? (igen/nem): nem
Viszlát!
electrum: /@[8:53] # su wallet

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

wallet@electrum: / % electrum-3.6 create

{
    "msg": "Kérjük, hogy a magját biztonságos helyen tárolja; ha elveszíti, nem tudja visszaállítani a pénztárcáját.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "irigykedő disznó anyag szalag ifjú ütés vizuális rendben kaktusz véletlen madár"
}

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 on-chain pénztárcánkhoz ezentúl csak egy korlátozott kör tud csatlakozni. Annak érdekében, hogy ne nyissuk meg a külső hozzáférést ehhez a ketrechez, a csatlakozások SSH-n keresztül fognak történni TOVÁBBI részletek, ami egy decentralizált VPN opciót jelent. Elindítjuk a SSH-t a ketrecben, de nem érintjük az pf.conf-ot a gazdagépen.

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

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

Most kikapcsoljuk a pénztárcával rendelkező ketrec internet elérhetőségét. Egy másik alhálózatból származó IP-címet adunk neki, amely nem NAT-olt. Először megváltoztatjuk /etc/pf.conf a gazdagépen

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" változtatjuk JAIL_IP_POOL="192.168.0.0/25", így minden cím 192.168.0.126-255 nem rendelkezik közvetlen internet hozzáféréssel. Olyan, mint egy szoftveres "air-gap" hálózat. A NAT szabály pedig marad a régi.

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

Újra töltjük a szabályokat.

# pfctl -f /etc/pf.conf

Most pedig nekilátunk a cellánknak.

# cbsd jconfig jname=electrum

Bitcoin a ketrecben?

Bitcoin a ketrecben?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Régi IP eltávolítása: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Új IP beállítása: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hm, de most már a rendszer is leállhat. Azonban megadhatjuk a rendszerszintű proxy-t. De van egy bökkenő, a TOR-hoz SOCKS5 proxy szükséges, és a kényelmünk érdekében még HTTP proxy-ra is szükség lenne.

# 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 a rendszerünkben két proxy-szerver van, és mindkettő a TOR-on keresztül működik: socks5://192.168.0.2:9050 és http://192.168.0.6:8123

Most már beállíthatjuk a pénztárcánk környezetét.

# 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, mostantól a shell proxy-n keresztül fog működni. Ha csomagokat szeretnénk telepíteni, érdemes hozzáadni a /usr/local/etc/pkg.conf a cella root-jából

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

Most pedig elérkezett az idő, hogy hozzáadjuk a TOR rejtett szolgáltatást SSH szolgáltatásunk címeként a pénztárca cellájához.

# 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

Itt van a csatlakozási címünk. Ellenőrizzük egy helyi gépről. De először hozzá kell adnunk a SSH kulcsunkat:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Most pedig a kliens Linux 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

Csatlakozunk (Ehhez szükséges egy helyi TOR démon, amely a 9050-es porton hallgat.)

user@local ~$ ssh remotebtc

A 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' gazdagép hitelessége nem állapítható meg.
Az ECDSA kulcsujjlenyomat SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Biztos benne, hogy folytatni szeretné a csatlakozást (igen/nem/[ujjlenyomat])? igen
Figyelmeztetés: A "mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion" (ECDSA) tartósan hozzá lett adva az ismert gazdagépek listájához.
FreeBSD 12.1-RELEASE-p1 GENERIC 
A tárhely megtakarítása érdekében, tömörítse azokat a fájlokat, amelyekre ritkán használ.

Siker!

Az azonnali és mikrotranzakciók kezeléséhez szükség van egy node-ra is. Lightning Network, ez lesz a fő munkaszerszámunk a bitcoinnal. A *c-lightning, amelyet démonként fogunk használni, rendelkezik Sparko bővítménnyel,amely egy teljes értékű HTTP (REST) interfészt biztosít, lehetővé téve, hogy off-chain és on-chain tranzakciókkal egyaránt dolgozzunk. c-lightning A működéshez szükséges bitcoind nód.

*Több különböző megvalósítás létezik a Lightning Network különböző programozási nyelveken. A tesztelt verziók közül a c-lightning (C nyelven írt) a legstabilabb és a legnagyobb erőforrás-hatékony.

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/{@[10:23]} # adduser

Felhasználónév: 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 a szükséges összes telepítése és fordítása folyik, létrehozunk egy RPC felhasználót a lightningd-hez. be. bitcoind

# jexec bitcoind

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

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#csak c-lightning engedélyezése
rpcallowip=192.168.0.7/32

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

A látszólag kaotikus váltásaim a cellák között nem is olyan kaotikus, ha megemlítjük az eszközt, tmux, amely lehetővé teszi, hogy egyetlen munkameneten belül több alsó munkamenetet hozzunk létre. Analóg: screen

Bitcoin a ketrecben?

Nos, nem akarjuk felfedni a nódunk valós IP címét, és minden pénzügyi tranzakciót a TOR-on keresztül szeretnénk végezni. Ezért szükségünk van egy másik .onion-ra.

# 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 létrehozunk egy konfigurációt a c-lightning-hez.

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 bővítmény
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko

sparko-host=192.168.0.7
sparko-port=9737

sparko-tls-path=sparko

#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
# a fenti példához az inicializáló naplóknak (amelyek keverve vannak a lightningd naplóval) valami ilyesmit kell nyomtatniuk:

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 ~

A konfigurációs fájlt is létre kell hozni a bitcoin-cli számára, amely a bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

ellenőrzés

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

[
  "test"
]

indítjuk lightningd-hez.

lightning@lightning:~ % lightningd --daemon

Mi lightningd-hez. vezérelheti az eszközt lightning-cli, például:

lightning-cli newaddr címet kapni az új bejövő tranzakcióhoz

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

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

Ezen kívül parancsok az off-chain műveletekhez lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay stb.

De a programmal való kommunikációhoz REST Api áll rendelkezésünkre

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

Összegzés

# jls

   JID  IP cím      Hostnév                      Útvonal
     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 a ketrecben?

Van egy sor konténerünk, mindegyik saját hozzáférési szinttel a helyi hálózaton belül és kívül.

# zfs list

NÉV                    HASZNÁLT  ELÉRHETŐ  REFERENCIA  MENTÉSI PONT
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

Ahogy látható, a bitcoind minden 190 GB helyet foglal. Mi a helyzet, ha szükségünk lenne egy másik csomópontnál a teszteléshez? Itt a ZFS pont jól jön. Segítségével cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Lehet készíteni egy pillanatfelvételt, és egy új tárolót kötni ehhez a pillanatfelvételhez. Az új tárolónak teljesen saját környezete lesz, de a fájlrendszeren belül csak a jelenlegi állapot és az eredeti közötti különbséget fogjuk figyelembe venni (legalább 190 GB-ot spórolhatunk).

Minden tároló egy külön ZFS adathalmazon alapul, ami rendkívül kényelmes. A ZFS lehetőséget ad arra is, hogy különféle más menő dolgot tegyünk, mint például pillanatfelvételek küldése SSH-n. Erről most nem beszélünk, így is sokat mondtunk.

Fontos megjegyezni a hoszt távoli monitorozásának szükségességét, erre az célokra Zabbix.

B – biztonság

A biztonság tekintetében kezdjük a legfontosabb elvekkel az infrastruktúrára vonatkozóan:

Adatvédelem – A UNIX-alapú rendszerek standard eszközei biztosítják ennek az elvnek a végrehajtását. Logikailag elkülönítjük a hozzáférést minden logikailag különálló rendszer elemhez – tárolóhoz. A hozzáférés standard felhasználói hitelesítéssel, a felhasználók személyes kulcsaival történik. A kommunikáció minden végső tároló között titkosított formában zajlik. A lemezek titkosításának köszönhetően nem kell aggódnunk az adatok megőrzéséért lemezcserék vagy másik szerverre történő migráció során. Az egyetlen kritikus hozzáférés a hoszt rendszerhez való hozzáférés, mivel ez általában hozzáférést biztosít az adatokhoz a tartályokban.

Integritás – Ennek az elvnek a végrehajtása különböző szinteken valósul meg. Először is fontos megjegyezni, hogy a szerver hardver esetében az ECC memória, a ZFS „do-it-yourself” gondoskodik az adatok integritásáról a bitek szintjén. Az azonnali pillanatfelvételek lehetővé teszik, hogy bármikor élőben biztonsági mentést végezzen. A tárolók export-import eszközei megkönnyítik a tárolók replikálását.

Elérhetőség – Itt már opcionális. Függ a széleskörű ismeretségedtől és attól, hogy vannak-e ellenségeid. A példánkban a pénztárca elérhetőségét kizárólag a TOR hálózaton keresztül biztosítottuk. Szükség esetén a tűzfalon le lehet tiltan a külső világ közvetlen elérését, és a szerverhez való hozzáférést kizárólag alagútokon (TOR vagy VPN esetében) engedélyezhetjük. Így a szerver a lehető legjobban el lesz vágva a külső világtól, és a hozzáférhetőségét csak mi befolyásolhatjuk.

Megfékezhetetlenség — Ez a további használattól és a felhasználói jogok, hozzáférések stb. helyes politikájának betartásától függ. De helyes megközelítéssel minden felhasználói tevékenység auditálásra kerül, és a kriptográfiai megoldásoknak köszönhetően egyértelműen azonosítható, hogy ki és mikor hajtott végre bizonyos tevékenységeket.

Természetesen a leírt konfiguráció nem egy abszolút példa arra, hogy ez mindig hogyan kellene mennie, inkább csak egy példa arra, hogyan nézhet ki, megőrizve a nagyon rugalmas skálázási és testreszabási lehetőségeket.

De mi van a teljes virtualizációval?

A cbsd eszközeivel teljes virtualizálásról lehet itt olvasni. Csak annyit tennék hozzá, hogy a működéshez bhyve bizonyos kernelparamétereket kell aktiválni.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Szóval, ha esetleg szükség van Docker indítására, akkor elindítunk egy Debian-t, és rajta!

Bitcoin a ketrecben?

Azt hiszem, ennyi.

Igen, ez minden, amivel meg akartam osztani. Ha tetszett a cikk, akkor lehet nekem Bitcoin-t küldeni — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Ha szeretné kipróbálni a kereteket működés közben, és van néhány Bitcoin-ja, akkor elérhet engem a pet-project.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster