ビットコむンは檻の䞭

たたたた、私は職業的にコンピュヌタシステムずネットワヌクの管理者芁するにシステム管理者であり、10 幎ちょっず前から教授に話をする機䌚がありたした。 [極端な] セキュリティ察策を必芁ずするシステムを含む、さたざたなシステムのアクティビティ。 たたたた、少し前に面癜いず思ったのですが、 ビットコむンそしお、それを䜿甚するだけでなく、開発者の芳点からビットコむンネットワヌク結局のずころp2pずも呌ばれたすを独自に操䜜する方法を孊ぶために、いく぀かのマむクロサヌビスを立ち䞊げたしたもちろん私もそのXNUMX人です dev、で、通りかかった。 しかし、私は開発に぀いお話しおいるのではなく、アプリケヌションのための安党で効率的な環境に぀いお話しおいたす。

金融テクノロゞヌ (フィンテック) 次に情報セキュリティ (INFOSEC) XNUMX ぀目は XNUMX ぀目がなくおも動䜜したすが、長くは続きたせん。 だからこそ、私の経隓ず、私が䜿甚しおいるツヌルセット䞡方を含むを共有したいず思いたす。 フィンテックず INFOSEC、そしお同時に、より広い目的たたはたったく異なる目的にも䜿甚できたす。 この蚘事では、ビットコむンに぀いおはあたり説明したせんが、金融 (だけではありたせん) サヌビス、぀たり「B」が重芁なサヌビスの開発ず運甚のためのむンフラストラクチャ モデルに぀いお説明したす。 これは、ビットコむン取匕所ず、ビットコむンずはたったく関係のない䞭小䌁業がサヌビスを提䟛する最も兞型的な䌁業動物園の䞡方に圓おはたりたす。

私はこの原則の支持者であるこずに留意したいず思いたす 「愚かなほど単玔にしおください」 О "少ないほうがいいですね"したがっお、蚘事ずその䞭で説明されおいる内容は䞡方ずも、これらの原則が察象ずする性質を持っおいたす。

想像䞊のシナリオ: ビットコむン亀換業者の䟋を䜿甚しおすべおを芋おみたしょう。 私たちは、ルヌブル、ドル、ナヌロずビットコむンの亀換を開始するこずに決めたした。すでに実甚的な゜リュヌションを持っおいたすが、qiwi やりェブマネヌなどの他のデゞタルマネヌずの亀換も可胜です。 私たちはすべおの法的問題を解決しおおり、ルヌブル、ドル、ナヌロ、その他の支払いシステムの支払いゲヌトりェむずしお機胜する既補のアプリケヌションを持っおいたす。 これは銀行口座に接続されおおり、゚ンドアプリケヌション甚の䜕らかの API を備えおいたす。 たた、兞型的な qiwi やりェブマネヌ アカりントのように、アカりントの䜜成やカヌドの远加など、ナヌザヌの亀換圹ずしお機胜する Web アプリケヌションもありたす。 ロヌカル゚リアの REST API を介しおではありたすが、ゲヌトりェむ アプリケヌションず通信したす。 そこで私たちはビットコむンを接続し、同時にむンフラストラクチャをアップグレヌドするこずにしたした。 圓初は、すべおがオフィスのテヌブルの䞋の仮想ボックスに急いで蚭眮されおいたした...サむトが䜿甚され始め、皌働時間ずパフォヌマンスに぀いお心配し始めたした。

それでは、肝心のサヌバヌの遞択から始めたしょう。 なぜならこの䟋のビゞネスは小芏暡であり、遞択するホスティング䌚瀟 (OVH) を信頌しおいたす。 予算オプション 元の .iso むメヌゞからシステムをむンストヌルするこずは䞍可胜ですが、それは問題ではありたせん。IT セキュリティ郚門は必ずむンストヌルされたむメヌゞを分析したす。 そしお、私たちが倧人になったら、物理的なアクセスが制限された、鍵付きのクロヌれットを借りお、自分の DC を建おるかもしれたせん。 いずれにせよ、ハヌドりェアをレンタルしお既補のむメヌゞをむンストヌルする堎合、「ホスティング業者からのトロむの朚銬」がシステムにハングアップする可胜性があるこずを芚えおおく䟡倀がありたす。これはほずんどの堎合、スパむを目的ずしたものではありたせん。より䟿利な管理ツヌルサヌバヌを提䟛するためです。

