Bitcoin kaiola batean?

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 bitcoin, eta erabili ez ezik, hainbat mikrozerbitzu ere martxan jarri zituen Bitcoin sarearekin modu independentean lan egiten ikasteko (azken finean p2p) garatzaile baten ikuspuntutik (noski horietako bat naiz. 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 aurrekontu aukera bat bertan, ezinezkoa da sistema jatorrizko .iso iruditik instalatzea, baina berdin dio, IT segurtasun sailak behin betiko aztertuko du instalatutako irudia. Eta hazten garenean, gure armairua alokatuko dugu giltzapean sarbide fisiko mugatuarekin, eta agian gure DC propioa eraikiko dugu. Edonola ere, komeni da gogoratzea hardwarea alokatzean eta prest egindako irudiak instalatzean, aukera dagoela zure sisteman "ostalariaren troia" bat zintzilik edukitzea, kasu gehienetan zu zelatatzeko asmoa ez duena. baina kudeaketa-tresnen zerbitzari erosoagoak eskaintzeko.

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 Ansible ΠΈ mfsbsd. Gauza bakarra, gure kasuan kimsufi-rekin, aukeratu genuen pertsonalizatutako instalazioa Ispiluko bi diskoek abiaraztearen eta /home partizioak soilik "zabalik" izan ditzaten, gainerako disko-espazioa enkriptatuko da, baina gehiago gehiago geroago.

Bitcoin kaiola batean?

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

Bitcoin kaiola batean?

Ez dago material ona gai honi buruz, laburki errepikatuko dut hemen.

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 egin eguneratze eta berritze guztiak. Gure kasuan, adibidez, azken bertsiora eguneratzea beharrezkoa da, zeren... Instalazio aurreko irudiak sei hilabetetik urtebetera geratzen dira. Beno, han SSH ataka lehenetsitako beste zerbaitetara aldatzen dugu, gakoen autentifikazioa gehitu eta pasahitzaren autentifikazioa desgaitzen dugu.

Gero konfiguratu genuen aide, sistemaren konfigurazio fitxategien egoera kontrolatuz. Xehetasun gehiago irakur dezakezu Hemen.

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 sistemaren auditoria

sysrc auditd_enable=YES

# service auditd start

Gai hau nola administratu ezin hobeto azaltzen da lidergoa.

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 cbsd tik olevole, Osasun eta bedeinkapen gehiago opa diot erabilgarritasun zoragarri honengatik!

Ontziak? Docker berriro edo zer?

Baina ez. FreeBSD kartzelak edukiontzirako tresna bikaina da, baina aipatutakoa 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.

Bitcoin kaiola batean?

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 FreeBSD-ren hipervisor. Erabilera adibide bat ikusiko dugu bhyve beheko adibidean.

Ostalariaren ingurunea instalatzea eta konfiguratzea

FS erabiltzen dugu ZFS. Zerbitzariaren espazioa kudeatzeko tresna oso indartsua da. ZFS-ri esker, diskoetatik hainbat konfigurazioren arrayak zuzenean eraiki ditzakezu, espazioa dinamikoki "beroa" zabaldu, hildako diskoak aldatu, argazkiak kudeatu eta askoz, askoz gehiago, artikulu sorta oso batean deskriba daitezke. Itzuli gaitezen gure zerbitzarira eta bere diskoetara. Instalazioaren hasieran, diskoetan leku librea utzi genuen enkriptatutako partizioetarako. Zergatik da hori? Hau da, sistema automatikoki esna dadin eta SSH bidez entzuteko.

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 ZFS igerilekua.

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. dokumentazio ofiziala edo Googlen eskuragarri dauden artikulu kopuru handietakoren bat.

Beno... cbsd instalatuta daukagu, gure lehen lan-zaldia sortzeko garaia da: Bitcoin deabru kaiolatua!

cbsd jconstruct-tui

Bitcoin kaiola batean?

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. Diru-zorro hau gure bitcoinentzako "hotzetako biltegiratze" gisa erabiliko dugu; oro har, sistematik "kanpo" gorde beharko dira erabiltzaileentzat eskuragarri eta, oro har, guztiongandik urrun. GUI bat ere badu, beraz, gure zorro bera erabiliko dugu
ordenagailu eramangarriak. Oraingoz Electrum zerbitzari publikoekin erabiliko dugu, eta geroago beste gelaxka batean igoko dugu ElektroXinoren menpe ez egoteko.

# 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

Bitcoin kaiola batean?

Bitcoin kaiola batean?

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 http://192.168.0.6:8123

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 Lightning Network, izan ere, hau izango da gure lan tresna nagusia Bitcoin-ekin. U*c-tximistadeabru gisa erabiliko duguna Sparko plugina, HTTP (REST) ​​interfaze osoa dena eta kate kanpoko zein kate barruko transakzioekin lan egiteko aukera ematen du. 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

Bitcoin kaiola batean?

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

Bitcoin kaiola batean?

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. ZFS-k ere aukera ematen du egin beste gauza polit batzuk, adibidez, argazkiak SSH bidez bidaltzea. Ez dugu deskribatuko, dagoeneko asko dago.

Azpimarratzekoa da, halaber, ostalariaren urruneko monitorizazioaren beharra, ditugun helburu horietarako Zabbix.

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 irakurri hemen. Lanerako gehituko dut hori 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!

Bitcoin kaiola batean?

Hori da dena

Uste dut hori dela partekatu nahi nuen guztia. Artikulua gustatu bazaizu, bidal diezazkidazuke bitcoin batzuk - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Zelulak ekintzan probatu eta bitcoin batzuk eduki nahi badituzu, nire helbidera joan zaitezke maskota-proiektua.

Iturria: www.habr.com