Il se trouve que je suis un administrateur professionnel de systèmes informatiques et de réseaux (en bref: sysadmin), et il m'est arrivé de dire au prof. l'activité d'une grande variété de systèmes, y compris ceux qui nécessitent [en raison de] les mesures de sécurité ci-dessus. Et il s'est avéré qu'il y a quelque temps, j'ai trouvé le Bitcoin intéressant pour moi, et non seulement l'ai utilisé, mais j'ai également lancé plusieurs microservices afin d'apprendre à travailler de manière indépendante avec le réseau Bitcoin (c'est du p2p après tout) du point de vue du développement. (Je suis, bien sûr, un tel développeur, donc, passé). Mais je ne parle pas de développement, je parle d'un environnement sûr et efficace pour les applications.
Les technologies financières ( fintech ) vont de pair avec la sécurité de l'information ( infosec ) et les premières peuvent fonctionner sans les secondes, mais pas pour longtemps. C'est pourquoi je veux partager mon expérience et l'ensemble d'outils que j'utilise, qui comprend à la fois la fintech et infosec , et en même temps, il peut également être utilisé dans un but plus large ou complètement différent. Dans cet article, je ne vous dirai pas tant sur Bitcoin, mais sur le modèle d'infrastructure pour le développement et le fonctionnement des services financiers (et pas seulement) - en un mot, les services où «B» compte. Cela s'applique à la fois à l'échange Bitcoin et au zoo d'entreprise le plus typique des services d'une petite entreprise sans aucun bitcoin.
Je tiens à noter que je suis un partisan des principes de «garder les choses stupides simples» et «moins c'est plus» , de sorte que l'article et celui qui y est décrit auront les propriétés sur lesquelles reposent ces principes.
Scénario imaginaire: examinons un exemple d'échangeur de bitcoins. Nous avons décidé de commencer à échanger des roubles, des dollars, des euros contre des bitcoins et vice versa, et nous avons déjà une solution de travail, mais pour d'autres monnaies numériques comme le kiwi et le webmoney, c'est-à-dire nous avons fermé tous les problèmes juridiques, il existe une application prête à l'emploi qui sert de passerelle de paiement pour les roubles, les dollars et les euros et d'autres systèmes de paiement. Il est lié à nos comptes bancaires et possède une sorte d'API pour nos applications finales. Nous avons également une application Web qui agit comme un échangeur pour les utilisateurs, comme un compte kiwi ou webmoney typique - créez un compte, ajoutez une carte, etc. Il communique avec notre application de passerelle, bien qu'en utilisant l'API REST en LAN. Et nous avons donc décidé de connecter des bitcoins et en même temps de mettre à niveau l'infrastructure, car au début, tout était précipité sur des boîtes virtuelles dans le bureau sous la table ... ils ont commencé à utiliser le site, et nous avons commencé à nous soucier de la disponibilité et des performances.
Commençons donc par la sélection principale - un serveur. Parce que l'entreprise dans notre exemple est petite et nous faisons confiance à l'hébergeur (OVH), nous choisirons une option budgétaire dans laquelle vous ne pouvez pas installer le système à partir de l'image .iso d'origine, mais cela n'a pas d'importance, le service de sécurité informatique analysera certainement l'image installée. Et quand nous serons grands, nous louerons généralement notre placard sous clé avec un accès physique limité, ou peut-être nous construirons notre propre DC. Dans tous les cas, il convient de se rappeler que lors de la location de fer et de l'installation d'images prêtes à l'emploi, il est possible que votre système ait un «cheval de Troie de l'hôte», qui dans la plupart des cas n'est pas destiné à vous suivre, mais à offrir des outils de gestion plus pratiques. serveur.
Installation du serveur
Ici, tout est simple. Nous choisissons du fer adapté à nos besoins. Sélectionnez ensuite l'image FreeBSD. Eh bien, soit nous nous connectons (dans le cas d'un autre hébergeur et de notre propre matériel) via IPMI ou avec un moniteur et alimentons l'image .iso FreeBSD au téléchargement. Pour les installations orchestrales, j'utilise Ansible et mfsbsd . La seule chose, dans notre cas avec kimsufi, nous avons choisi une installation personnalisée pour que les deux disques dans le miroir n'aient que des partitions «boot» et / home «ouvertes», le reste de l'espace disque sera crypté, mais plus à ce sujet plus tard.

Le système est installé de manière standard, je ne m'arrêterai pas là, je note juste qu'avant de commencer l'opération, faites attention aux options de durcissement , que bsdinstaller
propose à la fin de l'installation (si vous installez le système vous-même):