サヌバヌのむンストヌル

ここではすべおがシンプルです。 ニヌズに合ったハヌドりェアを遞択したす。 次に、FreeBSD むメヌゞを遞択したす。 たたは、(別のホスタヌず独自のハヌドりェアの堎合) IPMI たたはモニタヌを介しお接続し、.iso FreeBSD むメヌゞをダりンロヌドにフィヌドしたす。 私が䜿甚するオヌケストラのセットアップには Ansible О mfsbsd。 唯䞀のこずは、キムスフィの堎合、私たちが遞んだのは カスタムむンストヌル ミラヌ内の XNUMX ぀のディスクでブヌト パヌティションず /home パヌティションのみが「オヌプン」になるように、残りのディスク領域は暗号化されたすが、これに぀いおは埌ほど説明したす。

ビットコむンは檻の䞭

システムのむンストヌルは暙準的な方法で行われたす。これに぀いおは説明したせん。操䜜を開始する前に泚意を払う䟡倀があるこずだけを述べおおきたす。 硬化 提䟛するオプション bsdinstaller むンストヌルの最埌に次のようにしたす (システムを自分でむンストヌルする堎合)。

ビットコむンは檻の䞭

あり 良い玠材 このトピックに぀いおは、ここで簡単に繰り返したす。

すでにむンストヌルされおいるシステムで䞊蚘のパラメヌタを有効にするこずもできたす。 これを行うには、ブヌトロヌダヌ ファむルを線集し、カヌネル パラメヌタを有効にする必芁がありたす。 *ee は 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

たた、システムの最新バヌゞョンがむンストヌルされおいるこずを確認する必芁がありたす。 すべおのアップデヌトずアップグレヌドを実行する。 たずえば、私たちの堎合、最新バヌゞョンぞのアップグレヌドが必芁です。理由は次のずおりです。 プレむンストヌル むメヌゞは XNUMX か月から XNUMX 幎遅れたす。 そこで、SSH ポヌトをデフォルトずは異なるものに倉曎し、キヌ認蚌を远加し、パスワヌド認蚌を無効にしたす。

次に、蚭定したす aide、システム構成ファむルのステヌタスを監芖したす。 さらに詳しく読むこずができたす ここで.

pkg install aide

そしおcrontabを線集しおください

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

オンにする システム監査

sysrc auditd_enable=YES

# service auditd start

この問題を管理する方法は、に完党に説明されおいたす ガむド.

ここで再起動し、サヌバヌ䞊の゜フトりェアに進みたす。 各サヌバヌは、コンテナヌたたは完党な仮想マシンのハむパヌバむザヌです。 したがっお、完党仮想化を䜿甚する堎合は、プロセッサが VT-x ず EPT をサポヌトしおいるこずが重芁です。

䜿甚するコンテナヌず仮想マシンを管理するため CBSD から オレノォル、この玠晎らしいナヌティリティのおかげで、圌のさらなる健康ず祝犏を祈りたす。

コンテナ たたドッカヌか䜕か

そしお、ここではない。 FreeBSD刑務所 はコンテナ化のための優れたツヌルですが、前述の cbsd セルず呌ばれるこれらのコンテナを調敎したす。

ケヌゞは、最終的には個々のサヌビスやプロセスを完党に分離する必芁がある、さたざたな目的のむンフラストラクチャを構築するための非垞に効果的な゜リュヌションです。 基本的にはホスト システムのクロヌンですが、完党なハヌドりェア仮想化は必芁ありたせん。 このおかげで、リ゜ヌスは「ゲスト OS」に費やされるのではなく、実行される䜜業にのみ費やされたす。 セルが内郚ニヌズに䜿甚される堎合、これはリ゜ヌスを最適に䜿甚するための非垞に䟿利な゜リュヌションです。必芁に応じお、XNUMX 台のハヌドりェア サヌバヌ䞊の倚数のセルがそれぞれ個別にサヌバヌ リ゜ヌス党䜓を䜿甚できたす。 通垞、さたざたなサブサヌビスには远加が必芁であるこずを考慮しおください。 サヌバヌ間のセルのバランスを適切に蚈画し、バランスをずれば、リ゜ヌスを異なる時間に䜿甚しおも、XNUMX 台のサヌバヌから最倧のパフォヌマンスを匕き出すこずができたす。 必芁に応じお、セルに䜿甚するリ゜ヌスの制限を䞎えるこずもできたす。

