Bitcoin kafeste mi?

Ö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 bitcoinve 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 bir bütçe seçeneği 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 yanıtlayıcı ' и mfsbsd. 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.

Bitcoin kafeste mi?

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):

Bitcoin kafeste mi?

Var iyi malzeme 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=1

Ayrıca sistemin en son sürümünün kurulu olduğundan emin olmalısınız ve tüm güncellemeleri ve yükseltmeleri gerçekleştirin. Ö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 burada.

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/$MYFILENAME

sistem denetimi

sysrc auditd_enable=YES

# service auditd start

Bu konunun nasıl yönetileceği şurada mükemmel bir şekilde anlatılmıştır: liderlik.

Ş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 cbsd itibaren zeytinyağı, Bu harika fayda için ona daha fazla sağlık ve bereket diliyorum!

Konteynerler mi? Yine Docker mı yoksa ne?

Ve hayır. FreeBSD Hapishaneleri 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.

Bitcoin kafeste mi?

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 FreeBSD'den hipervizör. Bir kullanım örneğine bakacağız bhyve aşağıdaki örnekte.

Ana Bilgisayar Ortamını Kurma ve Yapılandırma

FS kullanıyoruz ZFS. 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 ZFS havuzu.

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. resmi belgeler 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

Bitcoin kafeste mi?

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/bitcoind

jexec 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/webapp

ve 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. Bu cüzdan 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 ElectrumXkimseye 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 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"
}

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

Bitcoin kafeste mi?

Bitcoin kafeste mi?

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, 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 = socks5

polipo:/@[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 http://192.168.0.6:8123

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:8123

Artı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: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

Bu 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@local

Bir 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 Yıldırım ağıAslında Bitcoin ile ana çalışma aracımız bu olacak. U*c-şimşekbunu bir daemon olarak kullanacağız Sparko eklentisiTam 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/32

bitcoind:/@[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

Bitcoin kafeste mi?

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: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

Ş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 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 ~

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=test

Kontrol

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

Bitcoin kafeste mi?

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-data

Gö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. ZFS ayrıca izin verir 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. Zabbix.

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 burada okumak. 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!

Bitcoin kafeste mi?

Hepsi bu

Sanırım paylaşmak istediğim tek şey buydu. Makaleyi beğendiyseniz bana biraz bitcoin gönderebilirsiniz - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Hücreleri çalışırken denemek ve biraz bitcoin kazanmak istiyorsanız, adresime gidebilirsiniz. Evcil hayvan projesi.

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster