Det rÄkade vara sÄ att jag Àr datorsystem- och nÀtverksadministratör till yrket (kort sagt: sysadmin), och jag hade chansen att berÀtta om en mÀngd olika system, inklusive de som krÀver [höga] sÀkerhetsÄtgÀrder, under drygt 10 Ärs yrkesverksamhet. Och det rÄkade ocksÄ vara sÄ att jag för en tid sedan tyckte att det var intressant , och inte bara anvÀnde det, utan lanserade ocksÄ flera mikrotjÀnster för att lÀra sig att arbeta med Bitcoin-nÀtverket (det Àr ju trots allt p2p) ur utvecklarens synvinkel (jag Àr inte direkt en dev, bara förbi). Men jag pratar inte om utveckling, jag pratar om en sÀker och effektiv miljö för applikationer.
Finansiell teknologi (fintech) gÄr hand i hand med informationssÀkerhet (INFOSEC) och den första kan fungera utan den andra, men inte lÀnge. Det Àr dÀrför jag vill dela med mig av min erfarenhet och den uppsÀttning verktyg jag anvÀnder, vilket inkluderar bÄda fintech, och INFOSEC, och samtidigt, och kan ocksÄ anvÀndas för ett bredare eller helt annat syfte. I den hÀr artikeln kommer jag inte att prata sÄ mycket om Bitcoin, utan om infrastrukturmodellen för utveckling och drift av finansiella (och inte bara) tjÀnster - med ett ord, de tjÀnster dÀr "B" spelar roll. Detta gÀller bÄde Bitcoin-börsen och den mest typiska företagszoo av tjÀnster för ett litet företag som inte Àr kopplat till Bitcoin pÄ nÄgot sÀtt.
Jag vill pÄpeka att jag Àr en föresprÄkare för principer. "hÄll det dumt enkelt" О "mindre Àr mer", dÀrför kommer bÄde artikeln och det som beskrivs i den att ha de egenskaper som dessa principer beskriver.
ImaginÀrt scenario: LÄt oss titta pÄ det med hjÀlp av exemplet med en bitcoin-vÀxlare. Vi bestÀmde oss för att lansera en vÀxling av rubel, dollar, euro mot bitcoins och vice versa, och vi har redan en fungerande lösning, men för andra digitala valutor som Qiwi och WebMoney, d.v.s. vi har alla juridiska frÄgor avklarade, finns det en fÀrdig applikation som fungerar som en betalningsgateway för rubel, dollar och euro och andra betalningssystem. Den Àr kopplad till vÄra bankkonton och har ett API för vÄra slutapplikationer. Vi har ocksÄ en webbapplikation som fungerar som en vÀxlare för anvÀndare, ja, som ett typiskt Qiwi- eller WebMoney-konto - skapa ett konto, lÀgg till ett kort och sÄ vidare. Den kommunicerar med vÄr gateway-applikation, om Àn via ett REST API i det lokala omrÄdet. Och sÄ bestÀmde vi oss för att koppla samman bitcoins och samtidigt uppgradera infrastrukturen, eftersom allt initialt hastigt hölls upp pÄ virtuella lÄdor pÄ kontoret under bordet ... webbplatsen började anvÀndas, och vi började oroa oss för drifttid och prestanda.
SĂ„, lĂ„t oss börja med det viktigaste â att vĂ€lja en server. Eftersom företaget i vĂ„rt exempel Ă€r litet och vi litar pĂ„ webbhotellet (OVH), kommer vi att vĂ€lja dĂ€r det Ă€r omöjligt att installera systemet frĂ„n den ursprungliga .iso-avbildningen, men det spelar ingen roll, IT-sĂ€kerhetsavdelningen kommer definitivt att analysera den installerade avbildningen. Och nĂ€r vi blir stora kommer vi att hyra vĂ„rt eget skĂ„p under lĂ„s och bom med begrĂ€nsad fysisk Ă„tkomst, eller kanske till och med bygga vĂ„rt eget datacenter. I vilket fall som helst Ă€r det vĂ€rt att komma ihĂ„g att nĂ€r man hyr hĂ„rdvara och installerar fĂ€rdiga avbildningar finns det en chans att man har en "hoster's Trojan" hĂ€ngande i systemet, vilket i de flesta fall inte Ă€r avsett att spionera pĂ„ en, utan att erbjuda mer praktiska verktyg för serverhantering.
Serverinstallation
Allt Àr enkelt hÀr. Vi vÀljer den hÄrdvara som passar vÄra behov. Sedan vÀljer vi FreeBSD-avbildningen. Eller sÄ ansluter vi (om det gÀller en annan vÀrd och vÄr egen hÄrdvara) via IPMI eller med en bildskÀrm och matar in den i den bootbara .iso FreeBSD-avbildningen. För orkestral installation anvÀnder jag О Det enda Àr att i vÄrt fall med kimsufi valde vi anpassad installation För att de tvÄ diskarna i spegeln endast ska ha boot- och /home-partitionerna "öppna" kommer resten av diskutrymmet att krypteras, men mer om det senare.

