Bitcoin katika ngome?

Ilifanyika kwamba kwa taaluma mimi ni msimamizi wa mifumo ya kompyuta na mitandao (kwa kifupi: msimamizi wa mfumo), na nilipata fursa ya kumwambia prof. kwa zaidi ya miaka 10 kidogo. shughuli za aina mbalimbali za mifumo, ikiwa ni pamoja na ile inayohitaji hatua [uliokithiri] za usalama. Pia ilitokea kwamba wakati fulani uliopita niliona kuwa ya kuvutia bitcoin, na sio kuitumia tu, lakini pia ilizindua huduma ndogo ndogo ili kujifunza jinsi ya kufanya kazi kwa uhuru na mtandao wa Bitcoin (aka p2p baada ya yote) kutoka kwa mtazamo wa msanidi programu (bila shaka mimi ni mmoja wa wale dev, kwa hiyo, nilikuwa nikipita). Lakini sizungumzii maendeleo, nazungumza juu ya mazingira salama na bora kwa programu.

Teknolojia ya fedha (fintech) nenda karibu na usalama wa habari (infosec) na wa kwanza anaweza kufanya kazi bila ya pili, lakini si kwa muda mrefu. Ndio maana ninataka kushiriki uzoefu wangu na seti ya zana ninazotumia, ambazo ni pamoja na zote mbili fintechNa infosec, na wakati huo huo, na pia inaweza kutumika kwa madhumuni pana au tofauti kabisa. Katika nakala hii sitakuambia sana juu ya Bitcoin, lakini juu ya muundo wa miundombinu kwa maendeleo na uendeshaji wa huduma za kifedha (na sio tu) - kwa neno moja, huduma hizo ambapo "B" ni muhimu. Hii inatumika kwa ubadilishaji wa Bitcoin na kwa mbuga ya wanyama ya kawaida zaidi ya huduma za kampuni ndogo isiyounganishwa na Bitcoin kwa njia yoyote.

Ningependa kutambua kwamba mimi ni mfuasi wa kanuni "weka ujinga rahisi" ΠΈ "chini ni zaidi", kwa hiyo, makala yote na kile kilichoelezwa ndani yake kitakuwa na mali ambazo kanuni hizi zinahusu.

Hali ya kufikirika: Hebu tuangalie kila kitu kwa kutumia mfano wa exchanger bitcoin. Tuliamua kuzindua ubadilishaji wa rubles, dola, euro kwa bitcoins na nyuma, na tayari tuna suluhisho la kufanya kazi, lakini kwa pesa zingine za dijiti kama qiwi na webmoney, i.e. Tumefunga maswala yote ya kisheria, tunayo programu iliyotengenezwa tayari ambayo hutumika kama lango la malipo kwa rubles, dola na euro na mifumo mingine ya malipo. Imeunganishwa kwenye akaunti zetu za benki na ina aina fulani ya API kwa ajili ya programu zetu za mwisho. Pia tuna programu ya wavuti ambayo hufanya kama kibadilishaji cha watumiaji, vizuri, kama akaunti ya kawaida ya qiwi au webmoney - fungua akaunti, ongeza kadi, na kadhalika. Inawasiliana na maombi yetu ya lango, ingawa kupitia API ya REST katika eneo la karibu. Na kwa hiyo tuliamua kuunganisha bitcoins na wakati huo huo kuboresha miundombinu, kwa sababu ... Hapo awali, kila kitu kiliwekwa haraka kwenye sanduku za kawaida kwenye ofisi chini ya meza ... tovuti ilianza kutumiwa, na tukaanza kuwa na wasiwasi juu ya wakati na utendaji.

