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.

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 .