Bitcoin in una gabbia?

Hè accadutu chì per professione sò un amministratore di sistemi di computer è rete (in corta: amministratore di sistema), è aghju avutu l'uppurtunità di dì à u prufessore per un pocu più di 10 anni. l'attività di una larga varietà di sistemi, cumprese quelli chì necessitanu misure di sicurezza [estrema]. Hè accadutu ancu chì qualchì tempu fà aghju trovu interessante bitcoin, è micca solu utilizatu, ma ancu lanciatu parechji micro-servizii per amparà cumu travaglià indipindente cù a reta di Bitcoin (aka p2p dopu à tuttu) da u puntu di vista di un sviluppatore (sò di sicuru unu di quelli. dev, dunque, passava). Ma ùn parlu micca di u sviluppu, parlu di un ambiente sicuru è efficiente per l'applicazioni.

Tecnulugia finanziaria (Giuseppina) vai vicinu à a sicurità di l'infurmazioni (informec) è u primu pò travaglià senza u sicondu, ma micca per longu. Hè per quessa chì vogliu sparte a mo sperienza è l'inseme di strumenti chì aghju utilizatu, chì includenu tutti dui Giuseppina, è informec, è à u stessu tempu, è pò ancu esse usatu per un scopu più largu o completamente diversu. In questu articulu vi dicu micca tantu di Bitcoin, ma di u mudellu di infrastruttura per u sviluppu è l'operazione di servizii finanziarii (è micca solu) - in una parolla, quelli servizii induve "B" importa. Questu hè appiicatu à u scambiu di Bitcoin è à u zoo corporativu più tipicu di servizii di una piccula cumpagnia micca cunnessa cù Bitcoin in ogni modu.

Vogliu nutà chì sò un sustegnu di i principii "mantene stupidu simplice" и "Menu hè più", dunque, sia l'articulu è ciò chì hè descrittu in questu avarà e proprietà chì sti principii sò circa.

Scenariu imaginariu: Fighjemu tuttu cù l'esempiu di un scambiatore bitcoin. Avemu decisu di lancià u scambiu di rubli, dollari, euro per i bitcoins è torna, è avemu digià una suluzione di travagliu, ma per altri soldi digitale cum'è qiwi è webmoney, i.e. Avemu chjusu tutti i prublemi legali, avemu una applicazione pronta chì serve cum'è una porta di pagamentu per rubli, dollari è euro è altri sistemi di pagamentu. Hè cunnessu à i nostri cunti bancari è hà qualchì tipu di API per e nostre applicazioni finali. Avemu ancu una applicazione web chì agisce cum'è un scambiu per l'utilizatori, bè, cum'è un cuntu tipicu qiwi o webmoney - crea un contu, aghjunghje una carta, etc. Comunica cù a nostra applicazione di gateway, anche se via l'API REST in a zona lucale. È cusì avemu decisu di cunnette i bitcoins è à u stessu tempu aghjurnà l'infrastruttura, perchè ... In u principiu, tuttu hè statu messu in furia nantu à virtualboxes in l'uffiziu sottu à a tavula ... u situ hà cuminciatu à esse usatu, è avemu cuminciatu à preoccupassi di u tempu è di u rendiment.

Allora, cuminciamu cù u principale - sceglie un servitore. Perchè l'affari in u nostru esempiu hè chjucu è avemu fiducia in l'hoster (OVH) chì scegliemu una opzione di bilanciu in quale hè impussibile di stallà u sistema da l'imaghjini .iso originale, ma ùn importa micca, u dipartimentu di sicurità di l'informatica definitivamente analizà l'imaghjini installati. È quandu crescemu, affittaremu u nostru propiu armariu sottu serratura è chjave cù un accessu fisicu limitatu, è forsi avemu da custruisce u nostru propiu DC. In ogni casu, vale a pena ricurdà chì quandu si allughjenu hardware è installate l'imaghjini pronti, ci hè una chance chì avete un "Trojan from the hoster" appiccicatu à u vostru sistema, chì in a maiò parte di i casi ùn hè micca destinatu à spia. ma per offre un servitore di strumenti di gestione più convenienti.

