капаска Bitcoin?

Ошентип, кесибим боюнча мен компьютердик системалардын жана тармактардын администраторумун (кыскасы: системалык администратор) жана 10 жылдан бир аз ашык убакыт бою проф. ар кандай системалардын иш-аракеттери, анын ичинде [өтө] коопсуздук чараларын талап кылган системалар. Бир нече убакыт мурун мага кызыктуу болгон окуя да болду терминалдарда, жана аны колдонуу менен гана чектелбестен, иштеп чыгуучунун көз карашы боюнча Bitcoin тармагы менен өз алдынча иштөөнү үйрөнүү үчүн бир нече микро-кызматтарды ишке киргизди (албетте, мен алардын биримин. dev, Ошентип, мен өтүп бара жаттым). Бирок мен өнүгүү жөнүндө эмес, тиркемелер үчүн коопсуз жана эффективдүү чөйрө жөнүндө айтып жатам.

Финансылык технология (fintech) маалыматтык коопсуздуктун жанына өтүңүз (infosec) жана биринчиси экинчисиз иштей алат, бирок көпкө эмес. Ошондуктан мен өзүмдүн тажрыйбам менен бөлүшкүм келет жана мен колдонгон куралдардын жыйындысы, ал экөөнү тең камтыйт fintechжана infosec, жана ошол эле учурда, ошондой эле кененирээк же такыр башка максатта колдонулушу мүмкүн. Бул макалада мен сизге Биткойн жөнүндө көп эмес, каржылык (жана гана эмес) кызматтарды өнүктүрүү жана иштетүү үчүн инфраструктуралык модель жөнүндө айтып берем - бир сөз менен айтканда, "В" маанилүү болгон кызматтар. Бул Bitcoin биржасына да, Bitcoin менен эч кандай байланышы жок чакан компаниянын эң типтүү корпоративдик зоопаркына да тиешелүү.

Мен принциптердин жактоочусу экенимди белгилегим келет "акылсыз жөнөкөй" и "аз көбүрөөк", ошондуктан, макала да, анда сүрөттөлгөн нерсе да бул принциптер жөнүндө болгон касиеттерге ээ болот.

Ойдон чыгарылган сценарий: Келгиле, биткойндор алмаштыргычтын мисалында баарын карап көрөлү. Биз рублди, долларды, еврону биткойндорго жана кайра алмаштырууну баштоону чечтик, бизде буга чейин жумушчу чечим бар, бирок qiwi жана webmoney сыяктуу башка санариптик акчалар үчүн, б.а. Биз бардык юридикалык маселелерди жаптык, бизде рубль, доллар жана евро жана башка төлөм системалары үчүн төлөм шлюзи катары кызмат кылган даяр тиркеме бар. Ал биздин банк эсептерибизге туташтырылган жана акыркы колдонмолорубуз үчүн кандайдыр бир API бар. Бизде ошондой эле колдонуучулар үчүн алмаштыргычтын ролун аткарган веб-тиркеме бар, ошондой эле, кадимки qiwi же webmoney эсеби сыяктуу - каттоо эсебин түзүү, картаны кошуу жана башкалар. Бул жергиликтүү аймакта REST API аркылуу болсо да, биздин шлюз колдонмосу менен байланышат. Ошентип, биз биткойндорду бириктирип, ошол эле учурда инфраструктураны жаңыртууну чечтик, анткени... Башында бардыгы шашылыш түрдө столдун астындагы кеңседеги виртуалдык кутуларга коюлду... сайт колдонула баштады, биз иштөө убактысы жана иштеши жөнүндө тынчсыздана баштадык.