Systeminstallationen utförs pÄ ett standardiserat sÀtt, jag kommer inte att dröja mig kvar vid detta, jag kommer bara att notera att det Àr vÀrt att vara uppmÀrksam pÄ innan driften pÄbörjas. hÀrdning alternativ som erbjuder bsdinstaller i slutet av installationen (om du installerar systemet sjÀlv):

Det finns angÄende detta Àmne, kommer jag kortfattat att upprepa det hÀr.
Det Àr ocksÄ möjligt att aktivera ovan nÀmnda parametrar pÄ ett redan installerat system. För att göra detta mÄste du redigera bootloader-filen och aktivera kÀrnparametrarna. *ee Àr en editor som denna i 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=1Det Àr ocksÄ vÀrt att se till att du har den senaste versionen av systemet installerad, och I vÄrt fall krÀvs till exempel en uppgradering till den senaste versionen, eftersom avbildningarna före installationen Àr sex mÄnader till ett Är efter. NÄvÀl, dÀr Àndrar vi SSH-porten till en annan Àn standardporten, lÀgger till autentisering med nycklar och inaktiverar med lösenord.
Sedan satte vi upp det aide, övervakar tillstÄndet för systemkonfigurationsfilerna. Du kan lÀsa mer om det hÀr .
pkg install aide
och redigera vÄr 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/$MYFILENAMESÀtta pÄ
sysrc auditd_enable=YES
# service auditd start
Hur man administrerar denna frÄga beskrivs perfekt i .
Nu startar vi om och fortsÀtter till programvaran pÄ servern. Varje server Àr en hypervisor för containrar eller fullstÀndiga virtuella maskiner. DÀrför Àr det viktigt att processorn stöder VT-x och EPT om vi planerar att anvÀnda fullstÀndig virtualisering.
För hantering av container och virtuella maskiner anvÀnder jag frÄn , Jag önskar honom mer hÀlsa och vÀlsignelser för denna underbara nytta!
Containrar? Docker igen?
Men nej. - detta Àr ett utmÀrkt verktyg för containerisering, och det nÀmnda cbsd för att orkestrera dessa behÄllare, som kallas celler.
En bur Àr en extremt effektiv lösning för att bygga infrastruktur för en mÀngd olika ÀndamÄl, dÀr fullstÀndig isolering av enskilda tjÀnster eller processer i slutÀndan krÀvs. I grund och botten Àr det en klon av vÀrdsystemet, men det krÀver inte fullstÀndig virtualisering av hÄrdvaran. Och tack vare detta lÀggs inte resurser pÄ "gÀst-OS", utan bara pÄ det arbete som utförs. NÀr burar anvÀnds för interna behov Àr detta en mycket bekvÀm lösning för optimal resursanvÀndning - ett gÀng burar pÄ en hÄrdvaruserver kan var och en separat anvÀnda hela serverresursen vid behov. Med tanke pÄ att olika deltjÀnster vanligtvis behöver ytterligare resurser vid olika tidpunkter kan man utvinna maximal prestanda frÄn en server om man planerar och obalanserar burarna mellan servrar pÄ rÀtt sÀtt. Vid behov kan man ocksÄ sÀtta begrÀnsningar för resursen som anvÀnds för burarna.

