Gertatu zen lanbidez sistema informatikoen eta sareen administratzailea naizela (labur esanda: sistema administratzailea), eta 10 urte baino pixka bat gehiagoz irakasleari esateko aukera izan nuen. askotariko sistemen jarduerak, [muturreko] segurtasun neurriak eskatzen dituztenak barne. Gertatu zen ere duela denbora pixka bat interesgarria iruditu zitzaidala dev
, beraz, pasatzen nintzen). Baina ez naiz garapenaz ari, aplikazioetarako ingurune seguru eta eraginkor batez ari naiz.
Finantza teknologia (fintech) informazioaren segurtasunaren ondoan joan (infosec) eta lehenengoak bigarrenik gabe funtzionatu dezake, baina ez luzaroan. Horregatik, nire esperientzia eta erabiltzen dudan tresna multzoa partekatu nahi dut, biak barne fintechEta infosec, eta aldi berean, eta helburu zabalago edo guztiz ezberdin baterako ere erabil daiteke. Artikulu honetan Bitcoin-en ez hainbeste esango dizut, finantza-zerbitzuen (eta ez soilik) zerbitzuen garapenerako eta funtzionamendurako azpiegitura-ereduari buruz - hitz batean, "B" garrantzitsua den zerbitzu horiei buruz. Hau Bitcoin trukeari eta inola ere Bitcoin-ekin lotuta ez dagoen enpresa txiki baten zerbitzu zoo korporatibo tipikoenari aplikatzen zaio.
Ohartu nahiko nuke printzipioen aldekoa naizela "Egin ergela sinplea" ΠΈ "gutxiago gehiago da", beraz, bai artikuluak bai bertan deskribatzen denak printzipio horiek dituzten propietateak izango dituzte.
Eszenatoki imaginarioa: Ikus dezagun dena bitcoin trukagailu baten adibidea erabiliz. Erabaki genuen errubloen, dolarren, euroen trukea bitcoins eta bueltan trukatzea abian jartzea, eta dagoeneko badugu lan irtenbide bat, baina qiwi eta webmoney bezalako beste diru digitaletarako, alegia. Lege-arazo guztiak itxi ditugu, errublo, dolar eta euro eta beste ordainketa-sistema batzuen ordainketa-pasa gisa balio duen prest dagoen aplikazio bat dugu. Gure banku-kontuetara konektatuta dago eta gure amaierako aplikazioetarako API motaren bat dauka. Erabiltzaileentzako trukatzaile gisa jarduten duen web aplikazio bat ere badugu, bai, qiwi edo webmoney kontu tipiko bat bezala: sortu kontu bat, gehitu txartel bat eta abar. Gure atebideko aplikazioarekin komunikatzen da, tokiko eremuko REST APIaren bidez bada ere. Eta beraz, bitcoinak konektatzea eta, aldi berean, azpiegitura berritzea erabaki genuen, zeren... Hasieran, dena presaka jartzen zen mahai azpiko bulegoko kutxa birtualetan... gunea erabiltzen hasi zen, eta denboraz eta errendimenduaz kezkatzen hasi ginen.
Beraz, has gaitezen gauza nagusiarekin - zerbitzari bat aukeratzea. Zeren gure adibideko negozioa txikia da eta aukeratuko dugun ostalariarekin (OVH) fidatzen gara
Zerbitzariaren instalazioa
Hemen dena sinplea da. Gure beharretara egokitzen den hardwarea aukeratzen dugu. Ondoren, hautatu FreeBSD irudia. Beno, edo konektatzen gara (beste ostalari baten kasuan eta gure hardware propioaren kasuan) IPMI bidez edo monitore batekin eta .iso FreeBSD irudia deskargatzen dugu. Erabiltzen dudan orkestra konfigurazio baterako
Sistemaren instalazioa modu estandarrean gertatzen da, ez naiz horretan geldituko, funtzionatzen hasi aurretik arreta jartzea merezi duela bakarrik ohartuko naiz. gogortzea eskaintzen dituen aukerak bsdinstaller
instalazioaren amaieran (sistema zuk zeuk instalatzen baduzu):
Ez dago
Aipatutako parametroak lehendik instalatutako sistema batean ere gaitzeko aukera dago. Horretarako, abio-kargatzailearen fitxategia editatu eta nukleoaren parametroak gaitu behar dituzu. *ee honelako editorea da BSDn
# 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
Sistemaren azken bertsioa instalatuta duzula ere ziurtatu beharko zenuke, eta
Gero konfiguratu genuen aide
, sistemaren konfigurazio fitxategien egoera kontrolatuz. Xehetasun gehiago irakur dezakezu
pkg install aide
eta editatu gure crontab
crontab -e
06 01 * * 0-6 /root/chkaide.sh
#! /bin/sh
#chkaide.sh
MYDATE=`date +%Y-%m-%d`
MYFILENAME="Aide-"$MYDATE.txt
/bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME
/usr/local/bin/aide --check > /tmp/myAide.txt
/bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME
/bin/echo "**************************************" >> /tmp/$MYFILENAME
/usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME
/bin/echo "****************DONE******************" >> /tmp/$MYFILENAME
Barne hartzen ditugu
sysrc auditd_enable=YES
# service auditd start
Gai hau nola administratu ezin hobeto azaltzen da
Orain berrabiarazi eta zerbitzariko softwarera jarraituko dugu. Zerbitzari bakoitza edukiontzientzako edo makina birtual osoentzako hipervisor bat da. Horregatik, garrantzitsua da prozesadoreak VT-x eta EPT onartzen dituela birtualizazio osoa erabiltzeko asmoa badugu.
Erabiltzen ditudan edukiontziak eta makina birtualak kudeatzeko
Ontziak? Docker berriro edo zer?
Baina ez. cbsd
zelula deitzen diren ontzi horiek orkestratzeko.
Kaiola oso irtenbide eraginkorra da hainbat helburutarako azpiegiturak eraikitzeko, non azken finean zerbitzu edo prozesu indibidualen erabateko isolamendua behar den. Funtsean, ostalari-sistemaren klona da, baina ez du hardware birtualizazio osoa behar. Eta horri esker, baliabideak ez dira gastatzen "OS gonbidatua"n, egiten ari den lanetan baizik. Gelaxkak barneko beharretarako erabiltzen direnean, baliabideen erabilera optimorako irtenbide oso erosoa da - hardware zerbitzari bateko zelula mordo batek banaka erabil dezake zerbitzariaren baliabide osoa behar izanez gero. Normalean azpizerbitzu ezberdinek osagarriak behar dituztela kontuan hartuta. baliabideak une desberdinetan, zerbitzari batetik errendimendu maximoa atera dezakezu zerbitzarien arteko zelulak behar bezala planifikatu eta orekatzen badituzu. Beharrezkoa izanez gero, gelaxketan erabilitako baliabidearen murrizketak ere eman daitezke.
Zer gertatzen da birtualizazio osoa?
Nik dakidanez, cbsd
lana onartzen du bhyve
eta XEN hipervisoreak. Ez dut inoiz bigarrena erabili, baina lehena nahiko berria da bhyve
beheko adibidean.
Ostalariaren ingurunea instalatzea eta konfiguratzea
FS erabiltzen dugu
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
gehitu disko-partizioa geratzen den espazioari
geli init /dev/ada0p4
sartu gure enkriptatzeko pasahitza
geli attach /dev/ada0p4
Pasahitza berriro sartzen dugu eta /dev/ada0p4.eli gailu bat dugu - hau da gure enkriptatutako espazioa. Ondoren, gauza bera errepikatuko dugu /dev/ada1 eta arrayko gainerako diskoetarako. Eta berri bat sortzen dugu
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Tira, gutxieneko borroka-kirota prest daukagu. Ispilu-matrize bat, hiruretako batek huts egiten badu.
Datu multzo bat sortzea "igerileku" berri batean
zfs create vms/jails
pkg install cbsd
β talde bat jarri genuen martxan eta gure zelulen kudeaketa ezarri genuen.
After cbsd
instalatuta, hasieratu egin behar da:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Beno, galdera mordoa erantzuten ditugu, gehienetan erantzun lehenetsiekin.
* Enkriptatzea erabiltzen ari bazara, garrantzitsua da deabrua cbsdd
ez da automatikoki hasi diskoak eskuz edo automatikoki deszifratu arte (gure adibidean zabbix-ek egiten du)
**Nik ere ez dut NAT-tik erabiltzen cbsd
, eta nik neuk konfiguratzen dut 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
Suebaki-politikak konfiguratzea ere gai bereizia da, beraz, ez naiz sakonduko BLOKETU GUZTIA politika konfiguratzen eta zerrenda zuriak konfiguratzen; hori egin dezakezu irakurriz.
Beno... cbsd instalatuta daukagu, gure lehen lan-zaldia sortzeko garaia da: Bitcoin deabru kaiolatua!
cbsd jconstruct-tui
Hemen gelaxka sortzeko elkarrizketa-koadroa ikusiko dugu. Balio guztiak ezarri ondoren, sor gaitezen!
Zure lehen gelaxka sortzean, zelulen oinarri gisa zer erabili aukeratu behar duzu. FreeBSD biltegitik banaketa bat hautatzen dut komandoarekin repo
. Aukera hau bertsio zehatz baten lehen gelaxka sortzean bakarrik egiten da (ostalari bertsioa baino zaharragoak diren edozein bertsioren gelaxkak osta ditzakezu).
Dena instalatu ondoren, kaiola abiarazten dugu!
# cbsd jstart bitcoind
Baina kaiolan softwarea instalatu behar dugu.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
zelula kontsolara sartzeko
eta dagoeneko zelula barruan softwarea instalatzen dugu bere menpekotasunekin (gure ostalari sistema garbi geratzen da)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Bitcoin-a dago kaiolan, baina anonimotasuna behar dugu, TOP sarearen bidez kaiola batzuetara konektatu nahi dugulako. Oro har, gelaxka gehienak software susmagarri batekin exekutatzeko asmoa dugu proxy baten bidez soilik. Eskerrak pf
NAT desgaitu dezakezu sare lokaleko IP helbide sorta jakin baterako, eta NAT gure TOR nodorako soilik baimendu. Horrela, nahiz eta malwarea gelaxkan sartu, ziurrenik ez da kanpoko munduarekin komunikatuko, eta hala egiten badu, ez du gure zerbitzariaren IP-a agertuko. Hori dela eta, beste gelaxka bat sortzen dugu zerbitzuak ".onion" zerbitzu gisa eta zelula indibidualetara Internetera sartzeko proxy gisa "birbidaltzeko".
# 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
Ezarri tokiko helbide batean entzuteko (gelaxka guztietarako erabilgarri)
SOCKSPort 192.168.0.2:9050
Zer gehiago behar dugu zoriontasun osoa izateko? Bai, gure weberako zerbitzu bat behar dugu, agian bat baino gehiago. Abiarazi dezagun nginx, alderantzizko proxy gisa jardungo duena eta Let's Encrypt ziurtagiriak berritzeaz arduratuko dena.
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Eta horrela 150 MB menpekotasun kaiola batean jarri genituen. Eta ostalaria oraindik garbi dago.
Itzuli gaitezen nginx konfiguratzera geroago, gure ordainketa-pasabiderako bi gelaxka gehiago planteatu behar ditugu nodejs eta rust-en eta web aplikazio bat, arrazoiren batengatik Apache eta PHP-n dagoena, eta azken honek MySQL datu-base bat ere behar du.
# 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
...eta beste 380 MB pakete isolatuak
Ondoren, gure aplikazioa git-ekin deskargatu eta abiarazten dugu.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB paketeak. kaiola batean.
hemen garatzaileari SSH bidez zuzenean ematen diogu zelularako sarbidea, beraiek egingo dute dena:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
β aldatu gelaxkako SSH ataka edozein arbitrariora
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Tira, zerbitzua martxan dago, araua gehitzea besterik ez da geratzen pf
firewall
Ikus dezagun zer IP duten gure zelulek eta nolakoa den orokorrean gure βtoki-eremuaβ.
# 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
eta gehitu arau bat
# 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
Beno, hemen gaudenez, gaineratu dezagun alderantzizko proxyrako arau bat:
## 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
Beno, orain bitcoinei buruz pixka bat
Guk daukaguna da web aplikazio bat dugula kanpotik agerian dagoena eta lokalean hitz egiten duela gure ordainketa-pasarearekin. Orain lan-ingurune bat prestatu behar dugu Bitcoin sarearekin berarekin elkarreragiteko, nodoarekin bitcoind
bloke-katearen tokiko kopia eguneratuta mantentzen duen deabru bat besterik ez da. Deabru honek RPC eta zorroaren funtzionalitateak ditu, baina aplikazioak garatzeko "bilgarri" erosoagoak daude. Hasteko, jartzea erabaki genuen electrum
CLI zorro bat da.
ordenagailu eramangarriak. Oraingoz Electrum zerbitzari publikoekin erabiliko dugu, eta geroago beste gelaxka batean igoko dugu
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
beste 700 MB software gure kaiolan
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"
}
Orain zorro bat sortu dugu.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Gurera on-katean Pertsona kopuru mugatu batek bakarrik konektatu ahal izango du diru-zorrora hemendik aurrera. Zelula honetarako sarbidea kanpotik ireki ez dadin, SSH bidezko konexioak TOP bidez egingo dira (VPNren bertsio deszentralizatua). SSH abiarazten dugu gelaxkan, baina ez ukitu gure pf.conf ostalarian.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Orain itzal dezagun zorroaren Interneteko sarbidea duen zelula. Eman diezaiogun IP helbide bat NATed ez dagoen beste azpisare-espazio batetik. Lehenik eta behin, alda gaitezen /etc/pf.conf
ostalariaren gainean
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
alda dezagun JAIL_IP_POOL="192.168.0.0/25"
, beraz, 192.168.0.126-255 helbide guztiek ez dute Interneterako sarbide zuzena izango. Software "air-gap" sare moduko bat. Eta NAT arauak lehen bezala jarraitzen du
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Arauak gainkargatzea
# pfctl -f /etc/pf.conf
Orain har dezagun gure zelula
# 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, baina orain sistemak berak funtzionatzeari utziko dio. Hala ere, sistemaren proxy bat zehaztu dezakegu. Baina gauza bat dago, TOR-en SOCKS5 proxy bat da, eta erosotasunerako HTTP proxy bat ere nahiko genuke.
# 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
Beno, orain bi proxy zerbitzari daude gure sisteman, eta biak TOR bidez ateratzen dira: socks5://192.168.0.2:9050 eta
Orain gure zorroaren ingurunea konfiguratu dezakegu
# 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
Beno, orain shell-ak proxy baten azpian funtzionatuko du. Paketeak instalatu nahi baditugu, gehitu beharko genuke /usr/local/etc/pkg.conf
kaiolaren erro azpitik
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Beno, orain TOR ezkutuko zerbitzua gehitzeko garaia da gure SSH zerbitzuaren helbide gisa diru-zorroaren kaiolan.
# 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
Hau da gure konexio helbidea. Ikus dezagun tokiko makinatik. Baina lehenik gure SSH gakoa gehitu behar dugu:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Beno, Linux bezero-makina batetik
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
Konektatu gaitezen (Horrek funtziona dezan, 9050-n entzuten duen tokiko TOR deabru bat behar duzu)
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
Arrakasta!
Berehalako eta mikro-ordainketekin lan egiteko, nodo bat ere behar dugu c-lightning
funtzionatzeko beharrezkoak bitcoind
baina bai.
*Lightning Network protokoloaren inplementazio desberdinak daude hizkuntza ezberdinetan. Probatu ditugunetatik, c-lightning (C-n idatzia) egonkorrena eta baliabideen erabilera eraginkorrena iruditu zitzaigun
# 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
Beharrezko guztia konpilatu eta instalatuta dagoen bitartean, sor dezagun RPC erabiltzaile bat 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
Nire zelulen arteko aldaketa kaotikoa ez da hain kaotikoa izan erabilgarritasunari erreparatzen bazaizu tmux
, saio bakarrean hainbat terminal azpisaio sortzeko aukera ematen duena. Analogikoa: screen
Beraz, ez dugu gure nodoaren benetako IPa agerian utzi nahi eta finantza-transakzio guztiak TOP bidez egin nahi ditugu. Hori dela eta, ez da beste .tipula bat behar.
# 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
Orain sor dezagun c-lightning konfigurazio bat
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 ~
bitcoin-cli-rako konfigurazio fitxategi bat ere sortu behar duzu, honekin komunikatzen den utilitate bat bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
egiaztatzea
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
martxan jarri lightningd
lightning@lightning:~ % lightningd --daemon
bere burua lightningd
erabilgarritasuna kontrola dezakezu lightning-cli
, adibidez:
lightning-cli newaddr
lortu sarrerako ordainketa berri baten helbidea
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
bidali zorroko diru guztia helbidera (katean dauden helbide guztiak)
Katez kanpoko eragiketetarako komandoak ere lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
etab.
Beno, aplikazioarekin komunikatzeko REST Api bat dugu
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Batuketari sortu
# 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
Edukiontzi multzo bat dugu, bakoitzak bere sarbide maila du sare lokaletik zein sare lokalera.
# 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
Ikus dezakezunez, bitcoindek 190 GB-ko espazio guztiak hartzen ditu. Zer gertatzen da probak egiteko beste nodo bat behar badugu? Hau da, non ZFS ondo dator. Laguntzarekin cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
argazki bat sor dezakezu eta argazki honi gelaxka berri bat erantsi. Gelaxka berriak bere espazioa izango du, baina oraingo egoeraren eta jatorrizkoaren arteko aldea soilik hartuko da kontuan fitxategi-sisteman (gutxienez 190 GB gordeko ditugu)
Gelaxka bakoitza bere ZFS datu-multzoa da, eta hau oso erosoa da.
Azpimarratzekoa da, halaber, ostalariaren urruneko monitorizazioaren beharra, ditugun helburu horietarako
B - segurtasuna
Segurtasunari dagokionez, abia gaitezen azpiegituren testuinguruko funtsezko printzipioetatik:
ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ - UNIX antzeko sistemen tresna estandarrek printzipio hau ezartzea bermatzen dute. Logikoki bereizten dugu sistemaren elementu logikoki bereizi bakoitzerako sarbidea - gelaxka bat. Erabiltzaileen autentifikazio estandarraren bidez ematen da sarbidea erabiltzailearen gako pertsonalak erabiliz. Zelulen arteko eta amaierara arteko komunikazio guztia zifratuta gertatzen da. Disko enkriptatzeari esker, ez dugu datuen segurtasunaz arduratu behar disko bat ordezkatuz edo beste zerbitzari batera migratzerakoan. Sarbide kritiko bakarra ostalari-sistemarako sarbidea da, sarbide horrek, oro har, edukiontzi barruko datuetarako sarbidea ematen baitu.
osotasuna βPrintzipio honen ezarpena hainbat mailatan gertatzen da. Lehenik eta behin, kontuan izan behar da zerbitzariaren hardwarearen kasuan, ECC memoriak, ZFS dagoeneko "kutxatik kanpo" datuen osotasuna zaintzen duela informazio-bit mailan. Berehalako argazkiek edozein unetan segurtasun-kopiak egiteko aukera ematen dute. Zelula esportatzeko/inportatzeko tresna erosoek zelulen erreplikazioa errazten dute.
erabilgarritasuna - Hau jada aukerakoa da. Zure ospearen eta gorrotoak dituzunaren araberakoa da. Gure adibidean, diru-zorroa TOP saretik soilik eskura daitekeela ziurtatu dugu. Beharrezkoa izanez gero, suebakian dagoen guztia blokeatu dezakezu eta tunelen bidez soilik zerbitzarirako sarbidea baimendu (TOR edo VPN beste kontu bat da). Hortaz, zerbitzaria kanpo-mundutik ahalik eta gehien moztuko da, eta guk geuk bakarrik eragin ahal izango dugu haren erabilgarritasuna.
Uko egiteko ezintasuna - Eta hori gehiago funtzionatzearen eta erabiltzaileen eskubideen, sarbideen, etab. politika zuzenak betetzearen araberakoa da. Baina ikuspegi egokiarekin, erabiltzaileen ekintza guztiak ikuskatzen dira, eta irtenbide kriptografikoei esker, ekintza jakin batzuk nork eta noiz egin dituen anbiguoki identifikatzea da.
Jakina, deskribatutako konfigurazioa ez da beti izan behar duenaren adibide absolutua, nola izan daitekeen adibide bat baizik, eskalatze eta pertsonalizazio gaitasun oso malguak mantenduz.
Zer gertatzen da birtualizazio osoa?
cbsd erabiliz birtualizazio osoari buruz bhyve
Nukleoaren aukera batzuk gaitu behar dituzu.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Beraz, bat-batean docker bat hasi behar baduzu, instalatu debian batzuk eta joan!
Hori da dena
Uste dut hori dela partekatu nahi nuen guztia. Artikulua gustatu bazaizu, bidal diezazkidazuke bitcoin batzuk -
Iturria: www.habr.com