Történt ugyanis, hogy hivatásom szerint számítógépes rendszerek és hálózatok adminisztrátora (röviden: rendszergazda) vagyok, és valamivel több, mint 10 évig volt alkalmam elmondani prof. sokféle rendszer tevékenysége, beleértve azokat is, amelyek [szélsőséges] biztonsági intézkedéseket igényelnek. Az is előfordult, hogy valamikor érdekesnek találtam dev
, szóval, elhaladtam mellette). De nem a fejlesztésről beszélek, hanem az alkalmazások biztonságos és hatékony környezetéről.
Pénzügyi technológia (FINTECH) menjen az információbiztonság mellé (infosec) és az első működhet a második nélkül is, de nem sokáig. Ezért szeretném megosztani tapasztalataimat és az általam használt eszközkészletet, amely mindkettőt tartalmazza FINTECHÉs infosec, és egyben, és szélesebb körű vagy teljesen más célra is használható. Ebben a cikkben nem annyira a Bitcoinról fogok beszélni, hanem a pénzügyi (és nem csak) szolgáltatások fejlesztésének és működtetésének infrastrukturális modelljéről - egyszóval azokról a szolgáltatásokról, ahol a „B” számít. Ez vonatkozik mind a Bitcoin tőzsdére, mind a bitcoinnal semmilyen kapcsolatban nem álló kis cég legjellemzőbb vállalati állatkertjére.
Szeretném megjegyezni, hogy az elvek híve vagyok "legyen hülyeség egyszerű" и "a kevesebb több", ezért mind a cikk, mind a benne leírtak rendelkeznek azokkal a tulajdonságokkal, amelyekről ezek az elvek szólnak.
Képzelt forgatókönyv: Nézzünk meg mindent a bitcoin cserélő példáján. Úgy döntöttünk, hogy elindítjuk a rubel, dollár, euró cseréjét bitcoinra és vissza, és már van egy működő megoldásunk, de más digitális pénzekre, mint a qiwi és a webmoney, pl. Lezártunk minden jogi kérdést, van egy kész alkalmazásunk, amely fizetési átjáróként szolgál rubel, dollár és euró, valamint egyéb fizetési rendszerek számára. Bankszámláinkhoz kapcsolódik, és rendelkezik valamilyen API-val a végalkalmazásainkhoz. Van egy webes alkalmazásunk is, amely csereként működik a felhasználók számára, mint egy tipikus qiwi vagy webmoney fiók – hozzon létre egy fiókot, adjon hozzá kártyát stb. Kommunikál az átjáróalkalmazásunkkal, bár a helyi REST API-n keresztül. Ezért úgy döntöttünk, hogy összekapcsoljuk a bitcoinokat, és ezzel egyidejűleg frissítjük az infrastruktúrát, mert... Kezdetben mindent sietve raktak fel az irodában, az asztal alatti virtuális dobozokra... az oldalt elkezdték használni, és kezdtünk aggódni az üzemidő és a teljesítmény miatt.
Tehát kezdjük a fő dologgal - a szerver kiválasztásával. Mert a példánkban szereplő vállalkozás kicsi, és bízunk abban, hogy melyik szolgáltatót (OVH) választjuk
Szerver telepítés
Itt minden egyszerű. Az igényeinknek megfelelő hardvert választjuk ki. Ezután válassza ki a FreeBSD-képet. Nos, vagy IPMI-n keresztül vagy monitorral csatlakozunk (más hoster és saját hardver esetén), és betápláljuk az .iso FreeBSD képfájlt a letöltésbe. Zenekari felálláshoz használom
A rendszer telepítése szabványos módon történik, ezen nem térek ki, csak megjegyzem, hogy az üzembe helyezés előtt érdemes odafigyelni keményedés az általa kínált lehetőségeket bsdinstaller
a telepítés végén (ha saját maga telepíti a rendszert):
Van
A fent említett paraméterek engedélyezése már telepített rendszeren is lehetséges. Ehhez szerkeszteni kell a rendszerbetöltő fájlt, és engedélyezni kell a kernelparamétereket. *Az ee egy ilyen szerkesztő a BSD-ben
# 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
Győződjön meg arról is, hogy a rendszer legújabb verziója van telepítve, és
Ezután konfiguráljuk aide
, figyeli a rendszerkonfigurációs fájlok állapotát. Részletesebben olvashatsz
pkg install aide
és szerkessze a crontabunkat
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
Mi is
sysrc auditd_enable=YES
# service auditd start
Ennek az ügynek a kezelését tökéletesen leírja
Most újraindítjuk, és továbblépünk a szerveren lévő szoftverhez. Minden kiszolgáló egy hipervizor konténerekhez vagy teljes virtuális gépekhez. Ezért fontos, hogy a processzor támogassa a VT-x-et és az EPT-t, ha teljes virtualizációt tervezünk.
Az általam használt tárolók és virtuális gépek kezelésére
Konténerek? Megint Docker vagy mi?
De nem. cbsd
ezeknek a celláknak nevezett konténerek hangszerelésére.
A ketrec rendkívül hatékony megoldás a különféle célú infrastruktúra kiépítésére, ahol végső soron az egyes szolgáltatások vagy folyamatok teljes elkülönítésére van szükség. Lényegében a gazdarendszer klónja, de nem igényel teljes hardveres virtualizációt. Ennek köszönhetően az erőforrásokat nem a „vendég operációs rendszerre” költik, hanem csak az elvégzett munkára. Ha a cellákat belső igényekre használjuk, ez egy nagyon kényelmes megoldás az optimális erőforrás-felhasználáshoz – egy hardverkiszolgálón lévő cellák egyenként használhatják a teljes szervererőforrást, ha szükséges. Figyelembe véve, hogy általában a különböző alszolgáltatásokhoz további kiegészítőkre van szükség. erőforrások különböző időpontokban, maximális teljesítményt nyerhet ki egyetlen szerverről, ha megfelelően megtervezi és kiegyensúlyozza a cellákat a kiszolgálók között. Szükség esetén a celláknak korlátozásokat is lehet adni a felhasznált erőforrásra vonatkozóan.
Mi a helyzet a teljes virtualizációval?
Amennyire én tudom, cbsd
támogatja a munkát bhyve
és XEN hipervizorok. A másodikat még nem használtam, de az első viszonylag új bhyve
az alábbi példában.
A gazdagép környezet telepítése és konfigurálása
FS-t használunk
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
adjon hozzá egy lemezpartíciót a fennmaradó helyre
geli init /dev/ada0p4
írja be a titkosítási jelszavunkat
geli attach /dev/ada0p4
Újra megadjuk a jelszót, és van egy /dev/ada0p4.eli eszközünk - ez a titkosított területünk. Ezután megismételjük ugyanezt a /dev/ada1-nél és a tömb többi lemezénél. És létrehozunk egy újat
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Nos, készen áll a minimális harci készlet. Lemezek tükrözött tömbje arra az esetre, ha a három közül valamelyik meghibásodik.
Adatkészlet létrehozása egy új „készletben”
zfs create vms/jails
pkg install cbsd
— létrehoztunk egy csapatot és felállítottuk sejtjeink menedzsmentjét.
Után cbsd
telepítve kell inicializálni:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Nos, egy csomó kérdésre válaszolunk, többnyire alapértelmezett válaszokkal.
*Ha titkosítást használ, fontos, hogy a démon cbsdd
nem indul el automatikusan, amíg nem dekódoltad manuálisan vagy automatikusan (példánkban ezt a zabbix végzi)
** Nem használok NAT-ot sem cbsd
, és magam konfigurálom 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
A tűzfal házirendek beállítása szintén egy külön téma, ezért nem megyek bele mélyebben a MINDENT BLOCK házirendjének beállításába és az engedélyezési listák beállításába, ezt megteheti, ha elolvassa
Nos... telepítettük a cbsd-t, ideje megalkotni első igáslónkat - a ketrecbe zárt Bitcoin démont!
cbsd jconstruct-tui
Itt látjuk a cella létrehozási párbeszédpanelt. Miután minden értéket beállítottunk, alkossunk!
Az első cella létrehozásakor ki kell választania, hogy mi legyen a cellák alapja. A paranccsal kiválasztok egy disztribúciót a FreeBSD tárolóból repo
. Ez a választás csak egy adott verzió első cellájának létrehozásakor történik (bármilyen verzió celláját tárolhatja, amely régebbi, mint a gazdagép verziója).
Miután mindent felszereltünk, elindítjuk a ketrecet!
# cbsd jstart bitcoind
De szoftvert kell telepítenünk a ketrecbe.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
hogy bejusson a cellakonzolba
és már a cellán belül telepítjük a szoftvert a függőségeivel (gazdarendszerünk tiszta marad)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
A ketrecben van Bitcoin, de szükségünk van az anonimitásra, mert szeretnénk néhány ketrechez csatlakozni a TOP hálózaton keresztül. Általában azt tervezzük, hogy a legtöbb gyanús szoftverrel rendelkező cellát csak proxyn keresztül futtatjuk. Köszönet pf
A NAT-ot letilthatja egy bizonyos IP-címtartományban a helyi hálózaton, és csak a TOR-csomóponton engedélyezheti a NAT-ot. Így, ha a rosszindulatú program be is kerül a cellába, nagy valószínűséggel nem kommunikál a külvilággal, és ha mégis, akkor nem fedi fel szerverünk IP-jét. Ezért létrehozunk egy másik cellát a szolgáltatások „.hagyma” szolgáltatásként való „továbbításához”, valamint az egyes cellákhoz való internet-hozzáférés proxyjaként.
# 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
Helyi címen történő figyelés beállítása (minden cellához elérhető)
SOCKSPort 192.168.0.2:9050
Mi kell még a teljes boldogsághoz? Igen, szükségünk van egy szolgáltatásra a webünkhöz, talán többre is. Indítsuk el az nginx-et, amely fordított proxyként működik, és gondoskodik a Let's Encrypt tanúsítványok megújításáról
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Így 150 MB függőséget helyeztünk el egy ketrecben. És a házigazda még mindig tiszta.
Később térjünk vissza az nginx beállításához, még két cellát kell emelnünk a fizetési átjárónk számára a nodej-eken és a rust-on és egy webalkalmazást, ami valamiért Apache-ban és PHP-ben van, utóbbihoz pedig MySQL adatbázis is szükséges.
# 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
...és további 380 MB csomag elkülönítve
Ezután letöltjük az alkalmazásunkat a git-tel, és elindítjuk.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB-os csomagok. ketrecben.
itt a fejlesztőnek SSH-n keresztül adunk hozzáférést közvetlenül a cellához, ott mindent maguk csinálnak:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— módosítsa a cella SSH-portját tetszőlegesre
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Nos, a szolgáltatás fut, csak hozzá kell adni a szabályt pf
tűzfal
Nézzük meg, milyen IP-vel rendelkeznek a celláink, és hogyan néz ki általában a „helyi területünk”.
# 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
és adjunk hozzá egy szabályt
# 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
Nos, mivel itt tartunk, adjunk hozzá egy szabályt a fordított proxyhoz is:
## 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
Nos, most egy kicsit a bitcoinokról
Van egy webalkalmazásunk, amely kívülről elérhető, és helyileg beszél a fizetési átjárónkkal. Most fel kell készítenünk egy munkakörnyezetet magával a Bitcoin hálózattal - a csomóponttal - való interakcióhoz bitcoind
ez csak egy démon, amely naprakészen tartja a blokklánc helyi másolatát. Ez a démon rendelkezik RPC és pénztárca funkcióval, de vannak kényelmesebb „csomagolók” az alkalmazásfejlesztéshez. Kezdetnek úgy döntöttünk, hogy feltesszük electrum
egy CLI pénztárca.
laptopok. Egyelőre nyilvános szerverekkel fogjuk használni az Electrumot, majd később egy másik cellába emeljük
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
további 700 MB szoftver a ketrecünkben
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"
}
Most létrehoztunk egy pénztárcát.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
A miénknek on-lánc Ezentúl csak korlátozott számú ember csatlakozhat majd a pénztárcához. Annak érdekében, hogy kívülről ne nyissa meg a hozzáférést ehhez a cellához, az SSH-n keresztüli kapcsolatok a TOP-on (a VPN decentralizált változata) keresztül történnek. Elindítjuk az SSH-t a cellában, de ne érintsük meg a pf.conf fájlt a gazdagépen.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Most kapcsoljuk ki a cellát a pénztárca internet-hozzáférésével. Adjunk neki egy másik alhálózati területről származó IP-címet, amely nem NAT-os. Először is változtassunk /etc/pf.conf
a gazdán
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
változtassunk rá JAIL_IP_POOL="192.168.0.0/25"
, így az összes 192.168.0.126-255 címnek nem lesz közvetlen hozzáférése az internethez. Egyfajta szoftveres „légrés” hálózat. És a NAT szabály továbbra is olyan, mint volt
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
A szabályok túlterhelése
# pfctl -f /etc/pf.conf
Most pedig vegyük fel a cellánkat
# 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, de most már maga a rendszer leáll helyettünk. Megadhatunk azonban egy rendszerproxyt. De van egy dolog, a TOR-on egy SOCKS5 proxy, és a kényelem kedvéért szeretnénk HTTP proxyt is.
# 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
Nos, most két proxyszerver van a rendszerünkben, és mindkettő a TOR-n keresztül történik: socks5://192.168.0.2:9050 és
Most már konfigurálhatjuk a pénztárca környezetünket
# 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
Nos, most a shell proxy alól fog működni. Ha csomagokat akarunk telepíteni, akkor hozzá kell adnunk /usr/local/etc/pkg.conf
a ketrec gyökere alól
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Nos, itt az ideje, hogy hozzáadjuk a TOR rejtett szolgáltatást SSH szolgáltatásunk címeként a pénztárcacellában.
# 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
Ez a kapcsolati címünk. Nézzük a helyi gépről. De először hozzá kell adnunk az SSH kulcsunkat:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Nos, egy Linux kliens gépről
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
Kapcsolódjunk (Ahhoz, hogy ez működjön, szükség van egy helyi TOR démonra, amely figyel a 9050-re)
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
Siker!
Az azonnali és mikrofizetések használatához szükségünk van egy csomópontra is c-lightning
működéséhez szükséges bitcoind
de igen.
*A Lightning Network protokollnak különböző megvalósításai vannak különböző nyelveken. Az általunk teszteltek közül a c-lightning (C-vel írva) tűnt a legstabilabbnak és erőforrás-hatékonyabbnak.
# 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
Amíg minden szükséges le van fordítva és telepítve, hozzunk létre egy RPC felhasználót a számára 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
A cellák közötti kaotikus váltásom nem olyan kaotikus, ha figyelembe vesszük a segédprogramot tmux
, amely lehetővé teszi több terminál almunka létrehozását egy munkameneten belül. Hasonló: screen
Tehát nem szeretnénk felfedni csomópontunk valódi IP-címét, hanem minden pénzügyi tranzakciót a TOP-on keresztül szeretnénk lebonyolítani. Ezért egy másik .hagyma nem szükséges.
# 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
Most hozzunk létre egy konfigurációt a c-lightning számára
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 ~
Ezenkívül létre kell hoznia egy konfigurációs fájlt a bitcoin-cli-hez, egy olyan segédprogramhoz, amely kommunikál vele bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
jelölje be
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
dob lightningd
lightning@lightning:~ % lightningd --daemon
Önmaga lightningd
vezérelheti a segédprogramot lightning-cli
, például:
lightning-cli newaddr
megkapja a címet az új bejövő fizetéshez
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
küldje el a pénztárcában lévő összes pénzt a címre (az összes láncon belüli cím)
Parancsok a láncon kívüli műveletekhez is lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
és így tovább.
Nos, az alkalmazással való kommunikációhoz van egy REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Összefoglalva:
# 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
Van egy konténerkészletünk, amelyek mindegyike saját hozzáférési szinttel rendelkezik mind a helyi hálózatból, mind a hálózathoz.
# 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
Mint látható, a bitcoind mind a 190 GB-ot elfoglalja. Mi van, ha egy másik csomópontra van szükségünk a teszteléshez? Itt jön jól a ZFS. Segítséggel cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
létrehozhat egy pillanatképet, és új cellát csatolhat ehhez a pillanatképhez. Az új cellának saját területe lesz, de a fájlrendszerben csak a jelenlegi és az eredeti állapot közötti különbséget veszik figyelembe (legalább 190 GB-ot spórolunk)
Minden cella különálló ZFS-adatkészlettel rendelkezik, és ez rendkívül kényelmes.
Érdemes megjegyezni a gazdagép távfelügyeletének szükségességét is, erre a célra van
B - biztonság
Ami a biztonságot illeti, induljunk ki a kulcsfontosságú elvekből az infrastruktúra összefüggésében:
Titoktartás - A UNIX-szerű rendszerek szabványos eszközei biztosítják ennek az elvnek a megvalósítását. Logikailag elkülönítjük a hozzáférést a rendszer minden egyes logikailag különálló eleméhez - egy cellához. A hozzáférést szabványos felhasználói hitelesítéssel biztosítják a felhasználók személyes kulcsaival. Minden kommunikáció a végcellák között és a végcellák felé titkosított formában történik. A lemeztitkosításnak köszönhetően nem kell aggódnunk az adatok biztonsága miatt, amikor lemezt cserélünk vagy másik szerverre költözünk. Az egyetlen kritikus hozzáférés a gazdarendszerhez való hozzáférés, mivel az ilyen hozzáférés általában hozzáférést biztosít a konténerekben lévő adatokhoz.
Sértetlenség „Ennek az elvnek a megvalósítása több különböző szinten történik. Először is fontos megjegyezni, hogy a szerverhardver, az ECC memória esetében a ZFS már „out of the box” gondoskodik az adatintegritásról az információs bitek szintjén. Az azonnali pillanatképek segítségével bármikor, menet közben készíthet biztonsági másolatot. A kényelmes cellaexportálási/-importálási eszközök egyszerűvé teszik a sejtreplikációt.
elérhetőség - Ez már nem kötelező. Függ a hírneved mértékétől és attól, hogy vannak gyűlölőid. Példánkban biztosítottuk, hogy a pénztárca kizárólag a TOP hálózatról legyen elérhető. Ha szükséges, mindent blokkolhat a tűzfalon, és kizárólag alagutakon keresztül engedélyezheti a szerverhez való hozzáférést (a TOR vagy a VPN más kérdés). Így a szerver lehetőség szerint el lesz zárva a külvilágtól, és csak mi magunk tudjuk befolyásolni az elérhetőségét.
Az elutasítás lehetetlensége - És ez a további működéstől és a megfelelő szabályzatok betartásától függ a felhasználói jogokra, hozzáférésre stb. De a megfelelő megközelítéssel minden felhasználói műveletet auditálnak, és a kriptográfiai megoldásoknak köszönhetően egyértelműen azonosítható, hogy ki és mikor hajtott végre bizonyos műveleteket.
Természetesen a leírt konfiguráció nem egy abszolút példa arra, hogy mindig milyennek kell lennie, inkább csak egy példa arra, hogyan lehet, miközben megőrzi a nagyon rugalmas skálázási és testreszabási lehetőségeket.
Mi a helyzet a teljes virtualizációval?
A teljes virtualizációról a cbsd használatával tudod bhyve
Engedélyeznie kell néhány kernelbeállítást.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Tehát ha hirtelen el kell indítania egy dokkolót, telepítsen egy debiant, és menjen!
Ez minden
Azt hiszem, ez minden, amit meg akartam osztani. Ha tetszett a cikk, küldhetsz nekem néhány bitcoint -
Forrás: will.com