Öyle oldu ki, mesleğim gereği bilgisayar sistemleri ve ağlarının yöneticisiyim (kısacası: sistem yöneticisi) ve 10 yıldan biraz fazla bir süredir prof. [aşırı] güvenlik önlemleri gerektirenler de dahil olmak üzere çok çeşitli sistemlerin faaliyetleri. Ayrıca bir süre önce bunu ilginç buldum ve sadece onu kullanmakla kalmadı, aynı zamanda bir geliştiricinin bakış açısından Bitcoin ağıyla (sonuçta p2p olarak da bilinir) bağımsız olarak nasıl çalışılacağını öğrenmek için birkaç mikro hizmet başlattı (tabii ki ben de onlardan biriyim) devyani oradan geçiyordum). Ancak ben geliştirmeden bahsetmiyorum, uygulamalar için güvenli ve verimli bir ortamdan bahsediyorum.
Finansal teknoloji (fintech) bilgi güvenliğinin yanına gidin (INFOSEC) ve birincisi ikincisi olmadan çalışabilir, ancak uzun sürmez. Bu yüzden deneyimimi ve her ikisini de içeren kullandığım araçları paylaşmak istiyorum. fintechVe INFOSECve aynı zamanda daha geniş veya tamamen farklı bir amaç için de kullanılabilir. Bu yazıda size Bitcoin hakkında çok fazla değil, finansal (ve sadece) hizmetlerin - tek kelimeyle "B" nin önemli olduğu hizmetlerin geliştirilmesi ve işletilmesi için altyapı modeli hakkında bilgi vereceğim. Bu, hem Bitcoin borsası hem de Bitcoin ile hiçbir bağlantısı olmayan küçük bir şirketin en tipik kurumsal hizmet hayvanat bahçesi için geçerlidir.
ilkelerinin savunucusu olduğumu belirtmek isterim. "aptalca basit tut" и "Az ama öz"Dolayısıyla hem makale hem de içinde anlatılanlar bu ilkelerin ilgili olduğu özelliklere sahip olacaktır.
Hayali senaryo: Bitcoin değiştirici örneğini kullanarak her şeye bakalım. Bitcoin ve geri karşılığında ruble, dolar, euro değişimini başlatmaya karar verdik ve zaten çalışan bir çözümümüz var, ancak qiwi ve webmoney gibi diğer dijital paralar için, yani. Tüm yasal sorunları kapattık, ruble, dolar, euro ve diğer ödeme sistemleri için ödeme ağ geçidi görevi gören hazır bir uygulamamız var. Banka hesaplarımıza bağlı ve son uygulamalarımız için bir tür API'ye sahip. Ayrıca, tipik bir qiwi veya webmoney hesabı gibi kullanıcılar için değiştirici görevi gören bir web uygulamamız da var - hesap oluşturun, kart ekleyin vb. Yerel bölgedeki REST API aracılığıyla da olsa ağ geçidi uygulamamızla iletişim kurar. Ve böylece bitcoinleri birbirine bağlamaya ve aynı zamanda altyapıyı yükseltmeye karar verdik, çünkü... Başlangıçta ofiste masanın altındaki sanal kutulara her şey aceleyle hazırlandı... site kullanılmaya başlandı ve çalışma süresi ve performans konusunda endişelenmeye başladık.
Öyleyse asıl şeyle başlayalım - bir sunucu seçmek. Çünkü örneğimizdeki işletme küçük ve seçeceğimiz barındırıcıya (OVH) güveniyoruz Sistemi orijinal .iso görüntüsünden kurmanın imkansız olduğu ancak bunun bir önemi olmadığı durumlarda, BT güvenlik departmanı kurulan görüntüyü kesinlikle analiz edecektir. Büyüdüğümüzde, fiziksel erişimi sınırlı olan kendi dolabımızı kilit altında kiralayacağız ve belki kendi DC'mizi inşa edeceğiz. Her durumda, donanım kiralarken ve hazır görüntüler yüklerken, çoğu durumda sizi gözetleme amacı taşımayan bir "barındırıcıdan gelen Truva Atı"nın sisteminizde asılı kalma ihtimalinin bulunduğunu hatırlamakta fayda var. ancak daha uygun yönetim araçları sunucusu sunmak.
Sunucu kurulumu
Burada her şey basit. İhtiyaçlarımıza uygun donanımı seçiyoruz. Ardından FreeBSD görüntüsünü seçin. Ya da (başka bir barındırıcı ve kendi donanımımız olması durumunda) IPMI aracılığıyla veya bir monitörle bağlanırız ve .iso FreeBSD görüntüsünü indirmeye besleriz. Orkestra kurulumu için kullanıyorum и . Bizim kimsufi vakamızda seçtiğimiz tek şey özel kurulum Aynadaki iki diskin yalnızca önyükleme ve /ev bölümlerinin "açık" olması için, disk alanının geri kalanı şifrelenecektir, ancak bu konuya daha sonra değinilecektir.

