Bitcoin në kafaz?

Rasti se që unë jam profesionist në menaxhimin e sistemeve kompjuterike dhe rrjeteve (ndryshe: sistem administrator), dhe kam pasur mundësinë të punoj për pak më shumë se 10 vjet në sistemet e ndryshme, duke përfshirë ato që kërkojnë masa të rrepta sigurie. Për më tepër, disa kohë më parë, kam gjetur interesante bitcoin, dhe jo vetëm që e kam përdorur, por kam nisur disa mikro-servis që të mësoj të punoj vetë me rrjetin e bitcoin-it (që është p2p, siç është). Por nuk po flas për zhvillimin, po flas për një ambient të sigurt dhe efikas për aplikacionet. dev, kështu, kalova përmes). Por nuk po flas për zhvillimin, po për një ambient të sigurt dhe efikas për aplikacione.

Teknologjitë financiare (fintech) shoqërohen me sigurinë informatike (infosec) dhe e para mund të funksionojë pa të dytën, por jo për një kohë të gjatë. Prandaj, dua të ndaj përvojën time dhe grupin e mjeteve që përdor, i cili përfshin si fintech, ashtu edhe infosec, në të njëjtën kohë, por gjithashtu mund të përdoret edhe për qëllime më të gjera ose krejtësisht të ndryshme. Në këtë artikull do të flas më shumë jo vetëm për bitcoin-in, por për modelin e infrastrukturës për zhvillimin dhe operimin e shërbimeve financiare (dhe jo vetëm) - me një fjalë, për ato shërbime ku "B" ka rëndësi. Kjo është e aplikueshme për një burse bitcoin, por edhe për një zgjidhje të zakonshme të shërbimeve të korporatave të vogla që nuk kanë lidhje me bitcoin-in.

Dua të theksoj se unë mbështes parimet "mbaje të thjeshtë" dhe "më pak është më shumë", prandaj si artikulli ashtu edhe përmbajtja e tij do të ketë karakteristika që i përkasin këtyre parimeve.

Një skenar imaginar: Le të shohim gjithçka me shembuj të një këmbimi bitcoin. Ne vendosëm të fillojmë një këmbim të rubleve, dollarëve, eurove në bitcoin dhe anasjelltas, dhe ne tashmë kemi një zgjidhje funksionale, por për monedha të tjera digjitale si qiwi dhe webmoney, dmth. ne kemi zgjidhur të gjitha çështjet ligjore, kemi një aplikacion të gatshëm që funksionon si një portë pagesash për rubla, dollarë dhe euro dhe sisteme të tjera pagesash. E lidhur me llogaritë tona bankare dhe ka një API për aplikacionet tona përfundimtare. Po ashtu, kemi një aplikacion web që funksionon si këmbim për përdoruesit, si një kabinet tipik qiwi ose webmoney - regjistrohuni, shtoni një kartë dhe kështu me radhë. Ajo komunikon me aplikacionin tonë të portave, le të themi përmes REST API në lokal. Dhe ja, ne vendosëm të lidhim bitcoin-in dhe për njëkohësisht të përmirësojmë infrastrukturën, pasi fillimisht gjithçka ishte ngritur me ngut në virtualbox në zyrë nën tavolinë... njerëzit e filluan të ecnin, dhe ne filluam të shqetësoheshim për uptime dhe performancën.

Pra, le të fillojmë me thelbin - zgjedhjen e serverit. Duke qenë se biznesi në shembullin tonë është i vogël dhe ne i besojmë host-it (OVH) ne do të zgjedhim një variant buxhetor në të cilin nuk mund të instalojmë sistemin nga imazhi origjinal .iso, por nuk është problem, departamenti i sigurisë IT do të bëjë patjetër një analizë të imazhit të instaluar. Kur të rritemi, mund të marrim me qira një dollap të mbyllur me qasje fizike të kufizuar, ose ndoshta të ndërtomë dhe 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 mundësi që në sistemin tuaj të ketë "trajan nga host-i", i cili në shumicën e rasteve nuk ka për qëllim t'ju mbajë nën monitorim, por për t'ju ofruar mjete më të përshtatshme për menaxhimin e serverit.

