Bitcoin nan yon kaj?

Li te rive ke pa pwofesyon mwen se yon administratè nan sistèm òdinatè ak rezo (nan ti bout tan: administratè sistèm), e mwen te gen opòtinite di prof pou yon ti kras plis pase 10 ane. aktivite yo nan yon gran varyete sistèm, tankou sa yo ki mande mezi sekirite [ekstrèm]. Li te rive tou ke kèk tan de sa mwen te jwenn li enteresan bitcoin, epi li pa sèlman itilize li, men tou te lanse plizyè mikwo-sèvis yo nan lòd yo aprann ki jan yo travay poukont yo ak rezo a Bitcoin (aka p2p apre tout) nan pwen de vi nan yon pwomotè (mwen se nan kou youn nan sa yo). dev, donk, mwen t ap pase). Men, mwen pa pale de devlopman, mwen pale de yon anviwònman ki an sekirite ak efikas pou aplikasyon yo.

Teknoloji finansye (fintech) ale akote sekirite enfòmasyon (enfosek) ak premye a ka travay san dezyèm lan, men se pa pou lontan. Se poutèt sa mwen vle pataje eksperyans mwen ak seri zouti ke mwen itilize, ki gen ladan tou de fintechAk enfosek, ak an menm tan an, epi yo ka itilize tou pou yon objektif pi laj oswa konplètman diferan. Nan atik sa a mwen pral di w pa tèlman sou Bitcoin, men sou modèl enfrastrikti pou devlopman ak operasyon sèvis finansye (e pa sèlman) - nan yon mo, sèvis sa yo kote "B" enpòtan. Sa a aplike tou de nan echanj Bitcoin ak nan zou ki pi tipik antrepriz nan sèvis nan yon ti konpayi ki pa konekte ak Bitcoin nan okenn fason.

Mwen ta renmen remake ke mwen se yon sipòtè nan prensip yo "Kenbe li estipid senp" и "mwens se plis", Se poutèt sa, tou de atik la ak sa ki dekri nan li pral gen pwopriyete yo ke prensip sa yo sou.

Senaryo imajinè: Ann gade tout bagay lè l sèvi avèk egzanp yon echanjeur bitcoin. Nou deside lanse echanj la nan rubles, dola, ero pou bitcoins ak tounen lakay ou, epi nou deja gen yon solisyon k ap travay, men pou lòt lajan dijital tankou qiwi ak webmoney, i.e. Nou te fèmen tout pwoblèm legal, nou gen yon aplikasyon pare ki sèvi kòm yon pòtay peman pou rubles, dola ak ero ak lòt sistèm peman. Li konekte ak kont labank nou yo epi li gen kèk kalite API pou aplikasyon nou yo. Nou gen tou yon aplikasyon entènèt ki aji kòm yon echanjeur pou itilizatè yo, byen, tankou yon kont tipik qiwi oswa webmoney - kreye yon kont, ajoute yon kat, ak sou sa. Li kominike ak aplikasyon pòtay nou an, kwake atravè API REST nan zòn lokal la. Se konsa, nou deside konekte bitcoins ak an menm tan amelyore enfrastrikti a, paske ... Okòmansman, yo te mete tout bagay prese sou virtualboxes nan biwo a anba tab la... sit la te kòmanse itilize, epi nou te kòmanse enkyete sou uptime ak pèfòmans.

Se konsa, ann kòmanse ak bagay prensipal la - chwazi yon sèvè. Paske biznis nan egzanp nou an piti epi nou fè konfyans hoster (OVH) nou pral chwazi a yon opsyon bidjè nan ki li enposib enstale sistèm nan soti nan imaj orijinal la .iso, men li pa enpòtan, depatman sekirite IT la pral definitivman analize imaj la enstale. Epi lè nou grandi, nou pral lwe pwòp klozèt nou an anba fèmen ak kle ak aksè fizik limite, e petèt nou pral bati pwòp DC nou an. Nan nenpòt ka, li vo sonje ke lè w ap lwe kenkayri ak enstale imaj ki pare, gen yon chans ke ou pral gen yon "Trojan soti nan hoster la" pandye sou sistèm ou a, ki nan pifò ka yo pa gen entansyon al rekonèt sou ou. men yo ofri pi pratik jesyon zouti sèvè.