Sistemin kurulumu standart bir şekilde gerçekleşiyor, bunun üzerinde durmayacağım, sadece işletmeye başlamadan önce dikkat edilmesi gerektiğini not edeceğim. sertleştirme sunduğu seçenekler bsdinstaller kurulumun sonunda (sistemi kendiniz kurarsanız):

Var Bu konuyu burada kısaca tekrarlayacağım.
Yukarıda belirtilen parametrelerin halihazırda kurulu bir sistemde etkinleştirilmesi de mümkündür. Bunu yapmak için önyükleyici dosyasını düzenlemeniz ve çekirdek parametrelerini etkinleştirmeniz gerekir. *ee BSD'de buna benzer bir editördür
# 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=1Ayrıca sistemin en son sürümünün kurulu olduğundan emin olmalısınız ve . Örneğin bizim durumumuzda en son sürüme yükseltme yapılması gerekiyor çünkü... kurulum öncesi görüntüler altı aydan bir yıla kadar geride kalıyor. Burada SSH bağlantı noktasını varsayılandan farklı bir şeye değiştiriyoruz, anahtar kimlik doğrulaması ekliyoruz ve şifre kimlik doğrulamasını devre dışı bırakıyoruz.
Daha sonra yapılandırıyoruz aide, sistem yapılandırma dosyalarının durumunu izleme. Daha detaylı olarak okuyabilirsiniz .
pkg install aide
ve crontab'ımızı düzenleyin
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/$MYFILENAMEAç
sysrc auditd_enable=YES
# service auditd start
Bu konunun nasıl yönetileceği şurada mükemmel bir şekilde anlatılmıştır: .
Şimdi yeniden başlatıp sunucudaki yazılıma geçiyoruz. Her sunucu, konteynerler veya tam sanal makineler için bir hipervizördür. Bu nedenle tam sanallaştırma kullanmayı planlıyorsak işlemcinin VT-x ve EPT'yi desteklemesi önemlidir.
Kullandığım konteynerleri ve sanal makineleri yönetmek için itibaren , Bu harika fayda için ona daha fazla sağlık ve bereket diliyorum!
Konteynerler mi? Yine Docker mı yoksa ne?
Ve hayır. konteynerleştirme için mükemmel bir araçtır, ancak bahsedilen cbsd Hücre adı verilen bu kapları düzenlemek için.
Kafes, nihai olarak bireysel hizmetlerin veya süreçlerin tamamen izolasyonunun gerekli olduğu çeşitli amaçlara yönelik altyapı oluşturmak için son derece etkili bir çözümdür. Temel olarak ana sistemin bir kopyasıdır ancak tam donanım sanallaştırması gerektirmez. Ve bu sayede kaynaklar "konuk işletim sistemine" değil, yalnızca yapılan işe harcanıyor. Hücreler dahili ihtiyaçlar için kullanıldığında, bu, optimum kaynak kullanımı için çok uygun bir çözümdür; bir donanım sunucusundaki bir grup hücrenin her biri, gerekirse sunucu kaynağının tamamını ayrı ayrı kullanabilir. Genellikle farklı alt hizmetlerin ek ihtiyaç duyduğu göz önüne alındığında. Kaynakları farklı zamanlarda kullanırken, sunucular arasındaki hücreleri doğru şekilde planlayıp dengelerseniz, bir sunucudan maksimum performansı elde edebilirsiniz. Gerekirse hücrelere kullanılan kaynakla ilgili kısıtlamalar da verilebilir.

