Bitcoin dalam sangkar?

Kebetulan saya adalah administrator profesional sistem dan jaringan komputer (singkatnya: sysadmin), dan saya kebetulan memberi tahu prof. aktivitas berbagai sistem, termasuk yang memerlukan [karena] langkah-langkah keamanan di atas. Dan ternyata beberapa waktu yang lalu saya menemukan Bitcoin menarik untuk saya, dan tidak hanya menggunakannya, tetapi juga meluncurkan beberapa layanan mikro untuk belajar bagaimana bekerja secara mandiri dengan jaringan Bitcoin (bagaimanapun p2p) dari sudut pandang pengembangan (Aku, tentu saja, seorang dev , jadi, lewat). Tetapi saya tidak berbicara tentang pengembangan, saya berbicara tentang lingkungan yang aman dan efektif untuk aplikasi.


Teknologi keuangan ( fintech ) berjalan berdampingan dengan keamanan informasi ( infosec ) dan yang pertama dapat bekerja tanpa yang kedua, tetapi tidak lama. Itu sebabnya saya ingin berbagi pengalaman dan seperangkat alat yang saya gunakan, yang mencakup fintech dan infosec , dan pada saat yang sama, itu juga dapat digunakan untuk tujuan yang lebih luas atau sangat berbeda. Dalam artikel ini saya akan memberi tahu Anda tidak banyak tentang Bitcoin, tetapi tentang model infrastruktur untuk pengembangan dan pengoperasian layanan keuangan (dan tidak hanya) - dengan kata lain, layanan-layanan di mana β€œB” penting. Ini berlaku baik untuk pertukaran Bitcoin maupun kebun binatang korporat paling khas dari layanan perusahaan kecil tanpa bitcoin dengan cara apa pun.


Saya ingin mencatat bahwa saya adalah pendukung prinsip-prinsip "jagalah agar tetap sederhana" dan "lebih sedikit lebih banyak" , sehingga artikel dan artikel yang dijelaskan di dalamnya akan memiliki sifat tentang prinsip-prinsip ini.


Skenario imajiner: Mari kita lihat contoh penukar bitcoin. Kami memutuskan untuk mulai bertukar rubel, dolar, euro untuk bitcoin dan sebaliknya, dan kami sudah memiliki solusi yang berfungsi, tetapi untuk uang digital lainnya seperti kiwi dan webmoney, mis. kami telah menutup semua masalah hukum, ada aplikasi siap pakai yang bertindak sebagai gateway pembayaran untuk rubel, dolar dan euro dan sistem pembayaran lainnya. Itu terikat ke rekening bank kami dan memiliki semacam API untuk aplikasi akhir kami. Kami juga memiliki aplikasi web yang bertindak sebagai penukar bagi pengguna, seperti akun kiwi atau webmoney - buka akun, tambahkan kartu, dan sebagainya. Itu berkomunikasi dengan aplikasi gateway kami, meskipun menggunakan API REST di LAN. Maka kami memutuskan untuk menghubungkan bitcoin dan pada saat yang sama meningkatkan infrastruktur, karena awalnya semuanya dilarikan pada kotak virtual di kantor di bawah meja ... mereka mulai menggunakan situs, dan kami mulai khawatir tentang waktu kerja dan kinerja.


Jadi, mari kita mulai dengan yang utama - pemilihan server. Karena bisnis dalam contoh kami kecil dan kami percaya host (OVH), kami akan memilih opsi anggaran di mana tidak mungkin untuk menginstal sistem dari gambar .iso asli, tetapi tidak masalah, departemen keamanan TI pasti akan menganalisis gambar yang diinstal. Dan ketika kita dewasa, kita biasanya akan menyewa lemari di bawah kunci dan kunci dengan akses fisik terbatas, atau mungkin kita akan membangun DC kita sendiri. Dalam hal apa pun, perlu diingat bahwa ketika menyewa besi dan memasang gambar yang sudah jadi, ada kemungkinan sistem Anda akan memiliki "trojan dari host", yang dalam kebanyakan kasus tidak dimaksudkan untuk melacak Anda, tetapi untuk menawarkan alat manajemen yang lebih nyaman server.


Instalasi server