Installazione di u servitore

Tuttu hè simplice quì. Scegliemu u hardware chì si adatta à i nostri bisogni. Allora selezziunate l'imaghjini FreeBSD. Eppo, o cunnettamu (in u casu di un altru hoster è u nostru propiu hardware) via IPMI o cun un monitoru è alimentate l'imaghjini .iso FreeBSD in a scaricata. Per una configurazione orchestrale aghju utilizatu Ansible и mfsbsd. L'unicu, in u nostru casu cù kimsufi, avemu sceltu installazione persunalizata in modu chì i dui dischi in u specchiu per avè solu e partizioni di boot è /home "aperte", u restu di u spaziu di discu serà criptatu, ma più nantu à questu dopu.

Bitcoin in una gabbia?

A stallazione di u sistema si faci in modu standard, ùn aghju micca aspittà nantu à questu, aghju nutatu solu chì prima di inizià l'operazione, vale a pena attente à incubation opzioni chì offre bsdinstaller à a fine di a stallazione (se installate u sistema stessu):

Bitcoin in una gabbia?

Ci sò bonu materiale nantu à questu tema, ripeteraghju brevemente quì.

Hè ancu pussibule di attivà i paràmetri sopra citati in un sistema digià stallatu. Per fà questu, avete bisognu di edità u schedariu di bootloader è attivà i paràmetri di u kernel. *ee hè un editore cum'è questu in 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

Tu avissi dinù esse sicuru chì vo avete l 'ùltima versione di u sistema stallati, è eseguite tutte l'aghjurnamenti è l'aghjurnamenti. In u nostru casu, per esempiu, un aghjurnamentu à l'ultima versione hè necessariu, perchè ... L'imaghjini di pre-installazione ritardanu da sei mesi à un annu. Ebbè, ci cambiamu u portu SSH à qualcosa di sfarente da u predeterminatu, aghjunghje l'autentificazione chjave è disattiveghjanu l'autentificazione di password.

Allora cunfiguremu aide, monitoring the status of system configuration files. Pudete leghje più in detail ccà.

pkg install aide

è edità u nostru crontab

crontab -e

06 01 * * 0-6 /root/chkaide.sh

#! /bin/sh
#chkaide.sh
MYDATE=`date +%Y-%m-%d`
MYFILENAME="Aide-"$MYDATE.txt
/bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME
/usr/local/bin/aide --check > /tmp/myAide.txt
/bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME
/bin/echo "**************************************" >> /tmp/$MYFILENAME
/usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME
/bin/echo "****************DONE******************" >> /tmp/$MYFILENAME

Accende auditing di u sistema

sysrc auditd_enable=YES

# service auditd start

Cumu amministrà sta materia hè perfettamenti descritta in dirigenza.

Avà reboot è procedemu à u software nantu à u servitore. Ogni servitore hè un ipervisore per cuntenituri o macchine virtuali piene. Per quessa, hè impurtante chì u processatore sustene VT-x è EPT si pensa à aduprà a virtualizazione completa.

Per gestisce i cuntenituri è e macchine virtuali chì aghju utilizatu cbsd от olevole, I vulete più salute è benedizioni per questa utilità maravigliosa!

Contenituri ? Docker di novu o chì?

È quì ùn hè micca. Prigiò FreeBSD hè un strumentu eccellente per a containerizazione, ma u citatu cbsd per orchestrate sti cuntenituri, chì sò chjamati cellule.

A gabbia hè una soluzione estremamente efficace per custruisce l'infrastruttura per una varietà di scopi, induve l'isulazione cumpleta di servizii o prucessi individuali hè ultimamente necessaria. Essenzialmente, hè un clone di u sistema ospite, ma ùn hè micca bisognu di virtualizazione hardware completa. È grazia à questu, i risorse ùn sò micca spesi nantu à u "OS di l'ospiti", ma solu nantu à u travagliu realizatu. Quandu e cellule sò aduprate per i bisogni interni, questa hè una suluzione assai còmuda per l'usu ottimali di risorse - una mansa di cellule nantu à un servitore hardware pò ogni individualmente aduprà a risorsa di u servitore sanu se ne necessariu. Cunsiderendu chì di solitu diversi subservizi necessitanu supplementu. risorse in tempi diversi, pudete estrattà u massimu rendimentu da un servitore se pianificate bè è equilibrate e cellule trà i servitori. In casu di necessariu, e cellule ponu ancu esse ristrette à a risorsa utilizata.