Tam sanallaştırmaya ne dersiniz?
Olarak bildiğim kadarıyla, cbsd çalışmayı destekler bhyve ve XEN hipervizörleri. İkincisini hiç kullanmadım ama ilki nispeten yeni . Bir kullanım örneğine bakacağız bhyve aşağıdaki örnekte.
Ana Bilgisayar Ortamını Kurma ve Yapılandırma
FS kullanıyoruz . Bu, sunucu alanını yönetmek için son derece güçlü bir araçtır. ZFS sayesinde, disklerden çeşitli konfigürasyonlardan oluşan dizileri doğrudan oluşturabilir, alanı dinamik olarak "sıcak" olarak genişletebilir, ölü diskleri değiştirebilir, anlık görüntüleri yönetebilir ve bir dizi makalede anlatılabilecek çok daha fazlasını yapabilirsiniz. Sunucumuza ve disklerine dönelim. Kurulumun başında şifrelenmiş bölümler için disklerde boş alan bıraktık. Nedenmiş? Böylece sistem otomatik olarak uyanır ve SSH üzerinden dinleme yapar.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
kalan alana bir disk bölümü ekleyin
geli init /dev/ada0p4
şifreleme şifremizi girin
geli attach /dev/ada0p4
Şifreyi tekrar giriyoruz ve /dev/ada0p4.eli cihazımız var - burası bizim şifrelenmiş alanımız. Daha sonra aynı işlemi /dev/ada1 ve dizideki diğer diskler için tekrarlıyoruz. Ve yeni bir tane yaratıyoruz .
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Asgari savaş kitimiz hazır. Üçünden birinin arızalanması durumunda yansıtılmış disk dizisi.
Yeni bir “havuzda” veri kümesi oluşturma
zfs create vms/jails
pkg install cbsd — Bir ekip kurduk ve hücrelerimiz için yönetim kurduk.
sonra cbsd yüklüyse, başlatılması gerekiyor:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Çoğu soruyu varsayılan yanıtlarla yanıtlıyoruz.
*Şifreleme kullanıyorsanız arka plan programının cbsdd siz disklerin şifresini manuel veya otomatik olarak çözene kadar otomatik olarak başlamadı (örneğimizde bu zabbix tarafından yapılıyor)
**Ayrıca NAT'ı da kullanmıyorum cbsdve bunu kendim yapılandırıyorum 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
Güvenlik duvarı politikalarını ayarlamak da ayrı bir konudur, bu nedenle TÜMÜNÜ ENGELLE politikasını ayarlama ve beyaz listeleri ayarlama konularına derinlemesine girmeyeceğim, bunu okuyarak yapabilirsiniz. veya Google'da bulunan çok sayıda makaleden herhangi biri.
Pekala... cbsd'yi kurduk, ilk güçlü gücümüzü - kafesteki Bitcoin şeytanını - yaratmanın zamanı geldi!
cbsd jconstruct-tui

