Kebetulan secara profesion saya adalah pentadbir sistem komputer dan rangkaian (pendek kata: pentadbir sistem), dan saya berpeluang untuk memberitahu prof selama lebih sedikit daripada 10 tahun. aktiviti pelbagai jenis sistem, termasuk yang memerlukan langkah keselamatan [melampau]. Ia juga berlaku bahawa beberapa ketika dahulu saya mendapati ia menarik dev
, jadi, saya sedang lalu lalang). Tetapi saya tidak bercakap tentang pembangunan, saya bercakap tentang persekitaran yang selamat dan cekap untuk aplikasi.
teknologi kewangan (FinTech) pergi di sebelah keselamatan maklumat (infosec) dan yang pertama boleh berfungsi tanpa yang kedua, tetapi tidak lama. Itulah sebabnya saya ingin berkongsi pengalaman saya dan set alat yang saya gunakan, yang merangkumi kedua-duanya FinTechDan infosec, dan pada masa yang sama, dan juga boleh digunakan untuk tujuan yang lebih luas atau berbeza sama sekali. Dalam artikel ini, saya tidak akan memberitahu anda banyak tentang Bitcoin, tetapi mengenai model infrastruktur untuk pembangunan dan operasi perkhidmatan kewangan (dan bukan sahaja) - secara ringkasnya, perkhidmatan yang "B" penting. Ini terpakai kepada kedua-dua pertukaran Bitcoin dan perkhidmatan zoo korporat yang paling tipikal bagi sebuah syarikat kecil yang tidak berkaitan dengan Bitcoin dalam apa jua cara.
Saya ingin ambil perhatian bahawa saya adalah penyokong prinsip "permudahkan perkara bodoh" ΠΈ "sedikit tetapi lebih dari cukup", oleh itu, kedua-dua artikel dan apa yang diterangkan di dalamnya akan mempunyai ciri-ciri yang berkaitan dengan prinsip ini.
Senario khayalan: Mari kita lihat semuanya menggunakan contoh penukar bitcoin. Kami memutuskan untuk melancarkan pertukaran rubel, dolar, euro untuk bitcoin dan kembali, dan kami sudah mempunyai penyelesaian yang berkesan, tetapi untuk wang digital lain seperti qiwi dan webmoney, i.e. Kami telah menutup semua isu undang-undang, kami mempunyai aplikasi siap sedia yang berfungsi sebagai pintu masuk pembayaran untuk rubel, dolar dan euro dan sistem pembayaran lain. Ia disambungkan ke akaun bank kami dan mempunyai beberapa jenis API untuk aplikasi akhir kami. Kami juga mempunyai aplikasi web yang bertindak sebagai penukar untuk pengguna, seperti akaun qiwi atau webmoney biasa - buat akaun, tambah kad dan sebagainya. Ia berkomunikasi dengan aplikasi gerbang kami, walaupun melalui API REST di kawasan setempat. Oleh itu, kami memutuskan untuk menyambung bitcoin dan pada masa yang sama menaik taraf infrastruktur, kerana... Pada mulanya, segala-galanya diletakkan dengan tergesa-gesa pada kotak maya di pejabat di bawah meja... tapak mula digunakan, dan kami mula bimbang tentang masa operasi dan prestasi.
Jadi, mari kita mulakan dengan perkara utama - memilih pelayan. Kerana perniagaan dalam contoh kami adalah kecil dan kami mempercayai hoster (OVH) yang akan kami pilih
Pemasangan pelayan
Semuanya mudah di sini. Kami memilih perkakasan yang sesuai dengan keperluan kami. Kemudian pilih imej FreeBSD. Baik, atau kami menyambung (dalam kes hoster lain dan perkakasan kami sendiri) melalui IPMI atau dengan monitor dan suapkan imej .iso FreeBSD ke dalam muat turun. Untuk persediaan orkestra saya gunakan
Pemasangan sistem berlaku dengan cara yang standard, saya tidak akan memikirkan perkara ini, saya hanya akan ambil perhatian bahawa sebelum memulakan operasi ia patut diberi perhatian pengerasan pilihan yang ditawarkannya bsdinstaller
pada akhir pemasangan (jika anda memasang sistem sendiri):
Terdapat
Ia juga mungkin untuk mendayakan parameter yang disebutkan di atas pada sistem yang telah dipasang. Untuk melakukan ini, anda perlu mengedit fail pemuat but dan dayakan parameter kernel. *ee ialah editor seperti ini di 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
Anda juga harus memastikan bahawa anda telah memasang versi terbaharu sistem, dan
Kemudian kami setelkan aide
, memantau status fail konfigurasi sistem. Anda boleh membaca dengan lebih terperinci
pkg install aide
dan edit crontab kami
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
Kami merangkumi
sysrc auditd_enable=YES
# service auditd start
Cara mentadbir perkara ini diterangkan dengan sempurna dalam
Sekarang kita but semula dan teruskan ke perisian pada pelayan. Setiap pelayan adalah hipervisor untuk bekas atau mesin maya penuh. Oleh itu, adalah penting bahawa pemproses menyokong VT-x dan EPT jika kami merancang untuk menggunakan virtualisasi penuh.
Untuk menguruskan bekas dan mesin maya yang saya gunakan
Bekas? Docker lagi atau apa?
Tetapi tidak. cbsd
untuk mengatur bekas ini, yang dipanggil sel.
Sangkar adalah penyelesaian yang sangat berkesan untuk membina infrastruktur untuk pelbagai tujuan, di mana pengasingan lengkap perkhidmatan atau proses individu akhirnya diperlukan. Pada asasnya, ia adalah klon sistem hos, tetapi ia tidak memerlukan virtualisasi perkakasan penuh. Dan terima kasih kepada ini, sumber tidak dibelanjakan untuk "OS tetamu", tetapi hanya untuk kerja yang dilakukan. Apabila sel digunakan untuk keperluan dalaman, ini adalah penyelesaian yang sangat mudah untuk penggunaan sumber yang optimum - sekumpulan sel pada satu pelayan perkakasan setiap satu boleh menggunakan keseluruhan sumber pelayan secara individu jika perlu. Memandangkan subperkhidmatan yang berbeza biasanya memerlukan tambahan. sumber pada masa yang berbeza, anda boleh mengekstrak prestasi maksimum daripada satu pelayan jika anda merancang dan mengimbangi sel antara pelayan dengan betul. Jika perlu, sel juga boleh diberi sekatan ke atas sumber yang digunakan.
Bagaimana dengan virtualisasi penuh?
Sejauh yang saya tahu cbsd
menyokong kerja bhyve
dan hipervisor XEN. Saya tidak pernah menggunakan yang kedua, tetapi yang pertama agak baru bhyve
dalam contoh di bawah.
Memasang dan Mengkonfigurasi Persekitaran Hos
Kami menggunakan FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
tambah partition cakera pada ruang yang tinggal
geli init /dev/ada0p4
masukkan kata laluan penyulitan kami
geli attach /dev/ada0p4
Kami memasukkan kata laluan sekali lagi dan kami mempunyai peranti /dev/ada0p4.eli - ini adalah ruang kami yang disulitkan. Kemudian kami mengulangi perkara yang sama untuk /dev/ada1 dan seluruh cakera dalam tatasusunan. Dan kami mencipta yang baru
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- Nah, kami mempunyai kit tempur minimum sedia. Susunan cakera bercermin sekiranya salah satu daripada tiga gagal.
Mencipta set data pada "kolam" baharu
zfs create vms/jails
pkg install cbsd
β kami melancarkan pasukan dan menyediakan pengurusan untuk sel kami.
Selepas itu cbsd
dipasang, ia perlu dimulakan:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Nah, kami menjawab banyak soalan, kebanyakannya dengan jawapan lalai.
*Jika anda menggunakan penyulitan, adalah penting bahawa daemon cbsdd
tidak bermula secara automatik sehingga anda menyahsulit cakera secara manual atau automatik (dalam contoh kami ini dilakukan oleh zabbix)
**Saya juga tidak menggunakan NAT dari cbsd
, dan saya mengkonfigurasinya sendiri 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
Menyediakan dasar tembok api juga merupakan topik yang berasingan, jadi saya tidak akan pergi lebih jauh ke dalam menyediakan dasar BLOK SEMUA dan menyediakan senarai putih, anda boleh melakukannya dengan membaca
Nah... kami telah memasang cbsd, sudah tiba masanya untuk mencipta kuda kerja pertama kami - syaitan Bitcoin yang dikurung!
cbsd jconstruct-tui
Di sini kita melihat dialog penciptaan sel. Selepas semua nilai telah ditetapkan, mari buat!
Apabila mencipta sel pertama anda, anda harus memilih apa yang hendak digunakan sebagai asas untuk sel tersebut. Saya memilih pengedaran daripada repositori FreeBSD dengan arahan repo
. Pilihan ini dibuat hanya apabila mencipta sel pertama versi tertentu (anda boleh mengehoskan sel mana-mana versi yang lebih lama daripada versi hos).
Selepas semuanya dipasang, kami melancarkan sangkar!
# cbsd jstart bitcoind
Tetapi kita perlu memasang perisian dalam sangkar.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
untuk masuk ke konsol sel
dan sudah berada di dalam sel kami memasang perisian dengan kebergantungannya (sistem hos kami kekal bersih)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Terdapat Bitcoin dalam sangkar, tetapi kami memerlukan tanpa nama kerana kami ingin menyambung ke beberapa sangkar melalui rangkaian TOP. Secara umum, kami merancang untuk menjalankan kebanyakan sel dengan perisian yang mencurigakan hanya melalui proksi. Terima kasih kepada pf
Anda boleh melumpuhkan NAT untuk julat alamat IP tertentu pada rangkaian tempatan dan membenarkan NAT hanya untuk nod TOR kami. Oleh itu, walaupun perisian hasad masuk ke dalam sel, kemungkinan besar ia tidak akan berkomunikasi dengan dunia luar, dan jika ia berlaku, ia tidak akan mendedahkan IP pelayan kami. Oleh itu, kami mencipta sel lain untuk "memajukan" perkhidmatan sebagai perkhidmatan ".onion" dan sebagai proksi untuk mengakses Internet ke sel individu.
# 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
Tetapkan untuk mendengar di alamat setempat (tersedia untuk semua sel)
SOCKSPort 192.168.0.2:9050
Apa lagi yang kita perlukan untuk kebahagiaan yang lengkap? Ya, kami memerlukan perkhidmatan untuk web kami, mungkin lebih daripada satu. Mari lancarkan nginx, yang akan bertindak sebagai proksi terbalik dan mengurus memperbaharui sijil Let's Encrypt
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Oleh itu, kami meletakkan 150 MB tanggungan dalam sangkar. Dan tuan rumah masih bersih.
Mari kita kembali untuk menyediakan nginx kemudian, kita perlu menaikkan dua lagi sel untuk gerbang pembayaran kami pada nodejs dan karat dan aplikasi web, yang atas sebab tertentu berada dalam Apache dan PHP, dan yang kedua juga memerlukan pangkalan data 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
...dan 380 MB lagi pakej diasingkan
Seterusnya, kami memuat turun aplikasi kami dengan git dan melancarkannya.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
Pakej 450 MB. dalam sangkar.
di sini kami memberikan akses pembangun melalui SSH terus ke sel, mereka akan melakukan segala-galanya di sana sendiri:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
β tukar port SSH sel kepada mana-mana port sewenang-wenangnya
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Nah, perkhidmatan sedang berjalan, yang tinggal hanyalah menambah peraturan pf
firewall
Mari lihat IP yang ada pada sel kita dan rupa "kawasan setempat" kita secara amnya.
# 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
dan tambah peraturan
# 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
Oleh kerana kita berada di sini, mari kita tambahkan juga peraturan untuk proksi terbalik:
## 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
Nah, sekarang sedikit tentang bitcoin
Apa yang kami ada ialah kami mempunyai aplikasi web yang terdedah secara luaran dan ia bercakap secara tempatan dengan gerbang pembayaran kami. Sekarang kita perlu menyediakan persekitaran kerja untuk berinteraksi dengan rangkaian Bitcoin itu sendiri - nod bitcoind
ia hanyalah daemon yang memastikan salinan tempatan blockchain dikemas kini. Daemon ini mempunyai fungsi RPC dan dompet, tetapi terdapat "pembungkus" yang lebih mudah untuk pembangunan aplikasi. Sebagai permulaan, kami memutuskan untuk meletakkan electrum
ialah dompet CLI.
komputer riba. Buat masa ini kami akan menggunakan Electrum dengan pelayan awam, dan kemudian kami akan menaikkannya dalam sel lain
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
700 MB lagi perisian dalam sangkar kami
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"
}
Kini kami telah mencipta dompet.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
Kepada kita di rantai Hanya bilangan orang yang terhad akan dapat menyambung ke dompet mulai sekarang. Untuk tidak membuka akses kepada sel ini dari luar, sambungan melalui SSH akan berlaku melalui TOP (versi VPN terdesentralisasi). Kami melancarkan SSH dalam sel, tetapi jangan sentuh pf.conf kami pada hos.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Sekarang mari kita matikan sel dengan akses Internet dompet. Mari kita berikan alamat IP daripada ruang subnet lain yang bukan NATed. Mula-mula jom tukar /etc/pf.conf
pada tuan rumah
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
jom tukar ke JAIL_IP_POOL="192.168.0.0/25"
, oleh itu semua alamat 192.168.0.126-255 tidak akan mempunyai akses terus ke Internet. Sejenis rangkaian "air-gap" perisian. Dan peraturan NAT kekal seperti sedia ada
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Melebihkan peraturan
# pfctl -f /etc/pf.conf
Sekarang mari kita ambil alih sel kita
# 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, tetapi sekarang sistem itu sendiri akan berhenti berfungsi untuk kita. Walau bagaimanapun, kami boleh menentukan proksi sistem. Tetapi ada satu perkara, pada TOR ia adalah proksi SOCKS5, dan untuk kemudahan kami juga mahukan proksi 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
Nah, kini terdapat dua pelayan proksi dalam sistem kami, dan kedua-duanya dikeluarkan melalui TOR: socks5://192.168.0.2:9050 dan
Kini kami boleh mengkonfigurasi persekitaran dompet kami
# 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
Nah, sekarang shell akan berfungsi dari bawah proksi. Jika kita ingin memasang pakej, maka kita harus menambah /usr/local/etc/pkg.conf
dari bawah akar sangkar
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}
Nah, kini tiba masanya untuk menambah perkhidmatan tersembunyi TOR sebagai alamat perkhidmatan SSH kami dalam sangkar dompet.
# 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
Ini adalah alamat sambungan kami. Mari semak dari mesin tempatan. Tetapi pertama-tama kita perlu menambah kunci SSH kami:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Nah, dari mesin klien 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
Jom sambung (Untuk ini berfungsi, anda memerlukan daemon TOR tempatan yang mendengar pada 9050)
user@local ~$ ssh remotebtc
The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts.
FreeBSD 12.1-RELEASE-p1 GENERIC
To save disk space in your home directory, compress files you rarely
use with "gzip filename".
-- Dru <[email protected]>
wallet@electrum:~ % logout
Berjaya!
Untuk bekerja dengan pembayaran segera dan mikro, kami juga memerlukan nod c-lightning
diperlukan untuk berfungsi bitcoind
tetapi ya.
*Terdapat pelbagai pelaksanaan protokol Rangkaian Lightning dalam bahasa yang berbeza. Daripada yang kami uji, c-lightning (ditulis dalam C) nampaknya paling stabil dan cekap sumber
# 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
Walaupun semua yang diperlukan disusun dan dipasang, mari buat pengguna RPC untuk 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
Pertukaran saya yang huru-hara antara sel ternyata tidak begitu huru-hara jika anda perhatikan utiliti itu tmux
, yang membolehkan anda membuat berbilang sub-sesi terminal dalam satu sesi. Analog: screen
Jadi, kami tidak mahu mendedahkan IP sebenar nod kami, dan kami mahu menjalankan semua transaksi kewangan melalui TOP. Oleh itu, satu lagi .bawang tidak diperlukan.
# 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
Sekarang mari kita buat konfigurasi untuk 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 ~
anda juga perlu mencipta fail konfigurasi untuk bitcoin-cli, utiliti yang berkomunikasi dengan bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
periksa
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
pelancaran lightningd
lightning@lightning:~ % lightningd --daemon
Dirinya lightningd
anda boleh mengawal utiliti lightning-cli
, sebagai contoh:
lightning-cli newaddr
dapatkan alamat untuk pembayaran masuk baharu
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
hantar semua wang dalam dompet ke alamat (semua alamat rantaian)
Juga arahan untuk operasi luar rantaian lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
dan lain-lain.
Nah, untuk komunikasi dengan aplikasi kami mempunyai REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Meringkaskannya
# 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
Kami mempunyai satu set bekas, masing-masing mempunyai tahap akses sendiri dari dan ke rangkaian tempatan.
# 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
Seperti yang anda lihat, bitcoind menggunakan semua 190 GB ruang. Bagaimana jika kita memerlukan satu lagi nod untuk ujian? Di sinilah ZFS berguna. Dengan bantuan cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
anda boleh membuat syot kilat dan melampirkan sel baharu pada syot kilat ini. Sel baharu akan mempunyai ruang sendiri, tetapi hanya perbezaan antara keadaan semasa dan asal akan diambil kira dalam sistem fail (kami akan menjimatkan sekurang-kurangnya 190 GB)
Setiap sel ialah set data ZFS tersendiri, dan ini sangat mudah.
Ia juga perlu diperhatikan keperluan untuk pemantauan jarak jauh terhadap hos, untuk tujuan ini yang kami ada
B - keselamatan
Mengenai keselamatan, mari kita mulakan daripada prinsip utama dalam konteks infrastruktur:
Kerahsiaan - Alat standard sistem seperti UNIX memastikan pelaksanaan prinsip ini. Kami secara logik memisahkan akses kepada setiap elemen sistem yang berasingan secara logik - sel. Akses disediakan melalui pengesahan pengguna standard menggunakan kunci peribadi pengguna. Semua komunikasi antara dan ke sel akhir berlaku dalam bentuk yang disulitkan. Terima kasih kepada penyulitan cakera, kami tidak perlu risau tentang keselamatan data apabila menggantikan cakera atau berhijrah ke pelayan lain. Satu-satunya akses kritikal ialah akses kepada sistem hos, kerana akses sedemikian secara amnya menyediakan akses kepada data di dalam bekas.
Integriti βPelaksanaan prinsip ini berlaku pada beberapa peringkat berbeza. Pertama sekali, adalah penting untuk ambil perhatian bahawa dalam kes perkakasan pelayan, memori ECC, ZFS sudah "di luar kotak" menjaga integriti data pada tahap bit maklumat. Syot kilat segera membolehkan anda membuat sandaran pada bila-bila masa dengan cepat. Alat eksport/import sel yang mudah menjadikan replikasi sel mudah.
Ketersediaan - Ini sudah menjadi pilihan. Bergantung pada tahap kemasyhuran anda dan hakikat bahawa anda mempunyai pembenci. Dalam contoh kami, kami memastikan bahawa dompet itu boleh diakses secara eksklusif daripada rangkaian TOP. Jika perlu, anda boleh menyekat segala-galanya pada tembok api dan membenarkan akses kepada pelayan secara eksklusif melalui terowong (TOR atau VPN adalah perkara lain). Oleh itu, pelayan akan terputus dari dunia luar sebanyak mungkin, dan hanya kita sendiri yang dapat mempengaruhi ketersediaannya.
Kemustahilan penolakan - Dan ini bergantung pada operasi selanjutnya dan pematuhan dengan dasar yang betul untuk hak pengguna, akses, dsb. Tetapi dengan pendekatan yang betul, semua tindakan pengguna diaudit, dan terima kasih kepada penyelesaian kriptografi adalah mungkin untuk mengenal pasti dengan jelas siapa yang melakukan tindakan tertentu dan bila.
Sudah tentu, konfigurasi yang diterangkan bukanlah contoh mutlak tentang bagaimana ia harus sentiasa berlaku, ia lebih merupakan satu contoh bagaimana ia boleh berlaku, sambil mengekalkan penskalaan dan keupayaan penyesuaian yang sangat fleksibel.
Bagaimana dengan virtualisasi penuh?
Mengenai virtualisasi penuh menggunakan cbsd anda boleh bhyve
Anda perlu mendayakan beberapa pilihan kernel.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
Jadi jika anda tiba-tiba perlu memulakan docker, kemudian pasang beberapa debian dan pergi!
Itu sahaja
Saya rasa itu sahaja yang saya ingin kongsikan. Jika anda menyukai artikel itu, maka anda boleh menghantar saya beberapa bitcoin -
Sumber: www.habr.com