Semuanya sederhana di sini. Kami memilih besi yang sesuai dengan kebutuhan kami. Kemudian pilih gambar FreeBSD. Baik, kita terhubung (dalam kasus hoster lain dan perangkat keras kita sendiri) melalui IPMI atau dengan monitor dan memberi makan gambar .iso FreeBSD ke unduhan. Untuk instalasi orkestra, saya menggunakan Ansible dan mfsbsd . Satu-satunya hal, dalam kasus kami dengan kimsufi, kami memilih instalasi kustom sehingga dua disk di mirror hanya memiliki "boot" dan / partisi rumah "terbuka", sisa ruang disk akan dienkripsi, tetapi lebih lanjut tentang itu nanti.



Sistem diinstal dengan cara standar, saya tidak akan berhenti di situ, saya hanya mencatat bahwa sebelum memulai operasi, perhatikan opsi pengerasan , yang ditawarkan bsdinstaller di akhir instalasi (jika Anda menginstal sistem sendiri):



Ada materi bagus tentang topik ini, secara singkat saya akan mengulanginya di sini.


Dimungkinkan untuk mengaktifkan parameter di atas dengan cara yang sama pada sistem yang sudah diinstal. Untuk melakukan ini, edit file bootloader dan aktifkan parameter kernel. * ee adalah 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 perlu memastikan bahwa Anda memiliki versi terbaru dari sistem yang diinstal, dan menyelesaikan semua pembaruan dan peningkatan . Dalam kasus kami, misalnya, diperlukan pemutakhiran ke versi terbaru, karena gambar pra-instalasi enam bulan sampai satu tahun di belakang. Nah, di sana kami mengubah port SSH ke yang berbeda secara default, menambahkan otentikasi kunci dan menonaktifkannya dengan kata sandi.


Kemudian kita konfigurasikan aide , memantau keadaan file konfigurasi sistem. Lebih banyak yang dikunyah bisa dibaca di sini .


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 

Aktifkan audit sistem


sysrc auditd_enable=YES


# service auditd start


Cara mengelola bisnis ini dijelaskan dengan baik dalam manual .


Sekarang kita reboot dan melanjutkan dengan perangkat lunak di server. Setiap server adalah hypervisor untuk kontainer atau mesin virtual penuh. Oleh karena itu, penting bahwa prosesor mendukung VT-x dan EPT jika kami berencana untuk menggunakan virtualisasi penuh.


Sebagai wadah dan manajemen mesin virtual, saya menggunakan clevd dari olevole , saya berharap dia lebih sehat dan mendapatkan manfaat untuk utilitas luar biasa ini!


Wadah? Lagi-lagi buruh pelabuhan atau apa?


Tapi tidak. Penjara FreeBSD adalah alat kontainerisasi yang hebat, tetapi cbsd disebutkan cbsd untuk mengatur wadah-wadah ini, yang namanya adalah sel.


Sel adalah solusi yang sangat efektif untuk membangun infrastruktur untuk berbagai keperluan, yang pada akhirnya membutuhkan isolasi lengkap dari layanan atau proses individu. Ini pada dasarnya adalah tiruan dari sistem host, tetapi tidak memerlukan virtualisasi penuh perangkat keras. Dan sumber daya karena ini tidak dihabiskan untuk "OS tamu", tetapi hanya pada pekerjaan yang dilakukan. Ketika sel digunakan untuk kebutuhan internal, ini adalah solusi yang sangat nyaman untuk penggunaan sumber daya yang optimal - sekelompok sel pada satu server besi masing-masing dapat secara individual menggunakan seluruh sumber daya server jika perlu. Mengingat bahwa biasanya sub-layanan yang berbeda perlu ekstra. sumber daya pada waktu yang berbeda, Anda dapat mengekstrak kinerja maksimum dari satu server, jika Anda merencanakan dan menyeimbangkan sel antara server dengan benar. Jika perlu, sel-sel juga dapat menetapkan batas pada sumber daya yang digunakan.


gambar


Bagaimana dengan virtualisasi penuh?


Sejauh yang saya tahu, cbsd mendukung kerja hypervisors bhyve dan XEN. Saya tidak pernah menggunakan yang kedua, tetapi yang pertama adalah hypervisor yang relatif muda dari FreeBSD . Kita akan melihat contoh penggunaan bhyve pada contoh di bawah ini.


Instal dan konfigurasikan lingkungan host


Kami menggunakan FS ZFS . Ini adalah alat yang sangat kuat untuk mengelola ruang server. Berkat ZFS, Anda dapat langsung membangun array berbagai konfigurasi langsung dari disk, secara dinamis memperluas ruang "panas", mengubah disk mati, mengelola snapshot, dan banyak lagi yang dapat dijelaskan dalam serangkaian artikel. Mari kita kembali ke server dan disk-disknya. Pada awal instalasi pada disk, kami meninggalkan ruang kosong untuk partisi terenkripsi. Kenapa begitu Ini agar sistem akan naik secara otomatis dan mendengarkan SSH.