ビットコむンは檻の䞭

完党仮想化に぀いおはどうでしょうか?

私の知る限り cbsd 仕事をサポヌトする bhyve XEN ハむパヌバむザヌ。 XNUMX぀目は䜿ったこずがありたせんが、XNUMX぀目は比范的新しいものです FreeBSD のハむパヌバむザヌ。 䜿甚䟋を芋おみたしょう bhyve 以䞋の䟋では。

ホスト環境のむンストヌルず構成

FSを䜿甚しおいたす ZFS。 これは、サヌバヌスペヌスを管理するための非垞に匷力なツヌルです。 ZFS のおかげで、ディスクからさたざたな構成のアレむを盎接構築したり、スペヌスを動的に「ホット」拡匵したり、デッドディスクを倉曎したり、スナップショットを管理したりするこずができたす。これらに぀いおは䞀連の蚘事で説明できたす。 サヌバヌずそのディスクに戻りたしょう。 むンストヌルの開始時に、暗号化されたパヌティション甚にディスク䞊に空き領域を残したした。 䜕故ですか これは、システムが自動的に起動し、SSH 経由でリッスンするためです。

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

残りのスペヌスにディスクパヌティションを远加したす

geli init /dev/ada0p4

暗号化パスワヌドを入力しおください

geli attach /dev/ada0p4

もう䞀床パスワヌドを入力するず、デバむス /dev/ada0p4.eli が䜜成されたす。これは暗号化されたスペヌスです。 次に、/dev/ada1 ずアレむ内の残りのディスクに察しお同じこずを繰り返したす。 そしお新しいものを䜜成したす ZFS プヌル.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - さお、最䜎限の戊闘キットは準備できたした。 XNUMX 台のうち XNUMX 台に障害が発生した堎合に備えお、ディスクのミラヌリングされたアレむ。

新しい「プヌル」䞊にデヌタセットを䜜成する

zfs create vms/jails

pkg install cbsd — 私たちはチヌムを立ち䞊げ、セルの管理をセットアップしたした。

埌に cbsd むンストヌルされおいる堎合は、初期化する必芁がありたす。

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

そうですね、私たちはたくさんの質問に答えたすが、ほずんどがデフォルトの答えです。

*暗号化を䜿甚しおいる堎合は、デヌモンが cbsdd ディスクを手動たたは自動で埩号化するたで、自動的に開始されたせんでした (この䟋では、これは zabbix によっお行われたす)。

**私も NAT を䜿甚したせん cbsdで、自分で蚭定したす 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

ファむアりォヌル ポリシヌの蚭定も別のトピックであるため、BLOCK ALL ポリシヌの蚭定ずホワむトリストの蚭定に぀いおは詳しく説明したせん。これに぀いおは、以䞋を参照しおください。 公匏ドキュメント たたは Google で利甚できる膚倧な数の蚘事のいずれか。

さお...cbsd がむンストヌルされたした。次は、最初の䞻力補品である檻に入れられたビットコむンの悪魔を䜜成したす。

cbsd jconstruct-tui

ビットコむンは檻の䞭

ここではセル䜜成ダむアログが衚瀺されたす。 すべおの倀を蚭定したら、䜜成したしょう。

最初のセルを䜜成するずきは、セルのベヌスずしお䜕を䜿甚するかを遞択する必芁がありたす。 次のコマンドを䜿甚しお、FreeBSD リポゞトリからディストリビュヌションを遞択したす。 repo。 この遞択は、特定のバヌゞョンの最初のセルを䜜成する堎合にのみ行われたす (ホスト バヌゞョンよりも叀いバヌゞョンのセルをホストできたす)。

すべおが蚭眮されたら、ケヌゞを起動したす。

# cbsd jstart bitcoind

ただし、ケヌゞに゜フトりェアをむンストヌルする必芁がありたす。

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind 携垯コン゜ヌルに入るには

そしおすでにセル内に゜フトりェアをその䟝存関係ずずもにむンストヌルしたすホストシステムはクリヌンなたたです

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

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

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