Ошентип, негизги нерседен баштайлы - серверди тандоо. Анткени биздин мисалдагы бизнес кичинекей жана биз тандай турган хосттерге (OVH) ишенебиз бюджеттик вариант анда системаны түпнуска .iso сүрөтүнөн орнотуу мүмкүн эмес, бирок бул маанилүү эмес, IT коопсуздук бөлүмү орнотулган сүрөттү сөзсүз талдайт. Ал эми биз чоңойгондо, биз физикалык мүмкүнчүлүгү чектелген кулпу жана ачкыч астында өз шкафыбызды ижарага алабыз, балким, өзүбүздүн DC курабыз. Кандай болгон күндө да, жабдыктарды ижарага алууда жана даяр сүрөттөрдү орнотууда, сиздин тутумуңузда илинип турган "Хостердеги троян" болушу мүмкүн экенин эстен чыгарбоо керек, ал көпчүлүк учурда сизди аңдып жиберүүгө арналган эмес. бирок ыңгайлуураак башкаруу куралдарынын серверин сунуштоо.

Сервер орнотуу

Бул жерде баары жөнөкөй. Биз муктаждыктарыбызга ылайыктуу аппаратураны тандайбыз. Андан кийин FreeBSD сүрөтүн тандаңыз. Мейли, же биз IPMI аркылуу же монитор аркылуу (башка хосттерде жана өзүбүздүн аппараттык жабдыкта) туташтырабыз жана .iso FreeBSD сүрөтүн жүктөп алуу үчүн киргизебиз. Оркестрдик орнотуу үчүн мен колдоном Ansible и mfsbsd. Бир гана нерсе, кимсуфи менен болгон учурда биз тандадык өзгөчө орнотуу күзгүдөгү эки дискте жүктөө жана / үй бөлүмдөрү гана "ачык" болушу үчүн, дисктин калган мейкиндиги шифрленет, бирок кийинчерээк бул жөнүндө көбүрөөк.

капаска Bitcoin?

Системаны орнотуу стандарттуу жол менен ишке ашат, мен бул жөнүндө токтолбойм, мен жөн гана белгилей кетейин, иштей баштоодон мурун ага көңүл буруш керек. катууланткандыктан ал сунуш кылган параметрлер bsdinstaller орнотуунун аягында (эгерде сиз системаны өзүңүз орнотсоңуз):

капаска Bitcoin?

бар жакшы материал бул тема боюнча, мен бул жерде кыскача кайталайм.

Ошондой эле орнотулган системада жогоруда айтылган параметрлерди иштетүүгө болот. Бул үчүн, жүктөгүч файлын түзөтүп, ядронун параметрлерин иштетишиңиз керек. *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

Ошондой эле сизде тутумдун акыркы версиясы орнотулганына ынануу керек жана бардык жаңыртууларды жана жаңыртууларды аткарыңыз. Биздин учурда, мисалы, акыркы версияга жаңыртуу талап кылынат, анткени... орнотууга чейинки сүрөттөр алты айдан бир жылга чейин артта калат. Ооба, ал жерде биз SSH портун демейкиден башкага өзгөртөбүз, ачкычтын аутентификациясын кошуп, сырсөздүн аутентификациясын өчүрөбүз.

Андан кийин конфигурациялайбыз aide, системанын конфигурация файлдарынын абалын көзөмөлдөө. Сиз кененирээк окуй аласыз бул жерде.

pkg install aide

жана crontabыбызды түзөтүңүз

crontab -e

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

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

бурулуш системалык аудит

sysrc auditd_enable=YES

# service auditd start

Бул маселени кантип башкаруу эң сонун сүрөттөлгөн лидерлик.

Эми биз кайра жүктөйбүз жана сервердеги программалык камсыздоого өтөбүз. Ар бир сервер контейнерлер же толук виртуалдык машиналар үчүн гипервизор. Ошондуктан, эгерде биз толук виртуалдаштырууну колдонууну пландаштырсак, процессор VT-x жана EPT колдошу маанилүү.

Контейнерлерди жана виртуалдык машиналарды башкаруу үчүн мен колдоном cbsd от olevole, Мен ага дагы ден соолук жана бул кереметтүү кызмат үчүн бата каалайм!

Контейнерлер? Докер кайра же эмне?