Vad sÀgs om fullstÀndig virtualisering?
SÄ vitt jag vet cbsd stöder arbete bhyve och XEN-hypervisorer. Jag har aldrig anvÀnt den andra, men den första Àr relativt ung Vi ska titta pÄ ett exempel pÄ anvÀndning bhyve i exemplet nedan.
Installera och konfigurera vÀrdmiljön
Vi anvÀnder FS Detta Àr ett extremt kraftfullt verktyg för att hantera serverutrymme. Tack vare ZFS kan du direkt bygga arrayer med olika konfigurationer frÄn diskar, dynamiskt "hot" expandera utrymme, Àndra döda diskar, hantera snapshots och mycket, mycket mer som kan beskrivas i en hel serie artiklar. LÄt oss ÄtergÄ till vÄr server och dess diskar. I början av installationen lÀmnade vi ledigt utrymme pÄ diskarna för krypterade partitioner. Varför Àr det sÄ? Detta Àr sÄ att systemet skulle starta automatiskt och lyssna via SSH.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
lÀgg till en diskpartition i det ÄterstÄende utrymmet
geli init /dev/ada0p4
vi anger vÄrt krypteringslösenord
geli attach /dev/ada0p4
Skriv in lösenordet igen sĂ„ fĂ„r vi enheten /dev/ada0p4.eli â detta Ă€r vĂ„rt krypterade utrymme. Sedan upprepar vi samma sak för /dev/ada1 och resten av diskarna i arrayen. Och vi skapar en ny. .
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli - Ja, vi har den minimala stridsutrustningen redo. En speglad uppsÀttning diskar ifall en av de tre gÄr sönder.
Skapa en datauppsÀttning i en ny "pool"
zfs create vms/jails
pkg install cbsd â vi startade kommandot och konfigurerade hanteringen för vĂ„ra celler.
efter cbsd installerad mÄste den initialiseras:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
Tja, vi svarar pÄ en massa frÄgor, mestadels med standardsvar.
*Om du anvÀnder kryptering Àr det viktigt att daemonen cbsdd startar inte automatiskt förrÀn du dekrypterar diskarna manuellt eller automatiskt (i vÄrt exempel gör zabbix detta)
**Jag anvÀnder inte heller NAT frÄn cbsd, och jag satte upp den sjÀlv i 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
Att konfigurera brandvÀggspolicyer Àr ocksÄ ett separat Àmne, sÄ jag kommer inte att gÄ in pÄ detaljer om att konfigurera policyn BLOCK ALL och konfigurera vitlistor, detta kan göras genom att lÀsa eller nÄgon av det enorma antalet artiklar som finns tillgÀngliga pÄ Google.
NÄvÀl... vi har cbsd installerat, dags att skapa vÄr första arbetshÀst - en Bitcoin-demon i en bur!
cbsd jconstruct-tui

