لقد حدث أنني مسؤول محترف في أنظمة وشبكات الكمبيوتر (باختصار: مسؤول النظام) ، وحدث لي أن أخبر الأستاذ. نشاط مجموعة واسعة من الأنظمة ، بما في ذلك الأنظمة التي تتطلب [بسبب] التدابير الأمنية المذكورة أعلاه. واتضح أنه منذ بعض الوقت ، وجدت Bitcoin مثيرة للاهتمام لنفسي ، ولم أستخدمها فقط ، ولكن أيضًا أطلقت العديد من الخدمات المصغرة من أجل معرفة كيفية العمل بشكل مستقل مع شبكة Bitcoin (إنها p2p بعد كل شيء) من وجهة نظر التطوير (أنا ، بالطبع ، مثل هذا dev
، لذلك ، مرت). لكنني لا أتحدث عن التطوير ، فأنا أتحدث عن بيئة آمنة وفعالة للتطبيقات.
تتوافق التقنيات المالية ( fintech ) جنبًا إلى جنب مع أمن المعلومات ( infosec ) ويمكن أن يعمل الأول بدون الثانية ، ولكن ليس لفترة طويلة. لهذا السبب أريد أن أشارك تجربتي ومجموعة الأدوات التي أستخدمها ، والتي تشمل كلا من fintech و infosec ، وفي الوقت نفسه ، يمكن استخدامها أيضًا لغرض أوسع أو مختلف تمامًا. في هذه المقالة ، لن أخبركم كثيرًا عن Bitcoin ، ولكن عن نموذج البنية التحتية لتطوير وتشغيل الخدمات المالية (وليس فقط) - بكلمة واحدة ، تلك الخدمات التي تهم "B". ينطبق هذا على كلٍ من بورصة بيتكوين وعلى حديقة حيوانات الشركات النموذجية لخدمات شركة صغيرة دون أي عملة بيتكوين بأي شكل من الأشكال.
أريد أن أشير إلى أنني مؤيد لمبادئ "اجعله غبيًا بسيطًا" و "أقل هو أكثر" ، لذلك سيكون لكل من المقالة والمقالة الموصوفة فيه خصائص حول هذه المبادئ.
سيناريو خيالي: دعنا نلقي نظرة على مثال مبادل البيتكوين. قررنا أن نبدأ في تبادل الروبل والدولار واليورو مقابل عملات البيتكوين والعكس صحيح ، ولدينا بالفعل حل فعال ، ولكن بالنسبة إلى النقود الرقمية الأخرى مثل الكيوي وويب موني ، أي لقد أغلقنا جميع المسائل القانونية ، وهناك تطبيق جاهز يعمل كبوابة للدفع للروبل والدولار واليورو وأنظمة الدفع الأخرى. إنه مرتبط بحساباتنا المصرفية ولديه نوع من API لطلباتنا النهائية. لدينا أيضًا تطبيق ويب يعمل كمبادل للمستخدمين ، مثل حساب الكيوي أو webmoney النموذجي - افتح حسابًا وأضف بطاقة وما إلى ذلك. يتواصل مع تطبيق البوابة الخاص بنا ، على الرغم من استخدام REST API في LAN. ولذا قررنا توصيل عملات البيتكوين وفي نفس الوقت ترقية البنية الأساسية ، لأن في البداية تم تسريع كل شيء على الصناديق الافتراضية في المكتب أسفل الطاولة ... لقد بدأوا في استخدام الموقع ، وبدأنا نشعر بالقلق بشأن الجهوزية والأداء.
لذلك ، لنبدأ باختيار الخادم الرئيسي. لأن العمل في مثالنا صغير ، ونحن نثق بالمضيف (OVH) ، وسنختار خيار ميزانية يستحيل فيه تثبيت النظام من الصورة الأصلية .iso ، ولكن لا يهم ، فسيقوم قسم أمن تكنولوجيا المعلومات بتحليل الصورة المثبتة بالتأكيد. وعندما نكبر ، سنستأجر عمومًا خزانة ملابسنا تحت القفل والمفتاح مع وصول مادي محدود ، أو ربما سنبني دي سي خاص بنا. في أي حال ، تجدر الإشارة إلى أنه عند استئجار الحديد وتثبيت الصور الجاهزة ، هناك فرصة لأن يكون لدى نظامك "حصان طروادة من المضيف" ، وهو في معظم الحالات غير مصمم لتتبعك ، ولكن لتقديم أدوات إدارة أكثر ملاءمة الخادم.
تركيب الخادم
كل شيء بسيط هنا. نختار الحديد الذي يناسب احتياجاتنا. ثم حدد صورة FreeBSD. حسنًا ، إما أن نقوم بالاتصال (في حالة مضيف آخر وأجهزتنا الخاصة) عبر IPMI أو باستخدام شاشة وإطعام صورة .iso FreeBSD للتنزيل. للتركيبات الأوركسترا ، يمكنني استخدام Ansible و mfsbsd . الشيء الوحيد ، في حالتنا مع kimsufi ، اخترنا تثبيتًا مخصصًا بحيث يكون للقرصين في المرآة "التمهيد" و / "الأقسام الرئيسية" المفتوحة "، سيتم تشفير باقي مساحة القرص ، ولكن المزيد حول ذلك لاحقًا.

