Bitcoin në kafaz?

Ka qenë e tillë, që unë profesionalisht jam administrator i sistemeve komputerike dhe rrjeteve (shkurt: sysadmin), dhe kam përjetuar pak më shumë se 10 vjet aktivitet profesional me sisteme të ndryshme, përfshirë ato që kërkojnë masa të [pëlqyera|përmirësuara] sigurie. Për më tepër, ndodhi që disa kohë më parë, e gjeta të interesant bitcoin, dhe jo vetëm që e kam përdorur, por kam nisur disa mikro-shërbime, për të mësuar të punoj vetë me rrjetin e bitcoin-it (sigurisht, unë jam disi i tillë dev, kështu, kalova ashtu). Por nuk jam për zhvillimin, jam për një ambient të sigurt dhe efektiv për aplikacionet.

Teknologjitë financiare (fintech) ecin përkrah sigurisë informative (infosec) dhe e para pa të dytën mund të funksionojë, por jo për një kohë të gjatë. Kështu që, dëshiroj të ndaj përvojën time dhe grupin e mjeteve që përdor, i cili përfshin si fintech, ashtu edhe infosec, madje në të njëjtën kohë, si dhe mund të përdoret në një qëllim më të gjerë apo krejtësisht tjetër. Në këtë artikull do të flas më shumë për modelin e infrastrukturës për zhvillimin dhe operimin e shërbimeve financiare (dhe jo vetëm) - me një fjalë ato shërbime, ku "B" ka rëndësi. Ky informacion është e aplicueshme si në një bursë bitcoin-i, ashtu edhe në kopshtin tipik korporativ të shërbimeve të një kompanie të vogël, që nuk kanë asnjë lidhje me bitcoin-in.

Dëshiroj të theksoj se unë jam përkrahës i parimeve "mbaje të thjeshtë" dhe "më pak është më shumë", kështu që si artikulli, ashtu edhe ajo që përshkruan do të ketë cilësitë për të cilat këto parime flasin.

Skenari imagjinar: Le tĂ« shqyrtojmĂ« gjithçka pĂ«rmes njĂ« shembulli tĂ« njĂ« kĂ«mbimi bitcoin. VendosĂ«m tĂ« fillojmĂ« kĂ«tĂ« kĂ«mbim tĂ« rubleve, dollarĂ«ve, dhe eurove nĂ« bitcoin dhe anasjelltas, dhe tani kemi njĂ« zgjidhje funksionale, por pĂ«r monedhat e tjera dixhitale si qiwi dhe webmoney, dmth. kemi zgjidhur tĂ« gjitha çështjet juridike, kemi njĂ« aplikacion tĂ« gatshĂ«m qĂ« vepron si njĂ« portal pagesash pĂ«r rubla, dollarĂ« dhe euro, si edhe pĂ«r sistemet e tjera tĂ« pagesĂ«s. TĂ« lidhura me llogaritĂ« tona bankare dhe duke pasur njĂ« API pĂ«r aplikacionet tona tĂ« fundit. Kemi gjithashtu njĂ« aplikacion web qĂ« vepron si kĂ«mbim pĂ«r pĂ«rdoruesit, disi si njĂ« zyrĂ« tipike qiwi ose webmoney — krijoni njĂ« llogari, shtoni njĂ« kartĂ« dhe kĂ«shtu me radhĂ«. Ai komunikon me aplikacionin tonĂ« portal, le tĂ« themi pĂ«rmes REST API nĂ« rrjetin lokal. Dhe tani vendosĂ«m tĂ« lidhim bitcoin dhe njĂ«kohĂ«sisht tĂ« pĂ«rmirĂ«sojmĂ« infrastrukturĂ«n, pasi nĂ« fillim tĂ« gjithĂ« ishim tĂ« nxitur tĂ« ngrihen nĂ« virtualboks nĂ« zyre nĂ«n tavolinë  situs pĂ«rdorues, dhe ne filluam tĂ« shqetĂ«sohemi pĂ«r uptime dhe performancĂ«n.

Pra, le tĂ« fillojmĂ« me thelbin — zgjedhjen e serverit. Duke marrĂ« parasysh qĂ« biznesi nĂ« shembullin tonĂ« Ă«shtĂ« i vogĂ«l dhe ne e besojmĂ« hostin (OVH), do tĂ« zgjedhim njĂ« opsion buxhetor ku nuk mund tĂ« instaloni sistemin nga njĂ« imazh origjinal .iso, por nuk Ă«shtĂ« problem, ekipi ynĂ« i IT-sĂ« patjetĂ«r do tĂ« kryejĂ« njĂ« analizĂ« tĂ« imazhit tĂ« instaluar. Kur tĂ« rritemi, ndoshta do tĂ« marrim me qira kabinetin tonĂ« tĂ« mbyllur me akses fizik tĂ« kufizuar, ose ndoshta do tĂ« ndĂ«rtojmĂ« qendrĂ«n tonĂ« tĂ« tĂ« dhĂ«nave. NĂ« çdo rast, duhet tĂ« mbani mend se kur merrni me qira pajisje dhe instaloni imazhe tĂ« gatshme, ka tĂ« ngjarĂ« qĂ« sistemi juaj tĂ« ketĂ« njĂ« "trojan" nga hosti, i cili nĂ« shumicĂ«n e rasteve nuk Ă«shtĂ« pĂ«r tĂ« ju spiunuar, por pĂ«r t'ju ofruar mjete mĂ« tĂ« rehatshme pĂ«r menaxhimin e serverit.

Instalimi i serverit

Këtu është e thjeshtë. Zgjidhni pajisjen që i përshtatet nevojave tona. Më pas, zgjedhim imazhin FreeBSD. Ose lidhemi (në rast të një hosti tjetër dhe pajisjes sonë) përmes IPMI ose me monitorin dhe shkembejmë imazhin .iso të FreeBSD në ngarkesë. Për instalimin orkestral, unë përdor Ansible dhe mfsbsd. E vetmja gjë është se në rastin tonë me kimsufi, ne zgjodhëm instalimin personalizues për të pasur dy disqe në pasqyrë që njihen "të hapura" vetëm për partitë e ngarkesës dhe /home, hapësira tjetër e diskut do të jetë e enkriptuar, por për këtë do të flasim më vonë.

Bitcoin në kafaz?

Instalimi i sistemit ndodh në mënyrë standarde, nuk do të ndalem në këtë, vetëm do të theksoj se përpara fillimit të përdorimit duhet të kushtoni vëmendje ndaj forcimit opsioneve që ofron bsdinstaller në fund të instalimit (nëse e instaloni sistemin vetë):

Bitcoin në kafaz?

Ka material i mirë për këtë temë, shkurtimisht do ta përsëris këtu.

Aktivizimi i parametrave tĂ« lartpĂ«rmendur Ă«shtĂ« gjithashtu i mundur nĂ« njĂ« sistem tashmĂ« tĂ« instaluar. PĂ«r kĂ«tĂ« duhet tĂ« redaktoni skedarin e ngarkuesit dhe tĂ« aktivizoni parametrat e kernelit. *ee — Ă«shtĂ« njĂ« editor i tillĂ« nĂ« BSD

# ee /etc/rc.conf

...
#sec hard
clear_tmp_enable="YES"
syslogd_flags="-ss"    
sendmail_enable="NONE"

# ee /etc/sysctl.conf

...
#sec hard
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=$(jot -r 1 9999)
security.bsd.stack_guard_page=1

Gjithashtu është e rëndësishme të siguroheni që keni instaluar versionin më të fundit të sistemit, dhe të bëni të gjitha azhurnimet dhe përmirësimet. Në rastin tonë, për shembull, kërkohet përmirësimi në versionin më të fundit, pasi imazhet paraprakisht të instaluara janë me vonesë nga gjashtë muaj në një vit. Dhe aty ndryshojmë portin SSH në një që është ndryshe nga ai i parazgjedhur, shtojmë autentifikimin me çelësa dhe e çaktivizojmë me fjalëkalim.

Më pas konfiguroni aide, monitorimin e gjendjes së skedave të konfigurimit të sistemit. Më shumë mund të lexoni këtu.

pkg install aide

dhe redaktoni tabelën tuaj të 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/$MYFILENAME

Aktivizoni auditimi i sistemit