Kwa hiyo, hebu tuanze na jambo kuu - kuchagua seva. Kwa sababu biashara katika mfano wetu ni ndogo na tunaamini mwenyeji (OVH) tutachagua chaguo la bajeti ambayo haiwezekani kufunga mfumo kutoka kwa picha ya awali ya .iso, lakini haijalishi, idara ya usalama wa IT hakika itachambua picha iliyowekwa. Na tutakapokuwa wakubwa, tutakodisha kabati letu chini ya kufuli na ufunguo bila ufikiaji mdogo wa kimwili, na labda tutajenga DC yetu wenyewe. Kwa hali yoyote, inafaa kukumbuka kuwa wakati wa kukodisha vifaa na kusanikisha picha zilizotengenezwa tayari, kuna nafasi kwamba utakuwa na "Trojan kutoka kwa mwenyeji" inayoning'inia kwenye mfumo wako, ambayo mara nyingi haikusudiwa kukupeleleza. lakini kutoa seva ya zana za usimamizi rahisi zaidi.

Ufungaji wa seva

Kila kitu ni rahisi hapa. Tunachagua vifaa vinavyofaa mahitaji yetu. Kisha chagua picha ya FreeBSD. Naam, au tunaunganisha (katika kesi ya mpangishaji mwingine na maunzi yetu wenyewe) kupitia IPMI au kwa kufuatilia na kulisha picha ya .iso FreeBSD kwenye upakuaji. Kwa usanidi wa orchestra ninayotumia Inawezekana ΠΈ mfsbsd. Kitu pekee, kwa upande wetu na kimsufi, tulichagua usakinishaji maalum ili diski mbili kwenye kioo ziwe na sehemu za buti na / za nyumbani tu "zimefunguliwa", nafasi iliyobaki ya diski itasimbwa kwa njia fiche, lakini zaidi juu ya hilo baadaye.

Bitcoin katika ngome?

Ufungaji wa mfumo hutokea kwa njia ya kawaida, sitakaa juu ya hili, nitakumbuka tu kwamba kabla ya kuanza operesheni ni muhimu kuzingatia. ugumu chaguzi ambayo inatoa bsdinstaller mwisho wa usakinishaji (ikiwa utasanikisha mfumo mwenyewe):

Bitcoin katika ngome?

Kuna nyenzo nzuri juu ya mada hii, nitarudia kwa ufupi hapa.

Pia inawezekana kuwezesha vigezo vilivyotajwa hapo juu kwenye mfumo uliowekwa tayari. Ili kufanya hivyo, unahitaji kuhariri faili ya bootloader na uwezesha vigezo vya kernel. *ee ni mhariri kama huyu katika 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

Unapaswa pia kuhakikisha kuwa una toleo la hivi karibuni la mfumo uliosakinishwa, na fanya visasisho na visasisho vyote. Kwa upande wetu, kwa mfano, kuboresha kwa toleo la hivi karibuni inahitajika, kwa sababu ... picha za usakinishaji wa awali huwa nyuma kwa miezi sita hadi mwaka. Kweli, hapo tunabadilisha mlango wa SSH kuwa kitu tofauti na chaguo-msingi, ongeza uthibitishaji wa ufunguo na uzima uthibitishaji wa nenosiri.

Kisha tunasanidi aide, kufuatilia hali ya faili za usanidi wa mfumo. Unaweza kusoma zaidi kwa undani hapa.

pkg install aide

na uhariri crontab yetu

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

Sisi ni pamoja na ukaguzi wa mfumo

sysrc auditd_enable=YES

# service auditd start

Jinsi ya kusimamia suala hili imeelezewa kikamilifu katika uongozi.

Sasa tunaanzisha upya na kuendelea na programu kwenye seva. Kila seva ni hypervisor kwa vyombo au mashine kamili ya mtandaoni. Kwa hiyo, ni muhimu kwamba processor inasaidia VT-x na EPT ikiwa tunapanga kutumia virtualization kamili.

Ili kudhibiti vyombo na mashine pepe ninazotumia cbsd kutoka olevole, namtakia afya njema na baraka zaidi kwa matumizi haya mazuri!

Vyombo? Docker tena au nini?

Lakini hapana. Jela za BureBSD ni zana bora ya uwekaji vyombo, lakini iliyotajwa cbsd kupanga vyombo hivi, vinavyoitwa seli.

Ngome ni suluhisho la ufanisi sana kwa ajili ya kujenga miundombinu kwa madhumuni mbalimbali, ambapo kutengwa kamili kwa huduma za mtu binafsi au michakato hatimaye inahitajika. Kimsingi, ni mshirika wa mfumo wa mwenyeji, lakini hauhitaji uboreshaji kamili wa vifaa. Na shukrani kwa hili, rasilimali hazitumiwi kwenye "OS ya wageni", lakini tu kwenye kazi inayofanywa. Wakati seli zinatumiwa kwa mahitaji ya ndani, hii ni suluhisho rahisi sana kwa matumizi bora ya rasilimali - rundo la seli kwenye seva moja ya maunzi kila moja inaweza kutumia rasilimali nzima ya seva ikiwa ni lazima. Kwa kuzingatia kwamba kawaida huduma tofauti zinahitaji ziada. rasilimali kwa nyakati tofauti, unaweza kutoa utendaji wa juu zaidi kutoka kwa seva moja ikiwa utapanga vizuri na kusawazisha seli kati ya seva. Ikiwa ni lazima, seli zinaweza pia kupewa vikwazo kwenye rasilimali inayotumiwa.

Bitcoin katika ngome?

Vipi kuhusu uboreshaji kamili?

Kwa kadiri ninavyojua cbsd inasaidia kazi bhyve na hypervisors za XEN. Sijawahi kutumia ya pili, lakini ya kwanza ni mpya hypervisor kutoka FreeBSD. Tutaangalia mfano wa matumizi bhyve katika mfano hapa chini.

Kusakinisha na Kusanidi Mazingira ya Mwenyeji

Tunatumia FS ZFS. Hii ni zana yenye nguvu sana ya kudhibiti nafasi ya seva. Shukrani kwa ZFS, unaweza kuunda moja kwa moja safu za usanidi anuwai kutoka kwa diski, kwa nguvu "moto" kupanua nafasi, kubadilisha diski zilizokufa, kudhibiti snapshots, na mengi zaidi, ambayo yanaweza kuelezewa katika safu nzima ya vifungu. Wacha turudi kwa seva yetu na diski zake. Mwanzoni mwa usakinishaji, tuliacha nafasi ya bure kwenye diski kwa sehemu zilizosimbwa. Kwanini hivyo? Hii ni ili mfumo uamke kiotomatiki na usikilize kupitia SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

ongeza kizigeu cha diski kwenye nafasi iliyobaki

geli init /dev/ada0p4

ingiza nenosiri letu la usimbaji fiche

geli attach /dev/ada0p4

Tunaingiza nenosiri tena na tuna kifaa /dev/ada0p4.eli - hii ndiyo nafasi yetu iliyosimbwa. Kisha tunarudia sawa kwa /dev/ada1 na diski zingine kwenye safu. Na tunaunda mpya bwawa la ZFS.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Kweli, tuna vifaa vya chini vya kupambana tayari. Safu iliyoakisiwa ya diski ikiwa moja ya hizo tatu itashindwa.

Kuunda seti ya data kwenye "dimbwi" mpya

zfs create vms/jails

pkg install cbsd - tulizindua timu na kuweka usimamizi wa seli zetu.

Baada cbsd imewekwa, inahitaji kuanzishwa:

# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv

Kweli, tunajibu rundo la maswali, mara nyingi kwa majibu chaguo-msingi.

*Ikiwa unatumia usimbaji fiche, ni muhimu kwamba daemon cbsdd haikuanza kiotomatiki hadi ubadilishe diski kwa mikono au kiatomati (kwa mfano wetu hii inafanywa na zabbix)

**Pia situmii NAT kutoka cbsd, na ninaisanidi mwenyewe 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

Kuweka sera za ngome pia ni mada tofauti, kwa hivyo sitaingia kwa kina katika kusanidi sera ya BLOCK ALL na kuweka orodha zilizoidhinishwa, unaweza kufanya hivyo kwa kusoma. nyaraka rasmi au idadi kubwa ya nakala zinazopatikana kwenye Google.