Бирок жок. FreeBSD түрмөлөрү контейнерлештирүү үчүн сонун курал болуп саналат, бирок айтылган cbsd клеткалар деп аталган бул контейнерлерди уюштуруу үчүн.

Кафес ар кандай максаттар үчүн инфраструктураны куруу үчүн өтө эффективдүү чечим болуп саналат, мында жеке кызматтарды же процесстерди толук изоляциялоо талап кылынат. Негизи, бул хост системасынын клону, бирок ал толук жабдык виртуалдаштырууну талап кылбайт. Мунун аркасында ресурстар "конок OS" үчүн эмес, аткарылып жаткан ишке гана жумшалат. Клеткалар ички муктаждыктар үчүн колдонулганда, бул ресурстарды оптималдуу пайдалануу үчүн абдан ыңгайлуу чечим болуп саналат - бир аппараттык сервердеги клеткалардын тобу, эгерде зарыл болсо, ар бири өзүнчө бүт сервер ресурсун колдоно алат. Адатта, ар кандай субкызматтар кошумча керек экенин эске алып. ресурстарды ар кайсы убакта колдонсоңуз, серверлердин ортосундагы клеткаларды туура пландап, тең салмактап койсоңуз, бир серверден максималдуу өндүрүмдүүлүктү ала аласыз. Зарыл болсо, клеткаларга колдонулган ресурс боюнча чектөөлөр да берилиши мүмкүн.

капаска Bitcoin?

Толук виртуалдаштыруу жөнүндө эмне айтууга болот?

Менин билишимче, ошондой эле, cbsd ишин колдойт bhyve жана XEN гипервизорлору. Мен экинчисин эч качан колдонгон эмесмин, бирок биринчиси салыштырмалуу жаңы FreeBSDден гипервизор. Биз колдонуунун бир мисалын карап чыгабыз bhyve төмөнкү мисалда.

Хост чөйрөсүн орнотуу жана конфигурациялоо

Биз FS колдонобуз ZFS. Бул сервер мейкиндигин башкаруу үчүн абдан күчтүү курал. ZFSдин аркасында сиз дисктерден ар кандай конфигурациялардын массивдерин түз түзө аласыз, мейкиндикти динамикалык түрдө "ысык" кеңейте аласыз, өлүк дисктерди өзгөртө аласыз, сүрөттөрдү башкара аласыз жана башка көптөгөн макалаларды бүтүндөй бир катарда сүрөттөсө болот. Биздин серверге жана анын дисктерине кайрылып көрөлү. Орнотуунун башында биз шифрленген бөлүктөр үчүн дисктерде бош орун калтырдык. Эмнеге андай? Бул система автоматтык түрдө ойгонуп, SSH аркылуу угат.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

калган орунга диск бөлүгүн кошуу

geli init /dev/ada0p4

биздин шифрлөө сырсөзүн киргизиңиз

geli attach /dev/ada0p4

Биз сырсөздү кайра киргизебиз жана бизде /dev/ada0p4.eli түзмөгү бар - бул биздин шифрленген мейкиндик. Андан кийин биз /dev/ada1 жана массивдеги калган дисктер үчүн да кайталайбыз. Жана биз жаңысын түзөбүз ZFS бассейни.

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

Брандмауэр саясаттарын орнотуу да өзүнчө тема, андыктан мен БААРЫН БЛОКТОО саясатын жана ак тизмелерди орнотууга тереңдеп кирбейм, муну окуу менен кылсаңыз болот расмий документтер же Google'да бар көптөгөн макалалардын ар бири.

Мейли... бизде cbsd орнотулду, биздин биринчи жумушчу күчүбүздү - капаска салынган Bitcoin жинди түзүүгө убакыт келди!

cbsd jconstruct-tui

капаска Bitcoin?

Бул жерде биз клетка түзүү диалогун көрөбүз. Бардык баалуулуктар коюлгандан кийин, келгиле, түзөлү!

Биринчи уячаңызды түзүп жатканда, клеткалар үчүн негиз катары эмнени колдонууну тандаңыз. Мен буйрук менен 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