sysrc auditd_enable=YES

# service auditd start

Si ta administrojmë këtë është përshkruar shkëlqyer në udhëzimin.

Tani rinisni dhe filloni me softuerin nĂ« server. Çdo server pĂ«rfaqĂ«son njĂ« hipervizor pĂ«r kontejnerĂ« ose makina virtuale tĂ« plota. Prandaj, Ă«shtĂ« e rĂ«ndĂ«sishme qĂ« procesori tĂ« mbĂ«shtesĂ« VT-x dhe EPT nĂ«se planifikojmĂ« tĂ« pĂ«rdorim virtualizim tĂ« plotĂ«.

Si menaxhim për kontejnerët dhe makinat virtuale unë përdor cbsd nga olevole, dëshiroj shëndet dhe bekim më të madh për këtë utilitar të mrekullueshëm!

Kontejnerët? Po, sërish docker?

Jo, aspak. FreeBSD Jails – Ă«shtĂ« njĂ« mjet i shkĂ«lqyer pĂ«r kontejnerizimin, dhe pĂ«rmenduri cbsd pĂ«r orkestrimin e kĂ«tyre kontejnerĂ«ve, emri i tij Ă«shtĂ« - qeliza.

Kletka është një zgjidhje jashtëzakonisht efektive për ndërtimin e infrastrukturës për qëllime të ndryshme, ku në fund kërkohet izolimi i plotë i shërbimeve ose proceseve të veçanta. Në thelb, kjo është një klon i sistemit host, por nuk kërkon virtualizim të plotë të "harduerit". Dhe burimet, falë kësaj, nuk shpenzohen për "OS-në mikpritëse", por vetëm për punën që po kryhet. Kur kletkat përdoren për nevoja të brendshme, kjo është një zgjidhje shumë e përshtatshme për përdorimin optimal të burimeve - një mori kletkash në një server fizik mund të përdorin secila veçmas të gjithë burimin e serverit kur është e nevojshme. Duke marrë parasysh se zakonisht nën-shërbimeve të ndryshme u nevojiten burime shtesë në kohë të ndryshme, mund të nxjerrim maksimale nga një server, nëse planifikojmë dhe shpërndajmë saktë kletkat midis serverëve. Në rast nevoje, kletkat mund të kenë gjithashtu limite të vendosura për burimin e përdorur.

Bitcoin në kafaz?

E çfarë është me virtualizimin e plotë?

Sa di unë, cbsd përkrah punën bhyve dhe hipervizorët XEN. Të dytin nuk e kam përdorur kurrë, por i pari është një hipervizor relativisht i ri i FreeBSD.Ne do të shqyrtojmë një shembull të përdorimit bhyve në shembullin më poshtë.

Instalimi dhe konfigurimi i ambientit të hostit

Ne përdorim FS-in ZFS.Ky është një instrument jashtëzakonisht i fuqishëm për menaxhimin e hapësirës në server. Falë ZFS, mund të ndërtohen drejtpërdrejt nga diskët RAID të ndryshme konfiguracionesh, të zgjerohen dinamikisht "në nxehtë", të zëvendësohen diskët e vdekur, të menaxhohen snapshot-et dhe shumë, shumë më tepër që mund të përshkruhen në një seri article. Të kthehemi te serveri ynë dhe diskët e tij. Në fillim të instalimit, ne lanë hapësirë të lirë për ndarjet e enkriptuara. Pse kështu? Kjo është për të bërë që sistemi të ngrihet automatikisht dhe të dëgjojë përmes SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

shtojmë një ndarje disku në hapësirën e mbetur

geli init /dev/ada0p4

shkruajmë fjalëkalimin tonë të enkriptimit

geli attach /dev/ada0p4

përsëri shkruajmë fjalëkalimin dhe na shfaqet pajisja /dev/ada0p4.eli - kjo është hapësira jonë e enkriptuar. Pastaj e përsërisim të njëjtën gjë për /dev/ada1 dhe diskët e tjerë në RAID. Dhe krijojmë një ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - mirë, kemi paketën minimale të gatshme për luftë. Një RAID i pasqyruar i diskëve për rastin e daljes jashtë funksioni të njërit nga tre.