Instalimi i serverit

Këtu është e thjeshtë. Zgjidhni pajisjet që i përshtaten nevojave tona. Pastaj zgjedhim imazhin FreeBSD. Ose lidhemi (nëse jemi në një host tjetër dhe me pajisje tona) përmes IPMI ose me monitor dhe ngarkojmë imazhin .iso të FreeBSD. Për instalimin orkestral përdor Ansible dhe mfsbsd. E vetmja gjë, në rastin tonë me kimsufi, ne zgjedhim instalimin e zakonshëm për të siguruar që dy diskët në mirror kanë "të hapura" vetëm partitë boot dhe /home, pjesa tjetër e hapësirës së diskut do të jetë e enkriptuar, por për këtë më vonë.

Bitcoin në kafaz?

Instalimi i sistemit zhvillohet në mënyrë standarde, nuk do të ndalem në këtë, do të theksoj vetëm se para fillimit të shfrytëzimit duhet të kushtoni vëmendje hardening opsioneve që ofron bsdinstaller në fund të instalimit (nëse e instaloni vetë sistemin):

Bitcoin në kafaz?

Ka material i mirë në këtë temë, përmbledhës do ta përsëris këtu.

Aktivizimi i parametrave të përmendur më sipër është gjithashtu i mundur në një sistem të instaluar tashmë. Për këtë duhet të redaktoni skedarin e ngarkuesit dhe të aktivizoni parametrat e bërthamës. *ee - është një editor 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 versionin më të fundit të sistemit, dhe të kryeni të gjitha përditësimet dhe përmirësimet. Në rastin tonë, për shembull, kërkojmë një përmirësim në versionin më të fundit, sepse imazhet e paraprakisht të instaluara janë pas 6 muajsh deri në 1 vit. Po ashtu, ndryshojmë portin SSH në një tjetër që nuk është ai i paracaktuar, shtojmë autentikimin me çelësa dhe e çaktivizojmë atë me fjalëkalim.

Pastaj konfigurojmë aide, monitorimin e gjendjes së skedave të konfigurimit të sistemit. Më shumë në detaje mund të lexoni këtu.

pkg install aide

dhe redaktojmë crontabin tonë

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

Aktivizojmë auditimi i sistemit

sysrc auditd_enable=YES

# service auditd start

Si mund të administrohet kjo është përshkruar shkëlqyeshëm në udhëzimin.

Tani rindizemi dhe fillojmĂ« me softuerin nĂ« server. Çdo server Ă«shtĂ« njĂ« hipervizor pĂ«r kontejnerĂ«t ose makinat 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Ă«.

Për menaxhimin e kontejnerëve dhe makinave virtuale unë përdor cbsd nga olevole, i uroj shëndet dhe mirësi për këtë utilitar të shkëlqyer!

Kontejnerë? Përsëri docker apo jo?

Epo, jo. FreeBSD Jails — ky Ă«shtĂ« njĂ« instrument i shkĂ«lqyer pĂ«r kontejnerizimin, ndĂ«rsa i pĂ«rmenduri cbsd pĂ«r orkestrimin e kĂ«tyre kontejnerĂ«ve, i quajtur qeliza.