Burada hücre oluşturma iletişim kutusunu görüyoruz. Tüm değerler ayarlandıktan sonra oluşturalım!
İlk hücrenizi oluştururken hücrelerin tabanı olarak neyi kullanacağınızı seçmelisiniz. FreeBSD deposundan şu komutla bir dağıtım seçiyorum: repo. Bu seçim yalnızca belirli bir sürümün ilk hücresini oluştururken yapılır (ana bilgisayar sürümünden daha eski olan herhangi bir sürümün hücrelerini barındırabilirsiniz).
Her şey kurulduktan sonra kafesi başlatıyoruz!
# cbsd jstart bitcoind
Ancak kafesin içine yazılım yüklememiz gerekiyor.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoindjexec bitcoind hücre konsoluna girmek için
ve zaten hücrenin içinde yazılımı bağımlılıklarıyla birlikte yüklüyoruz (ana bilgisayar sistemimiz temiz kalır)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Kafesin içinde Bitcoin var ama anonimliğe ihtiyacımız var çünkü bazı kafeslere TOP ağı üzerinden bağlanmak istiyoruz. Genel olarak, şüpheli yazılım içeren çoğu hücreyi yalnızca bir proxy aracılığıyla çalıştırmayı planlıyoruz. Sayesinde pf Yerel ağdaki belirli bir IP adresi aralığı için NAT'ı devre dışı bırakabilir ve NAT'a yalnızca TOR düğümümüz için izin verebilirsiniz. Böylece kötü amaçlı yazılım hücreye girse bile büyük ihtimalle dış dünyayla iletişim kuramayacak, girse bile sunucumuzun IP'sini açığa çıkarmayacaktır. Bu nedenle, hizmetleri bir ".onion" hizmeti olarak ve İnternet'e bireysel hücrelere erişim için bir proxy olarak "iletmek" için başka bir hücre oluşturuyoruz.
# 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
Yerel bir adreste dinlemeye ayarlayın (tüm hücreler için kullanılabilir)
SOCKSPort 192.168.0.2:9050
Tam mutluluk için başka neye ihtiyacımız var? Evet, web'imiz için bir hizmete ihtiyacımız var, belki birden fazla. Ters proxy görevi görecek ve Let's Encrypt sertifikalarının yenilenmesiyle ilgilenecek nginx'i başlatalım
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Ve böylece 150 MB bağımlılığı bir kafese yerleştirdik. Ve ev sahibi hala temiz.
Daha sonra nginx kurulumuna dönelim, nodejs ve Rush üzerindeki ödeme ağ geçidimiz için iki hücre daha oluşturmamız ve bir nedenden dolayı Apache ve PHP'de bulunan bir web uygulaması oluşturmamız gerekiyor ve ikincisi de bir MySQL veritabanı gerektiriyor.
# 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
...ve izole edilmiş 380 MB'lık paket daha
Daha sonra uygulamamızı git ile indirip başlatıyoruz.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB'lık paketler. bir kafeste.
burada geliştiriciye SSH aracılığıyla doğrudan hücreye erişim sağlıyoruz, orada her şeyi kendileri yapacaklar:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267 — hücrenin SSH bağlantı noktasını herhangi bir isteğe bağlı bağlantı noktasıyla değiştirin
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Hizmet çalışıyor, geriye kalan tek şey kuralı eklemek pf güvenlik duvarı
Hücrelerimizin hangi IP'ye sahip olduğunu ve "yerel alanımızın" genel olarak nasıl göründüğünü görelim.
# 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/webappve bir kural ekleyin
# 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
Madem buradayız, ters proxy için de bir kural ekleyelim:
## 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
Şimdi bitcoinler hakkında biraz
Elimizde harici olarak kullanıma sunulan bir web uygulamamız var ve bu uygulama yerel olarak ödeme ağ geçidimizle konuşuyor. Şimdi Bitcoin ağının kendisiyle (düğüm) etkileşim kurmak için bir çalışma ortamı hazırlamamız gerekiyor. bitcoind bu sadece blockchain'in yerel kopyasını güncel tutan bir arka plan programıdır. Bu arka plan programının RPC ve cüzdan işlevselliği vardır, ancak uygulama geliştirme için daha kullanışlı "sarmalayıcılar" vardır. Başlangıç olarak şunu koymaya karar verdik: electrum bir CLI cüzdanıdır. bunu bitcoinlerimiz için "soğuk depo" olarak kullanacağız - genel olarak, kullanıcıların erişebileceği sistemin "dışında" ve genel olarak herkesten uzakta saklanması gereken bitcoinler. Aynı zamanda bir GUI'si var, bu yüzden aynı cüzdanı kendimizde kullanacağız.
dizüstü bilgisayarlar. Şimdilik Electrum'u genel sunucularda kullanacağız, daha sonra başka bir hücrede yükselteceğiz kimseye bağımlı olmamak için.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
kafesimizde 700 MB yazılım daha var
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 walletelectrum:/@[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"
}Artık oluşturduğumuz bir cüzdanımız var.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]wallet@electrum:/ % electrum-3.6 help
bizim için ilgili zincir Artık cüzdana yalnızca sınırlı sayıda kişi bağlanabilecek. Bu hücreye dışarıdan erişim açılmaması için SSH üzerinden bağlantılar TOP (VPN'in merkezi olmayan versiyonu) üzerinden gerçekleşecektir. Hücrede SSH'yi başlatıyoruz ancak ana bilgisayardaki pf.conf dosyamıza dokunmuyoruz.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Şimdi cüzdanın internet erişimi olan hücreyi kapatalım. NAT'lanmamış başka bir alt ağ alanından bir IP adresi verelim. Önce değişelim /etc/pf.conf ev sahibi üzerinde
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24" hadi şunu değiştirelim JAIL_IP_POOL="192.168.0.0/25"dolayısıyla 192.168.0.126-255 numaralı adreslerin tümü İnternet'e doğrudan erişime sahip olmayacaktır. Bir tür yazılım “hava boşluğu” ağı. Ve NAT kuralı olduğu gibi kalıyor
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Kuralların aşırı yüklenmesi
# pfctl -f /etc/pf.conf
Şimdi hücremize sahip çıkalım
# 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.200Hmm, ama artık sistemin kendisi bizim için çalışmayı bırakacak. Ancak bir sistem proxy'si belirtebiliriz. Ancak bir şey var; TOR'da bu bir SOCKS5 proxy'sidir ve kolaylık sağlamak için ayrıca bir HTTP proxy'si de istiyoruz.
# 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 = socks5polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
Artık sistemimizde iki proxy sunucu var ve her ikisi de TOR aracılığıyla çıktı veriyor: çorap5://192.168.0.2:9050 ve
Artık cüzdan ortamımızı yapılandırabiliriz
# 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:8123Artık kabuk bir proxy altında çalışacak. Paketleri kurmak istiyorsak şunu eklemeliyiz: /usr/local/etc/pkg.conf kafesin kökünün altından
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}Artık SSH hizmetimizin adresi olarak TOR gizli hizmetini cüzdan hücresine eklemenin zamanı geldi.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/electrum/
HiddenServicePort 22 192.168.0.200:22tor:/@[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.onionBu bizim bağlantı adresimizdir. Yerel makineden kontrol edelim. Ancak önce SSH anahtarımızı eklememiz gerekiyor:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@localBir Linux istemci makinesinden
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
Haydi bağlanalım (Bunun çalışması için 9050'yi dinleyen yerel bir TOR arka plan programına ihtiyacınız var)
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
Успех!
Anında ve mikro ödemelerle çalışmak için ayrıca bir düğüme ihtiyacımız var Aslında Bitcoin ile ana çalışma aracımız bu olacak. U*bunu bir daemon olarak kullanacağız Tam teşekküllü bir HTTP (REST) arayüzü olan ve hem zincir dışı hem de zincir içi işlemlerle çalışmanıza olanak tanıyan. c-lightning işleyişi için gerekli bitcoind ama evet.
*Lightning Network protokolünün farklı dillerde farklı uygulamaları vardır. Test ettiklerimiz arasında c-lightning (C ile yazılmış) en kararlı ve kaynak açısından verimli görünüyordu
# 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
Gerekli her şey derlenip kurulurken, bir RPC kullanıcısı oluşturalım. 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/32bitcoind:/@[10:39] # service bitcoind restart
Faydasına dikkat ederseniz, hücreler arasındaki kaotik geçişimin o kadar da kaotik olmadığı ortaya çıkıyor tmuxBu, bir oturumda birden fazla terminal alt oturumu oluşturmanıza olanak tanır. Analog: screen

Bu nedenle düğümümüzün gerçek IP'sini açığa çıkarmak istemiyoruz ve tüm finansal işlemleri TOP aracılığıyla yürütmek istiyoruz. Bu nedenle başka bir .onion'a ihtiyaç yoktur.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735tor:/@[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Şimdi c-lightning için bir yapılandırma oluşturalım
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 likelightning@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 ~
ayrıca bitcoin-cli ile iletişim kuran bir yardımcı program için bir yapılandırma dosyası oluşturmanız gerekir. bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=testKontrol
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]zapuskaem lightningd
lightning@lightning:~ % lightningd --daemon
Kendisi lightningd yardımcı programı kontrol edebilirsiniz lightning-cliÖrneğin:
lightning-cli newaddr yeni tahsilatın adresini al
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all cüzdandaki tüm parayı adrese gönderin (tüm zincirdeki adresler)
Ayrıca zincir dışı işlemlere yönelik komutlar lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay ve benzeri.
Uygulamayla iletişim için bir REST Api'miz var
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Toparlamak
# 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
Her biri yerel ağdan ve yerel ağdan kendi erişim düzeyine sahip bir dizi konteynerimiz 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-dataGördüğünüz gibi bitcoind 190 GB alanın tamamını kaplıyor. Peki ya test için başka bir düğüme ihtiyacımız olursa? ZFS'nin kullanışlı olduğu yer burasıdır. Yardımla cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com anlık görüntü oluşturabilir ve bu anlık görüntüye yeni bir hücre ekleyebilirsiniz. Yeni hücrenin kendine ait alanı olacak ancak dosya sisteminde yalnızca mevcut durum ile orijinal arasındaki fark dikkate alınacaktır (en az 190 GB tasarruf edeceğiz)
Her hücre kendine ait ayrı bir ZFS veri kümesidir ve bu son derece kullanışlıdır. SSH yoluyla anlık görüntüler göndermek gibi diğer harika şeyleri yapın. Bunu tarif etmeyeceğiz, zaten çok şey var.
Ayrıca, bu amaçlar için ana bilgisayarın uzaktan izlenmesi ihtiyacını da belirtmekte fayda var. .
B-güvenlik
Güvenliğe gelince, altyapı bağlamındaki temel ilkelerden başlayalım:
Gizlilik — UNIX benzeri sistemlerin standart araçları bu prensibi sağlar. Sistemin mantıksal olarak ayrı her bir öğesine (bir hücre) erişimi mantıksal olarak ayırıyoruz. Erişim, kullanıcıların kişisel anahtarları kullanılarak standart kullanıcı kimlik doğrulaması yoluyla sağlanır. Son hücreler arasındaki ve son hücrelere olan tüm iletişim şifrelenmiş biçimde gerçekleşir. Disk şifreleme sayesinde diski değiştirirken veya başka bir sunucuya taşırken verilerin güvenliği konusunda endişelenmemize gerek yok. Tek kritik erişim, ana sisteme erişimdir, çünkü bu erişim genellikle konteynerlerin içindeki verilere erişim sağlar.
bütünlük “Bu prensibin uygulanması birkaç farklı seviyede gerçekleşir. İlk olarak, sunucu donanımı, ECC belleği söz konusu olduğunda, ZFS'nin zaten "kutudan çıktığı gibi" bilgi bitleri düzeyinde veri bütünlüğünü önemsediğini belirtmek önemlidir. Anlık anlık görüntüler, istediğiniz zaman anında yedekleme yapmanıza olanak tanır. Kullanışlı hücre dışa/içe aktarma araçları, hücre çoğaltmayı basitleştirir.
Durumu - Bu zaten isteğe bağlıdır. Şöhretinin derecesine ve nefret edenlerin olup olmadığına bağlı. Örneğimizde cüzdanın yalnızca TOP ağından erişilebilir olmasını sağladık. Gerekirse güvenlik duvarındaki her şeyi engelleyebilir ve sunucuya yalnızca tüneller aracılığıyla erişime izin verebilirsiniz (TOR veya VPN başka bir konudur). Böylece sunucunun dış dünyayla bağlantısı mümkün olduğu kadar kesilecek ve onun kullanılabilirliğini yalnızca biz kendimiz etkileyebileceğiz.
Reddetmenin imkansızlığı - Ve bu, daha fazla çalışmaya ve kullanıcı hakları, erişim vb. için doğru politikalara uyulmasına bağlıdır. Ancak doğru yaklaşımla tüm kullanıcı eylemleri denetlenir ve kriptografik çözümler sayesinde belirli eylemleri kimin, ne zaman gerçekleştirdiğinin net bir şekilde belirlenmesi mümkündür.
Elbette açıklanan konfigürasyon, her zaman nasıl olması gerektiğine dair mutlak bir örnek değildir; daha ziyade, çok esnek ölçeklendirme ve özelleştirme yeteneklerini korurken nasıl olabileceğinin bir örneğidir.
Tam sanallaştırmaya ne dersiniz?
Cbsd kullanarak tam sanallaştırma hakkında şunları yapabilirsiniz . Bunu sadece iş için ekleyeceğim bhyve Bazı çekirdek seçeneklerini etkinleştirmeniz gerekir.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...# cat /boot/loader.conf
...
vmm_load="YES"
...Так что если вдруг есть необходимости завести докер, то поднимаем какйой-нибудь debian ve git!

Hepsi bu
Sanırım paylaşmak istediğim tek şey buydu. Makaleyi beğendiyseniz bana biraz bitcoin gönderebilirsiniz - . Hücreleri çalışırken denemek ve biraz bitcoin kazanmak istiyorsanız, adresime gidebilirsiniz. .
Kaynak: habr.com
