Ndodhi që me profesion jam administrator i sistemeve dhe i rrjeteve kompjuterike (shkurt: administrator i sistemit), dhe pata rastin t'i tregoja për pak më shumë se 10 vjet prof. aktivitetet e një shumëllojshmërie të gjerë sistemesh, duke përfshirë ato që kërkojnë masa [ekstreme] sigurie. Ndodhi gjithashtu që disa kohë më parë më dukej interesante dev
, pra, po kaloja). Por nuk po flas për zhvillim, po flas për një mjedis të sigurt dhe efikas për aplikacionet.
Teknologjia financiare (FINTECH) shkoni pranë sigurisë së informacionit (infosec) dhe e para mund të funksionojë pa të dytën, por jo për shumë kohë. Kjo është arsyeja pse unë dua të ndaj përvojën time dhe grupin e mjeteve që përdor, i cili përfshin të dyja FINTECHDhe infosec, dhe në të njëjtën kohë, dhe gjithashtu mund të përdoret për një qëllim më të gjerë ose krejtësisht të ndryshëm. Në këtë artikull do t'ju tregoj jo aq shumë për Bitcoin, por për modelin e infrastrukturës për zhvillimin dhe funksionimin e shërbimeve financiare (dhe jo vetëm) - me një fjalë, ato shërbime ku "B" ka rëndësi. Kjo vlen si për shkëmbimin e Bitcoin ashtu edhe për kopshtin zoologjik më tipik të korporatës të shërbimeve të një kompanie të vogël që nuk është e lidhur në asnjë mënyrë me Bitcoin.
Dua të theksoj se jam mbështetës i parimeve "Mbaje budallallëkun e thjeshtë" и "më pak është më shumë", prandaj, si artikulli ashtu edhe ajo që përshkruhet në të do të kenë vetitë për të cilat kanë të bëjnë këto parime.
Skenari imagjinar: Le të shohim gjithçka duke përdorur shembullin e një shkëmbyesi bitcoin. Ne vendosëm të nisim shkëmbimin e rublave, dollarëve, eurove për bitcoin dhe mbrapa, dhe tashmë kemi një zgjidhje funksionale, por për para të tjera dixhitale si qiwi dhe webmoney, d.m.th. Kemi mbyllur të gjitha çështjet ligjore, kemi një aplikacion të gatshëm që shërben si portë pagese për rubla, dollarë dhe euro dhe sisteme të tjera pagesash. Ai është i lidhur me llogaritë tona bankare dhe ka një lloj API për aplikacionet tona përfundimtare. Ne kemi gjithashtu një aplikacion në internet që vepron si një shkëmbyes për përdoruesit, mirë, si një llogari tipike qiwi ose webmoney - krijoni një llogari, shtoni një kartë, etj. Ai komunikon me aplikacionin tonë të portës, megjithëse nëpërmjet API-së REST në zonën lokale. Dhe kështu vendosëm të lidhim bitcoin dhe në të njëjtën kohë të përmirësojmë infrastrukturën, sepse... Fillimisht, gjithçka u vendos me nxitim në kutitë virtuale në zyrën poshtë tavolinës... faqja filloi të përdorej dhe ne filluam të shqetësoheshim për kohën dhe performancën.
Pra, le të fillojmë me gjënë kryesore - zgjedhjen e një serveri. Sepse biznesi në shembullin tonë është i vogël dhe ne i besojmë hosterit (OVH) që do të zgjedhim
Instalimi i serverit
Gjithçka është e thjeshtë këtu. Ne zgjedhim pajisjen që i përshtatet nevojave tona. Pastaj zgjidhni imazhin FreeBSD. Epo, ose lidhemi (në rastin e një hosti tjetër dhe harduerit tonë) nëpërmjet IPMI ose me një monitor dhe fusim imazhin .iso FreeBSD në shkarkim. Unë përdor për një organizim orkestral
Instalimi i sistemit ndodh në një mënyrë standarde, nuk do të ndalem në këtë, do të vërej vetëm se para fillimit të funksionimit ia vlen t'i kushtohet vëmendje forcim opsionet që ofron bsdinstaller
në fund të instalimit (nëse e instaloni vetë sistemin):
Ka
Është gjithashtu e mundur të aktivizoni parametrat e lartpërmendur në një sistem tashmë të instaluar. Për ta bërë këtë, duhet të redaktoni skedarin e ngarkuesit dhe të aktivizoni parametrat e kernelit. *ee është një redaktues si ky 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
Ju gjithashtu duhet të siguroheni që keni të instaluar versionin më të fundit të sistemit dhe
Pastaj vendosëm aide
, monitorimi i statusit të skedarëve të konfigurimit të sistemit. Mund të lexoni më në detaje
pkg install aide
dhe redaktoni krontabin 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
Ndizeni
sysrc auditd_enable=YES
# service auditd start
Mënyra e administrimit të kësaj çështje është përshkruar në mënyrë të përsosur në
Tani rinisim dhe vazhdojmë te softueri në server. Çdo server është një hipervizor për kontejnerë ose makina të plota virtuale. Prandaj, është e rëndësishme që procesori të mbështesë VT-x dhe EPT nëse planifikojmë të përdorim virtualizimin e plotë.
Për të menaxhuar kontejnerët dhe makinat virtuale që përdor
Kontejnerët? Docker përsëri apo çfarë?
Por jo. cbsd
për të orkestruar këto enë, të cilat quhen qeliza.
Kafazi është një zgjidhje jashtëzakonisht efektive për ndërtimin e infrastrukturës për qëllime të ndryshme, ku në fund kërkohet izolim i plotë i shërbimeve ose proceseve individuale. Në thelb, është një klon i sistemit pritës, por nuk kërkon virtualizim të plotë të harduerit. Dhe falë kësaj, burimet nuk shpenzohen për "OS-in e ftuar", por vetëm për punën që po kryhet. Kur qelizat përdoren për nevoja të brendshme, kjo është një zgjidhje shumë e përshtatshme për përdorim optimal të burimeve - një grup qelizash në një server harduerësh mund të përdorin secili individualisht të gjithë burimin e serverit nëse është e nevojshme. Duke pasur parasysh që zakonisht nënshërbime të ndryshme kanë nevojë për shtesë. burime në kohë të ndryshme, ju mund të nxirrni performancën maksimale nga një server nëse planifikoni dhe balanconi siç duhet qelizat midis serverëve. Nëse është e nevojshme, qelizave gjithashtu mund t'u jepen kufizime në burimin e përdorur.
Po virtualizimi i plotë?
Me sa di unë cbsd
mbështet punën bhyve
dhe hipervizorët XEN. Të dytën nuk e kam përdorur kurrë, por i pari është relativisht i ri bhyve
në shembullin e mëposhtëm.
Instalimi dhe konfigurimi i mjedisit pritës
Ne përdorim FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
shtoni një ndarje të diskut në hapësirën e mbetur
geli init /dev/ada0p4
shkruani fjalëkalimin tonë të enkriptimit
geli attach /dev/ada0p4
Vendosim përsëri fjalëkalimin dhe kemi një pajisje /dev/ada0p4.eli - kjo është hapësira jonë e koduar. Pastaj ne përsërisim të njëjtën gjë për /dev/ada1 dhe pjesën tjetër të disqeve në grup. Dhe ne krijojmë një të re
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Epo, ne kemi gati kompletin minimal të luftimit. Një grup i pasqyruar i disqeve në rast se një nga tre dështon.
Krijimi i një grupi të dhënash në një "pishinë" të re
zfs create vms/jails
pkg install cbsd
— krijuam një ekip dhe krijuam menaxhim për qelizat tona.
pas cbsd
instaluar, duhet të inicializohet:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Epo, ne i përgjigjemi një sërë pyetjesh, kryesisht me përgjigje të paracaktuara.
*Nëse jeni duke përdorur enkriptim, është e rëndësishme që daemon cbsdd
nuk filloi automatikisht derisa të deshifroni disqet manualisht ose automatikisht (në shembullin tonë kjo bëhet nga zabbix)
**Unë gjithashtu nuk përdor NAT nga cbsd
, dhe e konfiguroj vetë 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 for jails
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
## Bitcoin network port forward
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
Vendosja e politikave të murit të zjarrit është gjithashtu një temë më vete, kështu që nuk do të hyj thellë në konfigurimin e politikës BLOCK ALL dhe vendosjen e listave të bardha, këtë mund ta bëni duke lexuar
Epo... ne kemi instaluar cbsd, është koha për të krijuar kalin tonë të parë të punës - demonin e Bitcoin të mbyllur në kafaz!
cbsd jconstruct-tui
Këtu shohim dialogun e krijimit të qelizës. Pasi të jenë vendosur të gjitha vlerat, le të krijojmë!
Kur krijoni qelizën tuaj të parë, duhet të zgjidhni se çfarë të përdorni si bazë për qelizat. Unë zgjedh një shpërndarje nga depoja e FreeBSD me komandën repo
. Kjo zgjedhje bëhet vetëm kur krijohet qeliza e parë e një versioni specifik (mund të presë qelizat e çdo versioni që është më i vjetër se versioni pritës).
Pasi të jetë instaluar gjithçka, ne lëshojmë kafazin!
# cbsd jstart bitcoind
Por ne duhet të instalojmë softuer në kafaz.
# 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ë tastierën e celularit
dhe tashmë brenda qelizës ne instalojmë softuerin me varësitë e tij (sistemi ynë pritës 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
Ka Bitcoin në kafaz, por na duhet anonimiteti sepse duam të lidhemi me disa kafaze nëpërmjet rrjetit TOP. Në përgjithësi, ne planifikojmë të ekzekutojmë shumicën e qelizave me softuer të dyshimtë vetëm përmes një përfaqësuesi. Falë pf
Ju mund të çaktivizoni NAT për një gamë të caktuar adresash IP në rrjetin lokal dhe të lejoni NAT vetëm për nyjen tonë TOR. Kështu, edhe nëse malware hyn në qelizë, me shumë mundësi nuk do të komunikojë me botën e jashtme dhe nëse e bën, nuk do të zbulojë IP-në e serverit tonë. Prandaj, ne krijojmë një qelizë tjetër për të "përcjellur" shërbimet si një shërbim ".onion" dhe si një përfaqësues për hyrjen në internet në qelizat individuale.
# 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
Cakto për të dëgjuar në një adresë lokale (e disponueshme për të gjitha qelizat)
SOCKSPort 192.168.0.2:9050
Çfarë tjetër na nevojitet për lumturinë e plotë? Po, ne kemi nevojë për një shërbim për ueb-in tonë, ndoshta më shumë se një. Le të hapim nginx, i cili do të veprojë si një përfaqësues i kundërt 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 vendosëm 150 MB varësi në një kafaz. Dhe nikoqiri është akoma i pastër.
Le të kthehemi te konfigurimi i nginx më vonë, duhet të ngremë dy qeliza të tjera për portën tonë të pagesave në nodejs dhe rust dhe një aplikacion ueb, i cili për disa arsye është në Apache dhe PHP, dhe kjo e fundit kërkon gjithashtu një bazë të dhënash 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 të tjera paketa të izoluara
Më pas, ne shkarkojmë aplikacionin tonë me git dhe e hapim atë.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
Paketat 450 MB. në një kafaz.
këtu ne i japim zhvilluesit qasje përmes SSH direkt në qelizë, ata do të bëjnë gjithçka vetë atje:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— ndryshoni portën SSH të qelizës në ndonjë arbitrar
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Epo, shërbimi po funksionon, gjithçka që mbetet është të shtoni rregullin pf
firewall
Le të shohim se çfarë IP kanë qelizat tona dhe si duket përgjithësisht "zona jonë lokale".
# 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 shtoni 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
Epo, meqë jemi këtu, le të shtojmë gjithashtu një rregull për përfaqësuesin e kundërt:
## 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
Epo, tani pak për bitcoins
Ajo që ne kemi është se ne kemi një aplikacion në internet që është i ekspozuar nga jashtë dhe ai flet në nivel lokal me portën tonë të pagesave. Tani duhet të përgatisim një mjedis pune për ndërveprim me vetë rrjetin Bitcoin - nyjen bitcoind
është thjesht një demon që mban të përditësuar kopjen lokale të blockchain. Ky daemon ka funksionalitet RPC dhe portofol, por ka "mbështjellës" më të përshtatshëm për zhvillimin e aplikacioneve. Për të filluar, ne vendosëm të vendosnim electrum
është një portofol CLI.
laptopë. Tani për tani ne do të përdorim Electrum me serverë publikë, dhe më vonë do ta ngremë atë në një qelizë tjetër
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
700 MB të tjera softuer në kafazin tonë
electrum:/@[8:53] # adduser
Username: wallet
Full name:
Uid (Leave empty for default):
Login group [wallet]:
Login group is wallet. Invite wallet into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/wallet]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : wallet
Password : <disabled>
Full Name :
Uid : 1001
Class :
Groups : wallet
Home : /home/wallet
Home Mode :
Shell : /bin/tcsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (wallet) to the user database.
Add another user? (yes/no): no
Goodbye!
electrum:/@[8:53] # su wallet
electrum:/@[8:53] # su wallet
wallet@electrum:/ % electrum-3.6 create
{
"msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.",
"path": "/usr/home/wallet/.electrum/wallets/default_wallet",
"seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}
Tani kemi krijuar një portofol.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Për tonat on-zinxhirit Vetëm një numër i kufizuar njerëzish do të mund të lidhen me portofolin tani e tutje. Për të mos hapur aksesin në këtë qelizë nga jashtë, lidhjet përmes SSH do të ndodhin përmes TOP (një version i decentralizuar i VPN). Ne lëshojmë SSH në qelizë, por nuk prekim pf.conf tonë në host.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Tani le të çaktivizojmë qelizën me aksesin në internet të portofolit. Le t'i japim një adresë IP nga një hapësirë tjetër e nënrrjetit që nuk është NATed. Fillimisht le të ndryshojmë /etc/pf.conf
mbi hostin
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
le 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ë akses të drejtpërdrejtë në internet. Një lloj rrjeti softuerësh "air-gap". Dhe rregulli NAT mbetet ashtu siç ishte
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Mbingarkesa e rregullave
# pfctl -f /etc/pf.conf
Tani le të marrim qelinë 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.200
Hmm, por tani vetë sistemi do të pushojë së punuari për ne. Megjithatë, ne mund të specifikojmë një përfaqësues të sistemit. Por ka një gjë, në TOR është një përfaqësues SOCKS5, dhe për lehtësi do të donim gjithashtu një përfaqësues HTTP.
# cbsd jsconstruct-tui
# cbsd jstart polipo
# jexec polipo
polipo:/@[9:28] # pkg install polipo
polipo:/@[9:28] # ee /usr/local/etc/polipo/config
socksParentProxy = "192.168.0.2:9050"
socksProxyType = socks5
polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
Epo, tani ka dy serverë proxy në sistemin tonë, dhe të dy dalin përmes TOR: socks5://192.168.0.2:9050 dhe
Tani mund të konfigurojmë mjedisin tonë të portofolit
# 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
Epo, tani guaska do të funksionojë nën një përfaqësues. Nëse duam të instalojmë paketa, atëherë duhet t'i shtojmë /usr/local/etc/pkg.conf
nga poshtë rrënjës së kafazit
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Epo, tani është koha për të shtuar 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
Kjo është adresa jonë e lidhjes. Le të kontrollojmë nga makina lokale. Por së pari duhet të shtojmë çelësin tonë SSH:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Epo, nga një makinë klienti 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
Le të lidhemi (Që kjo të funksionojë, ju nevojitet një demon lokal TOR që dëgjon në 9050)
user@local ~$ ssh remotebtc
The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts.
FreeBSD 12.1-RELEASE-p1 GENERIC
To save disk space in your home directory, compress files you rarely
use with "gzip filename".
-- Dru <[email protected]>
wallet@electrum:~ % logout
Urgjent!
Për të punuar me pagesa të menjëhershme dhe mikro, na duhet gjithashtu një nyje c-lightning
të nevojshme për funksionimin bitcoind
por po.
*Ekzistojnë implementime të ndryshme të protokollit të Rrjetit Lightning në gjuhë të ndryshme. Nga ato që testuam, c-lightning (i shkruar në C) dukej më i qëndrueshëm dhe më efikas 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 gjithçka e nevojshme është përpiluar dhe instaluar, le të krijojmë një përdorues RPC për lightningd
в bitcoind
# jexec bitcoind
bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf
rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#allow only c-lightning
rpcallowip=192.168.0.7/32
bitcoind:/@[10:39] # service bitcoind restart
Ndërrimi im kaotik midis qelizave rezulton të jetë jo aq kaotik nëse vini re dobinë tmux
, e cila ju lejon të krijoni nënsesione të shumta terminale brenda një sesioni. Analoge: screen
Pra, ne nuk duam të zbulojmë IP-në e vërtetë të nyjës sonë dhe duam të kryejmë të gjitha transaksionet financiare përmes TOP. Prandaj, një qepë tjetër nuk është e nevojshme.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735
tor:/@[10:01] # mkdir /var/db/tor/cln
tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/cln
tor:/@[10:01] # chmod 700 /var/db/tor/cln
tor:/@[10:03] # service tor restart
tor:/@[10:04] # cat /var/db/tor/cln/hostname
en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion
Tani le të krijojmë një konfigurim 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
# for the example above the initialization logs (mixed with lightningd logs) should print something like
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 ~
ju gjithashtu duhet të krijoni një skedar konfigurimi për bitcoin-cli, një mjet që komunikon me bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
kontrolloni
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
Nisja lightningd
lightning@lightning:~ % lightningd --daemon
Vetë lightningd
ju mund të kontrolloni shërbimin lightning-cli
, për shembull:
lightning-cli newaddr
merrni adresën për një pagesë të re hyrëse
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
dërgoni të gjitha paratë në portofol në adresë (të gjitha adresat në zinxhir)
Gjithashtu komandat për operacione jashtë zinxhirit lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
dhe kështu me radhë.
Epo, për komunikim me aplikacionin kemi një Api REST
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Përmbledh
# 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 kontejnerësh, secila me nivelin e vet të aksesit nga dhe në rrjetin lokal.
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 279G 1.48T 88K /zroot
zroot/ROOT 1.89G 1.48T 88K none
zroot/ROOT/default 1.89G 17.6G 1.89G /
zroot/home 88K 1.48T 88K /home
zroot/jails 277G 1.48T 404M /zroot/jails
zroot/jails/bitcoind 190G 1.48T 190G /zroot/jails/jails-data/bitcoind-data
zroot/jails/cln 653M 1.48T 653M /zroot/jails/jails-data/cln-data
zroot/jails/electrum 703M 1.48T 703M /zroot/jails/jails-data/electrum-data
zroot/jails/nginx-rev 190M 1.48T 190M /zroot/jails/jails-data/nginx-rev-data
zroot/jails/paygw 82.4G 1.48T 82.4G /zroot/jails/jails-data/paygw-data
zroot/jails/polipo 57.6M 1.48T 57.6M /zroot/jails/jails-data/polipo-data
zroot/jails/tor 81.5M 1.48T 81.5M /zroot/jails/jails-data/tor-data
zroot/jails/webapp 360M 1.48T 360M /zroot/jails/jails-data/webapp-data
Siç mund ta shihni, bitcoind zë të gjitha 190 GB hapësirë. Po sikur të kemi nevojë për një nyje tjetër për teste? Kjo është ajo ku ZFS vjen në ndihmë. Me ndihmë cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
mund të krijoni një fotografi dhe të bashkëngjitni një qelizë të re në këtë fotografi. Qeliza e re do të ketë hapësirën e saj, por vetëm ndryshimi midis gjendjes aktuale dhe origjinalit do të merret parasysh në sistemin e skedarëve (ne do të kursejmë të paktën 190 GB)
Çdo qelizë është grupi i saj i veçantë i të dhënave ZFS, dhe kjo është jashtëzakonisht e përshtatshme.
Vlen gjithashtu të theksohet nevoja për monitorim në distancë të hostit, për këto qëllime që kemi
B - siguria
Për sa i përket sigurisë, le të fillojmë nga parimet kryesore në kontekstin e infrastrukturës:
Konfidencialiteti - Mjetet standarde të sistemeve të ngjashme me UNIX-in sigurojnë zbatimin e këtij parimi. Ne veçojmë logjikisht aksesin në çdo element logjikisht të veçantë të sistemit - një qelizë. Qasja sigurohet përmes vërtetimit standard të përdoruesit duke përdorur çelësat personalë të përdoruesve. I gjithë komunikimi ndërmjet qelizave dhe deri në fund ndodh në formë të koduar. Falë kriptimit të diskut, ne nuk duhet të shqetësohemi për sigurinë e të dhënave kur zëvendësojmë një disk ose migrojmë në një server tjetër. Qasja e vetme kritike është qasja në sistemin pritës, pasi një akses i tillë në përgjithësi siguron qasje në të dhënat brenda kontejnerëve.
ndershmëri “Zbatimi i këtij parimi ndodh në disa nivele të ndryshme. Së pari, është e rëndësishme të theksohet se në rastin e harduerit të serverit, memoria ECC, ZFS tashmë "jashtë kutisë" kujdeset për integritetin e të dhënave në nivelin e biteve të informacionit. Fotot e çastit ju lejojnë të bëni kopje rezervë në çdo kohë gjatë fluturimit. Mjetet e përshtatshme të eksportit/importit të qelizave e bëjnë të thjeshtë riprodhimin e qelizave.
disponueshmëri - Kjo tashmë është fakultative. Varet nga shkalla e famës suaj dhe nga fakti që keni urrejtës. Në shembullin tonë, ne siguruam që portofoli të ishte i aksesueshëm ekskluzivisht nga rrjeti TOP. Nëse është e nevojshme, mund të bllokoni gjithçka në murin e zjarrit dhe të lejoni hyrjen në server ekskluzivisht përmes tuneleve (TOR ose VPN është një çështje tjetër). Kështu, serveri do të shkëputet nga bota e jashtme sa më shumë që të jetë e mundur, dhe vetëm ne vetë do të mund të ndikojmë në disponueshmërinë e tij.
Pamundësia e refuzimit - Dhe kjo varet nga funksionimi i mëtejshëm dhe pajtueshmëria me politikat e sakta për të drejtat e përdoruesit, aksesin, etj. Por me qasjen e duhur, të gjitha veprimet e përdoruesit kontrollohen dhe falë zgjidhjeve kriptografike është e mundur të identifikohet pa mëdyshje se kush ka kryer veprime të caktuara dhe kur.
Natyrisht, konfigurimi i përshkruar nuk është një shembull absolut se si duhet të jetë gjithmonë, është më tepër një shembull se si mund të jetë, duke ruajtur aftësitë shumë fleksibël të shkallëzimit dhe personalizimit.
Po virtualizimi i plotë?
Mundeni rreth virtualizimit të plotë duke përdorur cbsd bhyve
Duhet të aktivizoni disa opsione të kernelit.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Pra, nëse papritmas ju duhet të filloni një docker, atëherë instaloni disa debian dhe shkoni!
Kjo eshte e gjitha
Mendoj se kjo është gjithçka që doja të ndaja. Nëse ju pëlqeu artikulli, atëherë mund të më dërgoni disa bitcoin -
Burimi: www.habr.com