Qeliza Ă«shtĂ« njĂ« zgjidhje jashtĂ«zakonisht efikase pĂ«r ndĂ«rtimin e infrastrukturĂ«s pĂ«r qĂ«llime tĂ« ndryshme, ku nĂ« pĂ«rfundim kĂ«rkohet izolimi i plotĂ« i shĂ«rbimeve ose proceseve tĂ« veçanta. NĂ« thelb, kjo Ă«shtĂ« njĂ« klon i sistemit pritĂ«s, por nuk kĂ«rkon virtualizim tĂ« plotĂ« tĂ« hardware-it. Dhe burimet, prandaj, nuk shpenzohen pĂ«r 'sistemin operativ' tĂ« 'mikpritĂ«sit', por vetĂ«m pĂ«r punĂ«n qĂ« ekzekutohet. Kur qelizat pĂ«rdoren pĂ«r nevoja tĂ« brendshme, kjo Ă«shtĂ« njĂ« zgjidhje shumĂ« e pĂ«rshtatshme pĂ«r shfrytĂ«zimin optimal tĂ« burimeve — shumĂ« qeliza nĂ« njĂ« server metalik mund tĂ« pĂ«rdorin secila nĂ« veçanti gjithĂ« burimin e serverit kur Ă«shtĂ« e nevojshme. Duke pasur parasysh se zakonisht shĂ«rbimeve tĂ« ndryshme u duhen burime shtesĂ« nĂ« kohĂ« tĂ« ndryshme, mund tĂ« nxjerrim maksimale performancĂ« nga njĂ« server, nĂ«se planifikohet dhe balancohet siç duhet qelizat midis serverĂ«ve. NĂ« rast nevoje, qelizave mund t’u vihen gjithashtu kufizime pĂ«r burimet e pĂ«rdorura.

Bitcoin në kafaz?

Dhe çfarë po ndodh me virtualizimin e plotë?

Sa di, cbsd mbështet funksionimin bhyve dhe hipervizorët XEN. Nuk e kam përdorur asnjëherë të dytin, por i pari është një hipervizor relativisht i ri nga FreeBSD. Ne do të shqyrtojmë një shembull përdorimi bhyve në shembullin më poshtë.

Instalimi dhe konfigurimi i ambientit të hostit

Ne përdorim FS ZFS. Ky është një instrument jashtëzakonisht i fuqishëm për menaxhimin e hapësirës në server. Falë ZFS, mund të ndërtojmë drejtpërdrejt nga diskët grupe të konfigurimeve të ndryshme, të zgjasim hapësirën dinamikisht 'në ngarkesë', të zëvendësojmë diskë të vdekur, të menaxhojmë snapshot-et dhe shumë, shumë gjëra të tjera që mund të përshkruhen në një seri artikujsh. Të kthehemi në serverin tonë dhe diskët e tij. Në fillim të instalimit, ne lanë hapësirë të lirë në diskët për ndarjet e enkriptuara. Pse kështu? Kjo është për të siguruar që sistemi të ngrihej automatikisht dhe të dëgjonte përmes SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

shtojmë ndarjen e diskut në hapësirën e mbetur

geli init /dev/ada0p4

shtojmë fjalëkalimin tonë të enkriptimit

geli attach /dev/ada0p4

pĂ«rsĂ«ri futim fjalĂ«kalimin dhe na del pajisja /dev/ada0p4.eli — kjo Ă«shtĂ« hapĂ«sira jonĂ« e enkriptuar. Pastaj pĂ«rsĂ«risim tĂ« njĂ«jtĂ«n gjĂ« pĂ«r /dev/ada1 dhe diskĂ«t e tjerĂ« nĂ« grup. Dhe krijojmĂ« njĂ« tĂ« re ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli — mirĂ«, grupi ynĂ« minimal Ă«shtĂ« gati. NjĂ« grup i dyfishtĂ« diskĂ«sh nĂ« rast se njĂ«ri nga tre dĂ«shton.

Krijojmë një dataset të ri në 'pool'-in e ri

zfs create vms/jails

pkg install cbsd — ekzekutojmĂ« komandĂ«n dhe instalojmĂ« menaxhimin pĂ«r qelizat tona.

Pas cbsd instalimit, është e nevojshme ta inicializojmë:

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

po ashtu dhe përgjigjemi shumë pyetjeve, kryesisht me përgjigje të paracaktuar.

*Nëse përdorni enkriptim, është e rëndësishme që demoni cbsdd të mos niset automatikisht, derisa të dekriptojmë diskët manualisht ose automatikisht (në shembullin tonë, kjo e bën zabbix)

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