gpart add -t freebsd-zfs /dev/ada0


/dev/ada0p4 added!


tambahkan partisi disk ke ruang yang tersisa


geli init /dev/ada0p4


drive kata sandi enkripsi kami


geli attach /dev/ada0p4


lagi masukkan kata sandi dan kami memiliki perangkat /dev/ada0p4.eli - ini adalah ruang terenkripsi kami. Kemudian kita ulangi untuk / dev / ada1 dan disk lain dalam array. Dan buat kumpulan ZFS baru.


zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - yah, sekarang kita sudah siap tempur minimum. Array disk yang dicerminkan jika salah satu dari tiga gagal.


Buat dataset pada "kumpulan" baru


zfs create vms/jails


pkg install cbsd - jalankan perintah, dan instal manajemen untuk sel kita.


Setelah cbsd diinstal, itu perlu diinisialisasi:


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


Ya, kami menjawab banyak pertanyaan, kebanyakan jawaban secara default.


* Jika Anda menggunakan enkripsi, penting agar daemon cbsdd tidak mulai secara otomatis hingga Anda mendekripsi disk secara manual atau otomatis (dalam contoh kami, zabbix melakukan ini)


** Juga, saya tidak menggunakan NAT dari cbsd , tetapi konfigurasikan sendiri di 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


Mengonfigurasi kebijakan firewall juga merupakan topik terpisah, jadi saya tidak akan lebih dalam mengonfigurasi kebijakan BLOCK ALL dan mengatur daftar putih; Anda dapat melakukan ini dengan membaca dokumentasi resmi atau sejumlah besar artikel yang tersedia di Google.


Yah ... kita sudah menginstal cbsd, sekarang waktunya untuk membuat kuda kerja pertama kita - iblis bitcoin dalam sangkar!


cbsd jconstruct-tui



Di sini kita melihat dialog pembuatan sel. Setelah semua nilai ditetapkan, buat!


Saat membuat sel pertama, Anda harus memilih apa yang akan digunakan sebagai dasar untuk sel. Saya memilih kit distribusi dari repositori FreeBSD dengan perintah repo . Pilihan ini dibuat hanya ketika membuat sel pertama dari versi tertentu (Anda dapat meng-host sel dari versi apa pun yang lebih tua dari versi host).


Setelah semuanya terpasang - jalankan sel!


# cbsd jstart bitcoind


Tetapi kita perlu menginstal perangkat lunak di 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 di dalam sel kita menginstal perangkat lunak dengan dependensinya (sistem host kami tetap bersih)


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


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


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


Ada bitcoin di dalam sel, tetapi kami membutuhkan anonimitas, karena kami ingin terhubung ke beberapa sel melalui jaringan TOP. Secara umum, kami memiliki rencana untuk mengubah sebagian besar sel dengan perangkat lunak yang mencurigakan hanya melalui proxy. Berkat pf Anda dapat menonaktifkan NAT untuk rentang alamat IP tertentu di jaringan lokal, dan mengizinkan NAT hanya untuk simpul TOR kami. Jadi, bahkan jika malware masuk ke dalam sel, kemungkinan besar tidak akan menghubungi dunia luar, dan jika itu terjadi, ia tidak akan mengungkapkan IP dari server kami. oleh karena itu, kami membuat satu sel lagi, untuk layanan "penerusan" sebagai layanan ".onion" dan sebagai proxy untuk mengakses Internet ke masing-masing sel.


# 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


Kami menempatkan mendengarkan pada alamat lokal (tersedia untuk semua sel)


SOCKSPort 192.168.0.2:9050


Apa yang masih kita lewatkan untuk kebahagiaan total. Ya, kami membutuhkan layanan untuk web kami, mungkin bukan satu. Jalankan nginx, yang akan bertindak sebagai reverse-proxy dan berhati-hati dalam memperbarui sertifikat Mari Enkripsi


# cbsd jsconstruct-tui


# cbsd jstart nginx-rev


# jexec nginx-rev


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


Dan sekarang kita menempatkan 150 MB dependensi dalam sangkar. Dan tuan rumah masih bersih.


