ایسا ہوا کہ پیشے کے لحاظ سے میں کمپیوٹر سسٹمز اور نیٹ ورکس کا ایڈمنسٹریٹر ہوں (مختصر طور پر: سسٹم ایڈمنسٹریٹر)، اور مجھے 10 سال سے کچھ زیادہ عرصے سے پروفیسر کو بتانے کا موقع ملا۔ نظام کی وسیع اقسام کی سرگرمیاں، بشمول وہ جو کہ [انتہائی] حفاظتی اقدامات کی ضرورت ہوتی ہے۔ ایسا بھی ہوا کہ کچھ عرصہ پہلے مجھے یہ دلچسپ لگا dev
تو میں وہاں سے گزر رہا تھا)۔ لیکن میں ترقی کے بارے میں بات نہیں کر رہا ہوں، میں ایپلی کیشنز کے لیے ایک محفوظ اور موثر ماحول کی بات کر رہا ہوں۔
مالیاتی ٹیکنالوجی (فن ٹیک) انفارمیشن سیکیورٹی کے آگے جائیں (infosec) اور پہلا دوسرے کے بغیر کام کر سکتا ہے، لیکن زیادہ دیر تک نہیں۔ اس لیے میں اپنے تجربے اور ان ٹولز کے سیٹ کا اشتراک کرنا چاہتا ہوں جو میں استعمال کرتا ہوں، جس میں دونوں شامل ہیں۔ فن ٹیکاور infosec، اور ایک ہی وقت میں، اور ایک وسیع تر یا مکمل طور پر مختلف مقصد کے لیے بھی استعمال کیا جا سکتا ہے۔ اس آرٹیکل میں میں آپ کو بٹ کوائن کے بارے میں زیادہ نہیں بلکہ مالیاتی (اور نہ صرف) خدمات کی ترقی اور آپریشن کے بنیادی ڈھانچے کے ماڈل کے بارے میں بتاؤں گا - ایک لفظ میں، وہ خدمات جہاں "B" اہمیت رکھتی ہے۔ یہ بٹ کوائن ایکسچینج دونوں پر لاگو ہوتا ہے اور ایک چھوٹی کمپنی کی خدمات کے سب سے عام کارپوریٹ زو پر جو کسی بھی طرح سے بٹ کوائن سے منسلک نہیں ہے۔
میں نوٹ کرنا چاہوں گا کہ میں اصولوں کا حامی ہوں۔ "اسے سادہ رکھیں" и "کم زیادہ ہے"لہذا، مضمون اور اس میں جو کچھ بیان کیا گیا ہے، دونوں میں وہ خصوصیات ہوں گی جن کے بارے میں یہ اصول ہیں۔
خیالی منظر نامہ: آئیے بٹ کوائن ایکسچینجر کی مثال کا استعمال کرتے ہوئے ہر چیز کو دیکھیں۔ ہم نے بٹ کوائنز اور بیک کے لیے روبل، ڈالر، یورو کا تبادلہ شروع کرنے کا فیصلہ کیا، اور ہمارے پاس پہلے سے ہی کام کرنے کا حل موجود ہے، لیکن دیگر ڈیجیٹل پیسے جیسے کیوی اور ویب منی کے لیے، یعنی ہم نے تمام قانونی مسائل کو بند کر دیا ہے، ہمارے پاس ایک ریڈی میڈ ایپلی کیشن ہے جو روبل، ڈالر اور یورو اور دیگر ادائیگی کے نظام کے لیے ادائیگی کے گیٹ وے کے طور پر کام کرتی ہے۔ یہ ہمارے بینک کھاتوں سے جڑا ہوا ہے اور ہماری آخری ایپلیکیشنز کے لیے کسی قسم کا API ہے۔ ہمارے پاس ایک ویب ایپلیکیشن بھی ہے جو صارفین کے لیے ایک ایکسچینجر کے طور پر کام کرتی ہے، ٹھیک ہے، ایک عام کیوی یا ویب منی اکاؤنٹ کی طرح - ایک اکاؤنٹ بنائیں، کارڈ شامل کریں، وغیرہ۔ یہ ہماری گیٹ وے ایپلیکیشن کے ساتھ بات چیت کرتا ہے، حالانکہ مقامی علاقے میں REST API کے ذریعے۔ اور اس لیے ہم نے بٹ کوائنز کو جوڑنے کا فیصلہ کیا اور ساتھ ہی انفراسٹرکچر کو اپ گریڈ کرنے کا فیصلہ کیا، کیونکہ... ابتدائی طور پر، میز کے نیچے دفتر میں ورچوئل باکسز پر سب کچھ جلدی میں رکھا گیا... سائٹ استعمال ہونے لگی، اور ہم اپ ٹائم اور کارکردگی کے بارے میں فکر کرنے لگے۔
تو، آئیے اہم چیز کے ساتھ شروع کرتے ہیں - ایک سرور کا انتخاب۔ کیونکہ ہماری مثال میں کاروبار چھوٹا ہے اور ہم اس میزبان (OVH) پر بھروسہ کرتے ہیں جسے ہم منتخب کریں گے۔
سرور کی تنصیب
یہاں سب کچھ آسان ہے۔ ہم اپنی ضروریات کے مطابق ہارڈ ویئر کا انتخاب کرتے ہیں۔ پھر FreeBSD امیج کو منتخب کریں۔ ٹھیک ہے، یا ہم IPMI کے ذریعے یا ایک مانیٹر کے ذریعے (کسی دوسرے ہوسٹر اور ہمارے اپنے ہارڈ ویئر کے معاملے میں) جوڑتے ہیں اور .iso FreeBSD امیج کو ڈاؤن لوڈ میں فیڈ کرتے ہیں۔ آرکیسٹرل سیٹ اپ کے لیے میں استعمال کرتا ہوں۔
سسٹم کی تنصیب معیاری طریقے سے ہوتی ہے، میں اس پر غور نہیں کروں گا، میں صرف یہ نوٹ کروں گا کہ آپریشن شروع کرنے سے پہلے اس پر توجہ دینا ضروری ہے۔ سخت اختیارات جو یہ پیش کرتا ہے۔ bsdinstaller
تنصیب کے اختتام پر (اگر آپ خود سسٹم انسٹال کرتے ہیں):
ہے
پہلے سے نصب شدہ سسٹم پر مذکورہ بالا پیرامیٹرز کو فعال کرنا بھی ممکن ہے۔ ایسا کرنے کے لیے، آپ کو بوٹ لوڈر فائل میں ترمیم کرنے اور کرنل پیرامیٹرز کو فعال کرنے کی ضرورت ہے۔ *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 -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
اس معاملے کو کس طرح منظم کرنا ہے اس میں بالکل بیان کیا گیا ہے۔
اب ہم ریبوٹ کرتے ہیں اور سرور پر سافٹ ویئر پر آگے بڑھتے ہیں۔ ہر سرور کنٹینرز یا مکمل ورچوئل مشینوں کے لیے ایک ہائپر وائزر ہے۔ لہذا، یہ ضروری ہے کہ پروسیسر VT-x اور EPT کو سپورٹ کرے اگر ہم مکمل ورچوئلائزیشن استعمال کرنے کا ارادہ رکھتے ہیں۔
کنٹینرز اور ورچوئل مشینوں کا انتظام کرنے کے لیے جو میں استعمال کرتا ہوں۔
کنٹینرز؟ ڈوکر دوبارہ یا کیا؟
لیکن نہیں. cbsd
ان کنٹینرز کو آرکیسٹریٹ کرنے کے لیے، جنہیں سیل کہتے ہیں۔
کیج مختلف مقاصد کے لیے بنیادی ڈھانچے کی تعمیر کے لیے ایک انتہائی موثر حل ہے، جہاں انفرادی خدمات یا عمل کو مکمل طور پر الگ تھلگ کرنے کی ضرورت ہے۔ بنیادی طور پر، یہ میزبان سسٹم کا کلون ہے، لیکن اسے مکمل ہارڈویئر ورچوئلائزیشن کی ضرورت نہیں ہے۔ اور اس کا شکریہ، وسائل "مہمان OS" پر خرچ نہیں کیے جاتے ہیں، لیکن صرف اس کام پر خرچ کیے جاتے ہیں. جب خلیوں کو اندرونی ضروریات کے لیے استعمال کیا جاتا ہے، تو وسائل کے زیادہ سے زیادہ استعمال کے لیے یہ ایک بہت ہی آسان حل ہے - ایک ہارڈویئر سرور پر سیلز کا ایک گروپ اگر ضروری ہو تو ہر ایک انفرادی طور پر سرور کے پورے وسائل کو استعمال کر سکتا ہے۔ اس بات پر غور کرتے ہوئے کہ عام طور پر مختلف ذیلی خدمات کو اضافی کی ضرورت ہوتی ہے۔ وسائل مختلف اوقات میں، آپ ایک سرور سے زیادہ سے زیادہ کارکردگی نکال سکتے ہیں اگر آپ مناسب طریقے سے منصوبہ بندی کرتے ہیں اور سرورز کے درمیان خلیات میں توازن رکھتے ہیں۔ اگر ضروری ہو تو، خلیوں کو استعمال شدہ وسائل پر پابندیاں بھی دی جا سکتی ہیں۔
مکمل ورچوئلائزیشن کے بارے میں کیا خیال ہے؟
جیسا کہ میں جانتا ہوں، cbsd
کام کی حمایت کرتا ہے bhyve
اور XEN ہائپر وائزرز۔ میں نے کبھی دوسرا استعمال نہیں کیا، لیکن پہلا نسبتاً نیا ہے۔ 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
خود بخود شروع نہیں ہوا جب تک کہ آپ ڈسکوں کو دستی طور پر یا خود بخود ڈکرپٹ نہیں کرتے ہیں (ہماری مثال میں یہ زبکس کے ذریعہ کیا جاتا ہے)
** میں بھی NAT from کا استعمال نہیں کرتا ہوں۔ 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
فائر وال پالیسیاں ترتیب دینا بھی ایک الگ موضوع ہے، اس لیے میں تمام بلاک پالیسی کو ترتیب دینے اور وائٹ لسٹ قائم کرنے میں گہرائی میں نہیں جاؤں گا، آپ اسے پڑھ کر کر سکتے ہیں۔
ٹھیک ہے... ہم نے cbsd انسٹال کر لیا ہے، اب وقت آگیا ہے کہ ہم اپنا پہلا ورک ہارس بنائیں - پنجرے میں بند بٹ کوائن شیطان!
cbsd jconstruct-tui
یہاں ہم سیل تخلیق کا ڈائیلاگ دیکھتے ہیں۔ تمام اقدار طے ہونے کے بعد، آئیے تخلیق کریں!
اپنا پہلا سیل بناتے وقت، آپ کو منتخب کرنا چاہیے کہ سیلز کی بنیاد کے طور پر کیا استعمال کرنا ہے۔ میں کمانڈ کے ساتھ فری بی ایس ڈی ریپوزٹری سے تقسیم کا انتخاب کرتا ہوں۔ 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
آپ مقامی نیٹ ورک پر IP پتوں کی ایک مخصوص حد کے لیے NAT کو غیر فعال کر سکتے ہیں، اور NAT کو صرف ہمارے TOR نوڈ کے لیے اجازت دے سکتے ہیں۔ اس طرح، یہاں تک کہ اگر میلویئر سیل میں آجاتا ہے، تو یہ غالباً بیرونی دنیا کے ساتھ بات چیت نہیں کرے گا، اور اگر ایسا ہوتا ہے، تو یہ ہمارے سرور کا IP ظاہر نہیں کرے گا۔ لہٰذا، ہم ایک اور سیل بناتے ہیں جو خدمات کو "آگے بھیجنے" کے لیے ".onion" سروس کے طور پر اور انفرادی سیل تک انٹرنیٹ تک رسائی کے لیے ایک پراکسی کے طور پر بناتے ہیں۔
# cbsd jsconstruct-tui
# cbsd jstart tor
# jexec tor
tor:/@[15:38] # pkg install tor
tor:/@[15:38] # sysrc tor_enable=YES
tor:/@[15:38] # ee /usr/local/etc/tor/torrc
مقامی پتے پر سننے کے لیے سیٹ کریں (تمام سیلز کے لیے دستیاب)
SOCKSPort 192.168.0.2:9050
ہمیں مکمل خوشی کے لیے اور کیا چاہیے؟ ہاں، ہمیں اپنی ویب کے لیے ایک سروس کی ضرورت ہے، شاید ایک سے زیادہ۔ آئیے nginx لانچ کریں، جو ایک ریورس پراکسی کے طور پر کام کرے گا اور Let’s Encrypt سرٹیفکیٹس کی تجدید کا خیال رکھے گا۔
# cbsd jsconstruct-tui
# cbsd jstart nginx-rev
# jexec nginx-rev
nginx-rev:/@[15:47] # pkg install nginx py36-certbot
اور اس طرح ہم نے 150 MB انحصار ایک پنجرے میں رکھا۔ اور میزبان ابھی تک صاف ہے۔
آئیے بعد میں nginx کی ترتیب پر واپس آتے ہیں، ہمیں nodejs اور rust پر اپنے ادائیگی کے گیٹ وے اور ایک ویب ایپلیکیشن کے لیے مزید دو سیلز بڑھانے کی ضرورت ہے، جو کسی وجہ سے Apache اور PHP میں ہے، اور بعد میں بھی MySQL ڈیٹا بیس کی ضرورت ہے۔
# cbsd jsconstruct-tui
# cbsd jstart paygw
# jexec paygw
paygw:/@[15:55] # pkg install git node npm
paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
اور مزید 380 MB پیکجز الگ تھلگ
اگلا، ہم اپنی ایپلیکیشن گٹ کے ساتھ ڈاؤن لوڈ کرتے ہیں اور اسے لانچ کرتے ہیں۔
# 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
یہ صرف ایک ڈیمون ہے جو بلاکچین کی مقامی کاپی کو تازہ ترین رکھتا ہے۔ اس ڈیمون میں RPC اور والیٹ کی فعالیت ہے، لیکن ایپلیکیشن کی ترقی کے لیے زیادہ آسان "ریپرز" ہیں۔ شروع کرنے کے لیے، ہم نے ڈالنے کا فیصلہ کیا۔ electrum
ایک CLI والیٹ ہے۔
لیپ ٹاپ فی الحال ہم عوامی سرورز کے ساتھ الیکٹرم کا استعمال کریں گے، اور بعد میں ہم اسے دوسرے سیل میں اٹھائیں گے۔
# cbsd jsconstruct-tui
# cbsd jstart electrum
# jexec electrum
electrum:/@[8:45] # pkg install py36-electrum
ہمارے پنجرے میں ایک اور 700 MB سافٹ ویئر
electrum:/@[8:53] # adduser
Username: wallet
Full name:
Uid (Leave empty for default):
Login group [wallet]:
Login group is wallet. Invite wallet into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/wallet]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : wallet
Password : <disabled>
Full Name :
Uid : 1001
Class :
Groups : wallet
Home : /home/wallet
Home Mode :
Shell : /bin/tcsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (wallet) to the user database.
Add another user? (yes/no): no
Goodbye!
electrum:/@[8:53] # su wallet
electrum:/@[8:53] # su wallet
wallet@electrum:/ % electrum-3.6 create
{
"msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.",
"path": "/usr/home/wallet/.electrum/wallets/default_wallet",
"seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}
اب ہم نے ایک پرس بنایا ہے۔
wallet@electrum:/ % electrum-3.6 listaddresses
[
"18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
"14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
"1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
...
"1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
"18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]
wallet@electrum:/ % electrum-3.6 help
ہماری طرف آن چین اب سے صرف محدود تعداد میں لوگ ہی بٹوے سے جڑ سکیں گے۔ باہر سے اس سیل تک رسائی نہ کھولنے کے لیے، SSH کے ذریعے رابطے TOP (VPN کا ایک وکندریقرت ورژن) کے ذریعے ہوں گے۔ ہم سیل میں SSH لانچ کرتے ہیں، لیکن میزبان پر ہمارے pf.conf کو نہیں چھوتے ہیں۔
electrum:/@[9:00] # sysrc sshd_enable=YES
electrum:/@[9:00] # service sshd start
آئیے اب بٹوے کے انٹرنیٹ تک رسائی کے ساتھ سیل کو بند کر دیں۔ آئیے اسے کسی اور سب نیٹ اسپیس سے ایک IP ایڈریس دیں جو NATEd نہیں ہے۔ پہلے آئیے بدلتے ہیں۔ /etc/pf.conf
میزبان پر
# ee /etc/pf.conf
JAIL_IP_POOL="192.168.0.0/24"
چلو اسے تبدیل کرتے ہیں JAIL_IP_POOL="192.168.0.0/25"
اس طرح تمام ایڈریس 192.168.0.126-255 کو انٹرنیٹ تک براہ راست رسائی حاصل نہیں ہوگی۔ سافٹ ویئر کی ایک قسم "ایئر گیپ" نیٹ ورک۔ اور 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
ٹھیک ہے، لینکس کلائنٹ مشین سے
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
جڑیں۔ (اس کے کام کرنے کے لیے، آپ کو ایک مقامی ٹی او آر ڈیمون کی ضرورت ہے جو 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
لیکن ہاں.
*مختلف زبانوں میں لائٹننگ نیٹ ورک پروٹوکول کے مختلف نفاذ ہیں۔ ان میں سے جن کا ہم نے تجربہ کیا، 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 کو ظاہر نہیں کرنا چاہتے، اور ہم TOP کے ذریعے تمام مالیاتی لین دین کرنا چاہتے ہیں۔ لہذا، ایک اور پیاز کی ضرورت نہیں ہے.
# jexec tor
tor:/@[9:59] # ee /usr/local/etc/tor/torrc
HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735
tor:/@[10:01] # mkdir /var/db/tor/cln
tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/cln
tor:/@[10:01] # chmod 700 /var/db/tor/cln
tor:/@[10:03] # service tor restart
tor:/@[10:04] # cat /var/db/tor/cln/hostname
en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion
آئیے اب c-lightning کے لیے ایک کنفیگریشن بناتے ہیں۔
lightning:/home/lightning/lightning@[10:31] # su lightning
lightning@lightning:~ % mkdir .lightning
lightning@lightning:~ % ee .lightning/config
alias=My-LN-Node
bind-addr=192.168.0.7:9735
rgb=ff0000
announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735
network=bitcoin
log-level=info
fee-base=0
fee-per-satoshi=1
proxy=192.168.0.2:9050
log-file=/home/lightning/.lightning/c-lightning.log
min-capacity-sat=200000
# sparko plugin
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko
sparko-host=192.168.0.7
sparko-port=9737
sparko-tls-path=sparko-tls
#sparko-login=mywalletusername:mywalletpassword
#sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
# for the example above the initialization logs (mixed with lightningd logs) should print something like
lightning@lightning:~ % mkdir .lightning/plugins
lightning@lightning:~ % cd .lightning/plugins/
lightning@lightning:~/.lightning/plugins:% fetch https://github.com/fiatjaf/sparko/releases/download/v0.2.1/sparko_full_freebsd_amd64
lightning@lightning:~/.lightning/plugins % mkdir ~/.lightning/sparko-tls
lightning@lightning:~/.lightning/sparko-tls % cd ~/.lightning/sparko-tls
lightning@lightning:~/.lightning/sparko-tls % openssl genrsa -out key.pem 2048
lightning@lightning:~/.lightning/sparko-tls % openssl req -new -x509 -sha256 -key key.pem -out cert.pem -days 3650
lightning@lightning:~/.lightning/plugins % chmod +x sparko_full_freebsd_amd64
lightning@lightning:~/.lightning/plugins % mv sparko_full_freebsd_amd64 sparko
lightning@lightning:~/.lightning/plugins % cd ~
آپ کو bitcoin-cli کے لیے ایک کنفیگریشن فائل بنانے کی بھی ضرورت ہے، ایک ایسی افادیت جو bitcoind
lightning@lightning:~ % mkdir .bitcoin
lightning@lightning:~ % ee .bitcoin/bitcoin.conf
rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test
جانچ پڑتال
lightning@lightning:~ % bitcoin-cli echo "test"
[
"test"
]
لانچ lightningd
lightning@lightning:~ % lightningd --daemon
خود lightningd
آپ افادیت کو کنٹرول کر سکتے ہیں lightning-cli
مثال کے طور پر:
lightning-cli newaddr
نئی آنے والی ادائیگی کے لیے پتہ حاصل کریں۔
{
"address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
"bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}
lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all
بٹوے میں موجود تمام رقم ایڈریس پر بھیجیں (تمام آن چین ایڈریس)
آف چین آپریشنز کے لیے بھی حکم دیتا ہے۔ lightning-cli invoice
, lightning-cli listinvoices
, lightning-cli pay
وغیرہ
ٹھیک ہے، ایپلیکیشن کے ساتھ مواصلت کے لیے ہمارے پاس ایک REST Api ہے۔
curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'
خلاصہ:
# jls
JID IP Address Hostname Path
1 192.168.0.1 bitcoind.space.com /zroot/jails/jails/bitcoind
2 192.168.0.2 tor.space.com /zroot/jails/jails/tor
3 192.168.0.3 nginx-rev.space.com /zroot/jails/jails/nginx-rev
4 192.168.0.4 paygw.space.com /zroot/jails/jails/paygw
5 192.168.0.5 webapp.my.domain /zroot/jails/jails/webapp
7 192.168.0.200 electrum.space.com /zroot/jails/jails/electrum
8 192.168.0.6 polipo.space.com /zroot/jails/jails/polipo
9 192.168.0.7 lightning.space.com /zroot/jails/jails/cln
ہمارے پاس کنٹینرز کا ایک سیٹ ہے، ہر ایک کی مقامی نیٹ ورک سے اور اس تک رسائی کی اپنی سطح ہے۔
# 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
جیسا کہ آپ دیکھ سکتے ہیں، بٹ کوائنڈ تمام 190 جی بی جگہ لیتا ہے۔ اگر ہمیں ٹیسٹ کے لیے کسی اور نوڈ کی ضرورت ہو تو کیا ہوگا؟ یہ وہ جگہ ہے جہاں ZFS کام آتا ہے۔ مدد سے cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com
آپ اسنیپ شاٹ بنا سکتے ہیں اور اس سنیپ شاٹ کے ساتھ ایک نیا سیل منسلک کر سکتے ہیں۔ نئے سیل کی اپنی جگہ ہوگی، لیکن فائل سسٹم میں صرف موجودہ حالت اور اصل کے درمیان فرق کو مدنظر رکھا جائے گا (ہم کم از کم 190 جی بی بچائیں گے)
ہر سیل کا اپنا الگ ZFS ڈیٹاسیٹ ہے، اور یہ انتہائی آسان ہے۔
یہ بھی قابل توجہ ہے کہ میزبان کی ریموٹ مانیٹرنگ کی ضرورت، ان مقاصد کے لیے ہمارے پاس ہے۔
B - حفاظت
سیکورٹی کے حوالے سے، آئیے بنیادی ڈھانچے کے تناظر میں کلیدی اصولوں سے شروع کرتے ہیں:
رازداری - UNIX جیسے سسٹمز کے معیاری ٹولز اس اصول کے نفاذ کو یقینی بناتے ہیں۔ ہم منطقی طور پر نظام کے ہر منطقی طور پر الگ الگ عنصر - ایک سیل تک رسائی کو الگ کرتے ہیں۔ صارفین کی ذاتی چابیاں استعمال کرتے ہوئے معیاری صارف کی تصدیق کے ذریعے رسائی فراہم کی جاتی ہے۔ خلیات کے درمیان اور اختتام تک تمام مواصلت خفیہ کردہ شکل میں ہوتی ہے۔ ڈسک انکرپشن کی بدولت، ہمیں ڈسک کو تبدیل کرتے وقت یا کسی دوسرے سرور پر منتقل ہوتے وقت ڈیٹا کی حفاظت کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ واحد اہم رسائی میزبان سسٹم تک رسائی ہے، کیونکہ ایسی رسائی عام طور پر کنٹینرز کے اندر موجود ڈیٹا تک رسائی فراہم کرتی ہے۔
سالمیت "اس اصول کا نفاذ کئی مختلف سطحوں پر ہوتا ہے۔ سب سے پہلے، یہ نوٹ کرنا ضروری ہے کہ سرور ہارڈویئر، ای سی سی میموری کے معاملے میں، ZFS پہلے سے ہی "باکس سے باہر" معلوماتی بٹس کی سطح پر ڈیٹا کی سالمیت کا خیال رکھتا ہے۔ فوری اسنیپ شاٹس آپ کو پرواز کے دوران کسی بھی وقت بیک اپ بنانے کی اجازت دیتے ہیں۔ آسان سیل ایکسپورٹ/امپورٹ ٹولز سیل کی نقل کو آسان بناتے ہیں۔
دستیابی - یہ پہلے سے ہی اختیاری ہے۔ آپ کی شہرت کی ڈگری اور اس حقیقت پر منحصر ہے کہ آپ سے نفرت کرنے والے ہیں۔ ہماری مثال میں، ہم نے یقینی بنایا کہ بٹوے تک رسائی صرف TOP نیٹ ورک سے ہے۔ اگر ضروری ہو تو، آپ فائر وال پر موجود ہر چیز کو بلاک کر سکتے ہیں اور سرنگوں کے ذریعے خصوصی طور پر سرور تک رسائی کی اجازت دے سکتے ہیں (TOR یا VPN ایک اور معاملہ ہے)۔ اس طرح سرور بیرونی دنیا سے حتی الامکان منقطع ہو جائے گا، اور صرف ہم خود اس کی دستیابی کو متاثر کر سکیں گے۔
انکار کا امکان - اور اس کا انحصار مزید آپریشن اور صارف کے حقوق، رسائی وغیرہ کے لیے درست پالیسیوں کی تعمیل پر ہے۔ لیکن صحیح نقطہ نظر کے ساتھ، صارف کے تمام اعمال کا آڈٹ کیا جاتا ہے، اور خفیہ حلوں کی بدولت یہ واضح طور پر شناخت کرنا ممکن ہے کہ بعض اعمال کس نے اور کب انجام دیے۔
بلاشبہ، بیان کردہ کنفیگریشن اس بات کی قطعی مثال نہیں ہے کہ اسے ہمیشہ کیسا ہونا چاہیے، بلکہ یہ اس کی ایک مثال ہے کہ یہ کیسا ہو سکتا ہے، جبکہ انتہائی لچکدار اسکیلنگ اور حسب ضرورت صلاحیتوں کو برقرار رکھا جاتا ہے۔
مکمل ورچوئلائزیشن کے بارے میں کیا خیال ہے؟
سی بی ایس ڈی کا استعمال کرتے ہوئے مکمل ورچوئلائزیشن کے بارے میں آپ کر سکتے ہیں۔ bhyve
آپ کو کرنل کے کچھ اختیارات کو فعال کرنے کی ضرورت ہے۔
# cat /etc/rc.conf
...
kld_list="vmm if_tap if_bridge nmdm"
...
# cat /boot/loader.conf
...
vmm_load="YES"
...
لہذا اگر آپ کو اچانک ایک ڈاکر شروع کرنے کی ضرورت ہے، تو کچھ ڈیبین انسٹال کریں اور جائیں!
بس
مجھے لگتا ہے کہ میں صرف اتنا ہی شیئر کرنا چاہتا تھا۔ اگر آپ کو مضمون پسند آیا، تو آپ مجھے کچھ بٹ کوائن بھیج سکتے ہیں۔
ماخذ: www.habr.com