## Port për paraqitjen e rrjetit Bitcoin
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 konfigurimin e listave të bardha; kjo mund të bëhet duke lexuar dokumentacionin zyrtar ose çdo artikull të shumtë në dispozitë në Google.

Shiko mirë  kemi instaluar cbsd, Ă«shtĂ« koha tĂ« krijojmĂ« punĂ«torin tonĂ« tĂ« parĂ« — demonin e bitcoin nĂ« qelizĂ«!

cbsd jconstruct-tui

Bitcoin në kafaz?

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

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

Pasi gjithçka Ă«shtĂ« instaluar — aktivizojmĂ« qelinĂ«!

# cbsd jstart bitcoind

Por na nevojitet të instalojmë softin 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ë instalohet softi me varësitë e tij (sistemi ynë i hostit 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 ka, por na nevojitet anonimitet, pasi dëshirojmë të lidhemi me disa qeli përmes rrjetit TOR. Dhe në të vërtetë, ne kemi në plan që shumicën e qelive me soft të dyshimtë ta operojmë vetëm përmes proxy. Falë pf mund të çaktivizoni NAT për një gamë të caktuar IP adresash në rrjetin lokal, dhe të lejoni NAT vetëm për nyjën tonë TOR. Kështu, edhe nëse në qeli hyn ndonjë malware, është më e mundshme që të mos lidhet me botën e jashtme, dhe nëse lidhet, nuk do të zbulohet IP i serverit tonë. Prandaj, krijojmë edhe një qeli tjetër për "kalimin" e shërbimeve si "onion"-shërbim dhe si proxy për daljen në internet për qeli të veçanta.

# 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

Caktojmë të dëgjojë në adresën lokale (të gjithë qelitë kanë qasje)

SOCKSPort 192.168.0.2:9050

ÇfarĂ« na mungon pĂ«r tĂ« qenĂ« tĂ« plotĂ«? Po, na nevojitet njĂ« shĂ«rbim pĂ«r uebin tonĂ«, ndoshta edhe mĂ« shumĂ« se njĂ«. AktivizojmĂ« nginx, i cili do tĂ« veprojĂ« si 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 ja, 150 MB varësish i kemi vendosur në qeli. Dhe hosti ende mbetet i pastër.

Kthehemi te konfigurimi i nginx më vonë, duhet të ngritim edhe dy qeli për portën tonë të pagesave në nodejs dhe rust dhe aplikacionin web, i cili për ndonjë arsye është në apache dhe php, dhe gjithashtu për këtë 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 paketa të izoluar

më pas shkarkojmë aplikacionin tonë me git dhe e aktivizojmë.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB paketash. në qeli.

këtu i japim akses zhvilluesit përmes SSH direkt në qeli, ata vetë do ta bëjnë gjithçka:

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

Port 2267 — ndryshojmĂ« portin e SSH tĂ« qelisĂ« nĂ« ndonjĂ« port tĂ« rastĂ«sishĂ«m

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

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

Ja, shërbimi është aktivizuar, mbetet të shtojmë një rregull në pf firewall

Të shohim cilat janë IP-të tona të qelive dhe si duket në tërësi "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 le 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

dhe pasi që jemi këtu, le 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 bitcoinave

ÇfarĂ« kemi — kemi njĂ« aplikacion web, i cili Ă«shtĂ« i aksesueshĂ«m nga jashtĂ« dhe lokal komunikon me portĂ«n tonĂ« tĂ« pagesave. Tani na nevojitet tĂ« pĂ«rgatisim njĂ« ambient punues pĂ«r ndĂ«rveprimin me vetĂ« rrjetin e bitcoin - nodĂ«n bitcoind Ă«shtĂ« thjesht njĂ« demon qĂ« mban njĂ« kopje lokale tĂ« blockchain tĂ« tanishĂ«m. Ky demon ka RPC dhe funksionalitet tĂ« portofolit, megjithatĂ« pĂ«r zhvillimin e aplikacioneve ka “mbĂ«shtetje” mĂ« tĂ« pĂ«rshtatshme. Fillimisht kemi vendosur tĂ« instalojmĂ« electrum - kjo Ă«shtĂ« njĂ« portofol CLI. Ky portofol do tĂ« pĂ«rdoret si "depo e ftohtĂ«" pĂ«r bitcoinĂ«t tanĂ« — nĂ« pĂ«rgjithĂ«si ato bitcoinĂ« qĂ« duhet tĂ« ruhen "jashtĂ«" sistemit tĂ« aksesueshĂ«m pĂ«r pĂ«rdoruesit dhe nĂ« fakt larg tĂ« gjithĂ«ve. Ai gjithashtu ka GUI, prandaj ky portofol ne mendojmĂ« ta pĂ«rdorim nĂ«
laptopët tanë. Për momentin do të përdorim electrum me serverat publikë, dhe më vonë në një qeli tjetër do të ngremë ElectrumX, për të mos qenë fare të varur nga askush.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

550 MB softi është tashmë në qeli

electrum:/@[8:53] # adduser

Emri i përdoruesit: wallet
Emri i plotë: 
Uid (lëre bosh për të parën): 
Grupi i logins [wallet]: 
Grupi i logins është wallet. Do ta ftoni wallet në grupe të tjera? []: 
Klasa e logins [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Direktori i shtëpisë [/home/wallet]: 
Lejet e direktorive të shtëpisë (lëre bosh për të parën): 
A do të përdorim autentikimin me fjalëkalim? [po]: jo
A do të bllokojmë 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
I bllokuar     : jo
OK? (po/jo): po
adduser: INFO: Suksesshëm (wallet) është shtuar në bazën e të dhënave të përdoruesve.
Shtoni një përdorues tjetër? (po/jo): jo
Mirupafshim!

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

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

{
    "msg": "Ju lutem mbani farën tuaj në një vend të sigurt; nëse e humbni, nuk do të jeni në gjendje ta riktheni portofolin tuaj.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}

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ë ketë akses vetëm një grup i kufizuar personash. Për të mos hapur aksesin nga jashtë në këtë kafaz, lidhjet përmes SSH do të ndodhin përmes TOR (një variant i decentralizuar i VPN). Aktivizojmë SSH në kafaz, por nuk prekim pf.conf tonë në host.

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

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

Tani do ta çaktivizojmë kafazin me portofolin nga interneti. Do t'i japim një IP nga një hapësirë tjetër nënrrjeti, e cila nuk NAT-izohet. Së pari 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", në këtë mënyrë të gjitha adresat 192.168.0.126-255 nuk do të kenë qasje të drejtpërdrejtë në internet. Një rrjet "air-gap" software. Dhe rregulli NAT mbetet siç ishte

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

Rindezim rregullat

# pfctl -f /etc/pf.conf

Tani merremi me kafazin tonë

# cbsd jconfig jname=electrum

Bitcoin në kafaz?

Bitcoin në kafaz?

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

Hm, por tani do të ndalojë edhe sistemi të funksionojë. Megjithatë, mund të tregojmë një proxy sistemor. Por ka një problem, në TOR është SOCKS5 proxy, dhe për lehtësi na nevojitet gjithashtu një HTTP proxy.

# cbsd jsconstruct-tui

# cbsd jstart polipo

# jexec polipo

polipo:/@[9:28] # pkg install polipo

polipo:/@[9:28] # ee /usr/local/etc/polipo/config

socksParentProxy = "192.168.0.2:9050"
socksProxyType = socks5

polipo:/@[9:42] # sysrc polipo_enable=YES

polipo:/@[9:43] # service polipo start

Ja, tani kemi dy proxy-servera në sistemin tonë, 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

ja, tani shell do të funksionojë nën proxy. Nëse duam të instalojmë paketa, duhet ta shtojmë /usr/local/etc/pkg.conf nga superuser-i i kafazit

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

Tani ka ardhur koha të shtojmë shërbimin e fshehur TOR si adresën e shërbimit 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, kjo është adresa jonë për lidhje. Le të verifikojmë 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

Përgjithashtu me makinën klient 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ë funksionuar kështu kërkohet një demon lokal TOR, i cili dëgjon në portin 9050)

user@local ~$ ssh remotebtc

Autenticiteti i hostit 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' nuk mund të vendoset.
Sirë ECDSA është SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
A jeni të sigurt se dëshironi të vazhdoni lidhjen (po/jo/[fingerprint])? 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ë disku në direktoriumin tuaj, kompresoni skedarët që e përdorni rrallë
me "gzip filename".
        -- Dru <genesis@istar.ca>
wallet@electrum:~ % logout

Sukses!

Për të punuar me pagesa të menjëhershme dhe mikro, na nevojitet gjithashtu një nodë Lightning Network, në fakt ky do të jetë instrumenti ynë kryesor për punën me bitcoin. Në *c-lightning, që ne do të përdorim si demon, ka plugin-in Sparko, që është një ndërfaqe e plotë HTTP (REST) dhe lejon të punojmë me transaksionet off-chain dhe on-chain. c-lightning për funksionimin ne kërkojmë bitcoind noden.

*ka implementime të ndryshme në gjuhë të ndryshme programimi për protokollin Lightning Network. Nga ato që kemi testuar, c-lightning (i shkruar në C) duket më i stabilizuar dhe më efikas në burime

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/@[10:23] # adduser

Emri i përdoruesit: 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 kompilohen dhe instalohen të gjitha, 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

Këmbimi im kaotike mes kafazeve po rezulton të mos jetë aq kaotik nëse shënojmë utilitarin tmux, që lejon krijimin e shumë nën-seancave terminali brenda një seance. E ngjashme me: ekrani

Bitcoin në kafaz?

Pra, nuk duam të ekspozojmë IP-në tonë reale të nodës sonë, dhe duam të zhvillojmë të gjitha operacionet financiare përmes TOR. Për këtë na nevojitet një .onion tjetër.

# 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 do ta shfaqim konfigurimin 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

# 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
# për shembullin e mësipërm, regjistrat e inicializimit (të përziera me regjistrat e lightningd) duhet të printojnë diçka si

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, utiliteti që komunikon me bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

verifikojmë

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

[
  "test"
]

Analizoni raportin e Verifier. Nëse instalimi lejohet, kaloni më tej. lightningd

lightning@lightning:~ % lightningd --daemon

Wine lightningd mund të menaxhojmë utilitetin 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 në adresë (të gjitha adresat on-chain)

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

Ndërsa për komunikimin me aplikacionin kemi REST Api

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

Të bëjmë përmbledhje

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

Kemi një grumbull konteinerash, secili me nivelin e tij të qasjes si në rrjetin lokal ashtu edhe jashtë.

# zfs list

EMRI                    PËRDORUR  DISPONIBL  REFERIM  PIKËMARRJA
zroot                   279G  1.48T    88K  \/zroot
zroot\/ROOT             1.89G  1.48T    88K  asnjë
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ç duket, bitcoind zë të gjitha 190 GB hapësire. Po sikur të na nevojitet një node tjetër për teste? ZFS është kaq i përshtatshëm. Me anë të cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com mund të krijojmë një snapshot dhe të lidhim një qelizë të re me këtë snapshot. Qeliza e re do të ketë hapësirën e saj të plotë, por hapësira e llogaritur në sistemin e skedarëve do të jetë vetëm ndryshimi midis gjendjes aktuale dhe origjinalit (do të kursejmë të paktën 190 GB)

Çdo qelizĂ« Ă«shtĂ« njĂ« dataset i veçantĂ« ZFS, dhe kjo Ă«shtĂ« jashtĂ«zakonisht praktike. ZFS gjithashtu lejon tĂ« bĂ«jĂ« gjĂ«ra tĂ« tjera tĂ« shkĂ«lqyera, si dĂ«rgimin e snapshot-eve pĂ«rmes SSH. Nuk do ta pĂ«rshkruajmĂ« kĂ«tĂ«, Ă«shtĂ« tashmĂ« shumĂ«.

Duhet gjithashtu të theksoj nevojën për monitorimin e largët të hostit, për këtë qëllim Zabbix.

B — siguria

Sa i përket sigurisë, le të eci në përputhje me parimet kyçe në kontekstin e infrastrukturës:

Konfidencialiteti — Mjetet standarde tĂ« sistemeve UNIX-like sigurojnĂ« pĂ«rmbushjen e kĂ«tij parimi. Ne ndaje me logjikĂ« aksesin nĂ« çdo element tĂ« veçantĂ« tĂ« sistemit — qelizĂ«. Aksesi marrĂ«veshjet pĂ«rmes autentifikimit standard tĂ« pĂ«rdoruesve me çelĂ«sa privatĂ«. I gjithĂ« komunikimi midis dhe deri te qelizat pĂ«rfundimtare ndodh nĂ« formĂ« tĂ« kriptuar. FalĂ« kriptimit tĂ« diskĂ«ve ne mund tĂ« mos shqetĂ«sohemi pĂ«r ruajtjen e tĂ« dhĂ«nave gjatĂ« ndĂ«rrimit tĂ« diskut ose migrimit nĂ« njĂ« server tjetĂ«r. Aksesi i vetĂ«m kritik Ă«shtĂ« qasja nĂ« sistemin host, pasi ky akses siguron nĂ« pĂ«rgjithĂ«si aksesin nĂ« tĂ« dhĂ«nat brenda kontejnerĂ«ve.

Integriteti — Zbatimi i 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 kuti" ofron sigurinĂ« e tĂ« dhĂ«nave nĂ« nivelin e bitĂ«ve tĂ« informacionit. Snapshotet e menjĂ«hershme lejojnĂ« backup tĂ« çdo momenti nĂ« kohĂ« nĂ« mĂ«nyrĂ« tĂ« menjĂ«hershme. Mjetet e pĂ«rshtatshme pĂ«r eksport-import tĂ« qelizeve e bĂ«jnĂ« thjesht replicimin e qelizeve.

DisponueshmĂ«ria — KĂ«tu Ă«shtĂ« opsionale. Varet nga shkalla e njohjes suaj dhe ekzistenca e armiqĂ«ve tuaj. NĂ« shembullin tonĂ«, siguruan aksesin nĂ« portofolin ekskluzivisht nga rrjeti TOR. NĂ«se Ă«shtĂ« e nevojshme, mund tĂ« bllokoni gjithçka nĂ« firewall dhe tĂ« lejoni aksesin nĂ« server ekskluzivisht pĂ«rmes tunelesh (TOR ose VPN, Ă«shtĂ« njĂ« çështje tjetĂ«r). KĂ«shtu serveri do tĂ« jetĂ« i izoluar nga bota e jashtme sa mĂ« shumĂ« tĂ« mundet, dhe mund tĂ« ndikojmĂ« nĂ« disponueshmĂ«rinĂ« e tij vetĂ«m ne vetĂ«.

PamundĂ«sia e refuzimit — Ky proces varet nga pĂ«rdorimi i mĂ«tejshĂ«m dhe ruajtja e politikave tĂ« sakta tĂ« tĂ« drejtave tĂ« pĂ«rdoruesve, aksesit etj. Por me qasjen e duhur, tĂ« gjitha veprimet e pĂ«rdoruesve auditohet, dhe pĂ«r shkak tĂ« zgjidhjeve kriptografike Ă«shtĂ« e mundur tĂ« identifikohet saktĂ«sisht kush dhe kur ka kryer ato ose ato veprime.

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

Por siç është virtualizimi i plotë?

Për virtualizimin e plotë me mjete cbsd mund të lexohet këtu. Thjesht do të shtoja se për punën bhyve duhen përfshirë disa parametra të bërthamës.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Pra, nëse ndonjëherë keni nevojë për docker, atëherë ngrini një debian dhe përpara!

Bitcoin në kafaz?

Këtu e kemi

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

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster