Bitcoin di qefesê de?

Wisa bû ku ez bi pîşeyê xwe rêvebirê sîstem û torên kompîturê me (bi kurtî: gerînendeyê pergalê), û ji 10 salan zêdetir derfeta min hebû ku ez ji prof. çalakiyên cûrbecûr pergalan, di nav de yên ku hewceyê tedbîrên ewlehiyê yên [bilind] in. Ev jî çêbû ku demek berê min ew balkêş dît bitcoin, û ne tenê ew bikar anî, lê di heman demê de gelek karûbarên mîkro jî da destpêkirin da ku fêr bibe ka meriv çawa bi tora Bitcoin re (herî din jî p2p) ji nêrîna pêşdebirek serbixwe kar dike (bê guman ez yek ji wan im dev, loma, ez derbas dibûm). Lê ez behsa pêşveçûnê nakim, ez behsa hawîrdorek ewledar û bikêrhatî ji bo sepanan dikim.

Teknolojiya darayî (fintech) li tenişta ewlehiya agahdariyê biçin (infosec) û ya yekem dikare bêyî ya duyemîn bixebite, lê ne ji bo dirêj. Ji ber vê yekê ez dixwazim ezmûna xwe û komek amûrên ku ez bikar tînim, ku her du jî tê de, parve bikim fintech, û infosec, û di heman demê de, û her weha dikare ji bo armancek berfireh an bi tevahî cûda were bikar anîn. Di vê gotarê de ez ê ne pir li ser Bitcoin, lê li ser modela binesaziyê ji bo pêşkeftin û xebitandina karûbarên darayî (û ne tenê) ji we re bibêjim - bi gotinek, ew karûbarên ku "B" girîng e. Ev hem ji bo danûstendina Bitcoin û hem jî ji bo karûbarên zozanên pargîdanî yên herî tîpîk ên pargîdaniyek piçûk ku bi ti awayî bi Bitcoin ve ne girêdayî ye derbas dibe.

Ez dixwazim bibêjim ku ez alîgirê prensîban im "ew sade bihêle" и "kêmtir pirtir e", ji ber vê yekê, hem gotar û hem jî ya ku tê de tête diyar kirin dê xwediyê taybetmendiyên ku van prensîban li ser in.

Senaryoya xeyalî: Ka em li her tiştî bi mînakek veguherînerek bitcoin binihêrin. Me biryar da ku em pevguhertina ruble, dolar, ewro ji bo bitcoin û paş ve bidin destpêkirin, û me jixwe çareseriyek xebatê heye, lê ji bo pereyên dîjîtal ên mîna qiwi û webmoney, yanî. Me hemî pirsgirêkên qanûnî girtine, me serîlêdanek amade heye ku wekî dergehek dravdana rûbil, dolar û ewro û pergalên dravdanê yên din kar dike. Ew bi hesabên me yên bankê ve girêdayî ye û ji bo serîlêdanên dawiya me cûreyek API heye. Di heman demê de serîlêdanek me ya webê heye ku ji bo bikarhêneran wekî guhezker tevdigere, baş e, mîna hesabek qiwi an webmoney-ya tîpîk - hesabek biafirîne, qertek lê zêde bike, û hwd. Ew bi serîlêdana dergehê me re, her çend bi REST API-ya li qada herêmî re têkilî daynin. Ji ber vê yekê me biryar da ku bitcoins ve girêbidin û di heman demê de binesaziyê nûve bikin, ji ber ... Di destpêkê de, her tişt bi lez û bez li ser virtualboxên di nivîsgehê de di bin sifrê de hate danîn... malper dest bi karanîna kir, û me dest bi fikaran kir li ser dem û performansê.

Ji ber vê yekê, em bi ya sereke dest pê bikin - hilbijartina serverek. Bo karsaziya di mînaka me de piçûk e û em ji mêvandarê (OVH) bawer dikin ku em ê hilbijêrin vebijarkek budceyê tê de ne gengaz e ku pergalê ji wêneya .iso ya orîjînal saz bike, lê ne girîng e, beşa ewlehiya IT-ê bê guman dê wêneya sazkirî analîz bike. Û gava ku em mezin bibin, em ê dolaba xwe ya di bin kilît û mifteyê de bi gihîştina laşî ya tixûbdar kirê bikin, û dibe ku em ê DC-ya xwe ava bikin. Di her rewşê de, hêja ye ku ji bîr mekin ku dema kirêkirina hardware û sazkirina wêneyên amadekirî, şansek heye ku hûn ê "Trojanek ji mêvandar" li ser pergala we daliqînin, ku di pir rewşan de ne armanc e ku hûn li we sîxurî bikin. lê ji bo pêşkêşkirina serverê amûrên rêveberiya hêsantir.

Sazkirina serverê

Li vir her tişt hêsan e. Em hardware ku li gorî hewcedariyên me tê hildibijêrin. Dûv re wêneya FreeBSD hilbijêrin. Welê, an jî em (di doza mêvandarek din û hardware ya xwe de) bi IPMI an bi çavdêriyek ve girêdidin û wêneya .iso FreeBSD di dakêşanê de bihêlin. Ji bo sazkirina orkestrayê ez bikar tînim Ansible и mfsbsd. Tekane tişt, di doza me de bi kimsufi, me hilbijart sazkirina xwerû ji bo ku du dîskên di neynikê de tenê dabeşên boot û /malê "vekirî" bin, cîhê dîskê yê mayî dê were şîfre kirin, lê li ser wê paşê bêtir.

Bitcoin di qefesê de?

Sazkirina pergalê bi rengek standard pêk tê, ez ê li ser vê yekê nesekinim, ez ê tenê destnîşan bikim ku berî destpêkirina operasyonê hêja ye ku bala xwe bidin ser hişk kirin vebijarkên ku ew pêşkêş dike bsdinstaller di dawiya sazkirinê de (heke hûn pergalê bi xwe saz bikin):

Bitcoin di qefesê de?

Ð • n, Nûh * de materyalê baş li ser vê mijarê, ez ê li vir bi kurtî dubare bikim.

Di heman demê de gengaz e ku meriv pîvanên jorîn li ser pergalek jixwe sazkirî çalak bike. Ji bo vê yekê, hûn hewce ne ku pelê bootloader biguherînin û pîvanên kernel çalak bikin. *ee di BSD de edîtorek bi vî rengî ye

# 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

Her weha divê hûn pê ewle bin ku we guhertoya herî dawî ya pergalê saz kiriye, û hemî nûvekirin û nûvekirinan pêk bînin. Di rewşa me de, wek nimûne, nûvekirinek ji guhertoya herî dawî re hewce ye, ji ber ku ... wêneyên pêş-sazkirinê şeş ​​meh heta salek li paş dimînin. Welê, li wir em porta SSH-ê ji ya xwerû cûda cûda diguhezînin, pejirandina sereke lê zêde bikin û pejirandina şîfreyê neçalak bikin.

Piştre em mîheng dikin aide, şopandina rewşa pelên veavakirina pergalê. Hûn dikarin bi berfirehî bixwînin vir.

pkg install aide

û crontabê me biguherîne

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

Vekirin kontrolkirina pergalê

sysrc auditd_enable=YES

# service auditd start

Meriv çawa vê mijarê bi rêve dibe di nav de bi tevahî tête diyar kirin birêvebirî.

Naha em ji nû ve dest pê dikin û berbi nermalava li ser serverê ve diçin. Her server ji bo konteynir an makîneyên tevahî virtual hîpervisorek e. Ji ber vê yekê, girîng e ku pêvajoyek VT-x û EPT piştgirî bike ger em plan dikin ku virtualbûna tevahî bikar bînin.

Ji bo birêvebirina konteyneran û makîneyên virtual ku ez bikar tînim cbsd ji olevole, Ji bo vê karanîna hêja ez jê re bêtir tenduristî û bereketê dixwazim!

Konteyner? Docker dîsa an çi?

