Bitcoin qəfəsdə?

Elə oldu ki, mən ixtisasca kompüter sistemlərinin və şəbəkələrinin administratoruyam (qısacası: sistem administratoru) və prof. [əlavə] yüksək təhlükəsizlik tədbirləri tələb edən sistemlər də daxil olmaqla, müxtəlif sistemlərin fəaliyyəti. O da oldu ki, bir müddət əvvəl mənə maraqlı gəldi bitkoin, və nəinki istifadə etdi, həm də bir inkişaf etdirici (əlbəttə ki, mən) nöqteyi-nəzərindən bitcoin şəbəkəsi (aka p2p) ilə müstəqil işləməyi öyrənmək üçün bir neçə mikro xidmətə başladım. dev, belə ki, keçdi). Amma mən inkişafdan danışmıram, tətbiqlər üçün təhlükəsiz və səmərəli mühitdən danışıram.

Maliyyə Texnologiyası (Fintech) informasiya təhlükəsizliyinin yanına keçin (InfoSec) və ikincisi olmayan birinci işləyə bilər, lakin uzun müddət deyil. Buna görə təcrübəmi və istifadə etdiyim alətlər dəstini bölüşmək istəyirəm FintechInfoSec, və eyni zamanda, daha geniş və ya tamamilə fərqli bir məqsədlə də istifadə edilə bilər. Bu yazıda mən bitkoin haqqında deyil, maliyyə (və təkcə) xidmətlərin inkişafı və istismarı üçün infrastruktur modeli - bir sözlə, "B" hərfinin vacib olduğu xidmətlər haqqında danışacağam. Bu, həm bitcoin mübadiləsinə, həm də bitkoinə heç bir əlaqəsi olmayan kiçik bir şirkətin ən tipik korporativ xidmət zooparkına aiddir.

Qeyd etmək istəyirəm ki, mən prinsiplərin tərəfdarıyam "axmaq sadə saxlayın" и "az daha çox", buna görə də, həm məqalə, həm də orada təsvir olunanlar bu prinsiplərin olduğu xüsusiyyətlərə sahib olacaqdır.

Xəyali ssenari: Bitkoin dəyişdiricisinin nümunəsindən istifadə edərək hər şeyə baxaq. Rubl, dollar, avronun bitkoinlərə və əksinə mübadiləsinə başlamaq qərarına gəldik və artıq işləyən bir həllimiz var, lakin qiwi və webmoney kimi digər rəqəmsal pullar üçün, yəni. biz bütün hüquqi məsələləri bağladıq, rubl, dollar və avro və digər ödəniş sistemləri üçün ödəniş qapısı kimi çıxış edən hazır tətbiqimiz var. O, bizim bank hesablarımıza bağlıdır və son tətbiqlərimiz üçün bir növ API-yə malikdir. Həm də istifadəçilər üçün dəyişdirici rolunu oynayan bir veb proqramımız var, yaxşı, tipik qiwi və ya webmoney kabineti kimi - hesab yaradın, kart əlavə edin və s. Yerli ərazidə REST API vasitəsilə olsa da, şlüz tətbiqimizlə əlaqə saxlayır. Və beləliklə, biz bitkoinləri birləşdirməyə və eyni zamanda infrastrukturu təkmilləşdirməyə qərar verdik, çünki. Əvvəlcə masanın altındakı ofisdəki virtual qutularda hər şey tələsik qaldırıldı ... sayt istifadə olunmağa başladı və biz iş vaxtı və performans barədə narahat olmağa başladıq.

Beləliklə, əsas olandan başlayaq - server seçmək. Çünki nümunəmizdəki biznes kiçikdir və biz seçəcəyimiz hosting provayderinə (OVH) etibar edirik büdcə variantı sistemi orijinal .iso görüntüsündən quraşdıra bilməyəcəksiniz, lakin fərq etməz, İT təhlükəsizlik şöbəsi quraşdırılmış şəkli mütləq təhlil edəcəkdir. Və biz böyüdükdə, ümumiyyətlə, məhdud fiziki girişlə şkafımızı kilid və açar altında icarəyə veririk və bəlkə də öz DC-mizi quracağıq. Hər halda, yadda saxlamağa dəyər ki, avadanlıq icarəyə götürərkən və hazır şəkilləri quraşdırarkən, sisteminizdə "hosterdən troyan" asma şansınız var, əksər hallarda bu, sizə casusluq etmək üçün nəzərdə tutulmur. , lakin daha rahat idarəetmə alətləri server təklif etmək.