Enstalasyon sèvè

Tout bagay se senp isit la. Nou chwazi pyès ki nan konpitè ki adapte ak bezwen nou yo. Lè sa a, chwazi imaj FreeBSD la. Oke, oswa nou konekte (nan ka a nan yon lòt hoster ak pyès ki nan konpitè pwòp nou) atravè IPMI oswa ak yon monitè epi nouri imaj la .iso FreeBSD nan download la. Pou yon konfigirasyon òkès ​​mwen itilize Ansible и mfsbsd. Bagay la sèlman, nan ka nou an ak kimsufi, nou te chwazi enstalasyon koutim nan lòd pou de disk yo nan glas la gen sèlman bòt la ak / patisyon kay "louvri", rès la nan espas ki la ki gen kapasite yo pral chiffres, men plis sou sa pita.

Bitcoin nan yon kaj?

Enstalasyon sistèm lan fèt nan yon fason estanda, mwen pa pral rete sou sa a, mwen pral sèlman sonje ke anvan yo kòmanse operasyon li vo peye atansyon a redi opsyon ke li ofri bsdinstaller nan fen enstalasyon an (si ou enstale sistèm nan tèt ou):

Bitcoin nan yon kaj?

Gen bon materyèl sou sijè sa a, mwen pral yon ti tan repete li isit la.

Li posib tou pou pèmèt paramèt mansyone anwo yo sou yon sistèm ki deja enstale. Pou fè sa, ou bezwen edite dosye bootloader la epi pèmèt paramèt nwayo a. *ee se yon editè tankou sa a nan 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

Ou ta dwe tou asire w ke ou gen vèsyon an dènye nan sistèm nan enstale, ak fè tout mizajou ak amelyorasyon. Nan ka nou an, pou egzanp, yon ajou nan dènye vèsyon an obligatwa, paske ... imaj pre-enstalasyon yo lage dèyè pa sis mwa a yon ane. Oke, gen nou chanje pò a SSH nan yon bagay diferan de youn nan default, ajoute otantifikasyon kle ak enfim otantifikasyon modpas.

Lè sa a, nou konfigirasyon aide, kontwole estati dosye konfigirasyon sistèm yo. Ou ka li plis an detay isit la.

pkg install aide

epi edite crontab nou an

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

Nou genyen ladan yo odit sistèm

sysrc auditd_enable=YES

# service auditd start

Ki jan yo administre pwoblèm sa a parfe dekri nan gid.

Koulye a, nou rdemare epi kontinye nan lojisyèl an sou sèvè a. Chak sèvè se yon hypervisor pou resipyan oswa plen machin vityèl. Se poutèt sa, li enpòtan ke processeur a sipòte VT-x ak EPT si nou planifye yo sèvi ak Virtualization konplè.

Pou jere resipyan ak machin vityèl mwen itilize cbsd soti nan olevole, Mwen swete l plis sante ak benediksyon pou bèl sèvis sa a!

Kontenè? Docker ankò oswa kisa?

Men non. Prizon FreeBSD se yon zouti ekselan pou containerization, men mansyone la cbsd pou òkestre resipyan sa yo, yo rele selil yo.

Kalòj la se yon solisyon trè efikas pou bati enfrastrikti pou yon varyete de rezon, kote izolasyon konplè sèvis oswa pwosesis endividyèl finalman nesesè. Esansyèlman, li se yon script nan sistèm lame a, men li pa mande pou Virtualization pyès ki nan konpitè konplè. Ak gras a sa a, resous yo pa depanse sou "envite eksplwatasyon an", men sèlman sou travay la ke yo te fè. Lè selil yo itilize pou bezwen entèn yo, sa a se yon solisyon trè pratik pou itilizasyon resous optimal - yon pakèt selil sou yon sèl sèvè pyès ki nan konpitè ka chak endividyèlman itilize tout resous sèvè a si sa nesesè. Lè nou konsidere ke anjeneral diferan subservices bezwen adisyonèl. resous nan diferan moman, ou ka ekstrè maksimòm pèfòmans nan yon sèvè si ou byen planifye ak balanse selil yo ant sèvè yo. Si sa nesesè, selil yo kapab tou bay restriksyon sou resous yo itilize yo.

Bitcoin nan yon kaj?

E tout virtualisation?

Osi lwen ke mwen konnen cbsd sipòte travay bhyve ak ipèvizè XEN. Mwen pa janm itilize dezyèm lan, men premye a se relativman nouvo hypervisor soti nan FreeBSD. Nou pral gade nan yon egzanp itilizasyon bhyve nan egzanp ki anba a.

Enstale ak konfigirasyon anviwònman an lame

Nou itilize FS ZFS. Sa a se yon zouti trè pwisan pou jere espas sèvè. Mèsi a ZFS, ou ka dirèkteman bati etalaj nan konfigirasyon divès kalite soti nan disk, dinamik "cho" elaji espas, chanje disk mouri, jere snapshots, ak anpil, plis ankò, ki ka dekri nan yon seri antye de atik. Ann retounen nan sèvè nou an ak disk li yo. Nan kòmansman enstalasyon an, nou te kite espas gratis sou disk yo pou patisyon chiffres. Poukisa se sa? Sa a se pou ke sistèm nan reveye otomatikman epi koute atravè SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

ajoute yon patisyon ki gen kapasite nan espas ki rete a

geli init /dev/ada0p4

antre modpas chifreman nou an

geli attach /dev/ada0p4

Nou antre modpas la ankò epi nou gen yon aparèy /dev/ada0p4.eli - sa a se espas chiffres nou an. Lè sa a, nou repete menm bagay la tou pou /dev/ada1 ak rès la nan disk yo nan etalaj la. Epi nou kreye yon nouvo ZFS pisin.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Oke, nou gen twous konba minimòm lan pare. Yon etalaj reflete nan disk nan ka youn nan twa yo echwe.

Kreye yon seri done sou yon nouvo "pisin"

zfs create vms/jails

pkg install cbsd — nou te lanse yon ekip epi mete jesyon pou selil nou yo.

Apre cbsd enstale, li bezwen inisyalize:

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

Oke, nou reponn yon pakèt kesyon, sitou ak repons default.

*Si w ap itilize chifreman, li enpòtan ke demon an cbsdd pa t 'kòmanse otomatikman jiskaske ou dechifre disk yo manyèlman oswa otomatikman (nan egzanp nou an sa a se fè pa zabbix)

**Mwen menm mwen pa sèvi ak NAT soti nan cbsd, epi mwen konfigirasyon li tèt mwen nan 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

Mete kanpe règleman firewall se tou yon sijè separe, kidonk mwen pa pral pwofonde nan mete kanpe politik BLOCK ALL la ak mete kanpe lis blan, ou ka fè sa lè w li dokiman ofisyèl yo oswa nenpòt nan gwo kantite atik ki disponib sou Google.

Oke... nou gen cbsd enstale, li lè yo kreye premye workhorse nou an - demon an kalòj Bitcoin!

cbsd jconstruct-tui

Bitcoin nan yon kaj?

Isit la nou wè dyalòg kreyasyon selil la. Apre tout valè yo te fikse, ann kreye!

Lè w ap kreye premye selil ou a, ou ta dwe chwazi sa pou w itilize kòm baz pou selil yo. Mwen chwazi yon distribisyon nan depo FreeBSD ak lòd la repo. Chwa sa a fèt sèlman lè yo kreye premye selil yon vèsyon espesifik (ou ka òganize selil nenpòt vèsyon ki pi gran pase vèsyon lame a).

Apre tout bagay enstale, nou lanse kaj la!

# cbsd jstart bitcoind

Men, nou bezwen enstale lojisyèl nan kaj la.

# jls

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

jexec bitcoind antre nan konsole selilè a

epi deja andedan selil la nou enstale lojisyèl an ak depandans li yo (sistèm lame nou an rete pwòp)

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

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

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

