碰巧我是计算机系统和网络的专业管理员(简称:sysadmin),我碰巧告诉教授。 各种系统的活动,包括那些需要[由于]上述安全措施的系统。 事实证明,前一段时间我发现自己对比特币很感兴趣,不仅使用它,而且还推出了一些微服务,以便从发展的角度学习如何独立于比特币网络(毕竟是p2p)工作。 (我当然是这样的dev
,所以过去了)。 但是我不是在谈论开发,而是在为应用程序提供一个安全有效的环境。
金融技术( fintech )与信息安全( infosec ) 并驾齐驱 ,第一种可以在没有第二种的情况下工作,但是时间不会很长。 这就是为什么我想分享我的经验和我使用的工具集,包括fintech和infosec ,同时还可以将其用于更广泛或完全不同的目的。 在本文中,我将向您介绍的不是比特币,而是关于金融(不仅是)服务的开发和运营的基础架构模型-简而言之,是那些涉及“ B”的服务。 这不仅适用于比特币交易所,而且适用于没有任何形式的无比特币的小公司服务的最典型的公司动物园。
我想指出的是,我支持“保持愚蠢简单”和“少即是多”的原则 ,因此本文及其中所描述的都将具有这些原则所具有的特性。
虚构的场景:让我们看一个比特币交换器的示例。 我们决定开始将卢布,美元,欧元换成比特币,反之亦然,我们已经有了一个可行的解决方案,但是对于其他数字货币,例如奇异果和网络货币,即 我们已经解决了所有法律问题,有一个现成的应用程序可以用作卢布,美元和欧元以及其他支付系统的支付网关。 它与我们的银行帐户绑定,并为最终应用程序提供了某种API。 我们还有一个Web应用程序,可以充当用户的交换者,例如典型的奇异鸟或webmoney帐户-打开帐户,添加卡等。 它使用LAN中的REST API与我们的网关应用程序进行通信。 因此,我们决定连接比特币并同时升级基础架构,因为 最初,所有东西都被扔到了桌子下面办公室的虚拟盒子上……他们开始使用该站点,我们开始担心正常运行时间和性能。
因此,让我们从主要的一个开始-服务器选择。 因为 如果我们的示例中的业务很小,并且我们信任托管者(OVH),我们将选择一个预算选项,在该选项中,您无法从原始.iso映像安装系统,但没关系,IT安全部门一定会分析已安装的映像。 当我们长大后,通常会在物理访问受限的情况下,用锁和钥匙租用壁橱,或者我们可能会建立自己的DC。 无论如何,值得记住的是,在租用铁并安装现成的图像时,您的系统有可能会出现“来自主机的木马”,在大多数情况下,该木马并非旨在跟踪您,而是提供更方便的管理工具。服务器。
服务器安装
这里的一切都很简单。 我们选择适合我们需求的铁。 然后选择FreeBSD映像。 好吧,我们可以通过IPMI或使用监视器连接(在使用其他主机和我们自己的硬件的情况下),然后将.iso FreeBSD映像提供给下载文件。 对于管弦乐队的安装,我使用Ansible和mfsbsd 。 唯一的情况是,在使用kimsufi的情况下,我们选择了自定义安装,以便镜像中的两个磁盘仅具有“启动”和/ 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
还值得确保安装了最新版本的系统,并完成所有更新和升级 。 例如,在我们的情况下,需要升级到最新版本,因为 安装前映像要落后六个月到一年。 好了,我们默认将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,这一点很重要。
作为容器和虚拟机管理人员,我使用olevole的clevd ,希望他为这个出色的实用程序带来更多的健康和收益!
容器? 还是docker还是什么?
但是没有 FreeBSD Jails是一个很棒的容器化工具,但是提到的cbsd
用于编排这些名称为cell的容器的。
单元是用于出于各种目的构建基础结构的极其有效的解决方案,最终需要完全隔离单个服务或流程。 这本质上是主机系统的克隆,但不需要硬件的完全虚拟化。 因此,资源不会花费在“来宾操作系统”上,而只会花费在执行的工作上。 当将单元用于内部需求时,这对于资源的最佳利用而言是非常方便的解决方案-必要时,一台铁服务器上的一堆单元可以各自单独使用整个服务器资源。 鉴于通常不同的子服务需要额外的费用。 如果您正确地计划和平衡服务器之间的单元,则可以在不同时间使用资源,从一台服务器中获得最大性能。 如有必要,单元也可以设置已使用资源的限制。