Server quraşdırılması

Burada hər şey sadədir. Ehtiyacımıza uyğun ütü seçirik. Sonra FreeBSD şəklini seçin. Yaxşı, ya da biz (başqa hoster və öz aparatımız vəziyyətində) IPMI vasitəsilə və ya monitorla qoşuluruq və .iso FreeBSD şəklini yükləməyə daxil edirik. Mən istifadə etdiyim orkestr quruluşu üçün Yoxdur и mfsbsd. Kimsufi ilə bağlı vəziyyətimizdə tək şey seçdik xüsusi quraşdırma Güzgüdəki iki diskin yalnız açılış və / ev bölmələrini "açması" üçün disk sahəsinin qalan hissəsi şifrələnəcək, lakin daha sonra bu barədə daha çox məlumat veriləcəkdir.

Bitcoin qəfəsdə?

Sistem standart şəkildə quraşdırılıb, bunun üzərində dayanmayacağam, yalnız qeyd edəcəm ki, işə başlamazdan əvvəl aşağıdakılara diqqət yetirməlisiniz. hardening təklif edən variantlar bsdinstaller quraşdırmanın sonunda (sistemi özünüz quraşdırırsınızsa):

Bitcoin qəfəsdə?

Yoxdur yaxşı material Bu mövzuda, burada qısaca təkrarlayacağam.

Artıq quraşdırılmış sistemdə yuxarıdakı parametrləri aktivləşdirmək də mümkündür. Bunun üçün bootloader faylını redaktə etməli və kernel seçimlərini aktivləşdirməlisiniz. *ee BSD redaktorudur

# 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

Sistemin ən son versiyasını quraşdırdığınızdan əmin olmağa dəyər və bütün yeniləmələri və təkmilləşdirmələri yerinə yetirin. Bizim vəziyyətimizdə, məsələn, ən son versiyaya yeniləmə tələb olunur, çünki. quraşdırmadan əvvəl şəkillər altı ay və ya bir il geridə qalır. Yaxşı, orada SSH portunu standartdan fərqli birinə dəyişdiririk, açarlarla autentifikasiya əlavə edirik və parolla söndürürük.

Sonra qurduq aide, sistem konfiqurasiya fayllarının vəziyyətinin monitorinqi. Daha ətraflı oxuya bilərsiniz burada.

pkg install aide

və crontabımızı redaktə edin

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

Daxildir sistem auditi

sysrc auditd_enable=YES

# service auditd start

Bu işi necə idarə etmək mükəmməl şəkildə təsvir edilmişdir liderlik.

İndi yenidən başladın və serverdəki proqram təminatına davam edirik. Hər bir server konteynerlər və ya tam virtual maşınlar üçün hipervizordur. Buna görə də, tam virtuallaşdırmadan istifadə etməyi planlaşdırırıqsa, prosessorun VT-x və EPT-ni dəstəkləməsi vacibdir.

Konteynerlərin və virtual maşınların idarə edilməsi kimi istifadə edirəm cbsd etibarən olevole, bu gözəl yardım üçün ona daha çox cansağlığı və xeyir-dua arzulayıram!

Konteynerlər? Yenə Docker, yoxsa nə?

Amma yox. FreeBSD həbsxanaları konteynerləşdirmə üçün əla vasitədir, lakin qeyd olunan cbsd adı hüceyrələr olan bu konteynerləri təşkil etmək.

