Bitcoin σε ένα κλουβί;

Έτυχε ότι στο επάγγελμα είμαι διαχειριστής συστημάτων και δικτύων υπολογιστών (συνοπτικά: διαχειριστής συστήματος) και είχα την ευκαιρία να το πω στον καθηγητή για λίγο περισσότερο από 10 χρόνια. τις δραστηριότητες μιας μεγάλης ποικιλίας συστημάτων, συμπεριλαμβανομένων εκείνων που απαιτούν [ακραία] μέτρα ασφαλείας. Έτυχε και πριν λίγο καιρό να το βρήκα ενδιαφέρον bitcoin, και όχι μόνο το χρησιμοποίησε, αλλά και λάνσαρε πολλές μικρο-υπηρεσίες για να μάθουν πώς να εργάζονται ανεξάρτητα με το δίκτυο Bitcoin (γνωστός και ως p2p τελικά) από τη σκοπιά ενός προγραμματιστή (είμαι φυσικά ένας από αυτούς dev, λοιπόν, περνούσα). Αλλά δεν μιλάω για ανάπτυξη, μιλάω για ένα ασφαλές και αποτελεσματικό περιβάλλον για εφαρμογές.

Χρηματοοικονομική τεχνολογία (fintech) πηγαίνετε δίπλα στην ασφάλεια πληροφοριών (πληροφορίες) και το πρώτο μπορεί να λειτουργήσει χωρίς το δεύτερο, αλλά όχι για πολύ. Γι' αυτό θέλω να μοιραστώ την εμπειρία μου και το σύνολο εργαλείων που χρησιμοποιώ, το οποίο περιλαμβάνει και τα δύο fintechΚαι πληροφορίες, και ταυτόχρονα, και μπορεί επίσης να χρησιμοποιηθεί για ευρύτερο ή εντελώς διαφορετικό σκοπό. Σε αυτό το άρθρο θα μιλήσω όχι τόσο για το Bitcoin, αλλά για το μοντέλο υποδομής για την ανάπτυξη και λειτουργία οικονομικών (και όχι μόνο) υπηρεσιών - με μια λέξη, εκείνες τις υπηρεσίες όπου το "Β" έχει σημασία. Αυτό ισχύει τόσο για το ανταλλακτήριο Bitcoin όσο και για τον πιο τυπικό εταιρικό ζωολογικό κήπο υπηρεσιών μιας μικρής εταιρείας που δεν συνδέεται με το Bitcoin με κανέναν τρόπο.

Θα ήθελα να σημειώσω ότι είμαι υποστηρικτής των αρχών "Κράτα το ανόητο απλό" и "λιγότερο είναι περισσότερο", επομένως, τόσο το άρθρο όσο και αυτό που περιγράφεται σε αυτό θα έχει τις ιδιότητες για τις οποίες αναφέρονται αυτές οι αρχές.

Φανταστικό σενάριο: Ας δούμε τα πάντα χρησιμοποιώντας το παράδειγμα ενός εναλλάκτη bitcoin. Αποφασίσαμε να ξεκινήσουμε την ανταλλαγή ρουβλίων, δολαρίων, ευρώ για bitcoin και αντίστροφα, και έχουμε ήδη μια λειτουργική λύση, αλλά για άλλα ψηφιακά χρήματα όπως το qiwi και το webmoney, π.χ. Κλείσαμε όλα τα νομικά ζητήματα, έχουμε μια έτοιμη εφαρμογή που χρησιμεύει ως πύλη πληρωμής για ρούβλια, δολάρια και ευρώ και άλλα συστήματα πληρωμών. Είναι συνδεδεμένο με τους τραπεζικούς μας λογαριασμούς και έχει κάποιο είδος API για τις τελικές εφαρμογές μας. Έχουμε επίσης μια εφαρμογή Ιστού που λειτουργεί ως εναλλάκτης για τους χρήστες, όπως ένας τυπικός λογαριασμός qiwi ή webmoney - δημιουργήστε έναν λογαριασμό, προσθέστε μια κάρτα και ούτω καθεξής. Επικοινωνεί με την εφαρμογή πύλης μας, αν και μέσω του REST API στην τοπική περιοχή. Και έτσι αποφασίσαμε να συνδέσουμε bitcoins και ταυτόχρονα να αναβαθμίσουμε την υποδομή, γιατί... Αρχικά, τα πάντα τοποθετήθηκαν βιαστικά σε εικονικά κουτιά στο γραφείο κάτω από το τραπέζι... ο ιστότοπος άρχισε να χρησιμοποιείται και αρχίσαμε να ανησυχούμε για το χρόνο λειτουργίας και την απόδοση.