تم تثبيت النظام بالطريقة القياسية ، ولن أتوقف عند هذا الحد ، فأنا فقط لاحظ أنه قبل بدء التشغيل ، يجب الانتباه إلى خيارات التصلب التي bsdinstaller
في نهاية التثبيت (إذا قمت بتثبيت النظام بنفسك):

هناك مادة جيدة حول هذا الموضوع ، وباختصار سأكررها هنا.
من الممكن تمكين المعلمات أعلاه بنفس الطريقة على نظام مثبت بالفعل. للقيام بذلك ، قم بتحرير ملف أداة تحميل التشغيل وتمكين معلمات kernel. * هه محرر مثل هذا في BSD
# ee /etc/rc.conf
... #sec hard clear_tmp_enable="YES" syslogd_flags="-ss" sendmail_enable="NONE"
# ee /etc/sysctl.conf
... #sec hard security.bsd.see_other_uids=0 security.bsd.see_other_gids=0 security.bsd.unprivileged_read_msgbuf=0 security.bsd.unprivileged_proc_debug=0 kern.randompid=$(jot -r 1 9999) security.bsd.stack_guard_page=1
يجدر أيضًا التأكد من تثبيت أحدث إصدار من النظام وإكمال جميع التحديثات والترقيات . في حالتنا ، على سبيل المثال ، يلزم الترقية إلى أحدث إصدار ، لأن صور ما قبل التثبيت ستة أشهر إلى سنة وراء. حسنًا ، نغير منفذ SSH إلى منفذ مختلف افتراضيًا ، ونضيف مصادقة المفتاح ونعطيه بكلمة مرور.
ثم نقوم بتكوين aide
، ومراقبة حالة ملفات تكوين النظام. أكثر يمضغ يمكن قراءة هنا .
pkg install aide
وتعديل crontab لدينا
crontab -e
06 01 * * 0-6 /root/chkaide.sh
#! /bin/sh #chkaide.sh MYDATE=`date +%Y-%m-%d` MYFILENAME="Aide-"$MYDATE.txt /bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME /usr/local/bin/aide --check > /tmp/myAide.txt /bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME /bin/echo "**************************************" >> /tmp/$MYFILENAME /usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME /bin/echo "****************DONE******************" >> /tmp/$MYFILENAME
قم بتشغيل تدوين النظام
sysrc auditd_enable=YES
# service auditd start
يتم وصف كيفية إدارة هذا العمل جيدًا في الدليل .
الآن نقوم بإعادة التشغيل والمضي قدمًا في البرنامج على الخادم. كل خادم هو hypervisor للحاويات أو الأجهزة الظاهرية الكاملة. لذلك ، من المهم أن يدعم المعالج VT-x و EPT إذا كنا نخطط لاستخدام المحاكاة الافتراضية الكاملة.
بصفتي إدارة للحاويات والأجهزة الافتراضية ، أستخدم clevd من olevole ، أتمنى له مزيدًا من الصحة والفوائد لهذه الأداة الرائعة!
حاويات؟ مرة أخرى عامل ميناء أم ماذا؟
لكن لا. FreeBSD Jails هي أداة حاويات كبيرة ، ولكن cbsd
المذكورة cbsd
هذه الحاويات ، التي هي اسم الخلايا.
تعتبر الخلية حلاً فعالًا للغاية لبناء البنية التحتية لمجموعة متنوعة من الأغراض ، مما يتطلب في النهاية عزلًا تامًا للخدمات أو العمليات الفردية. هذا هو أساسًا استنساخ للنظام المضيف ، لكنه لا يتطلب محاكاة افتراضية كاملة للأجهزة. ولا يتم إنفاق الموارد الناتجة عن ذلك على "نظام التشغيل الضيف" ، ولكن فقط على العمل المنجز. عند استخدام الخلايا للاحتياجات الداخلية ، يعد هذا حلًا مناسبًا للغاية للاستخدام الأمثل للمورد - يمكن لمجموعة من الخلايا الموجودة على خادم حديد واحد أن تستخدم كل مورد خادمه بشكل فردي إذا لزم الأمر. بالنظر إلى أن الخدمات الفرعية المختلفة تحتاج عادة إلى خدمات إضافية. الموارد في أوقات مختلفة ، يمكنك استخراج أقصى قدر من الأداء من خادم واحد ، إذا كنت تخطط وخزن الخلايا بين الخوادم بشكل صحيح. إذا لزم الأمر ، يمكن للخلايا أيضًا تعيين حدود على المورد المستخدم.