Qəfəs müxtəlif məqsədlər üçün infrastrukturun qurulması üçün son dərəcə təsirli bir həlldir, nəticədə fərdi xidmətlərin və ya proseslərin tam təcrid edilməsi tələb olunur. O, mahiyyətcə host sisteminin klonudur, lakin tam hardware virtualizasiyasını tələb etmir. Və bunun sayəsində resurslar "qonaq OS" üçün deyil, yalnız yerinə yetirilən işə sərf olunur. Hüceyrələrdən daxili ehtiyaclar üçün istifadə edildikdə, bu, resursun optimal istifadəsi üçün çox əlverişli bir həlldir - bir dəmir serverdəki hüceyrələr dəstəsi, lazım gələrsə, hər biri fərdi olaraq bütün server resursundan istifadə edə bilər. Nəzərə alsaq ki, adətən müxtəlif alt xidmətlərin əlavə ehtiyacı var. serverlər arasında hüceyrələri düzgün planlaşdırıb balanssızlaşdırsanız, bir serverdən maksimum performans əldə edə bilərsiniz. Lazım gələrsə, hüceyrələr istifadə olunan resurs üçün də məhdudiyyətlər qoya bilər.

Bitcoin qəfəsdə?

Tam virtuallaşdırma haqqında nə demək olar?

Bildiyimiz kimi cbsd işini dəstəkləyir bhyve və XEN hipervizorları. İkincisini heç istifadə etməmişəm, amma birincisi nisbətən gəncdir FreeBSD-dən hipervizor. İstifadə nümunəsinə baxacağıq bhyve aşağıdakı nümunədə.

Host mühitinin quraşdırılması və konfiqurasiyası

FS-dən istifadə edirik ZFS. Bu, server sahəsini idarə etmək üçün çox güclü bir vasitədir. ZFS sayəsində siz birbaşa disklərdən müxtəlif konfiqurasiyalı massivlər yarada, "isti" məkanı dinamik şəkildə genişləndirə, ölü diskləri dəyişdirə, anlıq görüntüləri idarə edə və bir sıra məqalələrdə təsvir edilə bilən daha çox şey edə bilərsiniz. Gəlin serverimizə və onun disklərinə qayıdaq. Disklərdə quraşdırmanın əvvəlində şifrələnmiş bölmələr üçün boş yer buraxdıq. Niyə belədir? Bu, sistemin avtomatik olaraq yüksəlməsini və SSH vasitəsilə dinləməsini təmin etmək üçündür.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

qalan boş yerə bir disk bölməsi əlavə edin

geli init /dev/ada0p4

şifrələmə parolumuzla idarə edirik

geli attach /dev/ada0p4

yenidən parolu daxil edirik və bizdə /dev/ada0p4.eli cihazımız var - bu bizim şifrələnmiş məkanımızdır. Sonra eyni şeyi /dev/ada1 və massivdəki qalan disklər üçün təkrarlayırıq. Və yenisini yaradırıq ZFS hovuzu.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Yaxşı, bizim minimum döyüş dəstimiz hazırdır. Üçündən birinin uğursuz olması halında disklərin güzgü massivi.

Biz yeni "hovuzda" verilənlər bazası yaradırıq

zfs create vms/jails

pkg install cbsd - komandanı işə saldı və hüceyrələrimizə rəhbərlik təyin etdi.

Sonra cbsd quraşdırılıbsa, onu işə salmaq lazımdır:

# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv

yaxşı, biz bir çox suallara cavab veririk, əsasən standart cavablarla.

*Şifrələmədən istifadə edirsinizsə, demonun olması vacibdir cbsdd diskləri əl ilə və ya avtomatik olaraq deşifrə edənə qədər avtomatik başlamadı (bizim nümunəmizdə bunu zabbix edir)

**Həmçinin mən NAT-dan istifadə etmirəm cbsd, lakin mən onu özüm konfiqurasiya edirəm 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 siyasətlərinin qurulması da ayrıca mövzudur, ona görə də mən BÜTÜNÜNÜ BLOK SİYASİSİNİ qurmaq və ağ siyahıları qurmaqla məşğul olmayacağam, bunu oxumaqla edilə bilər. rəsmi sənədlər və ya Google-da mövcud olan çoxlu sayda məqalələrdən hər hansı biri.

Yaxşı... bizdə cbsd quraşdırılıb, ilk işçi qüvvəmizi, qəfəsli bitcoin demonunu qurmaq vaxtıdır!