Il y a du bon matériel sur ce sujet, bref je vais le répéter ici.
Il est possible d'activer les paramètres ci-dessus de la même manière sur un système déjà installé. Pour ce faire, modifiez le fichier du chargeur de démarrage et activez les paramètres du noyau. * ee est un éditeur comme celui-ci dans 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
Il convient également de vous assurer que la dernière version du système est installée et d' effectuer toutes les mises à jour et mises à niveau . Dans notre cas, par exemple, une mise à niveau vers la dernière version est requise, car les images de pré-installation accusent un retard de six mois à un an. Eh bien, nous changeons le port SSH par un autre par défaut, ajoutons l'authentification par clé et désactivons-le avec un mot de passe.
Ensuite, nous configurons l' aide
, en surveillant l'état des fichiers de configuration du système. Plus mâché peut être lu ici .
pkg install aide
et éditez notre 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
Activer l' audit du système
sysrc auditd_enable=YES
# service auditd start
La façon d'administrer cette entreprise est bien décrite dans le manuel .
Maintenant, nous redémarrons et continuons avec le logiciel sur le serveur. Chaque serveur est un hyperviseur pour les conteneurs ou les machines virtuelles complètes. Par conséquent, il est important que le processeur prenne en charge VT-x et EPT si nous prévoyons d'utiliser la virtualisation complète.
En tant que gestionnaire de conteneurs et de machines virtuelles, j'utilise clevd de olevole , je lui souhaite plus de santé et d'avantages pour ce merveilleux utilitaire!
Des conteneurs? Encore une fois docker ou quoi?
Mais non. FreeBSD Jails est un excellent outil de conteneurisation, mais le cbsd
mentionné cbsd
pour orchestrer ces conteneurs, dont le nom est des cellules.
Une cellule est une solution extrêmement efficace pour construire une infrastructure à des fins diverses, ce qui nécessite en fin de compte l'isolement complet des services ou des processus individuels. Il s'agit essentiellement d'un clone du système hôte, mais il ne nécessite pas de virtualisation complète du matériel. Et les ressources dues à cela ne sont pas dépensées sur un "OS invité", mais uniquement sur le travail effectué. Lorsque les cellules sont utilisées pour des besoins internes, il s'agit d'une solution très pratique pour une utilisation optimale de la ressource - un groupe de cellules sur un serveur de fer peut utiliser individuellement chacune des ressources du serveur si nécessaire. Étant donné que des sous-services généralement différents nécessitent des frais supplémentaires. à différents moments, vous pouvez extraire les performances maximales d'un serveur, si vous planifiez et déséquilibrez correctement les cellules entre les serveurs. Si nécessaire, les cellules peuvent également définir des limites sur la ressource utilisée.

Et la virtualisation complète?
Pour autant que je sache, cbsd
prend en charge le travail des hyperviseurs bhyve
et XEN. Je n'ai jamais utilisé le second, mais le premier est un hyperviseur relativement jeune de FreeBSD . Nous allons voir un exemple d'utilisation de bhyve
dans l'exemple ci-dessous.
Installer et configurer l'environnement hôte
Nous utilisons FS ZFS . Il s'agit d'un outil extrêmement puissant pour gérer l'espace serveur. Grâce à ZFS, vous pouvez créer directement des tableaux de différentes configurations directement à partir de disques, étendre dynamiquement l'espace «à chaud», changer les disques morts, gérer les instantanés et bien plus encore qui peuvent être décrits dans une série d'articles. Revenons à notre serveur et à ses disques. Au début de l'installation sur les disques, nous avons laissé de l'espace libre pour les partitions chiffrées. Pourquoi C'est ainsi que le système augmenterait automatiquement et écouterait sur SSH.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
ajoutez la partition de disque à l'espace restant
geli init /dev/ada0p4
conduire notre mot de passe de cryptage
geli attach /dev/ada0p4
entrez à nouveau le mot de passe et nous avons l'appareil /dev/ada0p4.eli - c'est notre espace crypté. Ensuite, nous répétons la même chose pour / dev / ada1 et les autres disques du tableau. Et créez un nouveau pool ZFS .
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- eh bien, nous avons maintenant le jeu de combat minimum prêt. Une matrice de disques en miroir en cas de défaillance de l'un des trois.
Créer un jeu de données sur le nouveau "pool"
zfs create vms/jails
pkg install cbsd
- exécutez la commande et installez la gestion de nos cellules.
Une fois cbsd
installé, il doit être initialisé:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Eh bien, nous répondons à un tas de questions, principalement des réponses par défaut.
* Si vous utilisez le chiffrement, il est important que le démon cbsdd
démarre pas automatiquement tant que vous ne déchiffrez pas les disques manuellement ou automatiquement (dans notre exemple, zabbix le fait)
** De plus, je n'utilise pas NAT de cbsd
, mais le configure moi-même en 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
La configuration des politiques de pare-feu est également un sujet distinct, donc je ne vais pas approfondir la configuration de BLOCER TOUTES les politiques et définir des listes blanches; vous pouvez le faire en lisant la documentation officielle ou l'un des nombreux articles disponibles sur Google.
Eh bien ... nous avons installé cbsd, il est temps de créer notre premier cheval de bataille - un démon bitcoin dans une cage!
cbsd jconstruct-tui