капаска Bitcoin бар, бирок биз TOP тармагы аркылуу кээ бир клеткаларга туташуу келет, анткени анонимдүүлүк керек. Жалпысынан биз шектүү программалык камсыздоо менен көпчүлүк клеткаларды прокси аркылуу гана иштетүүнү пландап жатабыз. Рахмат pf Сиз жергиликтүү тармактагы IP даректердин белгилүү бир диапазону үчүн NATти өчүрө аласыз жана 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 тармактык

Келгиле, биздин клеткалар кандай 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

Ооба, азыр биткойндор жөнүндө бир аз

Бизде бар болгон нерсе, бизде тышкы таасирге ээ болгон веб-тиркеме бар жана ал биздин төлөм шлюзубуз менен жергиликтүү түрдө сүйлөшөт. түйүн - Эми биз Bitcoin тармак өзү менен өз ара аракеттенүү үчүн жумушчу чөйрөнү даярдоо керек bitcoind бул блокчейндин жергиликтүү көчүрмөсүн жаңыртып турган жөн гана демон. Бул демон RPC жана капчык функционалдуулугуна ээ, бирок тиркемени иштеп чыгуу үчүн ыңгайлуураак "ороочулар" бар. Баштоо үчүн, биз коюуну чечтик electrum CLI капчыгы болуп саналат. Бул капчык биз аны биткойндорубуз үчүн "муздак сактагыч" катары колдонобуз - жалпысынан, колдонуучуларга жеткиликтүү системанын "тышында" сакталышы керек болгон биткойндор жана жалпысынан бардыгынан алыс. Анын GUI да бар, ошондуктан биз ошол эле капчыкты өзүбүздүн капчыгыбызда колдонобуз
ноутбуктар. Азырынча биз Электрумду коомдук серверлер менен колдонобуз, кийинчерээк аны башка уячада көтөрөбүз ElectrumXэч кимге көз каранды болбоо үчүн.

# 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

Эми капчыктын Интернетке кирүү мүмкүнчүлүгү бар клетканы өчүрөлү. Келгиле, ага NAT эмес башка субнет мейкиндигинен IP дарегин берели. Алгач өзгөрөлү /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

капаска Bitcoin?

капаска Bitcoin?

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 жана http://192.168.0.6:8123

Эми биз капчыкты чөйрөнү конфигурациялай алабыз

# 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

Келиңиз байланышабыз (Мунун иштеши үчүн сизге 9050де угуучу жергиликтүү TOR демону керек)

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

Ийгилик!

Заматта жана микро-төлөмдөр менен иштөө үчүн бизге түйүн керек Lightning Network, Чынында, бул Биткойн менен биздин негизги иш куралы болот. U*с-чагылганбиз демон катары колдоно турганыбыз Sparko плагини, бул толук кандуу HTTP (REST) ​​интерфейси жана сизге чынжырдан тышкары жана чынжырдагы транзакциялар менен иштөөгө мүмкүндүк берет. c-lightning иштеши үчүн зарыл bitcoind Бирок Ооба.

*Lightning Network протоколунун ар кандай тилдерде ар кандай ишке ашырылышы бар. Биз сынап көргөндөрдүн ичинен 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

капаска Bitcoin?

Ошентип, биз түйүнүбүздүн чыныгы 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 ~

сиз ошондой эле биткоин-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

капаска Bitcoin?

Бизде контейнерлердин топтому бар, алардын ар бири локалдык тармактан жана ага кирүү мүмкүнчүлүгүнө ээ.

# 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 маалымат топтому болуп саналат жана бул абдан ыңгайлуу. ZFS да уруксат берет SSH аркылуу сүрөттөрдү жөнөтүү сыяктуу башка сонун нерселерди жасаңыз. Биз аны сүрөттөбөйбүз, ансыз деле көп нерсе бар.

Ошондой эле, бул максаттар үчүн бизде хосттун алыстан мониторинг жүргүзүү зарылдыгын белгилей кетүү керек Апенди.