ماذا عن المحاكاة الافتراضية الكاملة؟
حسب علمي ، تدعم cbsd
عمل أجهزة bhyve
و XEN Hypervisor. أنا لم تستخدم الثانية ، ولكن الأول هو برنامج هبرفيسر صغير نسبيا من فري . bhyve
في مثال لاستخدام bhyve
في المثال أدناه.
تثبيت وتكوين بيئة المضيف
نحن نستخدم FS ZFS . هذه أداة قوية للغاية لإدارة مساحة الخادم. بفضل ZFS ، يمكنك مباشرة إنشاء صفائف من التكوينات المختلفة مباشرة من الأقراص ، وتوسيع مساحة "الساخنة" ، وتغيير الأقراص الميتة ، وإدارة اللقطات وأكثر من ذلك بكثير التي يمكن وصفها في سلسلة من المقالات بشكل حيوي. دعنا نعود إلى خادمنا وأقراصه. في بداية التثبيت على الأقراص ، تركنا مساحة خالية للأقسام المشفرة. لماذا هذا هذا حتى يرتفع النظام تلقائيًا ويستمع إلى SSH.
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
أضف قسم القرص إلى المساحة المتبقية
geli init /dev/ada0p4
دفع كلمة المرور التشفير لدينا
geli attach /dev/ada0p4
مرة أخرى أدخل كلمة المرور ولدينا الجهاز /dev/ada0p4.eli - هذه هي المساحة المشفرة لدينا. ثم نكرر نفس الأمر بالنسبة لـ / dev / ada1 والأقراص الأخرى في الصفيف. وإنشاء تجمع ZFS جديد.
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- حسنًا ، الآن لدينا مجموعة القتال الدنيا جاهزة. صفيف قرص لها نسخ متطابقة في حالة فشل أحد الثلاثة.
إنشاء مجموعة بيانات على "التجمع" الجديد
zfs create vms/jails
pkg install cbsd
- قم بتشغيل الأمر ، وقم بتثبيت الإدارة pkg install cbsd
.
بعد تثبيت cbsd
، يجب تهيئته:
# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv
حسنًا ، نجيب على مجموعة من الأسئلة ، معظمها إجابات بشكل افتراضي.
* إذا كنت تستخدم التشفير ، فمن المهم ألا يبدأ cbsdd
الخفي cbsdd
تلقائيًا حتى تقوم بفك تشفير الأقراص يدويًا أو تلقائيًا (في مثالنا ، يقوم zabbix بهذا)
** أيضًا ، أنا لا أستخدم NAT من cbsd
، لكنني cbsd
بتكوينه بنفسي في pf
# sysrc pf_enable=YES
# ee /etc/pf.conf
IF_PUBLIC="em0" IP_PUBLIC="1.23.34.56" JAIL_IP_POOL="192.168.0.0/24" #WHITE_CL="{ 127.0.0.1 }" icmp_types="echoreq" set limit { states 20000, frags 20000, src-nodes 20000 } set skip on lo0 scrub in all #NAT for jails nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC ## Bitcoin network port forward IP_JAIL="192.168.0.1" PORT_JAIL="{8333}" rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
# service pf start
# pfctl -f /etc/pf.conf
يعد تكوين سياسات جدار الحماية أيضًا موضوعًا منفصلًا ، لذلك لن أعمق في تكوين سياسات BLOCK ALL وإعداد قوائم بيضاء ؛ يمكنك القيام بذلك عن طريق قراءة الوثائق الرسمية أو أي عدد كبير من المقالات المتوفرة على Google.
حسنًا ، لقد قمنا بتثبيت cbsd ، لقد حان الوقت لإنشاء أول ورشة عمل لدينا - شيطان البيتكوين في قفص!
cbsd jconstruct-tui