Λοιπόν, ας ξεκινήσουμε με το κύριο πράγμα - την επιλογή ενός διακομιστή. Επειδή η επιχείρηση στο παράδειγμά μας είναι μικρή και εμπιστευόμαστε τον οικοδεσπότη (OVH) που θα επιλέξουμε μια επιλογή προϋπολογισμού στο οποίο είναι αδύνατο να εγκαταστήσετε το σύστημα από την αρχική εικόνα .iso, αλλά δεν πειράζει, το τμήμα ασφάλειας IT θα αναλύσει σίγουρα την εγκατεστημένη εικόνα. Και όταν μεγαλώσουμε, θα νοικιάσουμε τη δική μας ντουλάπα με κλειδαριά με περιορισμένη φυσική πρόσβαση και ίσως φτιάξουμε το δικό μας DC. Σε κάθε περίπτωση, αξίζει να θυμάστε ότι κατά την ενοικίαση υλικού και την εγκατάσταση έτοιμων εικόνων, υπάρχει πιθανότητα να κρέμεται στο σύστημά σας ένα "Trojan from the hoster", το οποίο στις περισσότερες περιπτώσεις δεν προορίζεται να σας κατασκοπεύσει αλλά για να προσφέρει πιο βολικό διακομιστή εργαλείων διαχείρισης.

Εγκατάσταση διακομιστή

Όλα είναι απλά εδώ. Επιλέγουμε το υλικό που ταιριάζει στις ανάγκες μας. Στη συνέχεια επιλέξτε την εικόνα του FreeBSD. Λοιπόν, ή συνδέουμε (στην περίπτωση ενός άλλου hoster και του δικού μας υλικού) μέσω IPMI ή με οθόνη και τροφοδοτούμε την εικόνα .iso FreeBSD στη λήψη. Για ορχηστρικό στήσιμο χρησιμοποιώ Πιθανό и mfsbsd. Το μόνο πράγμα, στην περίπτωσή μας με το kimsufi, επιλέξαμε προσαρμοσμένη εγκατάσταση Προκειμένου οι δύο δίσκοι στον καθρέφτη να έχουν "ανοιχτά" μόνο τα διαμερίσματα εκκίνησης και /home, ο υπόλοιπος χώρος του δίσκου θα κρυπτογραφηθεί, αλλά για αυτό αργότερα.

Bitcoin σε ένα κλουβί;

Η εγκατάσταση του συστήματος πραγματοποιείται με τυπικό τρόπο, δεν θα σταθώ σε αυτό, θα σημειώσω μόνο ότι πριν ξεκινήσετε τη λειτουργία αξίζει να δώσετε προσοχή σκλήρυνση επιλογές που προσφέρει bsdinstaller στο τέλος της εγκατάστασης (αν εγκαταστήσετε μόνοι σας το σύστημα):

Bitcoin σε ένα κλουβί;

Υπάρχει καλό υλικό για αυτό το θέμα, θα το επαναλάβω εν συντομία εδώ.

Είναι επίσης δυνατό να ενεργοποιήσετε τις παραπάνω παραμέτρους σε ένα ήδη εγκατεστημένο σύστημα. Για να το κάνετε αυτό, πρέπει να επεξεργαστείτε το αρχείο του bootloader και να ενεργοποιήσετε τις παραμέτρους του πυρήνα. *Το 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 -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

Ο τρόπος διαχείρισης αυτού του θέματος περιγράφεται τέλεια στο οδηγός.

Τώρα κάνουμε επανεκκίνηση και προχωράμε στο λογισμικό στον διακομιστή. Κάθε διακομιστής είναι ένας hypervisor για κοντέινερ ή πλήρεις εικονικές μηχανές. Επομένως, είναι σημαντικό ο επεξεργαστής να υποστηρίζει VT-x και EPT εάν σκοπεύουμε να χρησιμοποιήσουμε πλήρη εικονικοποίηση.