Lê na. Girtîgehên FreeBSD ji bo konteynirkirinê amûrek hêja ye, lê ya ku hatî destnîşan kirin cbsd ji bo organîzekirina van konteynir, ku jê re hucre tê gotin.

Qefes ji bo avakirina binesaziyê ji bo cûrbecûr mebestan çareseriyek zehf bi bandor e, ku di dawiyê de îzolekirina tevahî ya karûbar an pêvajoyên kesane hewce ye. Di bingeh de, ew klonek pergala mêvandar e, lê ew ne hewceyî virtualîzasyona tevahî hardware ye. Û bi saya vê yekê, çavkanî ne li ser "OS-ya mêvan" têne xerc kirin, lê tenê li ser xebata ku têne kirin. Gava ku hucre ji bo hewcedariyên hundurîn têne bikar anîn, ev çareseriyek pir hêsan e ji bo karanîna çavkaniyek çêtirîn - komek hucre li ser yek serverek hardware dikare her kes bi rengek ferdî ger hewce bike tevahiya çavkaniya serverê bikar bîne. Bihesibînin ku bi gelemperî jêrxizmetên cûda hewceyê zêde hewce ne. çavkaniyên di demên cûda de, hûn dikarin performansa herî zêde ji yek serverê derxînin heke hûn bi rêkûpêk şaneyên di navbera serveran de plansaz bikin û hevseng bikin. Ger hewce be, hucreyan jî dikarin li ser çavkaniya ku têne bikar anîn sînorkirin bêne dayîn.

Bitcoin di qefesê de?

Li ser virtualbûna tevahî çi ye?

Bi qasî ku ez dizanim cbsd piştgirî dide xebatê bhyve û hîpervisorên XEN. Min çu carî ya duyemîn bikar neaniye, lê ya yekem nisbeten nû ye hypervisor ji FreeBSD. Em ê mînakek bikar bînin bhyve di mînaka jêrîn de.

Sazkirin û Sazkirina Jîngeha Hostê

Em FS bikar tînin ZFS. Ev amûrek zehf bi hêz e ji bo birêvebirina cîhê serverê. Bi saya ZFS-ê, hûn dikarin rasterast ji dîskan rêzikên cûrbecûr mîhengan ava bikin, cîhê dînamîkî "germ" berfireh bikin, dîskên mirî biguhezînin, wêneyan bi rêve bibin, û pir û pir bêtir, ku dikarin di nav rêzek gotaran de werin vegotin. Ka em vegerin ser servera xwe û dîskên wê. Di destpêka sazkirinê de, me cîhê belaş li ser dîskan ji bo dabeşên şîfrekirî hiştin. Çima wisa ye? Ev ji ber vê yekê ye ku pergal bixweber şiyar dibe û bi SSH guhdarî dike.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

dabeşek dîskê li cîhê mayî zêde bike

geli init /dev/ada0p4

şîfreya me ya şîfrekirinê binivîse

geli attach /dev/ada0p4

Em dîsa şîfreyê dinivîsin û amûrek me heye /dev/ada0p4.eli - ev cîhê meya şîfrekirî ye. Dûv re em heman ji bo /dev/ada1 û dîskên mayî yên di rêzê de dubare dikin. Û em yekî nû ava dikin hewza ZFS.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Belê, me kîtekîta şer a herî kêm amade ye. Di doza ku yek ji sêyan têk biçe komek dîskên neynîkî.

Afirandina danezanek li ser "pool"ek nû

zfs create vms/jails

pkg install cbsd - me tîmek damezrand û ji bo hucreyên xwe rêveberî saz kir.

Piştî cbsd saz kirin, pêdivî ye ku ew were destpêkirin:

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

Welê, em bersiva komek pirsan didin, bi piranî bi bersivên xwerû.

* Ger hûn şîfrekirinê bikar tînin, girîng e ku daemon cbsdd heya ku hûn dîskan bi destan an bixweber şîfre nekin bixweber dest pê nekir (di mînaka me de ev ji hêla zabbix ve hatî çêkirin)