هنا نرى الحوار إنشاء الخلية. بعد تعيين كل القيم ، قم بإنشاء!
عند إنشاء الخلية الأولى ، يجب عليك اختيار ما تريد استخدامه كأساس للخلايا. حدد مجموعة التوزيع من مستودع FreeBSD باستخدام الأمر repo
. يتم هذا الاختيار فقط عند إنشاء الخلية الأولى من إصدار معين (يمكنك استضافة خلايا من أي إصدارات أقدم من الإصدار المضيف).
بعد تثبيت كل شيء - قم بتشغيل الخلية!
# cbsd jstart bitcoind
لكننا نحتاج إلى تثبيت البرنامج في القفص.
# jls
JID IP Address Hostname Path 1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
jexec bitcoind
للوصول الى وحدة الخلية
وبالفعل داخل الخلية ، نقوم بتثبيت البرنامج باستخدام تبعياته (يبقى نظامنا المضيف نظيفًا)
bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils
bitcoind:/@[15:30] # sysrc bitcoind_enable=YES
bitcoind:/@[15:30] # service bitcoind start
يوجد بيتكوين في الخلية ، لكننا بحاجة إلى إخفاء الهوية ، لأننا نريد الاتصال ببعض الخلايا عبر شبكة TOP. بشكل عام ، لدينا خطط لتحويل معظم الخلايا باستخدام برامج مشبوهة فقط من خلال وكيل. بفضل pf
يمكنك تعطيل 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 ميغابايت من التبعيات في قفص. والمضيف لا يزال نظيفاً.
دعنا نعود إلى تهيئة nginx لاحقًا ، نحتاج إلى جمع خليتين أخريين من أجل بوابة الدفع الخاصة بنا إلى nodejs والصدأ وتطبيق ويب ، والذي يوجد لسبب ما على apache و pkhp ، وهناك حاجة أيضًا إلى قاعدة بيانات MySQL للأخير.
# cbsd jsconstruct-tui
# cbsd jstart paygw
# jexec paygw
paygw:/@[15:55] # pkg install git node npm
paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
... و 380 ميغابايت أخرى من الحزم في عزلة
بعد ذلك ، نقوم بزيادة تطبيقنا من خلال بوابة وتشغيله.
# cbsd jsconstruct-tui
# cbsd jstart webapp
# jexec webapp
webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql
حزم 450 ميغابايت. في القفص.
نحن هنا نوفر للمطوِّر إمكانية الوصول إلى المطور عبر SSH مباشرةً إلى الخلية ، وسيقومون بكل شيء هناك:
webapp:/@[16:02] # ee /etc/ssh/sshd_config
Port 2267
- تغيير منفذ خلية SSH إلى أي تعسفي
webapp:/@[16:02] # sysrc sshd_enable=YES
webapp:/@[16:02] # service sshd start
حسنًا ، الخدمة قيد التشغيل ، يبقى إضافة قاعدة في جدار الحماية pf
دعونا نرى ما لدينا IP في الخلايا وكيف يبدو لدينا "lokalka"
# jls
JID IP Address Hostname Path 1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind 2 192.168.0.2 tor.space.com /zroot/jails/jails/tor 3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev 4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw 5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp
وإضافة قاعدة
# ee /etc/pf.conf
## SSH for web-Devs IP_JAIL="192.168.0.5" PORT_JAIL="{ 2267 }" rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
حسنًا ، نظرًا لوجودنا هنا ، سنضيف نفس القاعدة بشأن الوكيل العكسي:
## web-ports for nginx-rev IP_JAIL="192.168.0.3" PORT_JAIL="{ 80, 443 }" rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL
# pfctl -f /etc/pf.conf
حسنا ، الآن قليلا عن bitcoins
ما لدينا - لدينا تطبيق ويب يمكن الوصول إليه من الخارج ، ويتواصل محليًا من خلال بوابة الدفع الخاصة بنا. نحتاج الآن إلى إعداد بيئة عمل للتفاعل مع شبكة bitcoind
نفسها - عقدة bitcoind
هي مجرد شيطان يدعم نسخة محلية من سلسلة المفاتيح الحالية. يحتوي هذا البرنامج الخفي على وظيفة RPC والمحفظة ، ولكن هناك "أغلفة" أكثر ملاءمة لتطوير التطبيقات. بادئ ذي بدء ، قررنا وضع electrum
- هذا هو محفظة CLI. سوف نستخدم هذه المحفظة كـ "تخزين بارد" لعملاتنا الآلية - بشكل عام ، تلك العملات التي ستحتاج إلى تخزينها "خارج" النظام الذي يمكن للمستخدمين الوصول إليه وبعيدًا عن الجميع. لديه أيضا واجهة المستخدم الرسومية ، لذلك نحن نستخدم نفس المحفظة على موقعنا
أجهزة الكمبيوتر المحمولة. بينما سنستخدم الإلكتروم مع الخوادم العامة ، وفي وقت لاحق في خلية أخرى ، سنقوم برفع ElectrumX ، بحيث لا يعتمد على أي شخص على الإطلاق.
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
700 ميغابايت أخرى من البرامج في قفص لدينا
electrum:/@[8:53] # adduser
Username: wallet Full name: Uid (Leave empty for default): Login group [wallet]: Login group is wallet. Invite wallet into other groups? []: Login class [default]: Shell (sh csh tcsh nologin) [sh]: tcsh Home directory [/home/wallet]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: no Lock out the account after creation? [no]: Username : wallet Password : <disabled> Full Name : Uid : 1001 Class : Groups : wallet Home : /home/wallet Home Mode : Shell : /bin/tcsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (wallet) to the user database. Add another user? (yes/no): no Goodbye! electrum:/@[8:53] # su wallet
electrum:/@[8:53] # su wallet
wallet@electrum:/ % electrum-3.6 create
{ "msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.", "path": "/usr/home/wallet/.electrum/wallets/default_wallet", "seed": "jealous win pig material ribbon young punch visual okay cactus random bird" }
الآن أنشأنا محفظة.
wallet@electrum:/ % electrum-3.6 listaddresses
[ "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE", "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU", "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas", ... "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw", "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk" ]
wallet@electrum:/ % electrum-3.6 help
من الآن فصاعدًا ، سيتمكّن فقط عدد محدود من الأشخاص من الاتصال بمحفظتنا على السلسلة . من أجل عدم فتح الوصول من الخارج إلى هذه الخلية ، ستحدث اتصالات SSH من خلال TOR (مثل هذا الإصدار اللامركزي من VPN). نبدأ تشغيل SSH في الخلية ، لكن لا تلمس pf.conf على المضيف.
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
قم الآن بإيقاف تشغيل الوصول إلى الإنترنت إلى الخلية باستخدام المحفظة. سنمنحه عنوان IP من مساحة شبكة فرعية أخرى لا تستند إلى NAT. أولاً ، قم بتغيير /etc/pf.conf
على المضيف
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
تغيير إلى JAIL_IP_POOL="192.168.0.0/25"
، وبالتالي فإن جميع العناوين 192.168.0.126-255 لن يكون لها وصول مباشر إلى الإنترنت. وهناك نوع من شبكة "فجوة الهواء" الشبكة. ويبقى حكم NAT كما كان
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC
الحمولة الزائدة للقواعد
# pfctl -f /etc/pf.conf
الآن خذ قفصنا
# cbsd jconfig jname=electrum