Για τη διαχείριση κοντέινερ και εικονικών μηχανών χρησιμοποιώ cbsd από olevole, του εύχομαι περισσότερη υγεία και ευλογίες για αυτή την υπέροχη χρησιμότητα!

Εμπορευματοκιβώτια; Docker πάλι ή τι;

Αλλά όχι. Φυλακές του FreeBSD είναι ένα εξαιρετικό εργαλείο για κοντέινερ, αλλά το αναφερόμενο cbsd για να ενορχηστρώσει αυτά τα δοχεία, τα οποία ονομάζονται κύτταρα.

Ο κλωβός είναι μια εξαιρετικά αποτελεσματική λύση για την κατασκευή υποδομών για διάφορους σκοπούς, όπου τελικά απαιτείται πλήρης απομόνωση μεμονωμένων υπηρεσιών ή διαδικασιών. Ουσιαστικά, είναι ένας κλώνος του συστήματος υποδοχής, αλλά δεν απαιτεί πλήρη εικονικοποίηση υλικού. Και χάρη σε αυτό, οι πόροι δεν δαπανώνται στο "guest OS", αλλά μόνο στην εργασία που εκτελείται. Όταν τα κελιά χρησιμοποιούνται για εσωτερικές ανάγκες, αυτή είναι μια πολύ βολική λύση για βέλτιστη χρήση πόρων - μια δέσμη κελιών σε έναν διακομιστή υλικού μπορεί να χρησιμοποιήσει το καθένα ξεχωριστά ολόκληρο τον πόρο του διακομιστή, εάν είναι απαραίτητο. Λαμβάνοντας υπόψη ότι συνήθως διαφορετικές υπουπηρεσίες χρειάζονται επιπλέον. πόρους σε διαφορετικές χρονικές στιγμές, μπορείτε να εξαγάγετε τη μέγιστη απόδοση από έναν διακομιστή εάν σχεδιάζετε και εξισορροπείτε σωστά τα κελιά μεταξύ των διακομιστών. Εάν είναι απαραίτητο, στα κελιά μπορούν επίσης να δοθούν περιορισμοί στον πόρο που χρησιμοποιείται.

Bitcoin σε ένα κλουβί;

Τι γίνεται με την πλήρη εικονικοποίηση;

Από όσο γνωρίζω cbsd υποστηρίζει την εργασία bhyve και XEN hypervisors. Δεν έχω χρησιμοποιήσει ποτέ το δεύτερο, αλλά το πρώτο είναι σχετικά καινούργιο hypervisor από το 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 - Λοιπόν, έχουμε έτοιμο το ελάχιστο κιτ μάχης. Μια αντικατοπτρισμένη συστοιχία δίσκων σε περίπτωση που ένας από τους τρεις αποτύχει.

Δημιουργία ενός συνόλου δεδομένων σε ένα νέο "pool"

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, ήρθε η ώρα να δημιουργήσουμε το πρώτο μας άλογο εργασίας - τον εγκλωβισμένο δαίμονα Bitcoin!

cbsd jconstruct-tui

Bitcoin σε ένα κλουβί;

Εδώ βλέπουμε το παράθυρο διαλόγου δημιουργίας κελιών. Αφού οριστούν όλες οι τιμές, ας δημιουργήσουμε!

Όταν δημιουργείτε το πρώτο σας κελί, θα πρέπει να επιλέξετε τι θα χρησιμοποιήσετε ως βάση για τα κελιά. Επιλέγω μια διανομή από το αποθετήριο του 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

Υπάρχει Bitcoin στο κλουβί, αλλά χρειαζόμαστε ανωνυμία γιατί θέλουμε να συνδεθούμε σε μερικά κλουβιά μέσω του δικτύου TOP. Γενικά, σκοπεύουμε να εκτελούμε τα περισσότερα κελιά με ύποπτο λογισμικό μόνο μέσω διακομιστή μεσολάβησης. Χάρη σε pf Μπορείτε να απενεργοποιήσετε το NAT για ένα συγκεκριμένο εύρος διευθύνσεων IP στο τοπικό δίκτυο και να επιτρέψετε το NAT μόνο για τον κόμβο TOR μας. Έτσι, ακόμα κι αν εισέλθει κακόβουλο λογισμικό στο κελί, πιθανότατα δεν θα επικοινωνήσει με τον έξω κόσμο και, αν συμβεί, δεν θα αποκαλύψει την 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

Τι άλλο χρειαζόμαστε για την απόλυτη ευτυχία; Ναι, χρειαζόμαστε μια υπηρεσία για τον ιστό μας, ίσως περισσότερες από μία. Ας ξεκινήσουμε το 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 και μια εφαρμογή 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

Πακέτα 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 firewall

Ας δούμε τι 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

Λοιπόν, αφού είμαστε εδώ, ας προσθέσουμε επίσης έναν κανόνα για το reverse-proxy:

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

Λοιπόν, τώρα λίγα για τα bitcoin

Αυτό που έχουμε είναι ότι έχουμε μια εφαρμογή Ιστού που εκτίθεται εξωτερικά και μιλάει τοπικά στην πύλη πληρωμών μας. Τώρα πρέπει να προετοιμάσουμε ένα περιβάλλον εργασίας για την αλληλεπίδραση με το ίδιο το δίκτυο Bitcoin - τον κόμβο bitcoind είναι απλώς ένας δαίμονας που διατηρεί ενημερωμένο το τοπικό αντίγραφο του blockchain. Αυτός ο δαίμονας έχει λειτουργικότητα RPC και πορτοφόλι, αλλά υπάρχουν πιο βολικά "περιτυλίγματα" για την ανάπτυξη εφαρμογών. Αρχικά, αποφασίσαμε να βάλουμε electrum είναι ένα πορτοφόλι CLI. Αυτό το πορτοφόλι θα το χρησιμοποιήσουμε ως «ψυκτική αποθήκευση» για τα bitcoin μας - γενικά, αυτά τα bitcoin που θα πρέπει να αποθηκευτούν «εκτός» του συστήματος προσβάσιμο στους χρήστες και γενικά μακριά από όλους. Διαθέτει επίσης 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 θα πραγματοποιούνται μέσω του TOP (μια αποκεντρωμένη έκδοση του VPN). Εκκινούμε το SSH στο κελί, αλλά δεν αγγίζουμε το pf.conf στον κεντρικό υπολογιστή.

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

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

Τώρα ας απενεργοποιήσουμε το κελί με την πρόσβαση στο Διαδίκτυο του πορτοφολιού. Ας του δώσουμε μια διεύθυνση IP από άλλο χώρο υποδικτύου που δεν είναι NATed. Πρώτα ας αλλάξουμε /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 δεν θα έχουν άμεση πρόσβαση στο Διαδίκτυο. Ένα είδος δικτύου λογισμικού "air-gap". Και ο κανόνας του ΝΑΤ παραμένει ως είχε

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

Υπερφόρτωση των κανόνων

# pfctl -f /etc/pf.conf

Τώρα ας πάρουμε το κελί μας

# cbsd jconfig jname=electrum

Bitcoin σε ένα κλουβί;

Bitcoin σε ένα κλουβί;

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 <[email protected]>
wallet@electrum:~ % logout

Επιτυχία!

Για να δουλέψουμε με άμεσες και μικροπληρωμές, χρειαζόμαστε επίσης έναν κόμβο Δίκτυο αστραπής, στην πραγματικότητα, αυτό θα είναι το κύριο εργαλείο εργασίας μας με το Bitcoin. U*γ-κεραυνούςπου θα χρησιμοποιήσουμε ως δαίμονας είναι Πρόσθετο 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, το οποίο σας επιτρέπει να δημιουργείτε πολλαπλές υποσυνεδρίες τερματικού μέσα σε μία περίοδο λειτουργίας. Αναλογικό: screen

Bitcoin σε ένα κλουβί;

Επομένως, δεν θέλουμε να αποκαλύψουμε την πραγματική 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

Ίδιος 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

Bitcoin σε ένα κλουβί;

Έχουμε ένα σύνολο κοντέινερ, το καθένα με το δικό του επίπεδο πρόσβασης τόσο από όσο και προς το τοπικό δίκτυο.

# 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