** Ez ji NAT-ê jî bikar naynim cbsd, û ez bi xwe wê di nav de mîheng dikim 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

Sazkirina polîtîkayên dîwarê agir jî mijarek cihêreng e, ji ber vê yekê ez ê kûr neçim nav sazkirina polîtîkaya BLOCK ALL û danîna navnîşên spî, hûn dikarin bi xwendinê wiya bikin. belgeyên fermî an yek ji hejmareke mezin a gotarên li ser Google hene.

Welê... me cbsd saz kiriye, dem hatiye ku em keda xwe ya yekem biafirînin - cinê Bitcoin ê qefeskirî!

cbsd jconstruct-tui

Bitcoin di qefesê de?

Li vir em diyaloga çêkirina hucreyê dibînin. Piştî ku hemî nirx hatine danîn, em biafirînin!

Dema ku hucreya xweya yekem diafirîne, divê hûn hilbijêrin ka hûn wekî bingeh ji bo hucreyan bikar bînin. Ez bi fermanê dabeşek ji depoya FreeBSD hildibijêrim repo. Ev hilbijartin tenê dema afirandina şaneya yekem a guhertoyek taybetî tête çêkirin (hûn dikarin hucreyên her guhertoyek ku ji guhertoya mêvandar kevntir e mêvandar bikin).

Piştî ku her tişt hate saz kirin, em qefesê dest pê dikin!

# cbsd jstart bitcoind

Lê divê em nermalavê di qefesê de saz bikin.

# jls

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

jexec bitcoind ku bikeve konsolê hucreyê

û jixwe di hundurê hucreyê de em nermalavê bi girêdanên wê saz dikin (pergala meya mêvandar paqij dimîne)

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

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

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

Di qefesê de Bitcoin heye, lê em hewceyê nenasiyê ne ji ber ku em dixwazin bi rêya tora TOP ve bi hin qefesan ve girêbidin. Bi gelemperî, em plan dikin ku piraniya hucreyan bi nermalava gumanbar tenê bi navgînek proxy ve bimeşînin. Bi saya pf Hûn dikarin NAT-ê ji bo hin rêzek navnîşanên IP-yê li ser tora herêmî neçalak bikin, û destûr bidin NAT-ê tenê ji bo nodeya meya TOR. Ji ber vê yekê, her çend malware têkeve hucreyê jî, bi îhtîmalek mezin ew ê bi cîhana derve re têkilî neke, û heke wusa be, ew ê IP-ya servera me eşkere neke. Ji ber vê yekê, em şaneyek din ava dikin ku karûbarên "pêşvebirin" wekî karûbarek ".pîvaz" û wekî proxy ji bo gihîştina Internetnternetê ji şaneyên kesane re.

# 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

Ji bo guhdarîkirina li navnîşek herêmî destnîşan bike (ji bo hemî hucreyan heye)

SOCKSPort 192.168.0.2:9050

Ji bo bextewariya tam ji me re çi din lazim e? Erê, em ji bo tevna xwe karûbarek hewce ne, dibe ku ji yekê zêdetir. Werin em nginx-ê bidin destpêkirin, ku dê wekî berevajî-proxy tevbigere û li ser nûkirina sertîfîkayên Let's Encrypt tevbigere.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Û bi vî awayî me 150 MB girêdayîbûnê di qefesekê de bi cih kir. Û hoste hîn jî paqij e.

Ka em paşê vegerin ser sazkirina nginx-ê, pêdivî ye ku em du hucreyên din ji bo deriyê dravdana xwe li ser nodejs û rust û serîlêdanek malperê, ku ji ber hin sedeman di Apache û PHP-ê de ye, bilind bikin, û ya paşîn jî databasek MySQL hewce dike.

# 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

...û 380 MB pakêtên din hatine veqetandin

Dûv re, em serîlêdana xwe bi git dakêşin û dest pê dikin.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 pakêtên MB. di qefesê de.

Li vir em bi riya SSH-ê rasterast gihîştina pêşdebiran didin hucreyê, ew ê her tiştî li wir bixwe bikin:

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