Mari kita kembali mengkonfigurasi nginx nanti, kita perlu menaikkan dua sel lagi untuk gateway pembayaran kita ke nodejs dan rust dan aplikasi web, yang karena beberapa alasan ada di apache dan pkhp, dan database MySQL juga diperlukan untuk yang terakhir.


# 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 paket lainnya secara terpisah


Selanjutnya, kita memompa aplikasi kita dengan git dan menjalankannya.


# cbsd jsconstruct-tui


# cbsd jstart webapp


# jexec webapp


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


Paket 450 MB. di dalam kandang.


di sini kami memberikan akses pengembang melalui SSH langsung ke sel, mereka akan melakukan semuanya sendiri di sana:


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


Port 2267 - ubah port sel SSH menjadi sembarang


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


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


Nah, layanan ini berjalan, masih menambahkan aturan di pf firewall


Mari kita lihat IP apa yang kita miliki di sel dan bagaimana "lokalka" kita terlihat


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


# 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 

Nah, karena kita ada di sini, kita akan menambahkan aturan yang sama pada reverse-proxy:


 ## 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 miliki - kami memiliki aplikasi web yang dapat diakses dari luar, dan itu berkomunikasi secara lokal dengan gateway pembayaran kami. Sekarang kita perlu menyiapkan lingkungan kerja untuk berinteraksi dengan jaringan bitcoin itu sendiri - simpul bitcoind hanyalah sebuah daemon yang mendukung salinan lokal dari blockchain saat ini. Daemon ini memiliki fungsi RPC dan dompet, tetapi ada "pembungkus" yang lebih nyaman untuk mengembangkan aplikasi. Pertama-tama, kami memutuskan untuk memasang electrum - ini adalah dompet CLI. Kami akan menggunakan dompet ini sebagai "cold storage" untuk bitcoin kami - secara umum, bitcoin yang perlu disimpan "di luar" sistem dapat diakses oleh pengguna dan umumnya jauh dari semua orang. Dia juga memiliki GUI, jadi kita akan menggunakan dompet yang sama pada kita
laptop. Sementara kita akan menggunakan electrum dengan server publik, dan kemudian di sel lain kita akan menaikkan ElectrumX , sehingga itu tidak akan bergantung pada siapa pun.


# cbsd jsconstruct-tui


# cbsd jstart electrum


# jexec electrum


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


700 MB perangkat lunak lain 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" } 

Sekarang kami telah membuat dompet.


wallet@electrum:/ % electrum-3.6 listaddresses


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

wallet@electrum:/ % electrum-3.6 help


Mulai sekarang, hanya lingkaran terbatas orang yang dapat terhubung ke dompet kami yang berantai . Agar tidak membuka akses dari luar ke sel ini, koneksi SSH akan terjadi melalui TOR (seperti versi VPN terdesentralisasi). Kami memulai SSH di dalam sel, tetapi jangan menyentuh pf.conf kami pada host.


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


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


Sekarang matikan akses Internet ke sel dengan dompet. Kami akan memberikannya alamat IP dari ruang subnet lain yang tidak berbasis NAT. Pertama, ubah /etc/pf.conf pada host


# ee /etc/pf.conf


JAIL_IP_POOL="192.168.0.0/24" ubah menjadi JAIL_IP_POOL="192.168.0.0/25" , jadi semua alamat 192.168.0.126-255 tidak akan memiliki akses langsung ke Internet. Semacam perangkat lunak "celah udara" jaringan. Dan aturan NAT tetap seperti itu


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


Kelebihan aturan


# pfctl -f /etc/pf.conf


Sekarang ambil sangkar kami


# 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, tapi sekarang sistem itu sendiri akan berhenti bekerja untuk kita. Namun, kami dapat menentukan proxy sistem. Tetapi ada satu hal tetapi, pada TOR itu adalah proxy SOCKS5, dan untuk kenyamanan kita juga akan memiliki proxy 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, sekarang di sistem kami ada dua proksi, dan keduanya keluaran melalui TOR: socks5: //192.168.0.2: 9050 dan http://192.168.0.6:8123


Sekarang Anda dapat menyesuaikan lingkungan 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 bekerja dari bawah proxy. Jika Anda ingin menginstal paket, maka perlu ditambahkan ke /usr/local/etc/pkg.conf dari bawah root sel


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

Nah, sekarang saatnya menambahkan layanan tersembunyi TOR sebagai alamat layanan SSH kami di sel 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 alamat koneksi kami. Mari kita periksa dari mesin lokal. Tetapi pertama-tama Anda perlu menambahkan 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 