Ici, nous voyons le dialogue de création de cellules. Une fois toutes les valeurs définies, créez!
Lors de la création de la première cellule, vous devez choisir quoi utiliser comme base pour les cellules. Je sélectionne le kit de distribution dans le référentiel FreeBSD avec la commande repo
. Ce choix est effectué uniquement lors de la création de la première cellule d'une version spécifique (vous pouvez héberger des cellules de toutes les versions antérieures à la version hôte).
Une fois que tout est installé - exécutez la cellule!
# cbsd jstart bitcoind
Mais nous devons installer un logiciel dans la cage.
# jls
JID IP Address Hostname Path 1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
pour entrer dans la console cellulaire
et déjà à l'intérieur de la cellule nous installons le logiciel avec ses dépendances (notre système hôte reste propre)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Il y a du bitcoin dans la cellule, mais nous avons besoin d'anonymat, car nous voulons nous connecter à certaines cellules via le réseau TOP. En général, nous prévoyons de transformer la plupart des cellules contenant des logiciels suspects uniquement via un proxy. Grâce à pf
vous pouvez désactiver NAT pour une plage spécifique d'adresses IP sur le réseau local, et autoriser NAT uniquement pour notre nœud TOR. Ainsi, même si un logiciel malveillant pénètre dans la cellule, il ne contactera probablement pas le monde extérieur et s'il le fait, il ne révélera pas l'IP de notre serveur. par conséquent, nous créons une cellule de plus, pour les services de "transfert" en tant que service ".onion" et en tant que proxy pour accéder à Internet à des cellules individuelles.
# 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
Nous mettons l'écoute sur l'adresse locale (disponible pour toutes les cellules)
SOCKSPort 192.168.0.2:9050
Qu'est-ce qui nous manque encore pour un bonheur complet. Oui, nous avons besoin d'un service pour notre site Web, peut-être pas un. Exécutez nginx, qui agira comme proxy inverse et se chargera de renouveler les certificats Let's Encrypt
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Et maintenant, nous mettons 150 Mo de dépendances dans une cage. Et l'hôte est toujours propre.
Revenons à la configuration de nginx plus tard, nous devons augmenter deux cellules supplémentaires pour notre passerelle de paiement vers nodejs et rust et une application Web, qui pour une raison quelconque est sur apache et pkhp, et la base de données MySQL est également nécessaire pour ce dernier.
# 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
... et 380 Mo de packages en plus
Ensuite, nous pompons notre application avec git et l'exécutons.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
Packages de 450 Mo. dans la cage.
ici, nous donnons au développeur un accès via SSH directement à la cellule, ils feront tout eux-mêmes là-bas:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
- changez le port de la cellule SSH en n'importe quel arbitraire
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
Eh bien, le service est en cours d'exécution, il reste à ajouter une règle dans le pare-feu pf
Voyons quelle IP nous avons dans les cellules et à quoi ressemble notre "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
et ajouter une règle
# 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
Eh bien, puisque nous sommes ici, nous ajouterons la même règle sur le proxy inverse:
## 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
Eh bien, maintenant un peu sur les bitcoins
Ce que nous avons - nous avons une application web accessible de l'extérieur et qui communique localement avec notre passerelle de paiement. Nous devons maintenant préparer un environnement de travail pour l'interaction avec le réseau bitcoin lui-même - le nœud bitcoind
n'est qu'un démon qui prend en charge une copie locale de la blockchain actuelle. Ce démon a des fonctionnalités RPC et de portefeuille, mais il existe des «wrappers» plus pratiques pour développer des applications. Pour commencer, nous avons décidé de mettre electrum
- c'est un portefeuille CLI. Nous utiliserons ce portefeuille comme un "stockage à froid" pour nos bitcoins - en général, ces bitcoins qui devront être stockés "en dehors" du système accessibles aux utilisateurs et généralement loin de tout le monde. Il a également une interface graphique, nous allons donc utiliser le même portefeuille sur notre
ordinateurs portables. Alors que nous utiliserons l'électrum avec des serveurs publics, et plus tard dans une autre cellule, nous élèverons ElectrumX , afin qu'il ne dépende de personne du tout.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
encore 700 Mo de logiciels dans notre cage
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" }
Maintenant, nous avons créé un portefeuille.
wallet@electrum:/ % electrum-3.6 listaddresses
[ "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE", "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU", "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas", ... "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw", "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk" ]
wallet@electrum:/ % electrum-3.6 help
Désormais, seul un cercle restreint de personnes pourra se connecter à notre portefeuille en chaîne . Afin de ne pas ouvrir l'accès de l'extérieur à cette cellule, les connexions SSH se feront via TOR (une telle version décentralisée de VPN). Nous démarrons SSH dans la cellule, mais ne touchons pas notre pf.conf sur l'hôte.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Désactivez maintenant l'accès Internet à la cellule avec le portefeuille. Nous lui donnerons une adresse IP d'un autre espace de sous-réseau qui n'est pas basé sur NAT. Tout d'abord, changez /etc/pf.conf
sur l'hôte
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
JAIL_IP_POOL="192.168.0.0/25"
par JAIL_IP_POOL="192.168.0.0/25"
, de sorte que toutes les adresses 192.168.0.126-255 n'auront pas d'accès direct à Internet. Une sorte de réseau "air-gap" logiciel. Et la règle NAT reste telle qu'elle était
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Surcharger les règles
# pfctl -f /etc/pf.conf
Maintenant, prends notre cage
# cbsd jconfig jname=electrum


