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

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

Ka 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=1Gjithashtu është e rëndësishme të siguroheni që keni instaluar versionin më të fundit të sistemit, dhe . 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 .
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/$MYFILENAMEAktivizoni
sysrc auditd_enable=YES
# service auditd start
Si ta administrojmë këtë është përshkruar shkëlqyer në .
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 nga , 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. â Ă«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.

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

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/bitcoindjexec 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/webappdhe 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. 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ë , 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 walletelectrum: /@[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


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.200Hmm, 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 = socks5polipo:/@[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
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:8123pra 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: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 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@localPo 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ë , kjo do të jetë mjeti ynë kryesor për punën me Bitcoin. Në *, i cili do të përdoret si demon, ka , 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/32bitcoind:/@[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

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: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 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=testpo 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
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-dataSi 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. 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 .
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 . 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!

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