完全虚拟化又如何呢?
据我所知, cbsd
支持bhyve
和XEN虚拟机管理程序的工作。 我从未使用过第二个,但第一个是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
好,现在我们已准备好最低限度的战斗。 如果三个磁盘之一发生故障,则为镜像磁盘阵列。
在新的“池”上创建数据集
zfs create vms/jails
pkg install cbsd
运行命令,并为我们的单元安装管理。
安装cbsd
之后,需要对其进行初始化:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
好吧,我们回答了很多问题,默认情况下大多数都是答案。
*如果您使用加密,那么在手动或自动解密磁盘之前cbsdd
守护程序cbsdd
自动启动很重要(在我们的示例中, cbsdd
)
**另外,我不使用cbsd
NAT,而是自己在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
配置防火墙策略也是一个单独的主题,因此,我不会更深入地配置“全部阻止”策略和设置白名单;您可以通过阅读官方文档或Google上提供的大量文章中的任何一种来做到这一点。
好吧...我们已经安装了cbsd,是时候创建我们的第一匹主力马了-一个关在笼子里的比特币恶魔!
cbsd jconstruct-tui

在这里,我们看到了单元格创建对话框。 设置所有值后,创建!
创建第一个单元格时,应选择用作单元格基础的内容。 我使用repo
命令从FreeBSD仓库中选择发行套件。 仅当创建特定版本的第一个单元格时才做出此选择(您可以托管比主机版本更早的任何版本的单元格)。
安装完所有组件后-运行单元!
# 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”服务,并作为访问Internet到各个单元的代理。
# 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
为了完全的幸福,我们仍然缺少什么。 是的,我们需要为我们的网站提供服务,也许不需要。 运行nginx,它将充当反向代理并负责续订“让我们加密”证书
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
现在,我们将150 MB的依赖项放入笼中。 而且主机还是干净的。
让我们稍后再配置nginx,我们需要为我们的到nodejs和rust的支付网关以及一个Web应用程序再增加两个单元,由于某些原因,它们位于apache和pkhp上,后者也需要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
450 MB软件包。 在笼子里。
在这里,我们为开发人员提供了通过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以及“ lokalka”的外观
# 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应用程序,它与我们的付款网关进行本地通信。 现在,我们需要准备一个与比特币网络本身进行交互的工作环境-比特币节点只是一个守护程序,它支持当前区块链的本地副本。 该守护程序具有RPC和钱夹功能,但是有一些更方便的“包装器”用于开发应用程序。 首先,我们决定electrum
-这是一个CLI钱包。 我们将使用此钱包作为比特币的“冷存储”-通常,那些比特币需要存储在用户可访问的系统外部,并且通常远离所有人。 他还具有GUI,因此我们将在我们的钱包中使用相同的钱包
笔记本电脑。 虽然我们将electrum与公共服务器一起使用,但稍后在另一个单元中,我们将引发ElectrumX ,以使它完全不依赖任何人。
# 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连接将通过TOR(这种VPN的分散版本)建立。 我们在单元中启动SSH,但不要触摸主机上的pf.conf。
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
现在,关闭对带有钱包的单元的Internet访问。 我们将从另一个不基于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将无法直接访问Internet。 一种软件“气隙”网络。 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代理。
# 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
好吧,现在我们的系统中有两个代理,并且都通过TOR输出:socks5://192.168.0.2:9050和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
连接(要正常工作,您需要一个本地TOR守护程序,该守护程序在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
成功!
要使用即时付款和小额付款,我们还需要闪电网络节点,实际上,这将是我们使用比特币的主要工具。 *我们将用作守护程序的C-lightning具有一个Sparko插件 ,它是一个完整的HTTP(REST)接口,并允许处理链下交易和链上交易。 c-lightning
需要一个bitcoind
节点才能起作用。
* 在闪电网络协议的不同PL上有不同的实现。 在我们测试过的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
编译并安装所需的一切后,在bitcoind
为lightningd
创建RPC用户
# 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
实用程序,那么我在单元格之间的混乱切换就不会那么混乱了,它允许您在一个会话中创建终端的许多子会话。 模拟: screen

腊肠犬,我们不想透露节点的真实IP,而是希望通过TOP进行所有金融交易。 因此,您还需要一个洋葱。
# 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
lightning-cli
本身可以由lightning-cli
程序控制,例如:
lightning-cli newaddr
获取新收款地址
{ "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv", "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv" }
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
发送到该地址所有钱包资金(所有链上地址)
此外,还包括针对lightning-cli listinvoices
lightning-cli invoice
, lightning-cli listinvoices
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
, 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 .