Krijojmë një dataset në 'pulin' e ri

zfs create vms/jails

pkg install cbsd - nisëm komandën, dhe po instalojmë menaxhimin për qelizat tona.

Pasi që cbsd është instaluar, është e nevojshme ta inicializojmë:

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

dhe përgjigjemi në një mori pyetjesh, kryesisht me përgjigje siç është në parazgjedhje.

* Nëse po përdorni enkriptim, është e rëndësishme që demon cbsdd të mos startojë automatikisht, derisa të dekriptoj diskët dorazi ose automatikisht (në shembullin tonë, kjo bëhet nga zabbix)

** Po ashtu nuk përdor NAT nga cbsd, por e konfigurimin vetë në 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 për qelitë
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

## Porti i rrjetit Bitcoin për të kaluar
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

Konfigurimi i politikave të firewall-it është gjithashtu një temë e veçantë, prandaj nuk do të thellohem në konfigurimin e politikës BLOCK ALL dhe konfigurimet e listave të bardha, mund ta bëni duke lexuar dokumentacionin zyrtar apo ndonjë nga një numër të madh artikujsh të disponueshëm në google.

Epo, kemi instaluar cbsd, është koha për të krijuar kalë tonë të parë të punës - demonin e Bitcoin në qeli!

cbsd jconstruct-tui

Bitcoin në kafaz?

Këtu shohim dialogun e krijimit të qelisë. Pasi të kemi vendosur të gjitha vlerat, krijojmë!

Kur krijoni qelinë e parë, duhet të zgjidhni çfarë të përdorni si bazë për qelitë. Unë zgjedh distribucionin nga repozitorin FreeBSD me komandën repo. Ky zgjedhje bëhet vetëm gjatë krijimit të qelisë së parë për versionin specifik (mund të akomodoni qelitë e çdo versioni që është më i vjetër se versioni i hostit).

Pasi që gjithçka është instaluar - nisni qelinë!

# cbsd jstart bitcoind

Por na nevojitet të instalojmë softverin në qeli.

# jls

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

jexec bitcoind për të hyrë në konsolën e qelisë

dhe brenda qelisë instalojmë softverin me varësitë e tij (sistemi ynë host mbetet i pastër)

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

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

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

Bitcoin në qeli është, por na nevojitet anonimati, sepse duam të lidhemi me disa qeli përmes rrjetit TOR. Dhe në përgjithësi, kemi në plan që shumicën e qelive me softver të dyshimtë t'i menaxhojmë vetëm përmes proxy. pf mund të çaktivizojë NAT për një gamë të caktuar adresash IP në rrjetin lokal dhe të lejojë NAT vetëm për nodin tonë TOR. Kështu që edhe nëse ndonjë malware hyn në kafaz, ka shumë të ngjarë të mos mund të komunikojë me botën e jashtme, dhe nëse e bën, nuk do të zbulojë IP-në e serverit tonë. Prandaj krijojmë një kafaz tjetër për "kalimin" e shërbimeve si shërbimi ".onion" dhe si një proxy për dalje në internet për kafazet e ndara.

# 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

Vendosim të dëgjojmë në adresën lokale (për të gjitha kafazet e aksesueshme)

SOCKSPort 192.168.0.2:9050

ÇfarĂ« na mungon tjetĂ«r pĂ«r lumturinĂ« e plotĂ«. Po, na nevojitet njĂ« shĂ«rbim pĂ«r webin tonĂ«, ndoshta jo vetĂ«m njĂ«. Do tĂ« nisim nginx, i cili do tĂ« ushtrojĂ« rolin e reverse-proxy dhe do tĂ« kujdeset pĂ«r rinovimin e certifikatave Let’s Encrypt.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Dhe kështu 150 MB varësish e vendosëm në kafaz. Ndërsa hosti mbetet i pastër.

Do të kthehemi në konfigurimin e nginx më vonë, na nevojitet të ngremë dy kafaze tjera për portofolin tonë të pagesave në nodejs dhe rust dhe për aplikacionin web, i cili për ndonjë arsye është në apache dhe php, si dhe për të fundit na nevojitet një DB 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


 dhe 380 MB paketesh të izoluara