cbsd jconstruct-tui

Bitcoin qəfəsdə?

Burada hüceyrə yaratma dialoqunu görürük. Bütün dəyərlər təyin edildikdən sonra biz yaradırıq!

İlk xananı yaratarkən, hüceyrələr üçün əsas olaraq nədən istifadə edəcəyinizi seçməlisiniz. Komanda ilə FreeBSD deposundan paylama seçirəm repo. Bu seçim yalnız müəyyən bir versiyanın ilk qəfəsini yaratdıqda edilir (siz host versiyasından daha köhnə olan istənilən versiyanın qəfəslərini yerləşdirə bilərsiniz).

Hər şey quraşdırıldıqdan sonra qəfəsi işə salırıq!

# cbsd jstart bitcoind

Amma qəfəsdə proqram təminatı quraşdırmalıyıq.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind hüceyrə konsoluna daxil olmaq üçün

və artıq qəfəsin içərisində proqram təminatını onun asılılıqları ilə quraşdırırıq (ana sistemimiz təmiz qalır)

bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils

bitcoind:/@[15:30] # sysrc bitcoind_enable=YES

bitcoind:/@[15:30] # service bitcoind start

Qəfəsdə Bitcoin var, lakin bizə anonimlik lazımdır, çünki biz TOR şəbəkəsi vasitəsilə bəzi qəfəslərə qoşulmaq istəyirik. Ümumiyyətlə, şübhəli proqram təminatı olan xanaların əksəriyyətini yalnız proksi vasitəsilə çevirməyi planlaşdırırıq. sayəsində pf yerli şəbəkədə müəyyən IP ünvanları üçün NAT-ı söndürə və yalnız TOR nodeumuz üçün NAT-a icazə verə bilərsiniz. Belə ki, zərərli proqram hüceyrəyə daxil olsa belə, çox güman ki, xarici dünya ilə əlaqə saxlamayacaq, əgər varsa, serverimizin İP-ni aşkar etməyəcək. buna görə də biz ".onion" xidməti kimi və ayrı-ayrı hüceyrələrə İnternetə daxil olmaq üçün proksi kimi xidmətləri "yönləndirmək" üçün başqa bir hüceyrə yaradırıq.

# 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

Yerli ünvana qulaq asmağa təyin etdik (bütün hüceyrələr üçün mövcuddur)

SOCKSPort 192.168.0.2:9050

Tam xoşbəxtlik üçün başqa nə çatışmır. Bəli, internetimiz üçün bir xidmətə ehtiyacımız var, bəlkə də birdən çox. Gəlin tərs-proksi kimi çıxış edəcək və Let's Encrypt sertifikatlarının yenilənməsi ilə məşğul olacaq nginx-ə başlayaq.

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

nginx-rev:/@[15:47] # pkg install nginx py36-certbot

Və burada biz qəfəsə 150 ​​MB asılılıq qoyuruq. Ev sahibi isə hələ də təmizdir.

Nginx-in qurulmasına daha sonra qayıdaq, nodejs və rust-da ödəniş şlüzümüz və nədənsə Apache və PHP-də olan veb proqram üçün daha iki xana qaldırmalıyıq və sonuncunun da MySQL verilənlər bazasına ehtiyacı var.

# 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

... və təcrid olunmuş başqa 380 MB paket

sonra git ilə tətbiqimizi yükləyib işə salırıq.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql

450 MB paketlər. qəfəsdə.

burada biz tərtibatçıya SSH vasitəsilə birbaşa qəfəsə giriş imkanı veririk, onlar orada hər şeyi özləri edəcəklər:

webapp:/@[16:02] # ee /etc/ssh/sshd_config

Port 2267 - hüceyrənin SSH portunu istənilən ixtiyariyə dəyişdirin

webapp:/@[16:02] # sysrc sshd_enable=YES

webapp:/@[16:02] # service sshd start

Yaxşı, xidmət işləyir, qayda əlavə etmək qalır pf firewall

Gəlin görək hüceyrələr üçün hansı IP-lərimiz var və ümumiyyətlə “yerli”miz necə görünür