Port 2267 - porta SSH ya hucreyê bi her kêfî biguhezînin

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

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

Welê, karûbar dimeşe, ya ku dimîne ev e ku meriv qaîdeyê lê zêde bike pf firewall

Ka em bibînin ka hucreyên me çi IP hene û bi gelemperî "herêma meya herêmî" çawa xuya dike.

# 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

û qaîdeyek lê zêde bike

# 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

Welê, ji ber ku em li vir in, bila em qaîdeyek ji bo reverse-proxy jî zêde bikin:

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

Belê, niha hinekî li ser bitcoins

Tiştê ku me heye ev e ku me serîlêdanek webê heye ku ji derve ve tê xuyang kirin û ew bi dergehê dravdana meya herêmî re diaxive. Naha pêdivî ye ku em jîngehek xebatê amade bikin da ku bi tora Bitcoin bixwe - node re têkilî daynin bitcoind ew tenê daemonek e ku kopiya herêmî ya blokê nûve dike. Ev daemon xwedan fonksiyona RPC û walletê ye, lê ji bo pêşkeftina serîlêdanê "wrapers" hêsantir hene. Ji bo destpêkê, me biryar da ku em bikin electrum walletek CLI ye. Ev wallet em ê wê ji bo bitcoinên xwe wekî "depoya sar" bikar bînin - bi gelemperî, ew bitcoinsên ku hewce ne ku "li derveyî" pergalê werin hilanîn û bi gelemperî ji her kesî dûr werin hilanîn. Di heman demê de GUI-yek wê jî heye, ji ber vê yekê em ê heman berîka xwe li ser xwe bikar bînin
laptopan. Heya nuha em ê Electrum bi pêşkêşkerên gelemperî bikar bînin, û paşê em ê wê di hucreyek din de bilind bikin ElectrumXji bo ku bi tu kesî ve girêdayî nemîne.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

700 MB nermalava din di qefesa me de

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

Niha me walletek çêkiriye.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Ji me re on-zincîr Ji niha û pê ve tenê hejmarek sînordar dê karibin bi berîka xwe ve girêbidin. Ji bo ku gihandina vê hucreyê ji derve ve neyê vekirin, girêdanên bi SSH-ê dê bi TOP-ê (guhertoyek nemerkezî ya VPN) pêk werin. Em SSH-ê di hucreyê de dest pê dikin, lê pf.conf-a xwe li ser mêvandar nahêlin.

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

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

Naha em şaneyê bi gihîştina Înternetê ya berîka xwe vekin. Ka em wê navnîşek IP-ya ji cîhek din a jêrtorê ku ne NATed e, bidin. Pêşî em biguherînin /etc/pf.conf li ser mêvandar

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" em wê biguherînin JAIL_IP_POOL="192.168.0.0/25", Ji ber vê yekê hemî navnîşanên 192.168.0.126-255 dê rasterast negihîjin Înternetê. Cûreyek nermalava torê "air-gap". Û qaîdeya NAT wekî xwe dimîne

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

Zêdebarkirina qaîdeyên

# pfctl -f /etc/pf.conf

Niha em werin ser hucreya xwe

# cbsd jconfig jname=electrum

Bitcoin di qefesê de?

Bitcoin di qefesê de?

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, lê niha pergal bixwe dê ji bo me bixebite. Lêbelê, em dikarin proxyek pergalê diyar bikin. Lê tiştek heye, li ser TOR ew proxyek SOCKS5 e, û ji bo rehetiyê em jî proxyek HTTP dixwazin.

# 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

Welê, naha di pergala me de du serverên proxy hene, û her du jî bi TOR-ê derdikevin: socks5://192.168.0.2:9050 û http://192.168.0.6:8123

Naha em dikarin jîngeha berîka xwe mîheng bikin

# 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

Welê, naha şêl dê ji bin proxyek bixebite. Ger em dixwazin pakêtan saz bikin, wê hingê divê em lê zêde bikin /usr/local/etc/pkg.conf ji bin koka qefesê

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

