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 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
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
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):
Gen
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
Lè sa a, nou konfigirasyon aide
, kontwole estati dosye konfigirasyon sistèm yo. Ou ka li plis an detay
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
sysrc auditd_enable=YES
# service auditd start
Ki jan yo administre pwoblèm sa a parfe dekri nan
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
Kontenè? Docker ankò oswa kisa?
Men non. 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.
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 bhyve
nan egzanp ki anba a.
Enstale ak konfigirasyon anviwònman an lame
Nou itilize FS
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
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
Oke... nou gen cbsd enstale, li lè yo kreye premye workhorse nou an - demon an kalòj Bitcoin!
cbsd jconstruct-tui
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.
laptops. Pou kounye a nou pral sèvi ak Electrum ak serveurs piblik, epi pita nou pral ogmante li nan yon lòt selil
# 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
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
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 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
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-cli
pa 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
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.
Li se tou vo anyen bezwen an pou siveyans aleka nan lame a, pou rezon sa yo nou genyen
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 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!
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 -
Sous: www.habr.com