# 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

və bir qayda əlavə edin

# 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

yaxşı, biz burada olduğumuz üçün əks-proksi ilə bağlı bir qayda da əlavə edəcəyik:

## 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

Yaxşı, indi bitcoins haqqında bir az.

Əlimizdə olan odur ki, xaricdən əlçatan olan veb proqramımız var və o, ödəniş şlüzümüzlə yerli olaraq əlaqə saxlayır. İndi bitcoin şəbəkəsinin özü - node ilə qarşılıqlı əlaqə üçün iş mühiti hazırlamalıyıq bitcoind bu, sadəcə olaraq blokçeynin yerli surətini aktual saxlayan bir demondur. Bu demon RPC və pul kisəsi funksionallığına malikdir, lakin tətbiqin inkişafı üçün daha rahat "sarğılar" var. Başlamaq üçün biz qoymaq qərarına gəldik electrum CLI pul kisəsidir. Bu pul kisəsi biz onu bitkoinlərimiz üçün "soyuq anbar" kimi istifadə edəcəyik - ümumiyyətlə, istifadəçilər üçün əlçatan olan sistemdən "kənarda" və ümumiyyətlə hamıdan uzaq saxlanmalı olan bitkoinlər. O, həmçinin GUI-yə malikdir, buna görə də veb saytımızda eyni pul kisəsindən istifadə edəcəyik.
noutbuklar. Hələlik biz ictimai serverlərlə electrumdan istifadə edəcəyik və daha sonra başqa bir hüceyrədə qaldıracağıq ElectrumXheç kimdən asılı olmamaq üçün.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

electrum:/@[8:45] # pkg install py36-electrum

qəfəsimizdə daha 700 MB proqram təminatı

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"
}

İndi pul kisəsi yaratdıq.

wallet@electrum:/ % electrum-3.6 listaddresses

