لقد حدث أنني مدير أنظمة وشبكات الكمبيوتر حسب المهنة (باختصار: مسؤول النظام) ، وأتيحت لي الفرصة لإخبار الأستاذ. أنشطة مجموعة متنوعة من الأنظمة ، بما في ذلك تلك التي تتطلب إجراءات أمنية مشددة [إضافية]. لقد حدث أيضًا أنه منذ بعض الوقت وجدته مثيرًا للاهتمام dev
، لذلك ، مر). لكنني لا أتحدث عن التنمية ، أنا أتحدث عن بيئة آمنة وفعالة للتطبيقات.
التكنولوجيا المالية (FINTECH) انتقل إلى جانب أمن المعلومات (أمن تكنولوجيا المعلومات) والأول بدون الثانية يمكن أن يعمل ، ولكن ليس لفترة طويلة. لهذا السبب أرغب في مشاركة تجربتي ومجموعة الأدوات التي أستخدمها والتي تتضمن مثل FINTECHو أمن تكنولوجيا المعلومات، وفي نفس الوقت ، ويمكن استخدامها أيضًا في غرض أوسع أو مختلف تمامًا. في هذه المقالة ، سأتحدث ليس كثيرًا عن البيتكوين ، ولكن عن نموذج البنية التحتية لتطوير وتشغيل الخدمات المالية (وليس فقط) - باختصار ، تلك الخدمات التي تهم "ب". ينطبق هذا على كل من بورصة البيتكوين وعلى حديقة حيوانات الشركة الأكثر شيوعًا لخدمات شركة صغيرة لا علاقة لها ببيتكوين.
أريد أن أشير إلى أنني من مؤيدي المبادئ "أبقها بسيطة غبية" и "الاقل هو الاكثر"لذلك ، فإن كل من المقالة وما تم وصفه فيه سيكون لهما الخصائص التي تدور حولها هذه المبادئ.
سيناريو خيالي: لنلقِ نظرة على كل شيء باستخدام مثال مبادل البيتكوين. قررنا إطلاق عملية تبادل الروبل والدولار واليورو مقابل عملات البيتكوين والعكس صحيح ، ولدينا بالفعل حل عملي ، ولكن بالنسبة للأموال الرقمية الأخرى مثل qiwi و webmoney ، أي لقد أغلقنا جميع القضايا القانونية ، ولدينا تطبيق جاهز يعمل كبوابة دفع للروبل والدولار واليورو وأنظمة الدفع الأخرى. إنه مرتبط بحساباتنا المصرفية ولديه نوع من واجهة برمجة التطبيقات لتطبيقاتنا النهائية. لدينا أيضًا تطبيق ويب يعمل كمبادل للمستخدمين ، حسنًا ، مثل خزانة qiwi أو webmoney النموذجية - قم بإنشاء حساب وإضافة بطاقة وما إلى ذلك. إنها تتواصل مع تطبيق البوابة الخاص بنا ، وإن كان ذلك عبر واجهة برمجة تطبيقات REST في المنطقة المحلية. ولذا قررنا ربط عملات البيتكوين وفي نفس الوقت ترقية البنية التحتية لأن. في البداية ، تم رفع كل شيء بسرعة على الصناديق الافتراضية في المكتب تحت الطاولة ... بدأ استخدام الموقع ، وبدأنا نشعر بالقلق بشأن الجهوزية والأداء.
لذلك ، لنبدأ بالخادم الرئيسي - اختيار الخادم. لأن العمل في مثالنا صغير ونحن على ثقة من مزود الاستضافة (OVH) الذي سنختاره
تثبيت الخادم
كل شيء بسيط هنا. نختار المكواة التي تناسب احتياجاتنا. ثم حدد صورة FreeBSD. حسنًا ، أو نقوم بالاتصال (في حالة مضيف آخر وأجهزتنا الخاصة) عبر IPMI أو باستخدام شاشة وإدخال صورة .iso FreeBSD في التمهيد. بالنسبة للإعداد الأوركسترالي الذي أستخدمه
تم تثبيت النظام بطريقة قياسية ، ولن أتطرق إلى ذلك ، وسألاحظ فقط أنه قبل بدء التشغيل ، يجب الانتباه إلى تصلب الخيارات التي تقدم bsdinstaller
في نهاية التثبيت (إذا قمت بتثبيت النظام بنفسك):
هنالك
من الممكن أيضًا تمكين المعلمات أعلاه على نظام مثبت بالفعل. للقيام بذلك ، تحتاج إلى تحرير ملف أداة تحميل التشغيل وتمكين خيارات kernel. *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
يجدر أيضًا التأكد من تثبيت أحدث إصدار من النظام لديك ، و
ثم قمنا بإعداد 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 إذا كنا نخطط لاستخدام المحاكاة الافتراضية الكاملة.
كإدارة للحاويات والآلات الافتراضية ، أستخدمها
حاويات؟ عامل ميناء مرة أخرى أم ماذا؟
و لا cbsd
لتنظيم هذه الحاويات ، واسمها الخلايا.
يعتبر القفص حلاً فعالاً للغاية لبناء البنية التحتية لمجموعة متنوعة من الأغراض ، ونتيجة لذلك ، يلزم عزل كامل للخدمات أو العمليات الفردية. إنها في الأساس نسخة من النظام المضيف ، ولكنها لا تتطلب أجهزة افتراضية كاملة. وبفضل هذا ، لا يتم إنفاق الموارد على "نظام التشغيل الضيف" ، ولكن فقط على العمل المنجز. عند استخدام الخلايا للاحتياجات الداخلية ، يعد هذا حلاً مناسبًا للغاية للاستخدام الأمثل للمورد - يمكن لمجموعة من الخلايا في خادم حديد واحد استخدام مورد الخادم بالكامل بشكل فردي إذا لزم الأمر. مع الأخذ في الاعتبار أن الخدمات الفرعية المختلفة عادة ما تحتاج إلى خدمات إضافية. الموارد في أوقات مختلفة ، يمكنك استخراج الحد الأقصى من الأداء من خادم واحد إذا كنت تخطط وتؤدي إلى عدم توازن الخلايا بين الخوادم بشكل صحيح. إذا لزم الأمر ، يمكن للخلايا أيضًا وضع حدود على المورد المستخدم.
ماذا عن الافتراضية الكاملة؟
بقدر ما أعرف cbsd
يدعم العمل bhyve
و XEN Hypervisor. لم أستخدم الثاني مطلقًا ، لكن الأول صغير نسبيًا bhyve
في المثال أدناه.
تثبيت وتكوين البيئة المضيفة
نحن نستخدم FS
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
إضافة قسم القرص إلى المساحة المتبقية
geli init /dev/ada0p4
نحن نقود كلمة مرور التشفير الخاصة بنا
geli attach /dev/ada0p4
مرة أخرى نقوم بإدخال كلمة المرور ولدينا جهاز /dev/ada0p4.eli - هذه هي مساحتنا المشفرة. ثم نكرر نفس الشيء مع dev / ada1 وبقية الأقراص في المصفوفة. وننشئ واحدة جديدة
zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli
- حسنًا ، لدينا الحد الأدنى من مجموعة القتال الجاهزة. مجموعة متطابقة من الأقراص في حالة فشل أحد الثلاثة.
ننشئ مجموعة بيانات على "تجمع" جديد
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 وإعداد القوائم البيضاء ، ويمكن القيام بذلك عن طريق القراءة
حسنًا ... لقد قمنا بتثبيت cbsd ، حان الوقت لبناء أول عمود عمل لدينا ، وهو برنامج bitcoin الخفي!
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
يوجد Bitcoin في القفص ، لكننا بحاجة إلى إخفاء الهوية ، لأننا نريد الاتصال ببعض الأقفاص عبر شبكة TOR. بشكل عام ، نخطط لتدوير معظم الخلايا التي تحتوي على برامج مشبوهة فقط من خلال وكيل. شكرا ل 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 و rust وتطبيق ويب ، والذي لسبب ما موجود على 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 ميغا بايت أخرى من الحزم المعزولة
ثم نقوم بتنزيل تطبيقنا باستخدام git وتشغيله.
# 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 التي لدينا للخلايا وكيف تبدو "الإعدادات المحلية" بشكل عام
# 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
حسنًا ، الآن قليلاً عن عملات البيتكوين.
ما لدينا هو أن لدينا تطبيق ويب يمكن الوصول إليه من الخارج ، ويتواصل محليًا مع بوابة الدفع الخاصة بنا. الآن نحن بحاجة إلى إعداد بيئة عمل للتفاعل مع شبكة البيتكوين نفسها - العقدة bitcoind
إنه مجرد خفي يحافظ على نسخة محلية من blockchain محدثة. يحتوي هذا البرنامج الخفي على وظائف RPC والمحفظة ، ولكن هناك "أغلفة" أكثر ملاءمة لتطوير التطبيقات. بادئ ذي بدء ، قررنا أن نضع electrum
هي محفظة CLI.
أجهزة الكمبيوتر المحمولة. في الوقت الحالي ، سنستخدم الإلكتروم مع الخوادم العامة ، وفي وقت لاحق في خلية أخرى سنقوم برفعها
# 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 من مساحة شبكة فرعية أخرى غير محجوزة. دعونا نتغير أولا /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 و
الآن يمكننا إعداد بيئة المحفظة الخاصة بنا
# 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
النجاح!
للعمل مع المدفوعات الفورية والمتناهية الصغر ، نحتاج أيضًا إلى عقدة c-lightning
بحاجة للعمل bitcoind
ولكن، نعم.
*هناك تطبيقات مختلفة على PLs مختلفة لبروتوكول 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
حسنًا ، لا نريد الكشف عن IP الحقيقي لعقدتنا ، ونريد إجراء جميع المعاملات المالية من خلال TOR. لذلك ، هناك حاجة إلى واحد.
# 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
لدينا مجموعة من الحاويات ، لكل منها مستوى وصول خاص بها من وإلى الشبكة المحلية.
# 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
يمكنك إنشاء لقطة وربط خلية جديدة بهذه اللقطة. سيكون للخلية الجديدة مساحة خاصة بها تمامًا ، ولكن سيتم أخذ الاختلاف بين الحالة الحالية والأصل فقط في الاعتبار في FS (وفر ما لا يقل عن 190 جيجابايت)
كل خلية هي مجموعة بيانات ZFS منفصلة خاصة بها ، وهذا مريح للغاية.
ومن الجدير بالذكر أيضًا الحاجة إلى المراقبة عن بعد للمضيف ، لدينا لهذه الأغراض
ب- الأمن
بالنسبة للأمن ، فلنبدأ من المبادئ الأساسية في سياق البنية التحتية:
Конфиденциальность - الأدوات القياسية للأنظمة المشابهة لـ UNIX تفرض هذا المبدأ. نقوم بشكل منطقي بفصل الوصول إلى كل عنصر منفصل منطقيًا في النظام - خلية. يتم توفير الوصول من خلال مصادقة المستخدم القياسية باستخدام المفاتيح الخاصة للمستخدمين. يتم تشفير كافة الاتصالات بين وإلى الخلايا النهائية. بفضل تشفير القرص ، لا يمكننا القلق بشأن أمان البيانات أثناء استبدال القرص أو الترحيل إلى خادم آخر. الوصول المهم الوحيد هو الوصول إلى النظام المضيف ، حيث يوفر هذا الوصول بشكل عام الوصول إلى البيانات داخل الحاويات.
سلامة - يتم تنفيذ هذا المبدأ على عدة مستويات مختلفة. أولاً ، من المهم ملاحظة أنه في حالة أجهزة الخادم ، ذاكرة ECC ، يعتني ZFS بسلامة البيانات على مستوى بتات المعلومات خارج الصندوق. تتيح لك اللقطات الفورية إجراء نسخ احتياطي في أي وقت أثناء التنقل. تجعل أدوات تصدير / استيراد الخلايا الملائمة عملية النسخ المتماثل للخلايا أمرًا سهلاً.
توفر - إنه اختياري. يعتمد على درجة شهرتك وحقيقة أن لديك كارهين. في مثالنا ، تأكدنا من إمكانية الوصول إلى المحفظة حصريًا من شبكة TOR. إذا لزم الأمر ، يمكنك حظر كل شيء على جدار الحماية والسماح بالوصول إلى الخادم حصريًا عبر الأنفاق (TOR أو VPN مسألة أخرى). وبالتالي ، سيتم قطع الخادم عن العالم الخارجي قدر الإمكان ، ونستطيع نحن فقط التأثير على توفره.
استحالة الرفض - ويعتمد ذلك على مزيد من التشغيل والامتثال للسياسات الصحيحة لحقوق المستخدم والوصول وما إلى ذلك. ولكن مع النهج الصحيح ، يتم تدقيق جميع إجراءات المستخدم ، وبفضل حلول التشفير ، من الممكن تحديد من قام بإجراءات معينة ومتى قام بها بشكل فريد.
بالطبع ، التكوين الموصوف ليس مثالًا مطلقًا على الكيفية التي يجب أن يكون عليها دائمًا ، ولكنه أحد الأمثلة على كيف يمكن أن يكون ، مع الاحتفاظ بخيارات القياس والتخصيص المرنة للغاية.
ولكن ماذا عن الافتراضية الكاملة؟
حول المحاكاة الافتراضية الكاملة باستخدام cbsd ، يمكنك ذلك bhyve
تحتاج بعض خيارات kernel إلى التمكين.
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
لذلك إذا كانت هناك حاجة فجأة لبدء عامل ميناء ، فإننا نرفع بعض الديبيان ونمضي قدمًا!
هذا كل شئ
ربما هذا هو كل ما أردت مشاركته. إذا أعجبك المقال ، فيمكنك رمي عملات البيتكوين لي -
المصدر: www.habr.com