ケヌゞ内にはビットコむンがありたすが、TOP ネットワヌク経由でいく぀かのケヌゞに接続したいため、匿名性が必芁です。 䞀般に、疑わしい゜フトりェアを含むほずんどのセルはプロキシ経由でのみ実行する予定です。 おかげで pf ロヌカル ネットワヌク䞊の特定の範囲の IP アドレスに察しお NAT を無効にし、TOR ノヌドに察しおのみ NAT を蚱可するこずができたす。 したがっお、たずえマルりェアがセルに䟵入したずしおも、倖郚ず通信するこずはほずんどなく、たずえ通信したずしおもサヌバヌの IP が明らかにされるこずはありたせん。 したがっお、サヌビスを「.onion」サヌビスずしお「転送」し、個々のセルにむンタヌネットにアクセスするためのプロキシずしお別のセルを䜜成したす。

# 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

ロヌカルアドレスでリッスンするように蚭定したす (すべおのセルで䜿甚可胜)

SOCKSPort 192.168.0.2:9050

完党な幞犏のために他に䜕が必芁でしょうか はい、Web には耇数のサヌビスが必芁です。 nginx を起動したしょう。nginx はリバヌスプロキシずしお機胜し、Let's Encrypt 蚌明曞の曎新を凊理したす。

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

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

そこで、150 MB の䟝存関係をケヌゞに配眮したした。 そしおホストはただクリヌンです。

埌で nginx のセットアップに戻りたしょう。nodejs ず Rust 䞊の支払いゲヌトりェむ甚にさらに XNUMX ぀のセルを䜜成する必芁がありたす。たた、Web アプリケヌションは䜕らかの理由で Apache ず PHP で構成されおおり、埌者には MySQL デヌタベヌスも必芁です。

# cbsd jsconstruct-tui

# cbsd jstart paygw

# jexec paygw

paygw:/@[15:55] # pkg install git node npm

paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

...さらに 380 MB のパッケヌゞが分離されたした

次に、git を䜿甚しおアプリケヌションをダりンロヌドし、起動したす。

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

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

450MBのパッケヌゞ。 檻の䞭。

ここでは、開発者に SSH 経由でセルに盎接アクセスできるようにしたす。開発者はそこですべおを自分で行いたす。

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

Port 2267 — セルの SSH ポヌトを任意のポヌトに倉曎したす

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

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

サヌビスは実行䞭です。あずはルヌルを远加するだけです。 pf ファむアりォヌル

私たちのセルがどのような IP を持っおいるか、そしお私たちの「ロヌカル゚リア」が䞀般的にどのようなものかを芋おみたしょう。

# 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

そしおルヌルを远加したす

# 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

さお、ここたで来たので、リバヌスプロキシのルヌルも远加したしょう。

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

さお、ビットコむンに぀いお少し説明したす

私たちが持っおいるのは、倖郚に公開され、ロヌカルで支払いゲヌトりェむず通信する Web アプリケヌションです。 次に、ビットコむンネットワヌク自䜓ず察話するための䜜業環境、぀たりノヌドを準備する必芁がありたす。 bitcoind これは、ブロックチェヌンのロヌカル コピヌを最新の状態に保぀デヌモンにすぎたせん。 このデヌモンには RPC ずりォレットの機胜がありたすが、アプリケヌション開発にはさらに䟿利な「ラッパヌ」がありたす。 たず最初に、 electrum CLIりォレットです。 この財垃 私たちはそれをビットコむンの「コヌルドストレヌゞ」ずしお䜿甚したす。䞀般に、ビットコむンはナヌザヌがアクセスできるシステムの「倖郚」に、䞀般的に誰からも離れた堎所に保管する必芁がありたす。 GUI もあるので、同じりォレットを䜿甚したす。
ラップトップ。 今のずころ、パブリックサヌバヌで Electrum を䜿甚し、埌で別のセルで起動したす。 ゚レクトラムX誰にも䞀切䟝存しないように。

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

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

ケヌゞにはさらに 700 MB の゜フトりェアが入っおいたす

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"
}

これでりォレットが䜜成されたした。

wallet@electrum:/ % electrum-3.6 listaddresses

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

wallet@electrum:/ % electrum-3.6 help

私たちぞ オンチェヌン 今埌は限られた数の人のみがりォレットに接続できるようになりたす。 倖郚からこのセルにアクセスできないようにするため、SSH 経由の接続は TOP (VPN の分散バヌゞョン) を介しお行われたす。 セル内で SSH を起動したすが、ホスト䞊の pf.conf には觊れたせん。

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

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

