Sattui niin, että olen ammatiltani tietokonejärjestelmien ja verkkojen ylläpitäjä (lyhyesti: järjestelmänvalvoja), ja minulla oli tilaisuus kertoa prof. useiden järjestelmien toimintaan, mukaan lukien ne, jotka vaativat [äärimmäisiä] turvatoimia. Kävi myös niin, että jokin aika sitten pidin siitä mielenkiintoista dev
, joten olin ohimennen). Mutta en tarkoita kehitystä, puhun turvallisesta ja tehokkaasta ympäristöstä sovelluksille.
Rahoitustekniikka (fintech) siirry tietoturvan viereen (Tietoturvaviranomainen) ja ensimmäinen voi toimia ilman toista, mutta ei kauan. Siksi haluan jakaa kokemukseni ja käyttämäni työkalusarjan, joka sisältää molemmat fintechJa Tietoturvaviranomainen, ja samaan aikaan, ja sitä voidaan käyttää myös laajempaan tai täysin eri tarkoitukseen. Tässä artikkelissa en kerro sinulle niinkään Bitcoinista, vaan infrastruktuurimallista rahoituspalvelujen (eikä vain) kehittämiseen ja toimintaan - sanalla sanoen niistä palveluista, joissa "B" on tärkeä. Tämä pätee sekä Bitcoin-pörssiin että tyypillisimpään yrityseläintarhaan pienyritykselle, joka ei liity Bitcoiniin millään tavalla.
Haluan huomauttaa, että olen periaatteiden kannattaja "Pidä se tyhmänä yksinkertaisena" и "vähemmän on enemmän"Siksi sekä artikkelilla että siinä kuvatulla on ominaisuuksia, joista nämä periaatteet liittyvät.
Kuvitteellinen skenaario: Katsotaanpa kaikkea bitcoin-vaihtimen esimerkillä. Päätimme käynnistää ruplan, dollarin, euron vaihdon bitcoineiksi ja takaisin, ja meillä on jo toimiva ratkaisu, mutta muulle digitaaliselle rahalle, kuten qiwille ja webmoneylle, ts. Olemme sulkeneet kaikki lakiasiat, meillä on valmis sovellus, joka toimii rupla-, dollari- ja euro- ja muiden maksujärjestelmien maksuporttina. Se on yhdistetty pankkitileihimme ja siinä on jonkinlainen API loppusovelluksiamme varten. Meillä on myös verkkosovellus, joka toimii käyttäjien vaihtajana, kuten tyypillinen qiwi- tai webmoney-tili - luo tili, lisää kortti ja niin edelleen. Se kommunikoi yhdyskäytäväsovelluksemme kanssa, vaikkakin paikallisen REST API:n kautta. Ja niin päätimme yhdistää bitcoinit ja samalla päivittää infrastruktuuria, koska... Aluksi kaikki laitettiin kiireessä virtuaalilaatikoihin toimistossa pöydän alle... sivustoa alettiin käyttää, ja aloimme olla huolissamme käytettävyydestä ja suorituskyvystä.
Joten aloitetaan pääasiasta - palvelimen valitsemisesta. Koska esimerkkimme yritys on pieni ja luotamme valitsemaansa isännöitsijään (OVH).
Palvelimen asennus
Täällä kaikki on yksinkertaista. Valitsemme tarpeisiimme sopivan laitteiston. Valitse sitten FreeBSD-kuva. No, tai yhdistämme (jos kyseessä on toinen isäntä ja oma laitteistomme) IPMI:n kautta tai näytöllä ja syötämme .iso FreeBSD-kuvan lataukseen. Käytän orkesteriasetuksiin
Järjestelmän asennus tapahtuu normaalilla tavalla, en viivyttele tässä, huomautan vain, että ennen käytön aloittamista on syytä kiinnittää huomiota karkaisu sen tarjoamia vaihtoehtoja bsdinstaller
asennuksen lopussa (jos asennat järjestelmän itse):
On
On myös mahdollista ottaa käyttöön edellä mainitut parametrit jo asennetussa järjestelmässä. Tätä varten sinun on muokattava käynnistyslataustiedostoa ja otettava käyttöön ytimen parametrit. *ee on tällainen editori BSD:ssä
# 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
Varmista myös, että sinulla on asennettuna järjestelmän uusin versio ja
Sitten konfiguroimme aide
, valvoo järjestelmän asetustiedostojen tilaa. Voit lukea tarkemmin
pkg install aide
ja muokkaa crontab-sivuamme
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
Sisällytämme
sysrc auditd_enable=YES
# service auditd start
Tämän asian hoitaminen on kuvattu täydellisesti kohdassa
Nyt käynnistetään uudelleen ja siirrytään palvelimen ohjelmistoon. Jokainen palvelin on hypervisor säilöille tai täysille virtuaalikoneen. Siksi on tärkeää, että prosessori tukee VT-x:ää ja EPT:tä, jos aiomme käyttää täyttä virtualisointia.
Käytän säiliöiden ja virtuaalikoneiden hallintaan
Säiliöt? Docker taas vai mitä?
Mutta ei. cbsd
ohjata näitä säiliöitä, joita kutsutaan soluiksi.
Häkki on äärimmäisen tehokas ratkaisu infrastruktuurin rakentamiseen erilaisiin tarkoituksiin, joissa viime kädessä vaaditaan yksittäisten palvelujen tai prosessien täydellistä eristämistä. Pohjimmiltaan se on isäntäjärjestelmän klooni, mutta se ei vaadi täyttä laitteiston virtualisointia. Ja tämän ansiosta resursseja ei käytetä "vieraskäyttöjärjestelmään", vaan vain suoritettavaan työhön. Kun soluja käytetään sisäisiin tarpeisiin, tämä on erittäin kätevä ratkaisu optimaaliseen resurssien käyttöön - joukko soluja yhdellä laitteistopalvelimella voi tarvittaessa käyttää erikseen koko palvelinresurssia. Ottaen huomioon, että yleensä erilaiset alapalvelut tarvitsevat lisää. resursseja eri aikoina, voit saada maksimaalisen suorituskyvyn yhdestä palvelimesta, jos suunnittelet ja tasapainotat solut palvelinten välillä oikein. Tarvittaessa soluille voidaan asettaa myös rajoituksia käytettävälle resurssille.
Entä täydellinen virtualisointi?
Sikäli kuin tiedän cbsd
tukee työtä bhyve
ja XEN-hypervisorit. Toista en ole koskaan käyttänyt, mutta ensimmäinen on suhteellisen uusi bhyve
alla olevassa esimerkissä.
Isäntäympäristön asentaminen ja määrittäminen
Käytämme FS:ää
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
lisää levyosio jäljellä olevaan tilaan
geli init /dev/ada0p4
syötä salaussalasanamme
geli attach /dev/ada0p4
Annamme salasanan uudelleen ja meillä on laite /dev/ada0p4.eli - tämä on salattu tilamme. Sitten toistetaan sama /dev/ada1:lle ja muille taulukon levyille. Ja luomme uuden
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Meillä on minimitaistelusarja valmiina. Peilattu levyjoukko siltä varalta, että jokin kolmesta epäonnistuu.
Tietojoukon luominen uudelle "poolille"
zfs create vms/jails
pkg install cbsd
— Perustimme tiimin ja perustimme solujemme hallinnan.
jälkeen cbsd
asennettuna, se on alustettava:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
No, vastaamme joukkoon kysymyksiä, useimmiten oletusvastauksilla.
*Jos käytät salausta, on tärkeää, että demoni cbsdd
ei käynnistynyt automaattisesti, ennen kuin purat levyjen salauksen manuaalisesti tai automaattisesti (esimerkissämme tämän tekee zabbix)
**En myöskään käytä NAT:ia alkaen cbsd
ja määritän sen itse 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
Palomuurikäytäntöjen määrittäminen on myös erillinen aihe, joten en mene syvälle ESTÄÄ KAIKKI -käytännön määrittämiseen ja sallittujen listojen asettamiseen, voit tehdä sen lukemalla
No... meillä on cbsd asennettuna, on aika luoda ensimmäinen työhevosemme - häkissä oleva Bitcoin-demoni!
cbsd jconstruct-tui
Tässä näemme solun luomisikkunan. Kun kaikki arvot on asetettu, luodaan!
Kun luot ensimmäistä soluasi, sinun tulee valita, mitä solujen pohjana käytetään. Valitsen jakelun FreeBSD-varastosta komennolla repo
. Tämä valinta tehdään vain luotaessa tietyn version ensimmäistä solua (voit isännöidä minkä tahansa version soluja, jotka ovat vanhempia kuin isäntäversio).
Kun kaikki on asennettu, käynnistämme häkin!
# cbsd jstart bitcoind
Mutta meidän on asennettava ohjelmisto häkkiin.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
päästäksesi solukonsoliin
ja jo solun sisällä asennamme ohjelmiston riippuvuuksineen (isäntäjärjestelmämme pysyy puhtaana)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Häkissä on Bitcoinia, mutta tarvitsemme nimettömyyttä, koska haluamme muodostaa yhteyden joihinkin häkkeihin TOP-verkon kautta. Yleensä aiomme käyttää useimpia soluja epäilyttävillä ohjelmistoilla vain välityspalvelimen kautta. Kiitokset pf
Voit poistaa NAT:n käytöstä tietyltä paikallisverkon IP-osoitteilta ja sallia NATin vain TOR-solmussamme. Näin ollen vaikka haittaohjelma pääsisi soluun, se ei todennäköisesti kommunikoi ulkomaailman kanssa, ja jos tulee, se ei paljasta palvelimemme IP-osoitetta. Siksi luomme toisen solun palveluiden "välittämiseksi" ".sipuli"-palveluna ja välityspalvelimena yksittäisten solujen Internetiin pääsyä varten.
# 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
Aseta kuuntelemaan paikallisessa osoitteessa (käytettävissä kaikissa soluissa)
SOCKSPort 192.168.0.2:9050
Mitä muuta tarvitsemme täydelliseen onneen? Kyllä, tarvitsemme palvelun verkkoomme, ehkä useamman kuin yhden. Käynnistetään nginx, joka toimii käänteisenä välityspalvelimena ja huolehtii Let's Encrypt -sertifikaattien uusimisesta
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Ja niin laitoimme 150 Mt riippuvuutta häkkiin. Ja isäntä on edelleen puhdas.
Palataan nginxin asettamiseen myöhemmin, meidän on nostettava kaksi solua lisää maksuyhdyskäytävällemme nodejille ja rustille sekä web-sovellus, joka on jostain syystä Apachessa ja PHP:ssä, ja jälkimmäinen vaatii myös MySQL-tietokannan.
# 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
...ja vielä 380 Mt paketteja eristettynä
Seuraavaksi lataamme sovelluksemme gitin kanssa ja käynnistämme sen.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB paketit. häkissä.
tässä annamme kehittäjälle pääsyn SSH:n kautta suoraan soluun, he tekevät kaiken siellä itse:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
- muuta solun SSH-portti mihin tahansa mielivaltaiseen
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
No, palvelu on käynnissä, jäljellä on vain lisätä sääntö pf
palomuuri
Katsotaanpa, mikä IP-osoite soluillamme on ja miltä "paikallinen alueemme" yleensä näyttää.
# 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
ja lisää sääntö
# 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
No, koska olemme täällä, lisätään myös käänteisen välityspalvelimen sääntö:
## 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
No, nyt vähän bitcoineista
Meillä on ulkoisesti esillä oleva verkkosovellus, joka puhuu paikallisesti maksuyhdyskäytävämme kanssa. Nyt meidän on valmisteltava työympäristö vuorovaikutukseen itse Bitcoin-verkon - solmun - kanssa bitcoind
se on vain demoni, joka pitää lohkoketjun paikallisen kopion ajan tasalla. Tässä demonissa on RPC- ja lompakkotoiminnot, mutta sovellusten kehittämiseen on myös kätevämpiä "kääreitä". Aluksi päätimme laittaa electrum
on CLI-lompakko.
kannettavat tietokoneet. Toistaiseksi käytämme Electrumia julkisten palvelimien kanssa, ja myöhemmin nostamme sen toiseen soluun
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
vielä 700 Mt ohjelmistoa häkissämme
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"
}
Nyt meillä on lompakko luotu.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Meidän on-ketju Vain rajoitettu määrä ihmisiä voi tästä lähtien muodostaa yhteyden lompakkoon. Jotta pääsy tähän soluun ei avautuisi ulkopuolelta, yhteydet SSH:n kautta tapahtuvat TOP:n (VPN:n hajautetun version) kautta. Käynnistämme SSH:n solussa, mutta emme kosketa isäntäkoneen pf.conf-tiedostoa.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Sammuta nyt solu, jossa on lompakon Internet-yhteys. Annetaan sille IP-osoite toisesta aliverkkotilasta, jota ei ole NATed. Ensin vaihdetaan /etc/pf.conf
isännässä
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
muutetaan se JAIL_IP_POOL="192.168.0.0/25"
, joten kaikilla osoitteilla 192.168.0.126-255 ei ole suoraa pääsyä Internetiin. Eräänlainen ohjelmisto "ilmaväli"-verkko. Ja NAT-sääntö pysyy entisellään
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Sääntöjen ylikuormittaminen
# pfctl -f /etc/pf.conf
Otetaan nyt solumme vastaan
# cbsd jconfig jname=electrum
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, mutta nyt itse järjestelmä lakkaa toimimasta meillä. Voimme kuitenkin määrittää järjestelmän välityspalvelimen. Mutta on yksi asia, TOR:ssa se on SOCKS5-välityspalvelin, ja mukavuussyistä haluaisimme myös HTTP-välityspalvelimen.
# 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
No, nyt järjestelmässämme on kaksi välityspalvelinta, jotka molemmat tuottavat TOR:n kautta: socks5://192.168.0.2:9050 ja
Nyt voimme määrittää lompakkoympäristömme
# 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
No, nyt kuori toimii välityspalvelimen alta. Jos haluamme asentaa paketteja, meidän pitäisi lisätä /usr/local/etc/pkg.conf
häkin juuren alta
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
No, nyt on aika lisätä TOR piilotettu palvelu SSH-palvelumme osoitteeksi lompakkosoluun.
# 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
Tämä on yhteysosoitteemme. Katsotaanpa paikalliselta koneelta. Mutta ensin meidän on lisättävä SSH-avain:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
No, Linux-asiakaskoneelta
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
Otetaan yhteyttä (Jotta tämä toimisi, tarvitset paikallisen TOR-daemonin, joka kuuntelee 9050:tä)
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
Selvä!
Tarvitsemme myös solmun työskennelläksemme pika- ja mikromaksujen kanssa c-lightning
tarvitaan toimintaan bitcoind
mutta kyllä.
*Lightning Network -protokollalla on erilaisia toteutuksia eri kielillä. Testaamistamme c-lightning (kirjoitettu C-kielellä) vaikutti vakaimmalta ja resurssitehokkaammalta.
# 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
Kun kaikki tarvittava on käännetty ja asennettu, luodaan RPC-käyttäjä 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
Kaoottinen vaihtamiseni solujen välillä ei ole niin kaoottista, jos huomaat hyödyn tmux
, jonka avulla voit luoda useita päätealiistuntoja yhden istunnon aikana. Analoginen: screen
Joten emme halua paljastaa solmumme todellista IP-osoitetta, ja haluamme suorittaa kaikki rahoitustapahtumat TOP:n kautta. Siksi toista sipulia ei tarvita.
# 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
Luodaan nyt konfiguraatio c-lightningille
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 ~
sinun on myös luotava määritystiedosto bitcoin-cli-apuohjelmalle, joka kommunikoi bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
tarkistaa
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
tuoda markkinoille lightningd
lightning@lightning:~ % lightningd --daemon
Itse lightningd
voit hallita apuohjelmaa lightning-cli
, esimerkiksi:
lightning-cli newaddr
saat osoitteen uutta saapuvaa maksua varten
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
lähetä kaikki lompakon rahat osoitteeseen (kaikki ketjun osoitteet)
Myös komennot ketjun ulkopuolisiin toimintoihin lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
ja niin edelleen.
No, sovelluksen kanssa kommunikointiin meillä on REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Yhteenvetona
# 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
Meillä on joukko säiliöitä, joista jokaisella on oma pääsytaso sekä paikallisverkosta että siihen.
# 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
Kuten näet, bitcoind vie kaikki 190 Gt tilaa. Entä jos tarvitsemme toisen solmun testejä varten? Tässä ZFS on hyödyllinen. Avulla cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
voit luoda tilannekuvan ja liittää uuden solun tähän tilannekuvaan. Uuteen soluun tulee oma tila, mutta tiedostojärjestelmässä huomioidaan vain ero nykyisen tilan ja alkuperäisen välillä (säästämme vähintään 190 Gt)
Jokainen solu on oma erillinen ZFS-tietosarjansa, ja tämä on erittäin kätevää.
On myös syytä huomata isännän etävalvonnan tarve näihin tarkoituksiin
B - turvallisuus
Mitä tulee turvallisuuteen, lähdetään perusperiaatteista infrastruktuurin kontekstissa:
Luottamuksellisuus - UNIX-tyyppisten järjestelmien vakiotyökalut varmistavat tämän periaatteen toteutumisen. Erotamme loogisesti pääsyn jokaiseen loogisesti erilliseen järjestelmän elementtiin - soluun. Pääsy tarjotaan tavallisella käyttäjätodennuksen avulla käyttäjien henkilökohtaisilla avaimilla. Kaikki viestintä solujen välillä ja niiden välillä tapahtuu salatussa muodossa. Levyn salauksen ansiosta meidän ei tarvitse huolehtia tietojen turvallisuudesta, kun vaihdat levyä tai siirrymme toiselle palvelimelle. Ainoa kriittinen pääsy on pääsy isäntäjärjestelmään, koska tällainen pääsy tarjoaa yleensä pääsyn säiliöiden sisällä oleviin tietoihin.
eheys ”Tämän periaatteen toteutus tapahtuu useilla eri tasoilla. Ensinnäkin on tärkeää huomata, että palvelinlaitteiston, ECC-muistin, tapauksessa ZFS huolehtii jo "pakkauksesta" tiedon eheydestä informaatiobittien tasolla. Pikakuvien avulla voit tehdä varmuuskopioita milloin tahansa lennossa. Kätevät solujen vienti-/tuontityökalut tekevät solujen replikaatiosta yksinkertaista.
saatavuus – Tämä on jo vapaaehtoista. Riippuu maineesi asteesta ja siitä, että sinulla on vihaajia. Esimerkissämme varmistimme, että lompakko oli käytettävissä vain TOP-verkosta. Tarvittaessa voit estää kaiken palomuurin ja sallia pääsyn palvelimeen yksinomaan tunneleiden kautta (TOR tai VPN on toinen asia). Siten palvelin on mahdollisimman erillään ulkomaailmasta, ja vain me itse voimme vaikuttaa sen saatavuuteen.
Kieltäytymisen mahdottomuus - Ja tämä riippuu jatkotoiminnasta ja oikeiden käyttöoikeuksia, pääsyä jne. koskevien käytäntöjen noudattamisesta. Mutta oikealla lähestymistavalla kaikki käyttäjän toimet auditoidaan ja salausratkaisujen ansiosta voidaan yksiselitteisesti tunnistaa, kuka tietyt toiminnot suoritti ja milloin.
Kuvattu konfiguraatio ei tietenkään ole ehdoton esimerkki siitä, miten sen pitäisi aina olla, se on pikemminkin esimerkki siitä, miten se voi olla, samalla kun se säilyttää erittäin joustavat skaalaus- ja mukautusmahdollisuudet.
Entä täydellinen virtualisointi?
Tietoja täydellisestä virtualisoinnista cbsd:llä voit bhyve
Sinun on otettava käyttöön joitakin ytimen asetuksia.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Joten jos sinun täytyy yhtäkkiä käynnistää telakointiasema, asenna debian ja mene!
Siinä kaikki
Luulen, että tämä on kaikki, mitä halusin jakaa. Jos pidit artikkelista, voit lähettää minulle bitcoineja -
Lähde: will.com