Kweli... tumesakinisha cbsd, ni wakati wa kuunda farasi wetu wa kwanza - pepo wa Bitcoin aliyefungiwa!

cbsd jconstruct-tui

Bitcoin katika ngome?

Hapa tunaona kidirisha cha kuunda seli. Baada ya maadili yote kuwekwa, wacha tuunde!

Wakati wa kuunda seli yako ya kwanza, unapaswa kuchagua kile cha kutumia kama msingi wa seli. Ninachagua usambazaji kutoka kwa hazina ya FreeBSD na amri repo. Chaguo hili hufanywa tu wakati wa kuunda kisanduku cha kwanza cha toleo mahususi (unaweza kupangisha visanduku vya toleo lolote ambalo ni la zamani kuliko toleo la seva pangishi).

Baada ya kila kitu kimewekwa, tunazindua ngome!

# cbsd jstart bitcoind

Lakini tunahitaji kufunga programu katika ngome.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind kuingia kwenye koni ya seli

na tayari ndani ya seli tunasakinisha programu na utegemezi wake (mfumo wetu wa mwenyeji unabaki safi)

bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils

bitcoind:/@[15:30] # sysrc bitcoind_enable=YES

bitcoind:/@[15:30] # service bitcoind start

Kuna Bitcoin kwenye ngome, lakini tunahitaji kutokujulikana kwa sababu tunataka kuunganishwa na baadhi ya ngome kupitia mtandao wa TOP. Kwa ujumla, tunapanga kuendesha visanduku vingi vilivyo na programu inayotiliwa shaka kupitia seva mbadala pekee. Shukrani kwa pf Unaweza kulemaza NAT kwa anuwai fulani ya anwani za IP kwenye mtandao wa ndani, na kuruhusu NAT kwa nodi yetu ya TOR pekee. Kwa hivyo, hata programu hasidi ikiingia kwenye seli, kuna uwezekano mkubwa kwamba haitawasiliana na ulimwengu wa nje, na ikiwa itafanya hivyo, haitafichua IP ya seva yetu. Kwa hivyo, tunaunda kisanduku kingine cha "kusambaza" huduma kama huduma ya ".vitunguu" na kama seva mbadala ya kufikia Mtandao kwa seli mahususi.

# 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

Weka kusikiliza kwenye anwani ya karibu (inapatikana kwa visanduku vyote)

SOCKSPort 192.168.0.2:9050

Ni nini kingine tunachohitaji kwa furaha kamili? Ndiyo, tunahitaji huduma kwa wavuti yetu, labda zaidi ya moja. Wacha tuzindue nginx, ambayo itafanya kama wakala wa nyuma na kutunza upya vyeti vya Let's Encrypt

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

nginx-rev:/@[15:47] # pkg install nginx py36-certbot

Na kwa hivyo tuliweka MB 150 za utegemezi kwenye ngome. Na mwenyeji bado ni safi.

Wacha turudi kusanidi nginx baadaye, tunahitaji kuongeza seli mbili zaidi kwa lango letu la malipo kwenye nodejs na kutu na programu ya wavuti, ambayo kwa sababu fulani iko katika Apache na PHP, na ya mwisho pia inahitaji hifadhidata ya 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

...na MB nyingine 380 za vifurushi zimetengwa

Ifuatayo, tunapakua programu yetu na git na kuizindua.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql

Vifurushi vya 450 MB. katika ngome.

hapa tunampa msanidi ufikiaji kupitia SSH moja kwa moja kwa seli, watafanya kila kitu pale wenyewe:

webapp:/@[16:02] # ee /etc/ssh/sshd_config

Port 2267 - badilisha lango la SSH la kisanduku kuwa la kiholela

webapp:/@[16:02] # sysrc sshd_enable=YES

webapp:/@[16:02] # service sshd start

Kweli, huduma inaendelea, kilichobaki ni kuongeza sheria pf firewall

Hebu tuone IP seli zetu zina nini na "eneo letu la karibu" kwa ujumla linaonekanaje.

# 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

na kuongeza kanuni

# 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