次に、りォレットのむンタヌネットアクセスを備えた携垯電話をオフにしたしょう。 NAT 化されおいない別のサブネット空間からの IP アドレスを䞎えおみたしょう。 たずは倉えおみたしょう /etc/pf.conf ホスト䞊で

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" に倉曎したしょう JAIL_IP_POOL="192.168.0.0/25"したがっお、すべおのアドレス 192.168.0.126-255 はむンタヌネットに盎接アクセスできなくなりたす。 ゜フトりェア「゚アギャップ」ネットワヌクの䞀皮。 NAT ルヌルはそのたた残りたす

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

ルヌルの過負荷

# pfctl -f /etc/pf.conf

さあ、私たちのセルを手に入れたしょう

# 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

うヌん、しかし今床はシステム自䜓が機胜しなくなるでしょう。 ただし、システム プロキシを指定するこずはできたす。 ただし、TOR では SOCKS5 プロキシであるため、䟿宜䞊 HTTP プロキシも必芁であるずいうこずが XNUMX ぀ありたす。

# 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

さお、私たちのシステムには 5 ぀のプロキシ サヌバヌがあり、どちらも TOR 経由で出力されたす: sock192.168.0.2://9050:XNUMX ず http://192.168.0.6:8123

これでりォレット環境を蚭定できるようになりたした

# 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

さお、これでシェルはプロキシの䞋で動䜜するようになりたす。 パッケヌゞをむンストヌルしたい堎合は、に远加する必芁がありたす /usr/local/etc/pkg.conf ケヌゞの根元の䞋から

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

さお、今床は TOR 隠しサヌビスをりォレット セル内の SSH サヌビスのアドレスずしお远加したす。

# 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

これが接続アドレスです。 ロヌカルマシンから確認しおみたしょう。 ただし、最初に SSH キヌを远加する必芁がありたす。

wallet@electrum:/ % mkdir ~/.ssh

wallet@electrum:/ % ee ~/.ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

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

぀ながりたしょう (これが機胜するには、9050 をリッスンするロヌカル TOR デヌモンが必芁です)

user@local ~$ ssh remotebtc

The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts.
FreeBSD 12.1-RELEASE-p1 GENERIC 
To save disk space in your home directory, compress files you rarely
use with "gzip filename".
        -- Dru <[email protected]>
wallet@electrum:~ % logout

成功

むンスタントおよびマむクロペむメントを䜿甚するには、ノヌドも必芁です 雷ネットワヌク、実際、これはビットコむンを䜿甚する䞻な䜜業ツヌルになりたす。 う*C雷デヌモンずしお䜿甚するのは Sparko プラグむン、本栌的な HTTP (REST) むンタヌフェむスであり、オフチェヌンずオンチェヌンの䞡方のトランザクションを操䜜できたす。 c-lightning 機胜するために必芁な bitcoind でも、はい。

*Lightning Network プロトコルにはさたざたな蚀語でさたざたな実装がありたす。 私たちがテストしたものの䞭で、c-lightning (C で曞かれた) が最も安定しおおり、リ゜ヌス効率が高いず思われたした。

# 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

必芁なものがすべおコンパむルおよびむンストヌルされおいる間に、次の RPC ナヌザヌを䜜成したしょう。 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

セル間の無秩序な切り替えは、ナヌティリティに泚目するず、それほど無秩序ではないこずがわかりたす。 tmuxを䜿甚するず、XNUMX ぀のセッション内に耇数の端末サブセッションを䜜成できたす。 アナログ screen

ビットコむンは檻の䞭

したがっお、ノヌドの実際の IP を明らかにしたくなく、すべおの金融取匕を TOP を通じお実行したいず考えおいたす。 したがっお、別の .onion は必芁ありたせん。

# 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

次に、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 ~

たた、bitcoin-cli ず通信するナヌティリティの蚭定ファむルを䜜成する必芁もありたす。 bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

小切手

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

打ち䞊げ lightningd

lightning@lightning:~ % lightningd --daemon

圌自身 lightningd ナヌティリティを制埡できたす lightning-cliたずえば、次のようになりたす。

lightning-cli newaddr 新しい支払いのアドレスを取埗する

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

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all りォレット内のすべおのお金をアドレス (すべおのオンチェヌン アドレス) に送信したす。

オフチェヌン操䜜甚のコマンドも lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay など

アプリケヌションずの通信には REST API がありたす。

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

芁玄したす

# 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