Bitcoin in una gabbia?

E a virtualizazione completa?

Forse ch'e a so cbsd sustene u travagliu bhyve è ipervisori XEN. Ùn aghju mai usatu u sicondu, ma u primu hè relativamente novu ipervisore da FreeBSD. Fighjemu un esempiu di usu bhyve in l'esempiu sottu.

Installazione è cunfigurazione di l'ambiente host

Avemu aduprà FS ZFS. Questu hè un strumentu estremamente putente per a gestione di u spaziu di u servitore. Grazie à ZFS, pudete direttamente custruisce arrays di diverse cunfigurazioni da i dischi, espansione dinamicamente "calda" spaziu, cambià dischi morti, gestisce snapshots, è assai, assai di più, chì ponu esse descritti in una seria di articuli. Riturnemu à u nostru servitore è i so dischi. À u principiu di a stallazione, avemu lasciatu spaziu liberu nantu à i dischi per partizioni criptate. Perchè hè questu? Questu hè cusì chì u sistema si sveglia automaticamente è ascolta via SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

aghjunghje una partizione di discu à u spaziu restu

geli init /dev/ada0p4

entre a nostra password di criptografia

geli attach /dev/ada0p4

Entremu a password di novu è avemu un dispositivu /dev/ada0p4.eli - questu hè u nostru spaziu criptatu. Allora ripetemu u listessu per /dev/ada1 è u restu di i dischi in l'array. È criemu un novu piscina ZFS.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Ebbè, avemu u kit di cummattimentu minimu prontu. Un array mirrored di dischi in casu unu di i trè falli.

Crià un set di dati nantu à una nova "piscina"

zfs create vms/jails

pkg install cbsd - avemu lanciatu una squadra è hà stabilitu a gestione di e nostre cellule.

Dopu cbsd installatu, deve esse inizializatu:

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

Ebbè, rispondemu à una mansa di dumande, soprattuttu cù risposte predeterminate.

* Sè vo aduprate a criptografia, hè impurtante chì u daemon cbsdd ùn hà micca iniziatu automaticamente finu à chì decriptate i dischi manualmente o automaticamente (in u nostru esempiu questu hè fattu da zabbix)

** Ùn aghju micca aduprà NAT da cbsd, è l'aghju cunfigurà stessu in 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

Stabbilimentu di e pulitiche di firewall hè ancu un tema separatu, per quessa, ùn andaraghju micca in profondità in a stallazione di a pulitica BLOCK ALL è a creazione di liste bianche, pudete fà chì leghjendu. documentazione ufficiale o qualsiasi di l'enorme quantità di articuli dispunibili nantu à Google.

Ebbè... avemu cbsd installatu, hè ora di creà u nostru primu cavallu di travagliu - u demoniu Bitcoin caged!

cbsd jconstruct-tui

Bitcoin in una gabbia?

Quì vedemu u dialogu di creazione di cellula. Dopu chì tutti i valori sò stati stabiliti, creamu!

Quandu crea a vostra prima cellula, duvete sceglie ciò chì aduprà cum'è a basa per e cellule. Aghju selezziunate una distribuzione da u repositoriu FreeBSD cù u cumandimu repo. Questa scelta hè fatta solu quandu crea a prima cellula di una versione specifica (pudete accoglie cellule di qualsiasi versione chì hè più vechja di a versione d'ospiti).

Dopu chì tuttu hè stallatu, lanciamu a gabbia!

# cbsd jstart bitcoind

Ma avemu bisognu di stallà u software in a cage.

# jls

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

jexec bitcoind per entra in a cunsola cellulare

è digià in a cellula installate u software cù e so dipendenze (u nostru sistema di l'ospite resta pulitu)

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

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

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

Ci hè Bitcoin in a cage, ma avemu bisognu di l'anonimatu perchè vulemu cunnette à qualchi cage via a reta TOP. In generale, pensamu di eseguisce a maiò parte di e cellule cù software sospetti solu per un proxy. Grazie à pf Pudete disattivà NAT per una certa gamma di indirizzi IP in a reta lucale, è permette NAT solu per u nostru node TOR. Cusì, ancu s'è u malware entra in a cellula, u più prubabile ùn cumunicà micca cù u mondu esternu, è s'ellu hè, ùn revelà micca l'IP di u nostru servitore. Dunque, creamu una altra cellula per "forward" servizii cum'è un serviziu ".onion" è cum'è un proxy per accede à Internet à e cellule individuali.

# 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

Configurate per sente à un indirizzu locale (disponibile per tutte e cellule)

SOCKSPort 192.168.0.2:9050

Chì altru avemu bisognu per a felicità cumpleta? Iè, avemu bisognu di un serviziu per u nostru web, forse più di unu. Lancemu nginx, chì agirà cum'è un proxy inversu è cura di rinnuvà i certificati Let's Encrypt

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

È cusì avemu postu 150 MB di dipendenze in una cage. È l'ospite hè sempre pulitu.

Riturnemu à a stallazione di nginx più tardi, avemu bisognu di suscitarà duie cellule più per a nostra porta di pagamentu nantu à nodejs è rust è una applicazione web, chì per una certa ragione hè in Apache è PHP, è l'ultimu hè ancu bisognu di una basa di dati 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

... è altri 380 MB di pacchetti isolati

Dopu, scarichemu a nostra applicazione cù git è lanciamu.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

Pacchetti di 450 MB. in una gabbia.

quì demu l'accessu di u sviluppatore via SSH direttamente à a cellula, farà tuttu ciò chì ci sò elli stessi:

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

Port 2267 - cambia u portu SSH di a cellula à qualsiasi arbitrariu

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

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

Ebbè, u serviziu hè in esecuzione, tuttu ciò chì resta hè di aghjunghje a regula pf firewall

Videmu quale IP anu e nostre cellule è ciò chì a nostra "zona lucale" hè in generale.

# 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

è aghjunghje una regula

# 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

Ebbè, postu chì simu quì, aghjustemu ancu una regula per reverse-proxy:

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

Ebbè, avà un pocu di bitcoins

Ciò chì avemu hè chì avemu una applicazione web chì hè esposta esternamente è parla in u locu cù a nostra porta di pagamentu. Avà avemu bisognu di preparà un ambiente di travagliu per interagisce cù a reta Bitcoin stessu - u node bitcoind hè solu un demoniu chì mantene a copia locale di u blockchain aghjurnata. Stu daemon hà RPC è funziunalità di portafogli, ma ci sò "wrappers" più convenienti per u sviluppu di l'applicazioni. Per principià, avemu decisu di mette electrum hè un portafoglio CLI. Questu portafoglio avemu aduprà cum'è "cold storage" per i nostri bitcoins - in generale, quelli bitcoins chì deve esse guardatu "fora" u sistema accessibile à l'utilizatori è in generale luntanu da tutti. Hà ancu una GUI, cusì avemu da aduprà a stessa billetera in u nostru
laptops. Per avà, useremu Electrum cù servitori publichi, è più tardi l'averemu in una altra cellula Electrum Xper ùn dipende micca di nimu.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

un altru 700 MB di software in a nostra gabbia

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

Avà avemu creatu un wallet.

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

À i nostri in catena Solu un numeru limitatu di persone puderà cunnette à a billetera da avà. Per ùn avè micca apertu l'accessu à sta cellula da l'esternu, e cunnessione via SSH saranu attraversu TOP (una versione decentralizata di VPN). Lanciamu SSH in a cellula, ma ùn tocca micca u nostru pf.conf in l'ospite.

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

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

Avà spegne a cellula cù l'accessu à Internet di a billetera. Demu un indirizzu IP da un altru spaziu di subnet chì ùn hè micca NATed. Prima cambiamu /etc/pf.conf nantu à l'ospite

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" cambiamu in JAIL_IP_POOL="192.168.0.0/25", cusì tutti l'indirizzi 192.168.0.126-255 ùn anu micca accessu direttu à Internet. Un tipu di rete di software "air-gap". È a regula NAT ferma cum'è era

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

Overloading e regule

# pfctl -f /etc/pf.conf

Avà pigliamu a nostra cellula

# cbsd jconfig jname=electrum

Bitcoin in una gabbia?

Bitcoin in una gabbia?

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, ma avà u sistema stessu cesserà di travaglià per noi. Tuttavia, pudemu specificà un proxy di u sistema. Ma ci hè una cosa, in TOR hè un proxy SOCKS5, è per comodità ci piacerebbe ancu un 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

Ebbè, avà ci sò dui servitori proxy in u nostru sistema, è i dui output via TOR: socks5://192.168.0.2:9050 è http://192.168.0.6:8123

Avà pudemu cunfigurà u nostru ambiente di portafogli

# 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

Ebbè, avà u shell hà da travaglià da sottu un proxy. Se vulemu installà pacchetti, allora duvemu aghjunghje /usr/local/etc/pkg.conf da sottu à a radica di a gabbia

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

Ebbè, hè ora di aghjunghje u serviziu oculatu TOR cum'è l'indirizzu di u nostru serviziu SSH in a cage di portafogli.

# 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

Questu hè u nostru indirizzu di cunnessione. Cuntrollamu da a macchina lucale. Ma prima avemu bisognu di aghjunghje a nostra chjave SSH:

wallet@electrum:/ % mkdir ~/.ssh

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

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

Ebbè, da una macchina cliente 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

Cunnettamu (Per questu funziunà, avete bisognu di un daemon TOR locale chì ascolta nantu à 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 <genesis@istar.ca>
wallet@electrum:~ % logout

Successu!

Per travaglià cù pagamentu instantani è micro-pagamenti, avemu ancu bisognu di un node Lightning Network, in fattu, questu serà u nostru principale strumentu di travagliu cù Bitcoin. U*c-lampichì avemu da aduprà cum'è un daemon hè Sparko plugin, chì hè una interfaccia HTTP (REST) ​​cumpleta è vi permette di travaglià cù transazzioni fora di a catena è in catena. c-lightning necessariu per u funziunamentu bitcoind ma iè.

*Ci sò diverse implementazioni di u protocolu Lightning Network in diverse lingue. Di quelli chì avemu pruvatu, c-lightning (scrittu in C) pareva u più stabile è efficiente in risorse.

# 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

Mentre tuttu ciò chì hè necessariu hè compilatu è installatu, creamu un utilizatore RPC per 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

U mo cambiamentu caòticu trà e cellule risulta micca cusì caòticu se nota l'utilità tmux, chì vi permette di creà parechje sub-sessioni di terminal in una sessione. Analogicu: screen

Bitcoin in una gabbia?

Dunque, ùn vulemu micca revelà l'IP reale di u nostru node, è vulemu fà tutte e transazzione finanziaria attraversu TOP. Per quessa, un altru .onion ùn hè micca necessariu.

# 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

Avà criemu una cunfigurazione per c-lightning

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 ~

avete ancu bisognu di creà un schedariu di cunfigurazione per bitcoin-cli, una utilità chì cumunicà cù bitcoind

lightning@lightning:~ % mkdir .bitcoin

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

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

verificà

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

[
  "test"
]

lanciari lightningd

lightning@lightning:~ % lightningd --daemon

Ellu stessu lightningd pudete cuntrullà l'utilità lightning-cli, per esempiu:

lightning-cli newaddr uttene l'indirizzu per un novu pagamentu in entrata

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all mandate tutti i soldi in a billetera à l'indirizzu (tutti l'indirizzi in catena)

Ancu cumandamenti per operazioni off-chain lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay etc.

Ebbè, per a cumunicazione cù l'applicazione avemu un REST Api

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

Immaimu i risultati

# 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 in una gabbia?

Avemu un inseme di cuntenituri, ognunu cù u so propiu livellu d'accessu da è à a reta lucale.

# 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

Comu pudete vede, bitcoind occupa tutti i 190 GB di spaziu. E se avemu bisognu di un altru node per a prova? Questu hè induve ZFS hè utile. Cù aiutu cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com pudete creà una snapshot è aghjunghje una nova cellula à sta snapshot. A nova cellula avarà u so propiu spaziu, ma solu a diffarenza trà u statu attuale è l'uriginale serà presa in contu in u sistema di fugliale (salveremu almenu 190 GB)

Ogni cellula hè u so propiu set di dati ZFS separatu, è questu hè estremamente convenientu. ZFS permette ancu fate diverse altre cose interessanti, cum'è mandà snapshots via SSH. Ùn avemu micca discrittu, ci hè digià assai.

Hè ancu vale a pena nutà a necessità di monitoraghju remota di l'ospitu, per questi scopi avemu Zabbix.

B - sicurità

In quantu à a sicurità, partemu da i principii chjave in u cuntestu di l'infrastruttura:

Cunfidenzialità - Strumenti standard di sistemi simili à UNIX assicuranu l'implementazione di stu principiu. Separemu logicamente accessu à ogni elementu logicamente separatu di u sistema - una cellula. L'accessu hè furnitu attraversu l'autentificazione standard di l'utilizatori cù e chjave persunale di l'utilizatori. Tutta a cumunicazione trà e cellule finali si trova in forma criptata. Grazie à a criptografia di discu, ùn avemu micca da preoccupari di a sicurità di e dati quandu rimpiazzate un discu o migrate à un altru servitore. L'unicu accessu criticu hè l'accessu à u sistema d'ospiti, postu chì tali accessu generalmente furnisce l'accessu à e dati in i cuntenituri.

Integrità "L'implementazione di stu principiu si trova à parechji livelli diffirenti. Prima, hè impurtante nutà chì in u casu di hardware di u servitore, memoria ECC, ZFS digià "fora di scatula" cura di l'integrità di dati à u livellu di i bits d'infurmazioni. I snapshots instantani permettenu di fà una copia di salvezza in ogni mumentu nantu à a mosca. Strumenti pratichi per l'esportazione / importazione di e cellule facenu a replicazione di e cellule simplice.

Disponibilidad - Questu hè digià facultativu. Dipende da u gradu di a vostra fama è u fattu chì avete odi. In u nostru esempiu, avemu assicuratu chì a billetera era accessibile solu da a reta TOP. Se necessariu, pudete bluccà tuttu nantu à u firewall è permette l'accessu à u servitore solu per i tunnelli (TOR o VPN hè una altra materia). Cusì, u servitore serà tagliatu da u mondu esternu quantu pussibule, è solu noi stessu puderemu influenzà a so dispunibilità.

Impussibilità di rifiutu - È questu dipende da u funziunamentu ulteriore è u rispettu di e pulitiche currette per i diritti di l'utilizatori, l'accessu, etc. Ma cù l'approcciu ghjusta, tutte l'azzioni di l'utilizatori sò verificate, è grazia à e suluzioni criptografiche hè pussibule identificà senza ambiguità quale hà realizatu certi azzioni è quandu.

Di sicuru, a cunfigurazione descritta ùn hè micca un esempiu assolutu di cumu deve esse sempre, hè piuttostu un esempiu di cumu si pò esse, mantenendu capacità di scala è persunalizazione assai flessibili.

E a virtualizazione cumpleta?

Circa a virtualizazione cumpleta cù cbsd pudete leghje quì. Aghju aghjustatu solu per u travagliu bhyve Avete bisognu di attivà alcune opzioni di kernel.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Cusì, s'ellu ci hè bisognu di principià un docker, allora ne suscitemu qualchì debian è avanti!

Bitcoin in una gabbia?

Eccu tuttu

Pensu chì hè tuttu ciò chì vulia sparte. Se ti piace l'articulu, pudete mandà un pocu bitcoins - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Se vulete pruvà e cellule in azzione è avè qualchì bitcoins, pudete andà à u mo prughjettu-pet.

Source: www.habr.com

Cumprate un hosting affidabile per i siti cù prutezzione DDoS, servitori VPS VDS 🔥 Cumprate un hosting di siti web affidabile cù prutezzione DDoS, servitori VPS VDS | ProHoster