Më pas shkarkojmë aplikacionin tonë me git dhe e nisim.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB paketesh. në kafaz.

Këtu jepim akses për zhvilluesin përmes SSH direkt në kafaz, ata do ta bëjnë vetë gjithçka:

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

Port 2267 — ndryshojmĂ« portin e SSH tĂ« kafazit nĂ« njĂ« port tĂ« rastĂ«sishĂ«m

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

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

Ja pra, shërbimi është nisur, vetëm duhet të shtojmë një rregull në pf firewall

Le të shohim cilat janë IP-të e kafazeve dhe si duket "lokalja" jonë

# 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

dhe do të shtojmë një rregull

# 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

njësoj dhe duke qenë se jemi këtu, do të shtojmë gjithashtu një rregull për 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

Tani, pak rreth bitcoinëve

ÇfarĂ« kemi — kemi njĂ« aplikacion web, qĂ« Ă«shtĂ« i aksesueshĂ«m nga jashtĂ«, dhe ai komunikon lokalisht me portofolin tonĂ« tĂ« pagesave. Tani na nevojitet tĂ« pĂ«rgatisim njĂ« mjedis pune pĂ«r t'u ndĂ«rlidhur me rrjetin e bitcoin-it vetĂ« — nodin bitcoind Ky Ă«shtĂ« thjesht njĂ« demon qĂ« mbĂ«shtet njĂ« kopje lokale tĂ« blockchain-it aktual. Ky demon ka RPC dhe funksionalitet tĂ« portofolit, megjithatĂ« pĂ«r zhvillimin e aplikacioneve ka "mbĂ«shtetje" mĂ« tĂ« pĂ«rshtatshme. NĂ« fillim, ne vendosĂ«m ta instalojmĂ« electrum — Ă«shtĂ« njĂ« portofol CLI. Ky portofol do tĂ« pĂ«rdoret si "ruajtje e ftohtĂ«" pĂ«r bitcoinĂ«t tanĂ« — nĂ« pĂ«rgjithĂ«si ato bitcoinĂ« qĂ« duhet tĂ« ruhen "jashtĂ«" sistemit qĂ« Ă«shtĂ« i aksesueshĂ«m pĂ«r pĂ«rdoruesit dhe gjithashtu sa mĂ« larg tĂ« jetĂ« e mundur nga tĂ« tjerĂ«t. Ai gjithashtu ka GUI, prandaj tĂ« njĂ«jtin portofol do ta pĂ«rdorim edhe nĂ«
laptopët tanë. Aktualisht do ta përdorim electrum me serverë publikë, dhe më vonë do të ngrisim një tjetër qelizë ElectrumX, në mënyrë që të mos varemi nga askush.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

edhe 700 MB softueri është në qelizën tonë

electrum: /@[8:53] # adduser

Emri i përdoruesit: wallet
Emri i plotë: 
Uid (Lëni bosh për default): 
Grupi i hyrjes [wallet]: 
Grupi i hyrjes është wallet. A dëshiron të ftesh wallet në grupe të tjera? []: 
Klasa e hyrjes [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Katalogu i shtëpisë [ /home /wallet]: 
Lejet e katalogut të shtëpisë (Lëni bosh për default): 
A do të përdorë autentifikimin me fjalëkalim? [po]: jo
A do ta bllokosh llogarinë pas krijimit? [jo]: 
Emri i përdoruesit: wallet
Fjalëkalimi: 
Emri i plotë: 
Uid: 1001
Klasa: 
Grupet: wallet 
Shtëpia: /home/wallet
Mënyra e Shtëpisë: 
Shell: /bin/tcsh
E bllokuar: jo
OK? (po / jo): po
adduser: INFO: Suksesshëm e shtoi (wallet) në bazën e të dhënave të përdoruesve.
A dëshiron të shtosh një përdorues tjetër? (po / jo): jo
Mirupafshim!
electrum: /@[8:53] # su wallet

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

wallet@electrum: / % electrum-3.6 create

{
    "msg": "Të lutem mbajeni farën tuaj në një vend të sigurt; nëse e humbni, nuk do të mund të rindërtoni portofolin tuaj.",
    "path": " /usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "xhelozë fitne material shirit njëndërr vizual mirë cactus rastësor zog"
}

Tani kemi krijuar portofolin.

wallet@electrum: / % electrum-3.6 listaddresses

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

wallet@electrum: / % electrum-3.6 help

Për portofolin tonë on-chain do të mund të lidhen vetëm një grup i kufizuar njerëzish. Për të mos e hapur qasjen nga jashtë në këtë qelizë, lidhjet përmes SSH do të ndodhin përmes TOR (një variant decentralizuar i VPN). Ne e nisëm SSH-në në qelizë, por nuk e prekim pf.conf-in tonë në host.

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

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

Tani do ta çaktivizojmë qelizën me portofolin nga interneti. Do t'i vendosim një adresë IP nga një hapësirë tjetër të nënrrjetit, e cila nuk NAT-izohet. Fillimisht do të ndryshojmë /etc/pf.conf në host

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" do ta ndryshojmë në JAIL_IP_POOL="192.168.0.0/25", kështu që të gjitha adresat 192.168.0.126-255 nuk do të kenë qasje direkte në internet. Një lloj rrjeti software «air-gap». Dhe rregulli NAT mbetet siç ishte.

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

Riinizojmë rregullat

# pfctl -f /etc/pf.conf

Tani merremi me kafazit tonë

# cbsd jconfig jname=electrum

Bitcoin në kafaz?

Bitcoin në kafaz?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Heqim IP-në e vjetër: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Cakto IP-në e re: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Hmm, por tani sistemi ynë do të ndalojë gjithashtu së funksionuari. Megjithatë, mund të tregojmë proxy-në sistemike. Por ka një porosi, në TOR është proxy SOCKS5, dhe për lehtësi do të na duhej gjithashtu një proxy HTTP.

# 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

Ja, tani në sistemin tonë kemi dy serverë proxy, dhe të dy dalin përmes TOR: socks5://192.168.0.2:9050 dhe http://192.168.0.6:8123

Tani mund të konfigurojmë ambientin e portofolit tonë

# 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

pra tani shell-i do të punojë nën proxy. Nëse duam të instalojmë pakot, është mirë të shtojmë në /usr/local/etc/pkg.conf nga rrënjësia e kafazit

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

Tani është koha për të shtuar shërbimin e fshehtë TOR si adresë për shërbimin tonë SSH në kafazin e portofolit.

# 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

Ja adresa jonë për lidhje. Le të kontrollojmë nga makina lokale. Por së pari duhet të shtojmë çelësin tonë SSH:

wallet@electrum:/ % mkdir ~/ .ssh

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

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

Po dhe nga makina kliente me Linux

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

Po lidhemi (Për të punuar kjo, nevojitet një demon lokal TOR, i cili dëgjon në 9050)

user@local ~$ ssh remotebtc

Autenticiteti i host-it 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' nuk mund të vendoset.
Gishtin e kyçit ECDSA është SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
A jeni të sigurt që dëshironi të vazhdoni lidhjen (po/jo/[gisht])? po
Kujdes: Shtuar përherë 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) në listën e hosteve të njohur.
FreeBSD 12.1-RELEASE-p1 GENERIC 
Për të kursyer hapësirë në disqet në direktorinë tuaj të shtëpisë, kompresoni skedarët që përdorni rrallë
me "gzip filename".
        -- Dru <genesis@istar.ca>
wallet@electrum:~ % logout

Sukses!

Për të punuar me pagesat momentale dhe mikro, na nevojitet gjithashtu një nodë Lightning Network, kjo do të jetë mjeti ynë kryesor për punën me Bitcoin. Në *c-lightning, i cili do të përdoret si demon, ka pluginin Sparko, i cili është një ndërfaqe e plotë HTTP (REST) dhe lejon punimin si me transaksionet off-chain ashtu edhe me ato on-chain. c-lightning për funksionimin e tij ka nevojë për bitcoind noda.

*ka realizime të ndryshme në gjuhë të ndryshme të programimit për protokollin Lightning Network. Nga ato që kemi testuar, c-lightning (i shkruar në C) doli të jetë më stabil dhe më ekonomik në burime.

# 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