B - коопсуздук

Коопсуздукка келсек, инфраструктуранын контекстиндеги негизги принциптерден баштайлы:

купуялуулук - UNIX сыяктуу системалардын стандарттык куралдары бул принциптин ишке ашырылышын камсыз кылат. Биз системанын ар бир логикалык өзүнчө элементине - клеткага кирүү мүмкүнчүлүгүн логикалык жактан бөлөбүз. Кирүү колдонуучулардын жеке ачкычтарын колдонуу менен стандарттык колдонуучу аутентификациясы аркылуу камсыз кылынат. Клеткалардын ортосундагы жана акырына чейинки бардык байланыш шифрленген түрдө ишке ашат. Дискти шифрлөөнүн аркасында биз дискти алмаштырууда же башка серверге көчүүдө маалыматтардын коопсуздугу жөнүндө тынчсызданбайбыз. Жалгыз маанилүү жетүү бул хост тутумуна кирүү, анткени мындай жетүү жалпысынан контейнерлердин ичиндеги маалыматтарга жетүүнү камсыз кылат.

актык «Бул принципти ишке ашыруу бир нече ар кандай деңгээлде жүрөт. Биринчиден, сервердик жабдыктарда, ECC эс тутумунда, ZFS буга чейин "кутудан тышкары" маалымат биттеринин деңгээлинде маалыматтардын бүтүндүгүнө кам көрө тургандыгын белгилей кетүү маанилүү. Ыкчам сүрөттөр сизге каалаган убакта камдык көчүрмөлөрдү түзүүгө мүмкүндүк берет. Ыңгайлуу клетка экспорттоо/импорттоо куралдары клетканын репликациясын жөнөкөйлөтөт.

болушу - Бул мурунтан эле милдеттүү эмес. Атак-даңкыңыздын даражасына жана жек көрүүчүлөрүңүз бар экенине жараша болот. Биздин мисалда биз капчыкка TOP тармагынан гана жеткиликтүү болушун камсыз кылдык. Керек болсо, сиз брандмауэрдеги бардыгын жаап, серверге туннелдер аркылуу гана кирүүгө уруксат бере аласыз (TOR же VPN башка маселе). Ошентип, сервер мүмкүн болушунча тышкы дүйнөдөн ажыратылат жана анын жеткиликтүүлүгүнө өзүбүз гана таасир эте алабыз.

Баш тартуунун мүмкүн эместиги - Жана бул андан аркы иштөөгө жана колдонуучунун укуктарына туура саясатты сактоого, кирүү ж.б. көз каранды. Бирок туура мамиле менен колдонуучунун бардык аракеттери текшерилет жана криптографиялык чечимдердин аркасында белгилүү бир аракеттерди ким жана качан жасаганын так аныктоого болот.

Албетте, сүрөттөлгөн конфигурация ар дайым кандай болушу керек экендигинин абсолюттук мисалы эмес, бул өтө ийкемдүү масштабдоо жана ыңгайлаштыруу мүмкүнчүлүктөрүн сактап калуу менен, ал кандай болушу мүмкүн экендигинин бир мисалы.

Толук виртуалдаштыруу жөнүндө эмне айтууга болот?

Сиз cbsd аркылуу толук виртуалдаштыруу жөнүндө бул жерден оку. Мен муну жумуш үчүн гана кошом bhyve Кээ бир ядро ​​параметрлерин иштетишиңиз керек.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Ошентип, сиз күтүлбөгөн жерден докерди баштооңуз керек болсо, анда Debian орнотуп, барыңыз!

капаска Bitcoin?

Баары болду

Мен муну менен бөлүшкүм келди окшойт. Эгер сизге макала жакса, анда мага бир нече биткойндор жөнөтө аласыз - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Эгер сиз клеткаларды аракет кылып көргүңүз келсе жана биткойндорго ээ болгуңуз келсе, менин баракчама барсаңыз болот үй жаныбары долбоору.

Source: www.habr.com