Այնպես ստացվեց, որ մասնագիտությամբ համակարգչային համակարգերի և ցանցերի ադմինիստրատոր եմ (կարճ ասած՝ համակարգի ադմինիստրատոր), և 10 տարուց մի փոքր ավելի հնարավորություն ունեցա ասելու պրոֆ. մի շարք համակարգերի գործունեությունը, ներառյալ նրանք, որոնք պահանջում են անվտանգության [ծայրահեղ] միջոցներ: Պատահել է նաև, որ որոշ ժամանակ առաջ ինձ հետաքրքիր է համարել dev
, ուրեմն, անցնում էի): Բայց ես չեմ խոսում զարգացման մասին, ես խոսում եմ հավելվածների համար անվտանգ և արդյունավետ միջավայրի մասին:
Ֆինանսական տեխնոլոգիա (ՖԻՆՏԵԽ) անցեք տեղեկատվական անվտանգության կողքին (ինֆոսեկ) իսկ առաջինը կարող է աշխատել առանց երկրորդի, բայց ոչ երկար։ Այդ իսկ պատճառով ես ուզում եմ կիսվել իմ փորձով և իմ օգտագործած գործիքների հավաքածուով, որը ներառում է երկուսն էլ ՖԻՆՏԵԽԻսկ ինֆոսեկ, և միևնույն ժամանակ, և կարող է օգտագործվել նաև ավելի լայն կամ բոլորովին այլ նպատակով: Այս հոդվածում ես ձեզ կպատմեմ ոչ այնքան բիթքոյնի, որքան ֆինանսական (և ոչ միայն) ծառայությունների մշակման և շահագործման ենթակառուցվածքի մոդելի մասին, մի խոսքով, այն ծառայությունները, որտեղ «B»-ն կարևոր է: Սա վերաբերում է ինչպես բիթքոյն բորսային, այնպես էլ փոքր ընկերության ծառայությունների առավել բնորոշ կորպորատիվ կենդանաբանական այգուն, որը որևէ կերպ կապված չէ բիթքոյնի հետ։
Նշեմ, որ ես սկզբունքների կողմնակից եմ «Պարզի՛ր հիմարությունը» и «Քիչն ավելին է», հետևաբար, և՛ հոդվածը, և՛ դրանում նկարագրվածը կունենան այն հատկությունները, որոնց մասին են այս սկզբունքները։
Երևակայական սցենար. Եկեք ամեն ինչ նայենք՝ օգտագործելով բիթքոյն փոխանակողի օրինակը: Մենք որոշեցինք սկսել ռուբլու, դոլարի, եվրոյի փոխանակումը բիթքոյններով և հետադարձ կապով, և մենք արդեն ունենք աշխատանքային լուծում, բայց այլ թվային փողերի համար, ինչպիսիք են qiwi-ն և webmoney-ը, այսինքն. Մենք փակել ենք բոլոր իրավական հարցերը, ունենք պատրաստի հավելված, որը ծառայում է որպես ռուբլու, դոլարի և եվրոյի և այլ վճարային համակարգերի վճարման դարպաս։ Այն միացված է մեր բանկային հաշիվներին և ունի որոշակի API մեր վերջնական հավելվածների համար: Մենք նաև ունենք վեբ հավելված, որը հանդես է գալիս որպես օգտատերերի փոխանակիչ, լավ, ինչպես սովորական qiwi կամ webmoney հաշիվ՝ ստեղծել հաշիվ, ավելացնել քարտ և այլն: Այն շփվում է մեր gateway հավելվածի հետ, թեև REST API-ի միջոցով տեղական տարածքում: Եվ այսպես, մենք որոշեցինք միացնել բիթքոյնները և միևնույն ժամանակ թարմացնել ենթակառուցվածքը, քանի որ... Սկզբում ամեն ինչ հապճեպ դրվում էր սեղանի տակ գտնվող գրասենյակի վիրտուալ տուփերի վրա... կայքը սկսեց օգտագործվել, և մենք սկսեցինք անհանգստանալ աշխատանքի ժամանակի և կատարողականի համար:
Այսպիսով, եկեք սկսենք գլխավորից՝ սերվերի ընտրությունից: Որովհետեւ մեր օրինակի բիզնեսը փոքր է, և մենք վստահում ենք մեր ընտրած հյուրընկալողին (OVH):
Սերվերի տեղադրում
Այստեղ ամեն ինչ պարզ է. Մենք ընտրում ենք այն սարքաշարը, որը համապատասխանում է մեր կարիքներին: Այնուհետև ընտրեք FreeBSD պատկերը: Դե, կամ մենք միանում ենք (այլ հոսթերի և մեր սեփական սարքաշարի դեպքում) IPMI-ի կամ մոնիտորի միջոցով և ներբեռնում ենք .iso FreeBSD պատկերը: Նվագախմբի համար ես օգտագործում եմ
Համակարգի տեղադրումը տեղի է ունենում ստանդարտ ձևով, ես չեմ անդրադառնա դրա վրա, ես միայն նշեմ, որ նախքան շահագործումը սկսելը, արժե ուշադրություն դարձնել. hardening տարբերակներ, որոնք նա առաջարկում է bsdinstaller
տեղադրման վերջում (եթե դուք ինքներդ եք տեղադրել համակարգը).
Կա
Հնարավոր է նաև միացնել վերը նշված պարամետրերը արդեն տեղադրված համակարգում: Դա անելու համար անհրաժեշտ է խմբագրել bootloader ֆայլը և միացնել միջուկի պարամետրերը: *ee-ն նման խմբագիր է 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
Դուք նաև պետք է համոզվեք, որ դուք ունեք տեղադրված համակարգի վերջին տարբերակը և
Հետո մենք ստեղծեցինք aide
, համակարգի կազմաձևման ֆայլերի կարգավիճակի մոնիտորինգ: Մանրամասն կարող եք կարդալ
pkg install aide
և խմբագրել մեր քրոնտաբը
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
Միացնել
sysrc auditd_enable=YES
# service auditd start
Ինչպես կառավարել այս հարցը, հիանալի նկարագրված է
Այժմ մենք վերաբեռնում ենք և անցնում սերվերի ծրագրակազմին: Յուրաքանչյուր սերվեր կոնտեյներների կամ ամբողջական վիրտուալ մեքենաների հիպերվիզոր է: Հետևաբար, կարևոր է, որ պրոցեսորն աջակցի VT-x և EPT, եթե մենք նախատեսում ենք օգտագործել ամբողջական վիրտուալացում:
Ես օգտագործում եմ կոնտեյներներ և վիրտուալ մեքենաներ կառավարելու համար
Տարաներ. Դոկեր նորից, թե՞ ինչ:
Բայց ոչ. cbsd
կազմակերպել այս տարաները, որոնք կոչվում են բջիջներ:
Վանդակը չափազանց արդյունավետ լուծում է տարբեր նպատակների համար ենթակառուցվածքներ կառուցելու համար, որտեղ, ի վերջո, պահանջվում է առանձին ծառայությունների կամ գործընթացների ամբողջական մեկուսացում: Ըստ էության, դա հյուրընկալող համակարգի կլոն է, բայց այն չի պահանջում ամբողջական ապարատային վիրտուալացում: Եվ դրա շնորհիվ ռեսուրսները ծախսվում են ոչ թե «հյուր OS»-ի վրա, այլ միայն կատարվող աշխատանքի վրա։ Երբ բջիջներն օգտագործվում են ներքին կարիքների համար, սա շատ հարմար լուծում է ռեսուրսների օպտիմալ օգտագործման համար. անհրաժեշտության դեպքում մեկ ապարատային սերվերի վրա բջիջների մի խումբ կարող է յուրաքանչյուրն առանձին օգտագործել ամբողջ սերվերի ռեսուրսը: Հաշվի առնելով, որ սովորաբար տարբեր ենթածառայություններ լրացուցիչ կարիք ունեն: ռեսուրսներ տարբեր ժամանակներում, դուք կարող եք առավելագույն արդյունավետություն ստանալ մեկ սերվերից, եթե ճիշտ պլանավորեք և հավասարակշռեք բջիջները սերվերների միջև: Անհրաժեշտության դեպքում բջիջներին կարող են նաև սահմանափակումներ տալ օգտագործվող ռեսուրսի վրա:
Ինչ վերաբերում է ամբողջական վիրտուալացմանը:
Քանի որ ես գիտեմ, cbsd
աջակցում է աշխատանքին bhyve
և XEN հիպերվիզորներ: Երկրորդը երբեք չեմ օգտագործել, բայց առաջինը համեմատաբար նոր է bhyve
ստորև բերված օրինակում:
Հյուրընկալող միջավայրի տեղադրում և կարգավորում
Մենք օգտագործում ենք FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
ավելացրեք սկավառակի միջնորմ մնացած տարածության մեջ
geli init /dev/ada0p4
մուտքագրեք մեր ծածկագրման գաղտնաբառը
geli attach /dev/ada0p4
Մենք նորից մուտքագրում ենք գաղտնաբառը և ունենք սարք /dev/ada0p4.eli. սա մեր կոդավորված տարածքն է: Հետո նույնը կրկնում ենք /dev/ada1-ի և զանգվածի մնացած սկավառակների համար։ Եվ մենք ստեղծում ենք նորը
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
-Դե, մենք նվազագույն մարտական հանդերձանքը պատրաստ ունենք։ Սկավառակների հայելային զանգված երեքից մեկի ձախողման դեպքում:
Նոր «լողավազանի» վրա տվյալների բազայի ստեղծում
zfs create vms/jails
pkg install cbsd
— մենք գործարկեցինք թիմ և ստեղծեցինք կառավարում մեր բջիջների համար:
Հետո cbsd
տեղադրված է, այն պետք է նախաստորագրվի.
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Դե, մենք պատասխանում ենք մի շարք հարցերի, հիմնականում՝ լռելյայն պատասխաններով:
*Եթե դուք օգտագործում եք գաղտնագրում, ապա կարևոր է, որ դաեմոնը cbsdd
չի սկսվել ինքնաբերաբար, քանի դեռ չեք վերծանել սկավառակները ձեռքով կամ ավտոմատ կերպով (մեր օրինակում դա արվում է zabbix-ի կողմից)
**Ես նույնպես չեմ օգտագործում NAT-ից cbsd
, և ես ինքս այն կարգավորում եմ 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
Firewall-ի կանոնների կարգավորումը նույնպես առանձին թեմա է, այնպես որ ես չեմ խորանա BLOCK ALL քաղաքականության ստեղծման և սպիտակ ցուցակների տեղադրման մեջ, դուք կարող եք դա անել կարդալով:
Դե... մենք տեղադրել ենք cbsd, ժամանակն է ստեղծելու մեր առաջին աշխատանքային ձիը՝ վանդակի մեջ գտնվող բիթքոյն դևը:
cbsd jconstruct-tui
Այստեղ մենք տեսնում ենք բջիջների ստեղծման երկխոսությունը: Բոլոր արժեքները սահմանելուց հետո եկեք ստեղծենք:
Ձեր առաջին բջիջը ստեղծելիս դուք պետք է ընտրեք, թե ինչ օգտագործել որպես հիմք բջիջների համար: Հրամանով ընտրում եմ բաշխում FreeBSD պահոցից repo
. Այս ընտրությունը կատարվում է միայն կոնկրետ տարբերակի առաջին բջիջը ստեղծելիս (կարող եք հյուրընկալել ցանկացած տարբերակի բջիջ, որն ավելի հին է, քան հոսթ տարբերակը):
Ամեն ինչ տեղադրվելուց հետո մենք գործարկում ենք վանդակը:
# cbsd jstart bitcoind
Բայց մենք պետք է ծրագրակազմ տեղադրենք վանդակում:
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
մտնել բջջային վահանակ
և արդեն բջջի ներսում մենք տեղադրում ենք ծրագրակազմն իր կախվածությամբ (մեր հյուրընկալող համակարգը մնում է մաքուր)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Վանդակում կա բիթքոյն, բայց մեզ անհրաժեշտ է անանունություն, քանի որ մենք ցանկանում ենք միանալ որոշ վանդակների TOP ցանցի միջոցով: Ընդհանուր առմամբ, մենք նախատեսում ենք կասկածելի ծրագրերով բջիջների մեծ մասը գործարկել միայն վստահված անձի միջոցով: Շնորհիվ pf
Դուք կարող եք անջատել NAT-ը տեղական ցանցի IP հասցեների որոշակի տիրույթի համար և թույլատրել NAT-ը միայն մեր TOR հանգույցի համար: Այսպիսով, եթե նույնիսկ չարամիտ ծրագրերը մտնեն բջիջ, այն, ամենայն հավանականությամբ, չի շփվի արտաքին աշխարհի հետ, իսկ եթե շփվի, չի բացահայտի մեր սերվերի IP-ն։ Հետևաբար, մենք ստեղծում ենք մեկ այլ բջիջ՝ ծառայությունները «փոխանցելու» համար որպես «.onion» ծառայություն և որպես առանձին բջիջներ ինտերնետ մուտք գործելու վստահված անձ:
# 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
Սահմանել լսել տեղական հասցեով (հասանելի է բոլոր բջիջների համար)
SOCKSPort 192.168.0.2:9050
Էլ ի՞նչ է մեզ անհրաժեշտ լիակատար երջանկության համար: Այո, մեզ պետք է ծառայություն մեր վեբի համար, գուցե մեկից ավելի: Եկեք գործարկենք nginx-ը, որը հանդես կգա որպես հակադարձ պրոքսի և հոգ կտանի Let's Encrypt վկայականների թարմացման մասին:
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Եվ այսպես, մենք վանդակում տեղադրեցինք 150 ՄԲ կախվածություն: Իսկ տանտերը դեռ մաքուր է։
Եկեք ավելի ուշ վերադառնանք nginx-ի տեղադրմանը, մենք պետք է բարձրացնենք ևս երկու բջիջ մեր վճարային դարպասի համար nodejs-ի և rust-ի և վեբ հավելվածի համար, որը ինչ-ինչ պատճառներով գտնվում է Apache-ում և PHP-ում, և վերջինս պահանջում է նաև 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
...և ևս 380 ՄԲ մեկուսացված փաթեթներ
Հաջորդը, մենք ներբեռնում ենք մեր հավելվածը git-ով և գործարկում այն:
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 ՄԲ փաթեթներ: վանդակի մեջ։
այստեղ մենք SSH-ի միջոցով ծրագրավորողին մուտք ենք տալիս անմիջապես բջիջ, նրանք այնտեղ ամեն ինչ կանեն իրենք.
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
— փոխել բջիջի SSH պորտը ցանկացած կամայականի
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Դե, ծառայությունն աշխատում է, մնում է կանոնն ավելացնել pf
firewall
Եկեք տեսնենք, թե ինչ IP ունեն մեր բջիջները և ինչպիսին է ընդհանուր առմամբ մեր «տեղական տարածքը»:
# 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
և ավելացրեք կանոն
# 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
Դե, քանի որ մենք այստեղ ենք, եկեք նաև կանոն ավելացնենք հակադարձ վստահված անձի համար.
## 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
Դե, հիմա մի փոքր բիթքոյնների մասին
Այն, ինչ մենք ունենք, այն է, որ մենք ունենք վեբ հավելված, որը ցուցադրվում է արտաքինից, և այն տեղականորեն խոսում է մեր վճարային դարպասի հետ: Այժմ մենք պետք է աշխատանքային միջավայր պատրաստենք բիթքոյնի ցանցի հետ շփվելու համար՝ հանգույցը bitcoind
դա պարզապես դևոն է, որը թարմացնում է բլոկչեյնի տեղական պատճենը: Այս դեյմոնն ունի RPC և դրամապանակի ֆունկցիոնալություն, սակայն հավելվածների մշակման համար կան ավելի հարմար «փաթաթիչներ»: Սկզբից մենք որոշեցինք դնել electrum
CLI դրամապանակ է:
դյուրակիր համակարգիչներ. Առայժմ մենք կօգտագործենք Electrum-ը հանրային սերվերների հետ, իսկ ավելի ուշ այն կբարձրացնենք մեկ այլ բջիջում
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
ևս 700 ՄԲ ծրագրակազմ մեր վանդակում
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"
}
Այժմ մենք ստեղծել ենք դրամապանակ:
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Մեր ցանցի վրա Միայն սահմանափակ թվով մարդիկ կկարողանան միանալ դրամապանակին այսուհետ։ Որպեսզի մուտքը դեպի այս բջիջը դրսից չբացվի, SSH-ի միջոցով կապերը տեղի կունենան TOP-ի միջոցով (VPN-ի ապակենտրոնացված տարբերակ): Մենք գործարկում ենք SSH-ը բջիջում, բայց մի հպեք մեր pf.conf-ին հոսթին:
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Այժմ եկեք անջատենք բջիջը դրամապանակի ինտերնետ հասանելիությամբ: Եկեք դրան IP հասցե տանք մեկ այլ ենթացանցային տարածությունից, որը NATed չէ: Նախ փոխենք /etc/pf.conf
հյուրընկալողի վրա
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
եկեք փոխենք այն JAIL_IP_POOL="192.168.0.0/25"
, այսպիսով բոլոր 192.168.0.126-255 հասցեները ուղղակի մուտք չեն ունենա ինտերնետ: Մի տեսակ ծրագրային «օդային բաց» ցանց: Իսկ NAT կանոնը մնում է այնպես, ինչպես եղել է
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Կանոնների գերբեռնում
# pfctl -f /etc/pf.conf
Հիմա եկեք վերցնենք մեր բջիջը
# 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
Հմմ, բայց հիմա ինքնին համակարգը կդադարի աշխատել մեզ մոտ։ Այնուամենայնիվ, մենք կարող ենք նշել համակարգի վստահված անձ: Բայց կա մի բան, TOR-ի վրա դա SOCKS5 պրոքսի է, և հարմարության համար մենք կցանկանայինք նաև 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
Դե, հիմա մեր համակարգում կա երկու պրոքսի սերվեր, և երկուսն էլ թողարկվում են TOR-ի միջոցով՝ socks5://192.168.0.2:9050 և
Այժմ մենք կարող ենք կարգավորել մեր դրամապանակի միջավայրը
# 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
Դե, հիմա կեղևը կաշխատի վստահված անձի տակից: Եթե ցանկանում ենք տեղադրել փաթեթներ, ապա պետք է ավելացնենք /usr/local/etc/pkg.conf
վանդակի արմատի տակից
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Դե, հիմա ժամանակն է ավելացնել TOR թաքնված ծառայությունը որպես դրամապանակի վանդակում մեր SSH ծառայության հասցե:
# 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
Սա մեր կապի հասցեն է: Եկեք ստուգենք տեղական մեքենայից: Բայց նախ մենք պետք է ավելացնենք մեր SSH բանալին.
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Դե, 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
Եկեք միացնենք (Որպեսզի դա աշխատի, ձեզ հարկավոր է տեղական TOR դեյմոն, որը լսում է 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
Հաջողություն:
Ակնթարթային և միկրովճարումների հետ աշխատելու համար մեզ անհրաժեշտ է նաև հանգույց c-lightning
գործելու համար անհրաժեշտ է bitcoind
բայց այո.
*Կան Lightning Network արձանագրության տարբեր իրականացումներ տարբեր լեզուներով: Նրանցից, որոնք մենք փորձարկեցինք, c-lightning-ը (գրված է C-ով) թվում էր ամենակայունը և ռեսուրսների համար արդյունավետ:
# 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
Մինչև անհրաժեշտ ամեն ինչ կազմվում և տեղադրվում է, եկեք ստեղծենք RPC օգտվող 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
Բջիջների միջև իմ քաոսային անցումը պարզվում է, որ այնքան էլ քաոսային չէ, եթե նշեք օգտակարությունը tmux
, որը թույլ է տալիս ստեղծել մի քանի տերմինալ ենթասեսիաներ մեկ սեանսի ընթացքում: Անալոգային: screen
Այսպիսով, մենք չենք ցանկանում բացահայտել մեր հանգույցի իրական IP-ն, և մենք ցանկանում ենք բոլոր ֆինանսական գործարքներն իրականացնել TOP-ի միջոցով: Ուստի ևս մեկ սոխ պետք չէ։
# 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
Այժմ եկեք ստեղծենք 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 ~
դուք նաև պետք է կազմաձևման ֆայլ ստեղծեք bitcoin-cli-ի համար, մի կոմունալ, որը հաղորդակցվում է bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
ստուգում
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
մեկնարկը lightningd
lightning@lightning:~ % lightningd --daemon
Իրեն lightningd
դուք կարող եք վերահսկել կոմունալը lightning-cli
, օրինակ `
lightning-cli newaddr
ստացեք հասցեն նոր մուտքային վճարման համար
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
դրամապանակի ամբողջ գումարը ուղարկեք հասցեին (բոլոր շղթայական հասցեները)
Նաև հրամաններ շղթայից դուրս գործողությունների համար lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
և այլն:
Դե, հավելվածի հետ հաղորդակցվելու համար մենք ունենք REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Ամփոփել
# 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
Մենք ունենք կոնտեյներների հավաքածու, որոնցից յուրաքանչյուրն ունի իր հասանելիության մակարդակը ինչպես տեղական ցանցից, այնպես էլ դեպի տեղական ցանց:
# 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
Ինչպես տեսնում եք, bitcoind-ը զբաղեցնում է բոլոր 190 ԳԲ տարածքը: Իսկ եթե մեզ անհրաժեշտ լինի մեկ այլ հանգույց թեստերի համար: Այստեղ է, որ ZFS-ը հարմար է: Օգնությամբ cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
դուք կարող եք ստեղծել լուսանկար և կցել նոր բջիջ այս նկարին: Նոր բջիջը կունենա իր սեփական տարածքը, բայց ֆայլային համակարգում հաշվի կառնվի միայն ներկայիս վիճակի և բնօրինակի տարբերությունը (մենք կխնայենք առնվազն 190 ԳԲ)
Յուրաքանչյուր բջիջ իր առանձին ZFS տվյալների բազան է, և սա չափազանց հարմար է:
Հարկ է նաև նշել հյուրընկալողի հեռակառավարման մոնիտորինգի անհրաժեշտությունը, այս նպատակների համար մենք ունենք
B - անվտանգություն
Անվտանգության հետ կապված, եկեք սկսենք ենթակառուցվածքի համատեքստում հիմնական սկզբունքներից.
Գաղտնիություն — UNIX-ի նման համակարգերի ստանդարտ գործիքներն ապահովում են այս սկզբունքը: Մենք տրամաբանորեն առանձնացնում ենք մուտքը համակարգի յուրաքանչյուր տրամաբանորեն առանձին տարր՝ բջիջ: Մուտքն ապահովվում է օգտատերերի ստանդարտ նույնականացման միջոցով՝ օգտագործողների անձնական բանալիների միջոցով: Ամբողջ հաղորդակցությունը բջիջների միջև և մինչև վերջ տեղի է ունենում կոդավորված ձևով: Սկավառակի կոդավորման շնորհիվ մենք չպետք է անհանգստանանք տվյալների անվտանգության մասին՝ սկավառակը փոխարինելիս կամ այլ սերվեր տեղափոխելիս: Միակ կարևոր մուտքը հյուրընկալող համակարգ մուտքն է, քանի որ նման մուտքն ընդհանուր առմամբ ապահովում է տվյալների մուտք դեպի բեռնարկղեր:
Ամբողջությունը «Այս սկզբունքի իրականացումը տեղի է ունենում մի քանի տարբեր մակարդակներում։ Նախ, կարևոր է նշել, որ սերվերի ապարատային, ECC հիշողության դեպքում ZFS-ն արդեն «դուրս է» հոգում տվյալների ամբողջականության մասին տեղեկատվական բիթերի մակարդակում: Ակնթարթային լուսանկարները թույլ են տալիս ցանկացած պահի կրկնօրինակումներ կատարել: Բջիջների արտահանման/ներմուծման հարմար գործիքները հեշտացնում են բջիջների վերարտադրությունը:
Հասանելիություն -Սա արդեն ընտրովի է։ Կախված է ձեր փառքի աստիճանից և այն փաստից, որ դուք ատողներ ունեք: Մեր օրինակում մենք երաշխավորեցինք, որ դրամապանակը հասանելի է բացառապես TOP ցանցից: Անհրաժեշտության դեպքում դուք կարող եք արգելափակել ամեն ինչ firewall-ում և թույլ տալ մուտք գործել սերվեր բացառապես թունելների միջոցով (TOR կամ VPN-ն այլ խնդիր է): Այսպիսով, սերվերը հնարավորինս կտրված կլինի արտաքին աշխարհից, և միայն մենք ինքներս կկարողանանք ազդել դրա հասանելիության վրա։
Մերժման անհնարինությունը - Եվ դա կախված է հետագա շահագործումից և օգտատերերի իրավունքների, մուտքի և այլնի ճիշտ քաղաքականությանը համապատասխանելուց: Բայց ճիշտ մոտեցման դեպքում օգտատերերի բոլոր գործողությունները ենթարկվում են աուդիտի, և գաղտնագրային լուծումների շնորհիվ հնարավոր է միանշանակ բացահայտել, թե ով և երբ է կատարել որոշակի գործողություններ:
Իհարկե, նկարագրված կոնֆիգուրացիան բացարձակ օրինակ չէ այն բանի, թե ինչպես միշտ պետք է լինի, այն ավելի շուտ օրինակ է այն բանի, թե ինչպես կարող է լինել՝ պահպանելով չափման և հարմարեցման շատ ճկուն հնարավորությունները:
Ինչ վերաբերում է ամբողջական վիրտուալացմանը:
Ամբողջական վիրտուալացման մասին, օգտագործելով cbsd, կարող եք bhyve
Դուք պետք է միացնեք միջուկի որոշ տարբերակներ:
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Այսպիսով, եթե հանկարծ ձեզ անհրաժեշտ է գործարկել դոկեր, ապա տեղադրեք որոշ debian և գնացեք:
Այսքանը
Կարծում եմ, դա այն ամենն է, ինչ ես ուզում էի կիսվել: Եթե ձեզ դուր եկավ հոդվածը, ապա կարող եք ինձ ուղարկել որոշ բիթքոյններ.
Source: www.habr.com