Kweli, kwa kuwa tuko hapa, wacha pia tuongeze sheria ya wakala wa kurudi nyuma:

## 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

Naam, sasa kidogo kuhusu bitcoins

Tulicho nacho ni kwamba tuna programu ya wavuti ambayo inafichuliwa nje na inazungumza ndani ya nchi kwenye lango letu la malipo. Sasa tunahitaji kuandaa mazingira ya kufanya kazi kwa kuingiliana na mtandao wa Bitcoin yenyewe - node bitcoind ni daemon ambayo husasisha nakala ya ndani ya blockchain. Daemon hii ina RPC na utendakazi wa pochi, lakini kuna "vifuniko" vinavyofaa zaidi kwa ukuzaji wa programu. Kuanza na, tuliamua kuweka electrum ni mkoba wa CLI. Mkoba huu tutaitumia kama "hifadhi baridi" kwa bitcoins zetu - kwa ujumla, bitcoins ambazo zitahitaji kuhifadhiwa "nje" ya mfumo unaoweza kufikiwa na watumiaji na kwa ujumla mbali na kila mtu. Pia ina GUI, kwa hivyo tutatumia pochi sawa kwenye yetu
kompyuta za mkononi. Kwa sasa tutatumia Electrum na seva za umma, na baadaye tutaiinua kwenye seli nyingine ElectrumXili asitegemee mtu hata kidogo.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

electrum:/@[8:45] # pkg install py36-electrum

MB 700 nyingine ya programu kwenye ngome yetu

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"
}

Sasa tuna mkoba ulioundwa.

wallet@electrum:/ % electrum-3.6 listaddresses

[
    "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
    "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
    "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
    ...
    "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
    "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]

wallet@electrum:/ % electrum-3.6 help

Kwetu kwenye mnyororo Ni idadi ndogo tu ya watu wataweza kuunganisha kwenye pochi kuanzia sasa na kuendelea. Ili usifungue ufikiaji wa kisanduku hiki kutoka nje, miunganisho kupitia SSH itafanyika kupitia TOP (toleo la VPN lililogatuliwa). Tunazindua SSH kwenye kisanduku, lakini usiguse pf.conf yetu kwenye seva pangishi.

electrum:/@[9:00] # sysrc sshd_enable=YES

electrum:/@[9:00] # service sshd start

Sasa hebu tuzima kiini na upatikanaji wa mtandao wa mkoba. Wacha tuipe anwani ya IP kutoka kwa nafasi nyingine ndogo ambayo sio NATed. Kwanza tubadilike /etc/pf.conf juu ya mwenyeji

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" tuibadilishe JAIL_IP_POOL="192.168.0.0/25", hivyo anwani zote 192.168.0.126-255 hazitakuwa na upatikanaji wa moja kwa moja kwenye mtandao. Aina ya mtandao wa "hewa-pengo" ya programu. Na sheria ya NAT inabaki kama ilivyokuwa

nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

Kupakia sheria kupita kiasi

# pfctl -f /etc/pf.conf

Sasa hebu tuchukue kiini chetu

# cbsd jconfig jname=electrum

Bitcoin katika ngome?

Bitcoin katika ngome?

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, lakini sasa mfumo wenyewe utaacha kufanya kazi kwa ajili yetu. Hata hivyo, tunaweza kubainisha proksi ya mfumo. Lakini kuna jambo moja, kwenye TOR ni proksi ya SOCKS5, na kwa urahisi tungependa pia proksi ya 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

Kweli, sasa kuna seva mbili za wakala kwenye mfumo wetu, na zote mbili hutoa kupitia TOR: soksi5://192.168.0.2:9050 na http://192.168.0.6:8123

Sasa tunaweza kusanidi mazingira ya mkoba wetu

# 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

Kweli, sasa ganda litafanya kazi kutoka chini ya wakala. Ikiwa tunataka kufunga vifurushi, basi tunapaswa kuongeza /usr/local/etc/pkg.conf kutoka chini ya mzizi wa ngome

pkg_env: {
               http_proxy: "http://my_proxy_ip:8123",
           }

Kweli, sasa ni wakati wa kuongeza huduma iliyofichwa ya TOR kama anwani ya huduma yetu ya SSH kwenye ngome ya mkoba.

# 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

Hii ndio anwani yetu ya muunganisho. Wacha tuangalie kutoka kwa mashine ya ndani. Lakini kwanza tunahitaji kuongeza ufunguo wetu wa SSH:

wallet@electrum:/ % mkdir ~/.ssh

wallet@electrum:/ % ee ~/.ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

Kweli, kutoka kwa mashine ya mteja ya 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

Hebu tuunganishe (Ili hii ifanye kazi, unahitaji daemon ya karibu ya TOR ambayo inasikiza kwenye 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

Mafanikio!

Ili kufanya kazi na malipo ya papo hapo na ndogo, tunahitaji nodi Mtandao wa umeme, kwa kweli, hii itakuwa chombo chetu kikuu cha kufanya kazi na Bitcoin. U*c-umemeambayo tutatumia kama daemon ilivyo Programu-jalizi ya Sparko, ambayo ni kiolesura kamili cha HTTP (REST) ​​na hukuruhusu kufanya kazi na shughuli za nje ya mnyororo na kwenye mnyororo. c-lightning inahitajika kwa utendaji kazi bitcoind lakini ndiyo.

*Kuna utekelezaji tofauti wa itifaki ya Mtandao wa Umeme katika lugha tofauti. Kati ya zile tulizozijaribu, umeme wa c (ulioandikwa katika C) ulionekana kuwa thabiti zaidi na ufaafu wa rasilimali.

# 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

Wakati kila kitu muhimu kinakusanywa na kusakinishwa, wacha tuunde mtumiaji wa RPC 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

Ubadilishaji wangu wa machafuko kati ya seli unageuka kuwa sio wa fujo sana ikiwa utagundua matumizi tmux, ambayo hukuruhusu kuunda vikao vidogo vingi vya wastaafu ndani ya kipindi kimoja. Analogi: screen

Bitcoin katika ngome?

Kwa hivyo, hatutaki kufichua IP halisi ya nodi yetu, na tunataka kufanya miamala yote ya kifedha kupitia TOP. Kwa hiyo, kitunguu kingine cha .haihitajiki.

# 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

Sasa hebu tuunde usanidi wa c-umeme

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 ~

unahitaji pia kuunda faili ya usanidi kwa bitcoin-cli, shirika linalowasiliana nalo bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

kuangalia

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

uzinduzi lightningd

lightning@lightning:~ % lightningd --daemon

Mwenyewe lightningd unaweza kudhibiti matumizi lightning-cli, kwa mfano:

lightning-cli newaddr pata anwani ya malipo mapya yanayoingia

{
   "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
   "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all tuma pesa zote kwenye pochi kwa anwani (anwani zote za mnyororo)

Pia amri kwa shughuli za nje ya mnyororo lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay na kadhalika.

Kweli, kwa mawasiliano na programu tunayo REST Api

curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'

Jumla juu

# 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 katika ngome?

Tuna seti ya vyombo, kila moja ikiwa na kiwango chake cha ufikiaji kutoka na kwa mtandao wa ndani.

# 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

Kama unavyoona, bitcoind inachukua nafasi ya GB 190. Je, ikiwa tunahitaji nodi nyingine kwa ajili ya vipimo? Hapa ndipo ZFS inakuja vizuri. Kwa msaada cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com unaweza kuunda muhtasari na kuambatisha kisanduku kipya kwenye muhtasari huu. Kiini kipya kitakuwa na nafasi yake mwenyewe, lakini tu tofauti kati ya hali ya sasa na ya awali itazingatiwa katika mfumo wa faili (tutahifadhi angalau 190 GB)

Kila seli ni hifadhidata yake tofauti ya ZFS, na hii ni rahisi sana. ZFS pia inaruhusu fanya mambo mengine mengi mazuri, kama kutuma picha kupitia SSH. Hatutaelezea, tayari kuna mengi.

Inafaa pia kuzingatia hitaji la ufuatiliaji wa mbali wa mwenyeji, kwa madhumuni haya tuliyo nayo Zabbix.

B - usalama

Kuhusu usalama, hebu tuanze kutoka kwa kanuni muhimu katika muktadha wa miundombinu:

Usiri - Zana za kawaida za mifumo inayofanana na UNIX huhakikisha utekelezaji wa kanuni hii. Tunatenganisha ufikiaji wa kila kipengele cha kimantiki cha mfumo - seli. Ufikiaji hutolewa kupitia uthibitishaji wa kawaida wa mtumiaji kwa kutumia funguo za kibinafsi za watumiaji. Mawasiliano yote kati na hadi mwisho seli hutokea katika fomu iliyosimbwa. Shukrani kwa usimbaji fiche wa diski, hatuna haja ya kuwa na wasiwasi kuhusu usalama wa data wakati wa kubadilisha diski au kuhamia seva nyingine. Ufikiaji muhimu pekee ni ufikiaji wa mfumo wa seva pangishi, kwa kuwa ufikiaji kama huo kwa ujumla hutoa ufikiaji wa data ndani ya vyombo.

Uadilifu β€œUtekelezaji wa kanuni hii hutokea katika ngazi mbalimbali. Kwanza, ni muhimu kutambua kwamba katika kesi ya vifaa vya seva, kumbukumbu ya ECC, ZFS tayari "nje ya sanduku" inachukua huduma ya uadilifu wa data katika ngazi ya bits ya habari. Vijipicha vya papo hapo hukuruhusu kufanya nakala rudufu wakati wowote kwa kuruka. Zana zinazofaa za usafirishaji wa seli/kuagiza hurahisisha uigaji wa seli.

Upatikanaji - Hii tayari ni ya hiari. Inategemea kiwango cha umaarufu wako na ukweli kwamba una wapinzani. Katika mfano wetu, tulihakikisha kuwa pochi ilifikiwa pekee kutoka kwa mtandao wa TOP. Ikiwa ni lazima, unaweza kuzuia kila kitu kwenye firewall na kuruhusu ufikiaji wa seva pekee kupitia vichuguu (TOR au VPN ni jambo lingine). Kwa hivyo, seva itakatwa kutoka kwa ulimwengu wa nje iwezekanavyo, na sisi wenyewe tu tutaweza kushawishi upatikanaji wake.

Kutowezekana kwa kukataa - Na hii inategemea utendakazi zaidi na kufuata sera sahihi za haki za mtumiaji, ufikiaji, nk. Lakini kwa mbinu sahihi, vitendo vyote vya mtumiaji vinakaguliwa, na shukrani kwa ufumbuzi wa cryptographic inawezekana kutambua bila shaka ni nani aliyefanya vitendo fulani na wakati gani.

Kwa kweli, usanidi ulioelezewa sio mfano kamili wa jinsi inavyopaswa kuwa kila wakati, ni mfano mmoja wa jinsi inavyoweza kuwa, huku ukihifadhi uwezo unaonyumbulika sana wa kuongeza na kubinafsisha.

Vipi kuhusu uboreshaji kamili?

Kuhusu uboreshaji kamili kwa kutumia cbsd unaweza soma hapa. Nitaongeza tu kwa kazi bhyve Unahitaji kuwezesha chaguzi kadhaa za kernel.

# cat /etc/rc.conf

...
kld_list="vmm if_tap if_bridge nmdm"
...

# cat /boot/loader.conf

...
vmm_load="YES"
...

Kwa hivyo ikiwa unahitaji ghafla kuanza docker, kisha usakinishe debian na uende!

Bitcoin katika ngome?

Ni hayo tu

Nadhani hiyo ndiyo yote nilitaka kushiriki. Ikiwa ulipenda nakala hiyo, basi unaweza kunitumia bitcoins - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Ikiwa unataka kujaribu seli katika hatua na kuwa na bitcoins, unaweza kwenda kwa yangu pet-mradi.

Chanzo: mapenzi.com