Όπως μπορείτε να δείτε, το bitcoin καταλαμβάνει και τα 190 GB χώρου. Τι γίνεται αν χρειαστούμε έναν άλλο κόμβο για δοκιμή; Εδώ είναι χρήσιμο το ZFS. Με βοήθεια cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com μπορείτε να δημιουργήσετε ένα στιγμιότυπο και να επισυνάψετε ένα νέο κελί σε αυτό το στιγμιότυπο. Το νέο κελί θα έχει το δικό του χώρο, αλλά μόνο η διαφορά μεταξύ της τρέχουσας κατάστασης και του αρχικού θα λαμβάνεται υπόψη στο σύστημα αρχείων (θα εξοικονομήσουμε τουλάχιστον 190 GB)

Κάθε κελί είναι το δικό του ξεχωριστό σύνολο δεδομένων ZFS και αυτό είναι εξαιρετικά βολικό. Το ZFS επιτρέπει επίσης κάντε διάφορα άλλα ωραία πράγματα, όπως αποστολή στιγμιότυπων μέσω SSH. Δεν θα το περιγράψουμε, υπάρχουν ήδη πολλά.

Αξίζει επίσης να σημειωθεί η ανάγκη για απομακρυσμένη παρακολούθηση του κεντρικού υπολογιστή, για αυτούς τους σκοπούς που έχουμε Zabbix.

Β - ασφάλεια

Όσον αφορά την ασφάλεια, ας ξεκινήσουμε από τις βασικές αρχές στο πλαίσιο της υποδομής:

Εμπιστευτικότητα — Τυποποιημένα εργαλεία συστημάτων που μοιάζουν με UNIX διασφαλίζουν αυτήν την αρχή. Διαχωρίζουμε λογικά την πρόσβαση σε κάθε λογικά ξεχωριστό στοιχείο του συστήματος - ένα κελί. Η πρόσβαση παρέχεται μέσω τυπικού ελέγχου ταυτότητας χρήστη χρησιμοποιώντας τα προσωπικά κλειδιά των χρηστών. Όλη η επικοινωνία μεταξύ και προς τα άκρα των κελιών γίνεται σε κρυπτογραφημένη μορφή. Χάρη στην κρυπτογράφηση δίσκου, δεν χρειάζεται να ανησυχούμε για την ασφάλεια των δεδομένων κατά την αντικατάσταση ενός δίσκου ή τη μετεγκατάσταση σε άλλο διακομιστή. Η μόνη κρίσιμη πρόσβαση είναι η πρόσβαση στο κεντρικό σύστημα, καθώς αυτή η πρόσβαση παρέχει γενικά πρόσβαση σε δεδομένα μέσα σε κοντέινερ.

Ακεραιότητα «Η εφαρμογή αυτής της αρχής συμβαίνει σε πολλά διαφορετικά επίπεδα. Πρώτον, είναι σημαντικό να σημειωθεί ότι στην περίπτωση του υλικού διακομιστή, της μνήμης ECC, το ZFS ήδη "out of the box" φροντίζει για την ακεραιότητα των δεδομένων στο επίπεδο των bits πληροφοριών. Τα άμεσα στιγμιότυπα σάς επιτρέπουν να δημιουργείτε αντίγραφα ασφαλείας ανά πάσα στιγμή. Τα βολικά εργαλεία εξαγωγής/εισαγωγής κυψελών κάνουν την αναπαραγωγή κελιών απλή.

Διαθεσιμότητα - Αυτό είναι ήδη προαιρετικό. Εξαρτάται από το βαθμό της φήμης σου και το γεγονός ότι έχεις μισητές. Στο παράδειγμά μας, εξασφαλίσαμε ότι το πορτοφόλι ήταν προσβάσιμο αποκλειστικά από το δίκτυο 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 και πηγαίνετε!

Bitcoin σε ένα κλουβί;

Αυτό είναι όλο

Υποθέτω ότι αυτό ήταν το μόνο που ήθελα να μοιραστώ. Αν σας άρεσε το άρθρο, τότε μπορείτε να μου στείλετε μερικά bitcoin - bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Αν θέλετε να δοκιμάσετε κελιά σε δράση και να έχετε μερικά bitcoin, μπορείτε να πάτε στο my κατοικίδιο-έργο.

Πηγή: www.habr.com