Welê, naha ew dem e ku em karûbarê veşartî TOR wekî navnîşana karûbarê meya SSH di hucreya walletê de zêde bikin.

# 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

Ev navnîşana girêdana me ye. Ka em ji makîneya herêmî kontrol bikin. Lê pêşî divê em mifteya SSH-ya xwe zêde bikin:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Welê, ji makîneyek xerîdar a 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

Werin em girêdan (Ji bo ku ev bixebite, hûn hewceyê demonek TOR ya herêmî ye ku li 9050 guhdarî dike)

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 <genesis@istar.ca>
wallet@electrum:~ % logout

Serketinî!

Ji bo ku em bi dravdanên tavil û mîkro re bixebitin, ji me re girêkek jî hewce ye Network, bi rastî, ev ê bi Bitcoin re amûra xebata meya sereke be. U*c-birûskêya ku em ê wekî daemon bikar bînin ev e Pêveka Sparko, ku navbeynkariya HTTP (REST) ​​ya bêkêmasî ye û dihêle hûn hem bi danûstendinên derveyî zincîre û hem jî bi zincîreyê re bixebitin. c-lightning ji bo xebatê pêwîst e bitcoind lê belê.

*Di zimanên cihê de pêkanînên cihêreng ên protokola Torgiloka Lightning hene. Ji yên ku me ceriband, c-lightning (bi C hatî nivîsandin) ya herî sabît û jêhatî-çavkaniyê xuya bû.

# 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

Dema ku her tiştê pêwîst tê berhev kirin û saz kirin, em ji bo bikarhênerek RPC biafirînin 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

Ger hûn amûrê binihêrin veguherîna min a kaotîk di navbera hucreyan de ew qas ne kaotîk derdikeve holê tmux, ku destûrê dide te ku hûn di yek danişînê de gelek bin-danişînên termînalê biafirînin. Analog: screen

Bitcoin di qefesê de?

Ji ber vê yekê, em naxwazin IP-ya rastîn a nodeya xwe eşkere bikin, û em dixwazin hemî danûstendinên darayî bi TOP-ê re bikin. Ji ber vê yekê, .pîvazek din ne hewce ye.

# 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

Naha em konfigurasyonek ji bo c-lightning biafirînin

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 ~

her weha hûn hewce ne ku ji bo bitcoin-cli pelê veavakirinê biafirînin, amûrek ku pê re têkilî daynin. bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

kontrolkirin

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

[
  "test"
]

destpêkirin lightningd

lightning@lightning:~ % lightningd --daemon

Xwe lightningd hûn dikarin karûbar kontrol bikin lightning-cli, wek nimûne:

lightning-cli newaddr ji bo dravdana nû ya hatî navnîşê bistînin

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all hemî pereyên di berîka xwe de bişînin navnîşanê (hemî navnîşanên li ser zincîrê)

Di heman demê de ji bo operasyonên derveyî zincîrê jî ferman dide lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay û vî awayî

Welê, ji bo danûstendina bi serîlêdanê re me REST Api heye

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

Bila encama encam bikin

# 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 di qefesê de?

Me komek konteyneran heye, her yek bi asta xwe ya gihîştina hem ji û hem jî ji tora herêmî re.

# 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

Wekî ku hûn dikarin bibînin, bitcoind hemî 190 GB cîh digire. Ger ji bo ceribandinê pêdivî bi nodek din hebe? Li vir ZFS bi kêr tê. Bi alîkarî cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com hûn dikarin wêneyek biafirînin û şaneyek nû bi vê wêneyê ve girêdin. Dê hucreya nû cîhê xwe hebe, lê tenê cûdahiya di navbera rewşa heyî û ya orîjînal de dê di pergala pelan de were hesibandin (em ê bi kêmî ve 190 GB hilînin)

Her şaneyek daneya ZFS-ya xweya cihê ye, û ev zehf hêsan e. ZFS jî destûrê dide gelek tiştên din ên xweş bikin, mîna şandina wêneyan bi SSH. Em ê rave nekin, jixwe gelek tişt hene.