Ndërsa po kompilojmë dhe instalojmë gjithçka të nevojshme, le të krijojmë një përdorues RPC për lightningd në bitcoind

# jexec bitcoind

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

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#lejo vetëm c-lightning
rpcallowip=192.168.0.7/32

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

Ndërrimi im kaotik midis qelizave duket se nuk është kaotik fare nëse shënojmë utilitarin tmux, i cili lejon krijimin e shumë nën-seancave terminale brenda një seance. Analogu: screen

Bitcoin në kafaz?

Së pari, nuk duam të ekspozojmë IP-në reale të nodës tonë, dhe duam të realizojmë të gjitha operacionet financiare përmes TOR. Prandaj na nevojitet një tjetër .onion.

# jexec tor

tor:/@[9:59] # ee /usr/local/etc/tor/torrc

HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735

tor:/@[10:01] # mkdir /var/db/tor/cln

tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/cln

tor:/@[10:01] # chmod 700 /var/db/tor/cln

tor:/@[10:03] # service tor restart

tor:/@[10:04] # cat /var/db/tor/cln/hostname

en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion

tani le të krijojmë konfigurinë për 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

# plugin sparko
# 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
# për shembullin e sipërm logjet e inicializimit (të përziera me logjet e lightningd) duhet të printojnë diçka të tillë

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 ~

duhet gjithashtu të krijoni një skedë konfigurimi për bitcoin-cli, mjeti që komunikon me bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

po e kontrollojmë

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

[
  "test"
]

në funksion lightningd

lightning@lightning:~ % lightningd --daemon

Wine lightningd mund të menaxhoni mjetin lightning-cli, për shembull:

lightning-cli newaddr merrni një adresë për një pagesë të re hyrëse

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all dërgoni të gjitha paratë e portofolit (të gjitha adresat on-chain)

Po ashtu janë komandat për operacione off-chain lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay etj.

E për këtë komunikim me aplikacionin, kemi REST Api

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

Le të përmbledhim

# 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 në kafaz?

Ne kemi një grup konteinerësh, çdo një me nivelin e vet të aksesit si brenda ashtu edhe jashtë rrjetit lokal.

# 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

Si e duket, bitcoind zĂ« tĂ« gjitha 190 GB hapĂ«sirĂ«. ÇfarĂ« nĂ«se na nevojitet njĂ« nodĂ« tjetĂ«r pĂ«r teste? KĂ«tu ZFS Ă«shtĂ« nĂ« fakt shumĂ« i dobishĂ«m. Me ndihmĂ«n e cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com mund tĂ« krijojmĂ« njĂ« snapshots dhe ta lidhim njĂ« qelizĂ« tĂ« re me kĂ«tĂ« snapshots. Qeliza e re do tĂ« ketĂ« hapĂ«sirĂ«n e saj tĂ« plotĂ«, por nĂ« sistemin e skedarĂ«ve do tĂ« llogaritet vetĂ«m diferenca mes gjendjes aktuale dhe origjinalit (do tĂ« kursenim tĂ« paktĂ«n 190 GB)

Çdo qelizĂ« Ă«shtĂ« njĂ« dataset i veçantĂ« ZFS, dhe kjo Ă«shtĂ« shumĂ« e pĂ«rshtatshme. ZFS gjithashtu lejon tĂ« bĂ«jmĂ« gjĂ«ra tĂ« tjera interesante, si dĂ«rgimin e snapshots nĂ«pĂ«rmjet SSH. Nuk do ta pĂ«rshkruajmĂ« kĂ«tĂ«, ka shumĂ« pĂ«r tĂ« thĂ«nĂ«.

Gjithashtu, është e rëndësishme të theksohet nevoja për monitorimin e distancës të hostit, për këto qëllime Zabbix.

B — siguria

Sa i përket sigurisë, le të fillojmë nga parimet kyçe në kontekstin e infrastrukturës:

PrivatĂ«sia — Mjetet standarde tĂ« sistemeve UNIX-like sigurojnĂ« pĂ«rmbushjen e kĂ«tij principi. Ne ndajmĂ« logjikisht qasjen nĂ« çdo element tĂ« veçantĂ« tĂ« sistemit — qelizĂ«n. Qasja bĂ«het nĂ«pĂ«rmjet autentikimit standard tĂ« pĂ«rdoruesve me çelĂ«sa privatĂ«. TĂ« gjitha komunikimet mes dhe deri te qelizat pĂ«rfundimtare ndodhin nĂ« mĂ«nyrĂ« tĂ« enkriptuar. FalĂ« enkriptimit tĂ« disqeve ne mund tĂ« mos shqetĂ«sohemi pĂ«r ruajtjen e tĂ« dhĂ«nave gjatĂ« zĂ«vendĂ«simit tĂ« disqeve ose migrimit nĂ« njĂ« server tjetĂ«r. Qasja e vetme kritike Ă«shtĂ« ajo nĂ« sistemin host, pasi kjo qasje siguron, nĂ« pĂ«rgjithĂ«si, qasje nĂ« tĂ« dhĂ«nat brenda kontejnerĂ«ve.

Integriteti — PĂ«rmbushja e kĂ«tij principi ndodh nĂ« disa nivele tĂ« ndryshme. SĂ« pari, Ă«shtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se nĂ« rastin e pajisjeve serverike, memoria ECC, ZFS tashmĂ« "nga kutia" kujdeset pĂ«r integritetin e tĂ« dhĂ«nave nĂ« nivel bitesh. Snapshots momentalĂ« lejojnĂ« kopjimin nĂ« çdo moment nĂ« kohĂ«. Mjetet e reja tĂ« eksportimit-importimit tĂ« qelizave e bĂ«jnĂ« tĂ« lehtĂ« replikimin e qelizave.

DisponueshmĂ«ria — Kjo Ă«shtĂ« opsionale. Varet nga shkalla e njohjes suaj dhe nga fakti qĂ« keni armiq. NĂ« shembullin tonĂ«, ne siguruam aksesin nĂ« portofol ekskluzivisht nga rrjeti TOR. NĂ«se Ă«shtĂ« e nevojshme, mund tĂ« bllokoni gjithçka nĂ« firewalls dhe tĂ« lejoni aksesin nĂ« server vetĂ«m pĂ«rmes tunelesh (TOR ose VPN Ă«shtĂ« njĂ« pyetje tjetĂ«r). KĂ«shtu serveri do tĂ« jetĂ« i izoluar sa mĂ« shumĂ« nga bota e jashtme, dhe ne do tĂ« jemi ata qĂ« do tĂ« ndikojmĂ« nĂ« disponueshmĂ«rinĂ« e tij.

PaaftĂ«sia pĂ«r tĂ« refuzuar — Kjo varet nga pĂ«rshtatja e mĂ«tjeshme dhe pĂ«rmbushja e politikave tĂ« drejta tĂ« tĂ« drejtave tĂ« pĂ«rdoruesve, aksesit etj. Por me njĂ« qasje tĂ« duhur, tĂ« gjitha veprimet e pĂ«rdoruesve auditohen, dhe falĂ« zgjidhjeve kriptografike Ă«shtĂ« e mundur tĂ« identifikohet me saktĂ«si kush e kur ka bĂ«rĂ« veprime tĂ« caktuara.

Sigurisht, konfigurimi i përshkruar nuk është një shembull absolut se si duhet të jetë gjithmonë, është më shumë një nga shembujt se si mund të jetë, duke ruajtur mundësi shumë elastike për shkallëzim dhe personalizim.

Po si është me virtualizimin e plotë?

Për virtualizimin e plotë me mjete cbsd mund të lexoni këtu. Do të shtoja vetëm se për punët bhyve duhet të aktivizoni disa parameter të bërthamës.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Kështu që nëse papritmas ka nevojë të ngremë docker, atëherë ngritni ndonjë debian dhe përpara!

Bitcoin në kafaz?

Kjo është gjithçka

Mendoj se kjo Ă«shtĂ« gjithçka qĂ« doja tĂ« ndaja. NĂ«se ju pĂ«lqeu artikulli, mund t’i dergoni disa bitcoin — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. NĂ«se dĂ«shironi tĂ« provoni qelizat nĂ« veprim dhe keni pak bitcoin, mund tĂ« hyni nĂ« projektin tim pet-project.

Burimi: habr.com

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster