بيتكوين في قفص؟

لقد حدث أنني مسؤول محترف في أنظمة وشبكات الكمبيوتر (باختصار: مسؤول النظام) ، وحدث لي أن أخبر الأستاذ. نشاط مجموعة واسعة من الأنظمة ، بما في ذلك الأنظمة التي تتطلب [بسبب] التدابير الأمنية المذكورة أعلاه. واتضح أنه منذ بعض الوقت ، وجدت 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 .

Source: https://habr.com/ru/post/ar477124/


All Articles