Gen Bitcoin nan kaj la, men nou bezwen anonim paske nou vle konekte ak kèk kaj atravè rezo TOP. An jeneral, nou planifye pou kouri pifò selil yo ak lojisyèl sispèk sèlman atravè yon prokurasyon. Gras a pf Ou ka enfim NAT pou yon seri adrès IP sou rezo lokal la, epi pèmèt NAT sèlman pou ne TOR nou an. Kidonk, menm si malveyan antre nan selil la, li gen plis chans pa pral kominike ak mond lan deyò, epi si li fè sa, li pa pral revele IP sèvè nou an. Se poutèt sa, nou kreye yon lòt selil pou "voye" sèvis yo kòm yon sèvis ".onion" ak kòm yon prokurasyon pou aksè entènèt la nan selil endividyèl yo.

# 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

Mete pou koute nan yon adrès lokal (disponib pou tout selil)

SOCKSPort 192.168.0.2:9050

Ki lòt bagay nou bezwen pou yon kontantman konplè? Wi, nou bezwen yon sèvis pou entènèt nou an, petèt plis pase yon sèl. Ann lanse nginx, ki pral aji kòm yon prokurasyon ranvèse epi pran swen pou renouvle sètifika Ann Cripte.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

Se konsa, nou mete 150 MB nan depandans nan yon kaj. Ak lame a toujou pwòp.

Ann retounen nan mete kanpe nginx pita, nou bezwen ogmante de plis selil pou pòtay peman nou an sou nodejs ak rouye ak yon aplikasyon entènèt, ki pou kèk rezon se nan Apache ak PHP, ak lèt ​​la tou mande pou yon baz done 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

... ak yon lòt 380 MB pakè izole

Apre sa, nou telechaje aplikasyon nou an ak git epi lanse li.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450 MB pakè. nan yon kaj.

isit la nou bay pwomotè aksè a atravè SSH dirèkteman nan selil la, yo pral fè tout bagay la tèt yo:

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

Port 2267 — chanje pò SSH selil la nan nenpòt ki abitrè

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

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

Oke, sèvis la ap kouri, tout sa ki rete se ajoute règ la nan pf firewall

Ann wè ki IP selil nou yo genyen ak kisa "zon lokal" nou an sanble.

# 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

epi ajoute yon règ

# 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

Oke, depi nou isit la, ann ajoute tou yon règ pou proxy inverse:

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

Oke, kounye a yon ti kras sou bitcoins

Ki sa nou genyen se nou gen yon aplikasyon entènèt ki ekspoze deyò epi li pale lokalman ak pòtay peman nou an. Koulye a, nou bezwen prepare yon anviwònman k ap travay pou kominike avèk rezo Bitcoin tèt li - ne la bitcoind li se jis yon demon ki kenbe kopi lokal la nan blockchain a ajou. Demon sa a gen RPC ak fonksyonalite bous, men gen plis pratik "anbalaj" pou devlopman aplikasyon an. Pou kòmanse, nou deside mete electrum se yon bous CLI. Bous sa a nou pral sèvi ak li kòm "depo frèt" pou bitcoins nou an - an jeneral, bitcoins sa yo ki pral bezwen estoke "deyò" sistèm nan aksesib a itilizatè yo epi jeneralman lwen tout moun. Li tou gen yon entèfas, kidonk nou pral sèvi ak bous la menm sou nou an
laptops. Pou kounye a nou pral sèvi ak Electrum ak serveurs piblik, epi pita nou pral ogmante li nan yon lòt selil ElectrumXpou pa depann de pèsonn ditou.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

yon lòt 700 MB lojisyèl nan kalòj nou an

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

Koulye a, nou gen yon bous kreye.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

Pou nou sou-chèn Se sèlman yon kantite limite moun ki pral kapab konekte ak bous la depi kounye a. Yo nan lòd yo pa louvri aksè nan selil sa a soti nan deyò a, koneksyon atravè SSH ap fèt nan TOP (yon vèsyon desantralize nan VPN). Nou lanse SSH nan selil la, men pa manyen pf.conf nou an sou lame a.

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

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

Koulye a, ann fèmen selil la ak aksè entènèt bous la. Ann ba li yon adrès IP ki soti nan yon lòt espas subnet ki pa NATed. Premye ann chanje /etc/pf.conf sou lame a

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" ann chanje li an JAIL_IP_POOL="192.168.0.0/25", kidonk tout adrès 192.168.0.126-255 p ap gen aksè dirèk sou entènèt la. Yon kalite lojisyèl "air-gap" rezo. Ak règ NAT rete jan li te ye

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

Surcharge règ yo

# pfctl -f /etc/pf.conf

Koulye a, ann pran sou selil nou an

# cbsd jconfig jname=electrum

Bitcoin nan yon kaj?

Bitcoin nan yon kaj?

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, men kounye a sistèm nan tèt li ap sispann travay pou nou. Sepandan, nou ka presize yon proxy sistèm. Men, gen yon sèl bagay, sou TOR li se yon proxy SOCKS5, epi pou konvenyans nou ta renmen tou yon proxy 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

Oke, kounye a gen de serveurs prokurasyon nan sistèm nou an, ak tou de pwodiksyon atravè TOR: socks5://192.168.0.2:9050 ak http://192.168.0.6:8123

Koulye a, nou ka configured anviwònman bous nou an

# 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

Oke, kounye a koki a pral travay anba yon prokurasyon. Si nou vle enstale pakè, Lè sa a, nou ta dwe ajoute nan /usr/local/etc/pkg.conf soti anba rasin kalòj la

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

Oke, kounye a li lè yo ajoute sèvis TOR kache kòm adrès sèvis SSH nou an nan kalòj bous la.

# 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

Sa a se adrès koneksyon nou an. Ann tcheke nan machin lokal la. Men, anvan nou bezwen ajoute kle SSH nou an:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Oke, soti nan yon machin kliyan 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