[
    "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
    "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
    "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
    ...
    "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
    "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]

wallet@electrum:/ % electrum-3.6 help

Bizim üçün on-chain Bundan sonra pul kisəsinə yalnız məhdud sayda insan qoşula biləcək. Bu hüceyrəyə xaricdən girişi açmamaq üçün SSH əlaqələri TOR (VPN-in belə mərkəzləşdirilməmiş versiyası) vasitəsilə baş verəcəkdir. SSH-ni qəfəsdə işə salırıq, lakin hostda bizim pf.conf-ə toxunmayın.

electrum:/@[9:00] # sysrc sshd_enable=YES

electrum:/@[9:00] # service sshd start

İndi cüzdanla qəfəsdə internet bağlantısını bağlayaq. Gəlin ona NATlaşdırılmamış başqa bir alt şəbəkə məkanından bir IP ünvanı verək. Əvvəlcə dəyişək /etc/pf.conf ev sahibi üzərində

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" dəyişdirmək JAIL_IP_POOL="192.168.0.0/25", beləliklə, bütün 192.168.0.126-255 ünvanlarının İnternetə birbaşa çıxışı olmayacaq. Bir növ proqram təminatı "hava boşluğu" şəbəkəsi. Və NAT qaydası olduğu kimi qalır

nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

Qaydaların həddindən artıq yüklənməsi

# pfctl -f /etc/pf.conf

İndi qəfəsimizi götürürük

# cbsd jconfig jname=electrum

Bitcoin qəfəsdə?

Bitcoin qəfəsdə?

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, amma indi sistemin özü bizim üçün işləməyini dayandıracaq. Bununla belə, sistem proksisini təyin edə bilərik. Ancaq bir şey var, TOR-da bu SOCKS5 proksisidir və rahatlıq üçün HTTP proxy-miz də olacaq.

# 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

Yaxşı, indi sistemimizdə iki proxy serverimiz var və hər ikisi TOR vasitəsilə çıxış edir: socks5://192.168.0.2:9050 və http://192.168.0.6:8123

İndi cüzdan mühitimizi qura bilərik

# 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

Yaxşı, indi qabıq proxy altından işləyəcək. Paketləri quraşdırmaq istəyiriksə, əlavə etməliyik /usr/local/etc/pkg.conf hüceyrənin kökünün altından

pkg_env: {
               http_proxy: "http://my_proxy_ip:8123",
           }

İndi TOR gizli xidmətini cüzdan qəfəsindəki SSH xidmətimizin ünvanı kimi əlavə etməyin vaxtı gəldi.

# 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

Budur əlaqə ünvanımız. Yerli maşından yoxlayaq. Ancaq əvvəlcə SSH açarımızı əlavə etməliyik:

wallet@electrum:/ % mkdir ~/.ssh

wallet@electrum:/ % ee ~/.ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

Yaxşı, Linux müştəri maşınından

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

Qoşulur (Bunun işləməsi üçün sizə 9050-də dinləyən yerli TOR demonu lazımdır)

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

Uğurlar!

Ani və mikro ödənişlərlə işləmək üçün bizə də node lazımdır Yıldırım Şəbəkəsi, əslində, bu, bitcoin ilə əsas iş alətimiz olacaq. *c-ildırımdemon kimi istifadə edəcəyimiz Sparko plagin, tam hüquqlu HTTP (REST) ​​interfeysidir və həm zəncirdənkənar əməliyyatlar, həm də zəncirli əməliyyatlarla işləməyə imkan verir. c-lightning fəaliyyət göstərmək lazımdır bitcoind amma bəli.

*Lightning Network protokolunun müxtəlif PL-lərində fərqli tətbiqlər var. Test etdiyimizlərdən c-ildırım (C-də yazılmışdır) ən stabil və resurs baxımından səmərəli kimi görünürdü.

# 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

Sizə lazım olan hər şeyi tərtib edib quraşdırarkən gəlin üçün RPC istifadəçisi yaradaq 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

Kommunal proqramı yoxlasam, hüceyrələr arasında xaotik keçidim o qədər də xaotik deyil tmux, bu, bir seans ərzində terminalların çoxlu alt sessiyalarını yaratmağa imkan verir. Analoq: screen

Bitcoin qəfəsdə?

Yaxşı, biz qovşağımızın əsl İP-ni açıqlamaq istəmirik və bütün maliyyə əməliyyatlarını TOR vasitəsilə həyata keçirmək istəyirik. Buna görə də daha bir .soğan lazımdır.

# 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

indi c-lightning üçün konfiqurasiya yaradaq

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 ~

siz həmçinin bitcoin-cli ilə əlaqə quran yardım proqramı üçün konfiqurasiya faylı yaratmalısınız bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

yoxlamaq

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

işə salınması lightningd

lightning@lightning:~ % lightningd --daemon

Özü lightningd kommunal nəzarət edilə bilər lightning-cli, məsələn:

lightning-cli newaddr yeni daxil olan ödəniş üçün ünvan əldə edin

{
   "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
   "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all pul kisəsinin bütün pullarını ünvana göndərin (bütün zəncirdə olan ünvanlar)

Həm də zəncirdən kənar əməliyyatlar üçün əmrlər lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay və s

Tətbiqlə əlaqə saxlamaq üçün bizdə REST Api var

curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'

Yekunlaşdırmaq

# 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 qəfəsdə?

Bizdə konteynerlər dəsti var, hər birinin yerli şəbəkədən və yerli şəbəkəyə öz çıxış səviyyəsi var.

# 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

Gördüyünüz kimi, bitcoind bütün 190 GB yer tutur. Bəs testlər üçün başqa bir node lazımdırsa? Burada ZFS kömək edir. Köməyi ilə cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com snapshot yarada və bu şəkilə yeni xana bağlaya bilərsiniz. Yeni hüceyrənin tamamilə öz sahəsi olacaq, lakin FS-də yalnız cari vəziyyətlə orijinal arasındakı fərq nəzərə alınacaq (ən azı 190 GB qənaət edin)

Hər bir hüceyrə öz ayrıca ZFS verilənlər bazasıdır və bu, son dərəcə rahatdır. ZFS də icazə verir SSH üzərindən snapshotlar göndərmək kimi hər cür digər gözəl işlərlə məşğul olun. Biz bunu təsvir etməyəcəyik, buna görə də artıq çox şey var.

Ev sahibinin uzaqdan monitorinqinə ehtiyac olduğunu da qeyd etmək lazımdır, bu məqsədlər üçün bizdə var Zabbix.

B - təhlükəsizlik

Təhlükəsizliyə gəlincə, infrastruktur kontekstində əsas prinsiplərdən başlayaq:

Gizlilik - UNIX kimi sistemlərin standart alətləri bu prinsipi tətbiq edir. Sistemin hər bir məntiqi olaraq ayrı-ayrı elementinə - hüceyrəyə girişi məntiqi olaraq ayırırıq. Giriş istifadəçilərin şəxsi açarlarından istifadə etməklə standart istifadəçi autentifikasiyası vasitəsilə təmin edilir. Hüceyrələr arasında və hüceyrələr arasında bütün əlaqə şifrələnir. Disk şifrələməsi sayəsində diskin dəyişdirilməsi və ya başqa serverə miqrasiya zamanı məlumatların təhlükəsizliyindən narahat ola bilmərik. Yeganə kritik giriş host sisteminə girişdir, çünki bu cür giriş ümumiyyətlə konteynerlərin daxilindəki məlumatlara çıxışı təmin edir.

Dürüstlük — Bu prinsipin həyata keçirilməsi bir neçə müxtəlif səviyyələrdə baş verir. Birincisi, qeyd etmək lazımdır ki, server avadanlığı, ECC yaddaşı vəziyyətində, ZFS qutudan kənar məlumat bitləri səviyyəsində məlumatların bütövlüyünə diqqət yetirir. Ani snapshotlar sizə istənilən vaxt ehtiyat nüsxəsini çıxarmağa imkan verir. Rahat mobil ixrac/idxal alətləri hüceyrənin təkrarlanmasını asanlaşdırır.

Mövcudluq - Bu isteğe bağlıdır. Şöhrətinizin dərəcəsindən və nifrət edənlərin olmasından asılıdır. Nümunəmizdə pul kisəsinin yalnız TOR şəbəkəsindən əldə edilməsini təmin etdik. Lazım gələrsə, firewalldakı hər şeyi blok edə və serverə yalnız tunellər vasitəsilə daxil ola bilərsiniz (TOR və ya VPN başqa məsələdir). Beləliklə, server mümkün qədər xarici dünyadan kəsiləcək və onun mövcudluğuna yalnız özümüz təsir edə bilərik.

İmtina etmənin mümkünsüzlüyü - Və bu, gələcək fəaliyyətdən və istifadəçi hüquqları, giriş və s. üçün düzgün siyasətlərə uyğunluqdan asılıdır. Lakin düzgün yanaşma ilə istifadəçinin bütün hərəkətləri yoxlanılır və kriptoqrafik həllər sayəsində müəyyən hərəkətlərin kimin və nə vaxt edildiyini unikal şəkildə müəyyən etmək mümkündür.

Əlbəttə ki, təsvir edilən konfiqurasiya həmişə necə olması lazım olduğuna dair mütləq bir nümunə deyil, əksinə çox çevik miqyaslama və fərdiləşdirmə seçimlərini saxlayaraq necə ola biləcəyinə dair nümunələrdən biridir.

Bəs tam virtuallaşdırma haqqında nə demək olar?

Cbsd istifadə edərək tam virtuallaşdırma haqqında, edə bilərsiniz bura oxuyun. Bunu sadəcə iş üçün əlavə edəcəyəm bhyve bəzi kernel seçimləri aktivləşdirilməlidir.

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

Beləliklə, birdən bir doker işə başlamaq zərurəti yaranarsa, o zaman bir az debian qaldırıb davam edirik!

Bitcoin qəfəsdə?

Hamısı budur

Bəlkə də bütün bunları bölüşmək istədim. Məqaləni bəyəndinizsə, o zaman mənə bitkoinlər ata bilərsiniz - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Hüceyrələri fəaliyyətdə sınamaq və bəzi bitkoinlərə sahib olmaq istəyirsinizsə, mənim səhifəmə gedə bilərsiniz ev heyvanı layihəsi.

Mənbə: www.habr.com