jset mode=quiet jname=electrum ip4_addr="192.168.0.200" Remove old IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias Setup new IP: /sbin/ifconfig em0 inet 192.168.0.200 alias ip4_addr: 192.168.0.200
Hmm, mais maintenant le système lui-même cessera de fonctionner pour nous. Cependant, nous pouvons spécifier un proxy système. Mais il y a une chose mais, sur TOR, c'est un proxy SOCKS5, et pour plus de commodité, nous aurions également un proxy HTTP.
# cbsd jsconstruct-tui
# cbsd jstart polipo
# jexec polipo
polipo:/@[9:28] # pkg install polipo
polipo:/@[9:28] # ee /usr/local/etc/polipo/config
socksParentProxy = "192.168.0.2:9050" socksProxyType = socks5
polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
Eh bien, maintenant dans notre système, il y a deux proxys, et les deux sortent via TOR: socks5: //192.168.0.2: 9050 et http://192.168.0.6:8123
Vous pouvez maintenant personnaliser l'environnement de notre portefeuille
# 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
Eh bien, maintenant le shell fonctionnera sous un proxy. Si vous souhaitez installer des packages, il convient d'ajouter à /usr/local/etc/pkg.conf
sous la racine de la cellule
pkg_env: { http_proxy: "http://my_proxy_ip:8123", }
Eh bien, il est maintenant temps d'ajouter le service caché TOR comme adresse de notre service SSH dans la cellule du portefeuille.
# 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
Ici, c'est notre adresse de connexion. Vérifions à partir de la machine locale. Mais vous devez d'abord ajouter notre clé SSH:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local
Eh bien, à partir de la machine Linux cliente
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
Se connecter (pour que cela fonctionne, vous avez besoin d'un démon TOR local qui écoute sur le 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
Succès!
Pour travailler avec des micro-paiements instantanés, nous avons également besoin du nœud Lightning Network , en fait, ce sera notre principal outil de travail avec le bitcoin. * C-lightning , que nous allons utiliser comme démon, a un plugin Sparko , qui est une interface HTTP (REST) à part entière et permet de travailler à la fois avec les transactions hors chaîne et les transactions en chaîne. c-lightning
nécessite un nœud bitcoind
pour fonctionner.
* Il existe différentes implémentations sur différents PL du protocole Lightning Network. Parmi ceux que nous avons testés, c-lightning (écrit en C) semble être le plus stable et le plus économe en ressources
# 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
Alors que tout ce dont vous avez besoin est compilé et installé, créez l'utilisateur RPC pour lightningd
dans 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
Ma commutation chaotique entre les cellules n'est pas si chaotique si vous notez l'utilitaire tmux
, qui vous permet de créer de nombreuses sous-sessions de terminaux au sein d'une session. Analogique: screen

Teckels, nous ne voulons pas faire briller la véritable IP de notre nœud, et nous voulons effectuer toutes les transactions financières via le TOP. Par conséquent, vous avez besoin d'un .onion de plus.
# 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
créez maintenant une config pour 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 ~
vous devez également créer un fichier de configuration pour bitcoin-cli, un utilitaire qui communique avec bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1 rpcuser=test rpcpassword=test
vérifier
lightning@lightning:~ % bitcoin-cli echo "test"
[ "test" ]
exécuter lightningd
lightning@lightning:~ % lightningd --daemon
lightning-cli
lui-même peut être contrôlé par l' lightning-cli
, par exemple:
lightning-cli newaddr
obtient l'adresse pour le nouveau paiement entrant
{ "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv", "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv" }
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
envoyer à l'adresse tout l'argent du portefeuille (toutes les adresses en chaîne)
En outre, les commandes pour les opérations hors chaîne de la lightning-cli invoice
lightning-cli listinvoices
lightning-cli pay
etc.
Eh bien, pour la communication avec l'application, nous avons REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Pour résumer
# 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 .