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 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 FintechVə InfoSec, 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
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
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):
Yoxdur
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ə
Sonra qurduq aide
, sistem konfiqurasiya fayllarının vəziyyətinin monitorinqi. Daha ətraflı oxuya bilərsiniz
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
sysrc auditd_enable=YES
# service auditd start
Bu işi necə idarə etmək mükəmməl şəkildə təsvir edilmişdir
İ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
Konteynerlər? Yenə Docker, yoxsa nə?
Amma yox. 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.
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 bhyve
aşağıdakı nümunədə.
Host mühitinin quraşdırılması və konfiqurasiyası
FS-dən istifadə edirik
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
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.
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
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.
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
# 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
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ə
İ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 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
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
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.
Ev sahibinin uzaqdan monitorinqinə ehtiyac olduğunu da qeyd etmək lazımdır, bu məqsədlər üçün bizdə var
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 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!
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 -
Mənbə: www.habr.com