jset mode=quiet jname=electrum ip4_addr="192.168.0.200" Remove old IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias Setup new IP: /sbin/ifconfig em0 inet 192.168.0.200 alias ip4_addr: 192.168.0.200
حسنًا ، لكن النظام نفسه سيتوقف عن العمل من أجلنا. ومع ذلك ، يمكننا تحديد وكيل النظام. ولكن هناك شيء واحد ، لكن على TOR ، يوجد بروكسي SOCKS5 ، ولراحتك سيكون لدينا وكيل HTTP أيضًا.
# 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
حسنا ، من جهاز لينكس العميل
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
Connect (لكي يعمل هذا ، فأنت بحاجة إلى برنامج خفي TOR محلي يستمع إلى 9050)
user@local ~$ ssh remotebtc
The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established. ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts. FreeBSD 12.1-RELEASE-p1 GENERIC To save disk space in your home directory, compress files you rarely use with "gzip filename". -- Dru <genesis@istar.ca> wallet@electrum:~ % logout
النجاح!
للعمل مع المدفوعات الفورية والصغرى ، نحتاج أيضًا إلى عقدة شبكة Lightning Network ، في الواقع ، ستكون هذه هي أداة العمل الرئيسية لدينا باستخدام bitcoin. * يحتوي C-lightning ، الذي سنستخدمه كخفي ، على مكون Sparko إضافي ، وهو عبارة عن واجهة HTTP (REST) كاملة ويسمح بالعمل مع كل من المعاملات خارج السلسلة والمعاملات على السلسلة. يتطلب c-lightning
عقدة bitcoind
للعمل.
* هناك تطبيقات مختلفة على بروتوكول بروتوكول شبكة البرق المختلفة. من تلك التي اختبرناها البرق c (مكتوب في 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

الكلاب الألمانية ، لا نريد تسليط الضوء على 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
الآن إنشاء التكوين ل- البرق
lightning:/home/lightning/lightning@[10:31] # su lightning
lightning@lightning:~ % mkdir .lightning
lightning@lightning:~ % ee .lightning/config
alias=My-LN-Node bind-addr=192.168.0.7:9735 rgb=ff0000 announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735 network=bitcoin log-level=info fee-base=0 fee-per-satoshi=1 proxy=192.168.0.2:9050 log-file=/home/lightning/.lightning/c-lightning.log min-capacity-sat=200000 # sparko plugin # https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko sparko-host=192.168.0.7 sparko-port=9737 sparko-tls-path=sparko-tls #sparko-login=mywalletusername:mywalletpassword #sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice # for the example above the initialization logs (mixed with lightningd logs) should print something like
lightning@lightning:~ % mkdir .lightning/plugins
lightning@lightning:~ % cd .lightning/plugins/
lightning@lightning:~/.lightning/plugins:% fetch https://github.com/fiatjaf/sparko/releases/download/v0.2.1/sparko_full_freebsd_amd64
lightning@lightning:~/.lightning/plugins % mkdir ~/.lightning/sparko-tls
lightning@lightning:~/.lightning/sparko-tls % cd ~/.lightning/sparko-tls
lightning@lightning:~/.lightning/sparko-tls % openssl genrsa -out key.pem 2048
lightning@lightning:~/.lightning/sparko-tls % openssl req -new -x509 -sha256 -key key.pem -out cert.pem -days 3650
lightning@lightning:~/.lightning/plugins % chmod +x sparko_full_freebsd_amd64
lightning@lightning:~/.lightning/plugins % mv sparko_full_freebsd_amd64 sparko
lightning@lightning:~/.lightning/plugins % cd ~
تحتاج أيضًا إلى إنشاء ملف تكوين لـ bitcoin-cli ، وهي أداة مساعدة تتصل بـ bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1 rpcuser=test rpcpassword=test
مراجعة
lightning@lightning:~ % bitcoin-cli echo "test"
[ "test" ]
تشغيل lightningd
lightning@lightning:~ % lightningd --daemon
يمكن التحكم في lightning-cli
نفسها بواسطة أداة lightning-cli
، على سبيل المثال:
lightning-cli newaddr
الحصول على عنوان للدفع الوارد الجديد
{ "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv", "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv" }
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
إرسالها إلى العنوان جميع أموال المحفظة (جميع عناوين على سلسلة)
أيضا ، أوامر لعمليات خارج سلسلة من lightning-cli invoice
lightning-cli listinvoices
، lightning-cli listinvoices
lightning-cli pay
lightning-cli listinvoices
، lightning-cli listinvoices
lightning-cli pay
الخ
حسنا ، للتواصل مع التطبيق لدينا REST Api
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
لتلخيص
# jls
JID IP Address Hostname Path 1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind 2 192.168.0.2 tor.space.com /zroot/jails/jails/tor 3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev 4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw 5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp 7 192.168.0.200 electrum.space.com /zroot/jails/jails/electrum 8 192.168.0.6 polipo.space.com /zroot/jails/jails/polipo 9 192.168.0.7 lightning.space.com /zroot/jails/jails/cln

, .
# zfs list
NAME USED AVAIL REFER MOUNTPOINT zroot 279G 1.48T 88K /zroot zroot/ROOT 1.89G 1.48T 88K none zroot/ROOT/default 1.89G 17.6G 1.89G / zroot/home 88K 1.48T 88K /home zroot/jails 277G 1.48T 404M /zroot/jails zroot/jails/bitcoind 190G 1.48T 190G /zroot/jails/jails-data/bitcoind-data zroot/jails/cln 653M 1.48T 653M /zroot/jails/jails-data/cln-data zroot/jails/electrum 703M 1.48T 703M /zroot/jails/jails-data/electrum-data zroot/jails/nginx-rev 190M 1.48T 190M /zroot/jails/jails-data/nginx-rev-data zroot/jails/paygw 82.4G 1.48T 82.4G /zroot/jails/jails-data/paygw-data zroot/jails/polipo 57.6M 1.48T 57.6M /zroot/jails/jails-data/polipo-data zroot/jails/tor 81.5M 1.48T 81.5M /zroot/jails/jails-data/tor-data zroot/jails/webapp 360M 1.48T 360M /zroot/jails/jails-data/webapp-data
, bitcoind 190 . ? ZFS . cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
. , ( 190 )
ZFS, . ZFS , SSH. , .
, Zabbix .
—
, :
— UNIX- . — . . . . -, .
— . - , ECC , ZFS " " . . - .
— . . . ( ). , .
— , . , .
, , , .
?
cbsd . , bhyve
.
# cat /etc/rc.conf
... kld_list="vmm if_tap if_bridge nmdm" ...
# cat /boot/loader.conf
... vmm_load="YES" ...
, - debian !

. — bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc . , pet-project .