ご芧のずおり、ビットコむンは 190 GB のスペヌスをすべお占有したす。 テスト甚に別のノヌドが必芁な堎合はどうすればよいでしょうか? ここで ZFS が圹に立ちたす。 助けを借りお cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com スナップショットを䜜成し、このスナップショットに新しいセルをアタッチできたす。 新しいセルには独自のスペヌスがありたすが、ファむル システムでは珟圚の状態ず元の状態の差分のみが考慮されたす (少なくずも 190 GB を節玄したす)。

各セルは独自の個別の ZFS デヌタセットであり、これは非垞に䟿利です。 ZFS では、 SSH 経由でスナップショットを送信するなど、他にもさたざたな䟿利な機胜を実行できたす。 すでにたくさんあるので説明したせん。

ホストのリモヌト監芖の必芁性にも泚目する䟡倀がありたす。これらの目的のために、 ザビックス.

B - 安党性

セキュリティに関しおは、むンフラストラクチャのコンテキストにおける䞻芁な原則から始めたしょう。

КПМфОЎеМцОальМПсть - UNIX 系システムの暙準ツヌルは、この原則の実装を保蚌したす。 システムの論理的に分離された各芁玠 (セル) ぞのアクセスを論理的に分離したす。 アクセスは、ナヌザヌの個人キヌを䜿甚した暙準のナヌザヌ認蚌によっお提䟛されたす。 ゚ンドセル間および゚ンドセルぞのすべおの通信は、暗号化された圢匏で行われたす。 ディスク暗号化のおかげで、ディスクを亀換したり、別のサヌバヌに移行したりするずきに、デヌタの安党性を心配する必芁がありたせん。 唯䞀の重芁なアクセスはホスト システムぞのアクセスです。そのようなアクセスは通垞、コンテナ内のデヌタぞのアクセスを提䟛するためです。

誠実さ 「この原則の実装は、いく぀かの異なるレベルで行われたす。 たず、サヌバヌ ハヌドりェア、ECC メモリの堎合、ZFS はすでに「すぐに䜿甚できる」情報ビット レベルでデヌタの敎合性を管理しおいるこずに泚意するこずが重芁です。 むンスタント スナップショットを䜿甚するず、い぀でも実行䞭にバックアップを䜜成できたす。 䟿利なセルの゚クスポヌト/むンポヌト ツヌルにより、セルの耇補が簡単になりたす。

可甚性 - これはすでにオプションです。 それはあなたの名声の皋床ず、あなたを嫌う人がいるずいう事実によっお異なりたす。 この䟋では、りォレットが TOP ネットワヌクからのみアクセスできるようにしたした。 必芁に応じお、ファむアりォヌル䞊のすべおをブロックし、トンネル経由のみでサヌバヌぞのアクセスを蚱可できたす (TOR たたは VPN は別の問題です)。 したがっお、サヌバヌは倖郚の䞖界から可胜な限り遮断され、サヌバヌの可甚性に圱響を䞎えるこずができるのは私たち自身だけになりたす。

拒吊の䞍可胜性 - そしお、これは、今埌の運甚ず、ナヌザヌの暩利、アクセスなどに関する正しいポリシヌの遵守に䟝存したす。 しかし、適切なアプロヌチをずれば、すべおのナヌザヌのアクションが監査され、暗号化゜リュヌションのおかげで、誰がい぀特定のアクションを実行したかを明確に特定するこずが可胜になりたす。

もちろん、説明した構成は、垞にどのようにあるべきかを瀺す絶察的な䟋ではなく、非垞に柔軟なスケヌリングおよびカスタマむズ機胜を維持しながら、どのように構成できるかを瀺す䞀䟋です。

完党仮想化に぀いおはどうでしょうか?

CBSD を䜿甚した完党仮想化に぀いおは、次のこずが可胜です。 ここをクリック。 仕事のためだけに远加したす bhyve いく぀かのカヌネル オプションを有効にする必芁がありたす。

# cat /etc/rc.conf

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

# cat /boot/loader.conf

...
vmm_load="YES"
...

したがっお、突然 Docker を起動する必芁がある堎合は、debian をむンストヌルしお実行しおください。

ビットコむンは檻の䞭

それだけです

私が共有したかったのはそれだけだず思いたす。 蚘事が気に入ったら、ビットコむンを送っおください - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc。 動䜜䞭のセルを詊しおビットコむンを持っおいる堎合は、私のサむトにアクセスしおください。 ペットプロゞェクト.

出所 habr.com