Hubungkan (Agar ini berfungsi, Anda memerlukan daemon TOR lokal yang mendengarkan 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 <genesis@istar.ca> wallet@electrum:~ % logout 

Sukses!


Untuk bekerja dengan pembayaran instan dan mikro, kami juga membutuhkan simpul Jaringan Petir , pada kenyataannya, ini akan menjadi alat kerja utama kami dengan bitcoin. * C-lightning , yang akan kita gunakan sebagai daemon, memiliki plugin Sparko , yang merupakan antarmuka HTTP (REST) ​​lengkap dan memungkinkan bekerja dengan baik transaksi off-chain maupun on-chain transaction. c-lightning membutuhkan bitcoind node agar berfungsi.


* Ada implementasi berbeda pada PL yang berbeda dari protokol Jaringan Petir. Dari mereka yang kami uji c-lightning (ditulis dalam C) tampaknya yang paling stabil dan efisien sumber daya


# 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


Sementara semua yang Anda butuhkan dikompilasi dan diinstal, buat pengguna RPC untuk lightningd di 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


Pergantian kacau antar sel saya tidak begitu kacau jika Anda perhatikan utilitas tmux , yang memungkinkan Anda untuk membuat banyak sub-sesi terminal dalam satu sesi. Analog: screen



Dachshund, kami tidak ingin menyinari IP asli dari simpul kami, dan kami ingin melakukan semua transaksi keuangan melalui TOP. Karena itu, Anda perlu satu lagi .ion.


# 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 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 membuat file konfigurasi untuk bitcoin-cli, sebuah utilitas 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" ] 

jalankan lightningd


lightning@lightning:~ % lightningd --daemon


lightning-cli sendiri dapat dikontrol oleh lightning-cli , misalnya:


lightning-cli newaddr mendapatkan alamat untuk pembayaran masuk baru


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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all kirim ke alamat semua uang dompet (semua alamat on-chain)


Juga, perintah untuk operasi off-chain dari lightning-cli invoice lightning-cli listinvoices , lightning-cli invoice lightning-cli listinvoices , lightning-cli listinvoices lightning-cli pay dll


Nah, untuk komunikasi dengan aplikasi kita punya REST Api


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


Untuk meringkas


# jls


  JID IP Address Hostname Path 1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind 2 192.168.0.2 tor.space.com /zroot/jails/jails/tor 3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev 4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw 5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp 7 192.168.0.200 electrum.space.com /zroot/jails/jails/electrum 8 192.168.0.6 polipo.space.com /zroot/jails/jails/polipo 9 192.168.0.7 lightning.space.com /zroot/jails/jails/cln 


, .


# zfs list


 NAME USED AVAIL REFER MOUNTPOINT zroot 279G 1.48T 88K /zroot zroot/ROOT 1.89G 1.48T 88K none zroot/ROOT/default 1.89G 17.6G 1.89G / zroot/home 88K 1.48T 88K /home zroot/jails 277G 1.48T 404M /zroot/jails zroot/jails/bitcoind 190G 1.48T 190G /zroot/jails/jails-data/bitcoind-data zroot/jails/cln 653M 1.48T 653M /zroot/jails/jails-data/cln-data zroot/jails/electrum 703M 1.48T 703M /zroot/jails/jails-data/electrum-data zroot/jails/nginx-rev 190M 1.48T 190M /zroot/jails/jails-data/nginx-rev-data zroot/jails/paygw 82.4G 1.48T 82.4G /zroot/jails/jails-data/paygw-data zroot/jails/polipo 57.6M 1.48T 57.6M /zroot/jails/jails-data/polipo-data zroot/jails/tor 81.5M 1.48T 81.5M /zroot/jails/jails-data/tor-data zroot/jails/webapp 360M 1.48T 360M /zroot/jails/jails-data/webapp-data 

, bitcoind 190 . ? ZFS . cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com . , ( 190 )


ZFS, . ZFS , SSH. , .


, Zabbix .


β€”


, :


β€” UNIX- . β€” . . . . -, .


β€” . - , ECC , ZFS " " . . - .


β€” . . . ( ). , .


β€” , . , .


, , , .


?


cbsd . , bhyve .


# cat /etc/rc.conf


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

# cat /boot/loader.conf


 ... vmm_load="YES" ... 

, - debian !




. β€” bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc . , pet-project .

Source: https://habr.com/ru/post/id477124/


All Articles