HÀr ser vi dialogrutan för att skapa celler. NÀr alla vÀrden har stÀllts in skapar vi dem!
NÀr du skapar din första cell mÄste du vÀlja vad du ska anvÀnda som bas för cellerna. Jag vÀljer kÀllkoden frÄn FreeBSD-arkivet med kommandot repoDetta val görs endast nÀr den första cellen i en specifik version skapas (du kan vara vÀrd för celler av vilken version som helst som Àr Àldre Àn vÀrdversionen).
NÀr allt Àr installerat lanserar vi cellen!
# cbsd jstart bitcoind
Men vi behöver installera programvara i buren.
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoindjexec bitcoind för att komma in i mobilkonsolen
och redan inuti cellen installerar vi programvaran med dess beroenden (vÄrt vÀrdsystem förblir rent)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
Det finns Bitcoin i buren, men vi behöver anonymitet, eftersom vi vill ansluta till vissa burar via TOR-nÀtverket. Och generellt sett planerar vi att spinna de flesta burarna med misstÀnkt programvara endast via en proxy. Tack. pf Du kan inaktivera NAT för ett visst intervall av IP-adresser i det lokala nÀtverket och endast tillÄta NAT för vÄr TOR-nod. SÄledes, Àven om skadlig kod kommer in i buren, kommer den troligtvis inte att kommunicera med omvÀrlden, och om den gör det kommer den inte att avslöja vÄr servers IP. DÀrför skapar vi en annan bur för att "vidarebefordra" tjÀnster som en ".onion"-tjÀnst och som en proxy för internetÄtkomst för enskilda celler.
# 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
Vi stÀller in lyssnande pÄ en lokal adress (tillgÀngligt för alla celler)
SOCKSPort 192.168.0.2:9050
Vad mer behöver vi för att vara helt nöjda? Ja, vi behöver en tjÀnst för vÄr webb, kanske mer Àn en. LÄt oss lansera nginx, som kommer att fungera som en omvÀnd proxy och ta hand om att förnya Let's Encrypt-certifikat.
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
Och sÄ placerade vi 150 MB beroenden i buren. Och vÀrden Àr fortfarande ren.
LÄt oss ÄtergÄ till konfigurationen av nginx senare, vi behöver skapa ytterligare tvÄ celler för vÄr betalningsgateway pÄ nodejs och rust och en webbapplikation, som av nÄgon anledning Àr pÄ Apache och PHP, och den senare krÀver ocksÄ en MySQL-databas.
# 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
...och ytterligare 380 MB isolerade paket
DÀrefter laddar vi ner vÄr applikation med git och startar den.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
450 MB-paket i en bur.
hÀr ger vi utvecklaren Ätkomst via SSH direkt in i buren, de kommer att göra allt sjÀlva:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267 â Ă€ndra cellens SSH-port till vilken godtycklig port som helst
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
TjÀnsten har lanserats, allt som ÄterstÄr Àr att lÀgga till en regel pf brandvÀgg
LÄt oss se vilka IP-adresser vi har för celler och hur vÄr "lokala" IP-adress ser ut i allmÀnhet.
# 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/webappoch lÀgg till en regel
# 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
NÄvÀl, eftersom vi Àr hÀr, lÄt oss ocksÄ lÀgga till en regel för omvÀnd 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
NĂ„, nu lite om bitcoins
Det vi har Ă€r att vi har en webbapplikation som Ă€r tillgĂ€nglig externt, och den kommunicerar lokalt med vĂ„r betalningsgateway. Nu behöver vi förbereda en arbetsmiljö för att interagera med sjĂ€lva Bitcoin-nĂ€tverket - en nod. bitcoind Det Ă€r bara en daemon som hĂ„ller en lokal kopia av blockkedjan uppdaterad. Denna daemon har RPC- och plĂ„nboksfunktionalitet, men det finns mer praktiska "wrappers" för att utveckla applikationer. Till att börja med bestĂ€mde vi oss för att installera electrum â detta Ă€r en CLI-plĂ„nbok. Vi kommer att anvĂ€nda den som ett "kallförrĂ„d" för vĂ„ra bitcoins â i princip de bitcoins som behöver lagras "utanför" systemet, Ă„tkomliga för anvĂ€ndare och generellt sett borta frĂ„n alla. Den har ocksĂ„ ett grafiskt grĂ€nssnitt, sĂ„ vi kommer att anvĂ€nda samma plĂ„nbok pĂ„ vĂ„r.
bÀrbara datorer. För tillfÀllet kommer vi att anvÀnda elektrum med publika servrar, och senare kommer vi att installera det i en annan cell , för att inte vara beroende av nÄgon alls.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
Vi har ytterligare 700 MB programvara i vÄr bur
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 walletelectrum:/@[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"
}Nu har vi skapat en plÄnbok.
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]wallet@electrum:/ % electrum-3.6 help
Till vÄr pÄ-kedja PlÄnboken kommer framöver endast att kunna ansluta till en begrÀnsad krets av mÀnniskor. För att inte öppna Ätkomst utifrÄn till denna bur kommer SSH-anslutningar att ske via TOR (en decentraliserad version av VPN). Vi startar SSH i buren, men rör inte vÄr pf.conf pÄ vÀrden.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
Nu ska vi inaktivera internetÄtkomsten för cellen med plÄnboken. Vi kommer att ge den en IP-adress frÄn ett annat subnÀtutrymme som inte Àr NAT-baserat. Först kommer vi att Àndra /etc/pf.conf pÄ vÀrden
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24" lÄt oss byta till JAIL_IP_POOL="192.168.0.0/25", sÄ alla adresser 192.168.0.126-255 kommer inte att ha direkt tillgÄng till internet. Ett slags mjukvarubaserad "luftgap"-nÀtverk. Och NAT-regeln förblir som den var
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
Ăverbelasta reglerna
# pfctl -f /etc/pf.conf
Nu tar vi tag i vÄr bur.
# 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.200Hmm, men nu slutar sjÀlva systemet att fungera för oss. Vi kan dock ange en systemproxy. Men det finns en sak, pÄ TOR Àr det en SOCKS5-proxy, och för enkelhetens skull skulle vi ocksÄ vilja ha en HTTP-proxy.
# 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 = socks5polipo:/@[9:42] # sysrc polipo_enable=YES
polipo:/@[9:43] # service polipo start
Nu har vi tvÄ proxyservrar i vÄrt system, och bÄda skickar ut via TOR: socks5://192.168.0.2:9050 och
Nu kan vi konfigurera vÄr plÄnboksmiljö.
# 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:8123NĂ„, nu kommer skalet att fungera under proxyn. Om vi ââvill installera paket, dĂ„ bör vi lĂ€gga till /usr/local/etc/pkg.conf frĂ„n under roten av buren
pkg_env: {
http_proxy: "http://my_proxy_ip:8123",
}NÄvÀl, nu Àr det dags att lÀgga till TOR hidden service som adressen till vÄr SSH-tjÀnst i plÄnbokslÄdan.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/electrum/
HiddenServicePort 22 192.168.0.200:22tor:/@[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.onionHÀr Àr vÄr adress för anslutningen. LÄt oss kontrollera frÄn den lokala maskinen. Men först mÄste vi lÀgga till vÄr SSH-nyckel:
wallet@electrum:/ % mkdir ~/.ssh
wallet@electrum:/ % ee ~/.ssh/authorized_keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@localTja, och frÄn klientens Linux-maskin
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
LÄt oss ansluta (För att detta ska fungera behöver du en lokal TOR-daemon som lyssnar pÄ 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
FramgÄng!
För att arbeta med omedelbara betalningar och mikrobetalningar behöver vi ocksÄ en nod. , detta kommer faktiskt att vara vÄrt huvudsakliga arbetsverktyg med bitcoin. U *, som vi ska anvÀnda som en demon, Àr , vilket Àr ett fullfjÀdrat HTTP (REST)-grÀnssnitt och tillÄter arbete med bÄde off-chain-transaktioner och on-chain-transaktioner. c-lightning krÀvs för att fungera bitcoind nod.
*Det finns olika implementeringar av Lightning Network-protokollet i olika PL:er. Av de vi testade verkade c-lightning (skrivet i C) vara det mest stabila och resurseffektiva.
# 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
Medan allt kompileras och installeras, lĂ„t oss skapa en RPC-anvĂ€ndare för 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/32bitcoind:/@[10:39] # service bitcoind restart
Mitt kaotiska vÀxling mellan celler visar sig inte vara sÄ kaotiskt om man markerar verktyget tmux, vilket lÄter dig skapa flera terminalundersessioner inom en session. Analog: screen

SÄ vi vill inte visa den riktiga IP-adressen för vÄr nod, och vi vill genomföra alla finansiella transaktioner via TOR. Det Àr dÀrför vi behöver ytterligare en .onion.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735tor:/@[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.onionNu ska vi skapa en konfiguration för 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 likelightning@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 ~
du behöver ocksÄ skapa en konfigurationsfil för bitcoin-cli, ett verktyg som kommunicerar med bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=testvi kontrollerar
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]lansera lightningd
lightning@lightning:~ % lightningd --daemon
SjÀlv lightningd du kan hantera verktyget lightning-cli, till exempel:
lightning-cli newaddr hÀmta adress för ny inkommande betalning
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all skicka alla plÄnbokspengar (alla adresser pÄ kedjan) till adressen
Ăven kommandon för operationer utanför kedjan lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay etc.
För kommunikation med applikationen har vi REST Api.
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
Summera
# 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
Vi har en uppsÀttning containrar, var och en med sin egen ÄtkomstnivÄ bÄde frÄn och till det lokala nÀtverket.
# 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-dataSom ni ser tar bitcoind upp alla 190 GB utrymme. TÀnk om vi behöver ytterligare en nod för testning? ZFS Àr ett bra val hÀr. Med hjÀlp av cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com Du kan skapa en ögonblicksbild och lÀnka en ny cell till denna ögonblicksbild. Den nya cellen kommer att ha sitt eget utrymme, men endast skillnaden mellan det aktuella tillstÄndet och det ursprungliga kommer att beaktas i FS (vi kommer att spara minst 190 GB)
Varje cell Àr sin egen separata ZFS-datauppsÀttning, och detta Àr extremt bekvÀmt. göra diverse andra coola saker, som att skicka snapshots via SSH. Vi kommer inte att beskriva detta, det finns redan mycket.
Det Àr ocksÄ vÀrt att notera behovet av fjÀrrövervakning av vÀrden, för dessa ÀndamÄl har vi .
B - sÀkerhet
NÀr det gÀller sÀkerhet, lÄt oss börja med de viktigaste principerna i infrastruktursammanhang:
Sekretess â Standardverktyg för UNIX-liknande system sĂ€kerstĂ€ller implementeringen av denna princip. Vi separerar logiskt Ă„tkomst till varje logiskt separat element i systemet â en cell. Ă tkomst tillhandahĂ„lls genom standardanvĂ€ndarautentisering med anvĂ€ndarnas personliga nycklar. All kommunikation mellan och till de slutliga cellerna Ă€r krypterad. Tack vare diskkryptering kan vi vara sĂ€kra pĂ„ datasĂ€kerheten vid diskbyte eller migrering till en annan server. Den enda kritiska Ă„tkomsten Ă€r Ă„tkomst till vĂ€rdsystemet, eftersom sĂ„dan Ă„tkomst i allmĂ€nhet ger Ă„tkomst till data inuti containrar.
integritet â Denna princip implementeras pĂ„ flera olika nivĂ„er. För det första Ă€r det viktigt att notera att nĂ€r det gĂ€ller serverhĂ„rdvara, ECC-minne, tar ZFS redan "out of the box" hand om dataintegritet pĂ„ informationsbitsnivĂ„. Omedelbara ögonblicksbilder lĂ„ter dig göra sĂ€kerhetskopior nĂ€r som helst och pĂ„ sprĂ„ng. Praktiska verktyg för att exportera och importera celler gör det enkelt att replikera celler.
tillgĂ€nglighet â Detta Ă€r valfritt. Det beror pĂ„ hur kĂ€nd du Ă€r och om du har hatare. I vĂ„rt exempel sĂ„g vi till att plĂ„nboken endast Ă€r tillgĂ€nglig frĂ„n TOR-nĂ€tverket. Om det behövs kan du blockera allt pĂ„ brandvĂ€ggen och tillĂ„ta Ă„tkomst till servern endast via tunnlar (TOR eller VPN Ă€r en annan frĂ„ga). PĂ„ sĂ„ sĂ€tt kommer servern att vara avskuren frĂ„n omvĂ€rlden sĂ„ mycket som möjligt, och bara vi sjĂ€lva kommer att kunna pĂ„verka dess tillgĂ€nglighet.
Omöjlighet att vĂ€gra â Och detta beror pĂ„ vidare utnyttjande och efterlevnad av korrekta policyer för anvĂ€ndarrĂ€ttigheter, Ă„tkomst etc. Men med rĂ€tt tillvĂ€gagĂ„ngssĂ€tt granskas alla anvĂ€ndarĂ„tgĂ€rder, och tack vare kryptografiska lösningar Ă€r det möjligt att tydligt identifiera vem och nĂ€r vissa Ă„tgĂ€rder utfördes.
Naturligtvis Àr den beskrivna konfigurationen inte ett absolut exempel pÄ hur det alltid borde vara, utan snarare ett av exemplen pÄ hur det kan vara, samtidigt som mycket flexibel skalbarhet och anpassningsmöjligheter bibehÄlls.
Vad sÀgs om fullstÀndig virtualisering?
Om fullstÀndig virtualisering med hjÀlp av cbsd kan du Jag vill bara tillÀgga att för verkens skull bhyve Vissa kÀrnalternativ mÄste aktiveras.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...# cat /boot/loader.conf
...
vmm_load="YES"
...SÄ om det plötsligt finns ett behov av att starta Docker, dÄ startar vi lite Debian och kör pÄ!

Det Àr allt
Jag tror det var allt jag ville dela med mig. Om du gillade artikeln kan du ge mig lite bitcoins - Om du vill testa cellerna i aktion och fÄ lite bitcoins kan du besöka min .
KĂ€lla: will.com