Di heman demê de hêjayî gotinê ye ku hewcedariya çavdêriya dûr a mêvandar, ji bo van mebestên me hene Zabbix.

B - ewlehî

Di derbarê ewlehiyê de, em ji prensîbên sereke yên di çarçoveya binesaziyê de dest pê bikin:

Veşarî - Amûrên standard ên pergalên mîna UNIX-ê vê prensîbê piştrast dikin. Em bi mantiqî gihîştina her hêmanek mentiqî ya pergalê - hucreyek ji hev vediqetînin. Gihîştin bi erêkirina standard a bikarhêner bi karanîna mifteyên kesane yên bikarhêneran ve tê peyda kirin. Hemî danûstendina di navbera û heya hucreyên dawî de bi rengek şîfrekirî pêk tê. Spas ji şîfrekirina dîskê, dema ku dîskek biguhezînin an koçî serverek din bikin, ne hewce ye ku em ji ewlehiya daneyê xeman bikin. Tenê gihîştina krîtîk gihîştina pergala mêvandar e, ji ber ku gihîştina wusa bi gelemperî gihîştina daneyên hundurê konteyneran peyda dike.

Linavketinî “Pêkanîna vê prensîbê di çend astên cuda de pêk tê. Pêşîn, girîng e ku were zanîn ku di mijara hardware ya serverê de, bîranîna ECC, ZFS jixwe "derveyî qutikê" di asta bitsên agahdariyê de yekbûna daneyê digire. Wêneyên tavilê dihêlin ku hûn di her kêliyê de paşvekêşan çêbikin. Amûrên hinarde/îtxalkirina hucreyê rehet dubarekirina hucreyê hêsan dike.

Hilbijartinê - Ev jixwe vebijarkî ye. Bi asta navdariya we û rastiya ku hûn nefretkar in ve girêdayî ye. Di mînaka xwe de, me piştrast kir ku berîka bi taybetî ji tora TOP-ê tê gihîştin. Ger hewce be, hûn dikarin her tiştî li ser dîwarê dîwarê asteng bikin û bihêlin ku gihîştina serverê bi taybetî bi tunelan (TOR an VPN mijarek din e). Bi vî rengî, server dê bi qasî ku gengaz be ji cîhana derve were qut kirin, û tenê em bixwe dê karibin bandorê li hebûna wê bikin.

Nemimkûniya redkirinê - Û ev bi operasyonên din ve girêdayî ye û bi polîtîkayên rast ên ji bo mafên bikarhêner, gihîştin, û hwd ve girêdayî ye. Lê bi nêzîkatiya rast, hemî kiryarên bikarhêner têne kontrol kirin, û bi saya çareseriyên krîptografî gengaz e ku meriv bi eşkereyî nas bike ka kê hin kiryar û kengê kiriye.

Bê guman, veavakirina diyarkirî ne mînakek bêkêmasî ye ku divê ew her gav çawa be, ew yek mînakek e ku meriv çawa dikare bibe, di heman demê de kapasîteyên pîvan û xwerûkirina pir maqûl digire.

Li ser virtualbûna tevahî çi ye?

Di derbarê virtualbûna tevahî de hûn dikarin bi karanîna cbsd-ê bikar bînin li vir bixwînin. Ez ê tenê ji bo xebatê lê zêde bikim bhyve Hûn hewce ne ku hin vebijarkên kernel çalak bikin.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Ji ber vê yekê heke hûn ji nişkê ve hewce ne ku dokerek dest pê bikin, wê hingê hin debian saz bikin û biçin!

Bitcoin di qefesê de?

Navê pêger

Ez texmîn dikim ku tenê min dixwest ez parve bikim ev e. Ger we gotar jê hez kir, wê hingê hûn dikarin ji min re çend bitcoin bişînin - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Heke hûn dixwazin di çalakiyê de hucreyan biceribînin û hin bitcoin hebin, hûn dikarin biçin min pet-projeya.

Source: www.habr.com