Ann konekte (Pou sa a mache, ou bezwen yon demon TOR lokal ki koute sou 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

Siksè!

Pou travay ak peman enstantane ak mikwo, nou bezwen tou yon ne Zeklè Rezo, an reyalite, sa a pral zouti prensipal k ap travay nou an ak Bitcoin. ou*c-zèklèke nou pral itilize kòm yon demon se Sparko plugin, ki se yon koòdone HTTP (REST) ​​konplè epi ki pèmèt ou travay ak tou de tranzaksyon sou chèn ak sou chèn. c-lightning obligatwa pou fonksyone bitcoind men wi.

*Gen diferan aplikasyon pwotokòl Lightning Network nan diferan lang. Nan sa yo nou teste, c-zèklè (ekri an C) te sanble ki pi estab ak resous ki efikas.

# 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

Pandan tout bagay ki nesesè yo konpile ak enstale, an n kreye yon itilizatè RPC pou 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

Chanjman chaotic mwen ant selil vire soti yo dwe pa tèlman chaotic si ou sonje sèvis piblik la tmux, ki pèmèt ou kreye plizyè sous-sesyon tèminal nan yon sesyon. Analòg: screen

Bitcoin nan yon kaj?

Se konsa, nou pa vle revele IP reyèl la nan ne nou an, epi nou vle fè tout tranzaksyon finansye atravè TOP. Se poutèt sa, yon lòt .zonyon pa nesesè.

# 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

Koulye a, ann kreye yon konfigirasyon pou c-zèklè

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 ~

ou bezwen tou kreye yon fichye konfigirasyon pou bitcoin-cli, yon sèvis piblik ki kominike ak bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

tcheke

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

[
  "test"
]

lanse lightningd

lightning@lightning:~ % lightningd --daemon

Tèt li lightningd ou ka kontwole sèvis piblik la lightning-clipa egzanp:

lightning-cli newaddr jwenn adrès la pou yon nouvo peman k ap fèk ap rantre

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all voye tout lajan ki nan bous la nan adrès la (tout adrès sou chèn)

Epitou kòmandman pou operasyon off-chèn lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay elatriye

Oke, pou kominikasyon ak aplikasyon an nou gen yon REST Api

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

Sòm moute

# 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 nan yon kaj?

Nou gen yon seri kontenè, yo chak ak pwòp nivo aksè nan ak nan rezo lokal la.

# 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

Kòm ou ka wè, bitcoind pran tout 190 GB nan espas. E si nou bezwen yon lòt ne pou fè tès? Sa a se kote ZFS vini an sou la men. Avèk èd cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com ou ka kreye yon snapshot epi tache yon nouvo selil nan snapshot sa a. Nouvo selil la pral gen pwòp espas li yo, men se sèlman diferans ki genyen ant eta aktyèl la ak orijinal la pral pran an kont nan sistèm dosye a (nou pral sove omwen 190 GB)

Chak selil se pwòp done ZFS separe li yo, e li trè pratik. ZFS pèmèt tou fè plizyè lòt bagay fre, tankou voye snapshots via SSH. Nou p ap dekri li, deja gen anpil.

Li se tou vo anyen bezwen an pou siveyans aleka nan lame a, pou rezon sa yo nou genyen Zabbix.

B - sekirite

Konsènan sekirite, ann kòmanse soti nan prensip kle yo nan kontèks enfrastrikti:

Konfidansyalite - Zouti estanda nan UNIX tankou sistèm asire aplikasyon prensip sa a. Nou lojikman separe aksè a chak eleman lojikman separe nan sistèm nan - yon selil. Aksè yo bay atravè otantifikasyon itilizatè estanda lè l sèvi avèk kle pèsonèl itilizatè yo. Tout kominikasyon ant ak nan fen selil yo fèt nan fòm chiffres. Mèsi a chifreman disk, nou pa bezwen enkyete sou sekirite done yo lè nou ranplase yon disk oswa emigre nan yon lòt sèvè. Sèl aksè enpòtan an se aksè nan sistèm lame a, paske aksè sa yo jeneralman bay aksè a done andedan resipyan yo.

Entegrite "Aplikasyon prensip sa a fèt nan plizyè nivo diferan. Premyèman, li enpòtan sonje ke nan ka a nan pyès ki nan konpitè sèvè, memwa ECC, ZFS deja "soti nan bwat la" pran swen nan entegrite done nan nivo a nan Bits enfòmasyon. Instant snapshots pèmèt ou fè sovgad nenpòt ki lè sou vole. Zouti pratik ekspòtasyon / enpòte selil fè replikasyon selil senp.

Disponibilite - Sa a se deja opsyonèl. Sa depann de degre nan t'ap nonmen non ou ak lefèt ke ou gen rayisman. Nan egzanp nou an, nou asire ke bous la te aksesib sèlman nan rezo TOP la. Si sa nesesè, ou ka bloke tout bagay sou firewall la epi pèmèt aksè nan sèvè a sèlman atravè tinèl (TOR oswa VPN se yon lòt pwoblèm). Kidonk, sèvè a pral koupe soti nan mond lan deyò otank posib, epi sèlman nou menm yo pral kapab enfliyanse disponiblite li yo.

Enposib pou refize - Lè sa a depann sou plis operasyon ak konfòmite ak règleman ki kòrèk pou dwa itilizatè, aksè, elatriye. Men, ak bon apwòch la, tout aksyon itilizatè yo odit, ak gras a solisyon kriptografik li posib pou idantifye san anbigwite ki moun ki fè sèten aksyon ak ki lè.

Natirèlman, konfigirasyon ki dekri a se pa yon egzanp absoli sou fason li ta dwe toujou, li se pito yon egzanp sou ki jan li kapab, pandan y ap kenbe dekale trè fleksib ak kapasite personnalisation.

E tout virtualisation?

Konsènan virtualizasyon konplè lè l sèvi avèk cbsd ou kapab li isit la. Mwen pral jis ajoute sa pou travay bhyve Ou bezwen aktive kèk opsyon nwayo.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Se konsa, si ou toudenkou bezwen kòmanse yon docker, Lè sa a, enstale kèk Debian epi ale!

Bitcoin nan yon kaj?

Se tout

Mwen devine se tout sa mwen te vle pataje. Si ou te renmen atik la, Lè sa a, ou ka voye m 'kèk bitcoins - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Si ou vle eseye selil nan aksyon epi gen kèk bitcoins, ou ka ale nan mwen an bèt kay-pwojè.

Sous: www.habr.com