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 , 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 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 dhe . 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ë.

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):

Ka 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=1Gjithashtu, është e rëndësishme të siguroheni që keni versionin më të fundit të sistemit, dhe . 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 .
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/$MYFILENAMEAktivizojmë
sysrc auditd_enable=YES
# service auditd start
Si mund të administrohet kjo është përshkruar shkëlqyeshëm në .
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 nga , i uroj shëndet dhe mirësi për këtë utilitar të shkëlqyer!
Kontejnerë? Përsëri docker apo jo?
Epo, jo. â 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.

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 . Ne do të shqyrtojmë një shembull përdorimi bhyve në shembullin më poshtë.
Instalimi dhe konfigurimi i ambientit të hostit
Ne përdorim FS . 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 .
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 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

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/bitcoindjexec 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/webappdhe 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. 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ë , 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


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.200Hm, 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 = socks5polipo:/@[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
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:8123ja, 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:22tor:/@[10:01] # mkdir /var/db/tor/electrum
tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/electrum
tor:/@[10:01] # chmod 700 /var/db/tor/electrum
tor:/@[10:03] # service tor restart
tor:/@[10:04] # cat /var/db/tor/electrum/hostname
mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onionJa, 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@localPë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ë , në fakt ky do të jetë instrumenti ynë kryesor për punën me bitcoin. Në *, që ne do të përdorim si demon, ka , 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/32bitcoind:/@[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

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:9735tor:/@[10:01] # mkdir /var/db/tor/cln
tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/cln
tor:/@[10:01] # chmod 700 /var/db/tor/cln
tor:/@[10:03] # service tor restart
tor:/@[10:04] # cat /var/db/tor/cln/hostname
en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.oniontani 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 silightning@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=testverifikojmë
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
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-dataSiç 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. 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 .
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ë . 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!

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 â . NĂ«se dĂ«shironi tĂ« provoni qelizat nĂ« veprim dhe keni pak bitcoin, mund tĂ« vizitoni projektin tim .
Burimi: habr.com
