Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + ملٹی انٹرفیس + SpamAssassin-learn + Bind

یہ مضمون اس بارے میں ہے کہ جدید میل سرور کیسے ترتیب دیا جائے۔
پوسٹ فکس + ڈوکوٹ۔ SPF + DKIM + rDNS۔ IPv6 کے ساتھ۔
TSL خفیہ کاری کے ساتھ۔ متعدد ڈومینز کی حمایت کے ساتھ - ایک حقیقی SSL سرٹیفکیٹ کے ساتھ حصہ۔
دوسرے میل سرورز سے اینٹی اسپام تحفظ اور اعلیٰ اینٹی اسپام ریٹنگ کے ساتھ۔
متعدد جسمانی انٹرفیس کی حمایت کرتا ہے۔
OpenVPN کے ساتھ، جس سے کنکشن IPv4 کے ذریعے ہے، اور جو IPv6 فراہم کرتا ہے۔

اگر آپ یہ تمام ٹیکنالوجیز نہیں سیکھنا چاہتے، لیکن ایسا سرور قائم کرنا چاہتے ہیں، تو یہ مضمون آپ کے لیے ہے۔

مضمون ہر تفصیل کی وضاحت کرنے کی کوشش نہیں کرتا ہے۔ وضاحت اس چیز پر جاتی ہے جو معیاری کے طور پر ترتیب نہیں دی گئی ہے یا صارف کے نقطہ نظر سے اہم ہے۔

میل سرور قائم کرنے کی ترغیب میرا دیرینہ خواب رہا ہے۔ یہ احمقانہ لگ سکتا ہے، لیکن IMHO، یہ آپ کے پسندیدہ برانڈ کی نئی کار کا خواب دیکھنے سے کہیں بہتر ہے۔

IPv6 قائم کرنے کے لیے دو محرکات ہیں۔ آئی ٹی کے ماہر کو زندہ رہنے کے لیے مسلسل نئی ٹیکنالوجیز سیکھنے کی ضرورت ہوتی ہے۔ میں سنسر شپ کے خلاف جنگ میں اپنا معمولی سا حصہ ڈالنا چاہوں گا۔

OpenVPN ترتیب دینے کا محرک صرف IPv6 کو مقامی مشین پر کام کرنا ہے۔
متعدد فزیکل انٹرفیس قائم کرنے کا محرک یہ ہے کہ میرے سرور پر ایک انٹرفیس "سست لیکن لامحدود" اور دوسرا "تیز لیکن ٹیرف کے ساتھ" ہے۔

Bind سیٹنگز کو ترتیب دینے کا محرک یہ ہے کہ میرا ISP ایک غیر مستحکم DNS سرور فراہم کرتا ہے، اور گوگل بھی بعض اوقات ناکام ہوجاتا ہے۔ میں ذاتی استعمال کے لیے ایک مستحکم DNS سرور چاہتا ہوں۔

ایک مضمون لکھنے کی ترغیب - میں نے 10 مہینے پہلے ایک مسودہ لکھا تھا، اور میں اسے پہلے ہی دو بار دیکھ چکا ہوں۔ یہاں تک کہ اگر مصنف کو باقاعدگی سے اس کی ضرورت ہوتی ہے، اس بات کا بہت زیادہ امکان ہے کہ دوسروں کو بھی اس کی ضرورت ہوگی۔

میل سرور کے لیے کوئی عالمگیر حل نہیں ہے۔ لیکن میں کچھ اس طرح لکھنے کی کوشش کروں گا کہ "یہ کرو اور پھر، جب سب کچھ اس کے مطابق کام کرے تو اضافی چیزیں پھینک دیں۔"

کمپنی tech.ru کے پاس Colocation سرور ہے۔ OVH، Hetzner، AWS سے موازنہ کرنا ممکن ہے۔ اس مسئلے کو حل کرنے کے لیے، tech.ru کے ساتھ تعاون زیادہ موثر ہوگا۔

Debian 9 سرور پر انسٹال ہے۔

سرور کے 2 انٹرفیس ہیں `eno1` اور `eno2`۔ پہلا لامحدود ہے، اور دوسرا بالترتیب تیز ہے۔

3 جامد IP پتے ہیں، XX.XX.XX.X0 اور XX.XX.XX.X1 اور XX.XX.XX.X2 `eno1` انٹرفیس پر اور XX.XX.XX.X5 `eno2` انٹرفیس پر .

دستیاب XXXX:XXXX:XXXX:XXXX::/64 IPv6 پتوں کا ایک پول جو 'eno1' انٹرفیس کو تفویض کیا گیا ہے اور اس سے XXXX:XXXX:XXXX:XXXX:1:2::/96 میری درخواست پر 'eno2' کو تفویض کیا گیا تھا۔

3 ڈومینز ہیں `domain1.com`, `domain2.com`, `domain3.com`۔ `domain1.com` اور `domain3.com` کے لئے ایک SSL سرٹیفکیٹ ہے۔

میرے پاس ایک گوگل اکاؤنٹ ہے جس سے میں اپنے میل باکس کو لنک کرنا چاہوں گا۔[ای میل محفوظ]` (میل وصول کرنا اور براہ راست جی میل انٹرفیس سے میل بھیجنا)۔
ایک میل باکس ہونا ضروری ہے۔[ای میل محفوظ]`، اس ای میل کی ایک کاپی جس سے میں اپنے جی میل میں دیکھنا چاہتا ہوں۔ اور 'کی جانب سے کچھ بھیجنے کے قابل ہونا نایاب ہے۔[ای میل محفوظ]` ویب انٹرفیس کے ذریعے۔

ایک میل باکس ہونا ضروری ہے۔[ای میل محفوظ]`، جسے ایوانوف اپنے آئی فون سے استعمال کرے گا۔

بھیجی گئی ای میلز کو اینٹی اسپام کے تمام جدید تقاضوں کے مطابق ہونا چاہیے۔
عوامی نیٹ ورکس میں فراہم کردہ خفیہ کاری کی اعلی ترین سطح ہونی چاہیے۔
خطوط بھیجنے اور وصول کرنے دونوں کے لیے IPv6 سپورٹ ہونا چاہیے۔
ایک SpamAssassin ہونا چاہئے جو کبھی بھی ای میلز کو حذف نہیں کرے گا۔ اور یہ یا تو اچھال جائے گا یا چھوڑ دے گا یا IMAP "Spam" فولڈر میں بھیجے گا۔
SpamAssassin آٹو لرننگ کو ترتیب دینا ضروری ہے: اگر میں اسپام فولڈر میں ایک خط منتقل کرتا ہوں، تو یہ اس سے سیکھے گا۔ اگر میں اسپام فولڈر سے ایک خط منتقل کرتا ہوں، تو یہ اس سے سیکھے گا۔ SpamAssassin ٹریننگ کے نتائج پر اثر ہونا چاہیے کہ آیا خط اسپام فولڈر میں ختم ہوتا ہے۔
پی ایچ پی اسکرپٹس کو کسی بھی ڈومین کی جانب سے دیے گئے سرور پر میل بھیجنے کے قابل ہونا چاہیے۔
ایک اوپن وی پی این سروس ہونی چاہیے، جس میں کسی ایسے کلائنٹ پر IPv6 استعمال کرنے کی اہلیت ہو جس کے پاس IPv6 نہیں ہے۔

پہلے آپ کو IPv6 سمیت انٹرفیس اور روٹنگ کو ترتیب دینے کی ضرورت ہے۔
پھر آپ کو OpenVPN کو کنفیگر کرنے کی ضرورت ہوگی، جو IPv4 کے ذریعے جڑے گا اور کلائنٹ کو ایک جامد-حقیقی IPv6 پتہ فراہم کرے گا۔ اس کلائنٹ کو سرور پر تمام IPv6 سروسز تک رسائی حاصل ہوگی اور انٹرنیٹ پر کسی بھی IPv6 وسائل تک رسائی حاصل ہوگی۔
پھر آپ کو خطوط + SPF + DKIM + rDNS اور اسی طرح کی دوسری چھوٹی چیزیں بھیجنے کے لئے پوسٹ فکس کو ترتیب دینے کی ضرورت ہوگی۔
پھر آپ کو Dovecot کو ترتیب دینے اور ملٹی ڈومین کو ترتیب دینے کی ضرورت ہوگی۔
پھر آپ کو SpamAssassin کو ترتیب دینے اور تربیت کو ترتیب دینے کی ضرورت ہوگی۔
آخر میں، Bind انسٹال کریں۔

============= ملٹی انٹرفیس =============

انٹرفیس کو ترتیب دینے کے لیے، آپ کو اسے "/etc/network/interfaces" میں لکھنا ہوگا۔

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eno1
iface eno1 inet static
        address XX.XX.XX.X0/24
        gateway XX.XX.XX.1
        dns-nameservers 127.0.0.1 213.248.1.6
        post-up ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1t
        post-up ip route add default via XX.XX.XX.1 table eno1t
        post-up ip rule add table eno1t from XX.XX.XX.X0
        post-up ip rule add table eno1t to XX.XX.XX.X0

auto eno1:1
iface eno1:1 inet static
address XX.XX.XX.X1
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X1
        post-up ip rule add table eno1t to XX.XX.XX.X1
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t

auto eno1:2
iface eno1:2 inet static
address XX.XX.XX.X2
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X2
        post-up ip rule add table eno1t to XX.XX.XX.X2

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
        gateway XXXX:XXXX:XXXX:XXXX::1
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE

# The secondary network interface
allow-hotplug eno2
iface eno2 inet static
        address XX.XX.XX.X5
        netmask 255.255.255.0
        post-up   ip route add XX.XX.XX.0/24 dev eno2 src XX.XX.XX.X5 table eno2t
        post-up   ip route add default via XX.XX.XX.1 table eno2t
        post-up   ip rule add table eno2t from XX.XX.XX.X5
        post-up   ip rule add table eno2t to XX.XX.XX.X5
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t

iface eno2 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:2::/96
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE

# OpenVPN network
iface tun0 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:3::/80

یہ ترتیبات tech.ru میں کسی بھی سرور پر لاگو کی جا سکتی ہیں (سپورٹ کے ساتھ تھوڑی سی کوآرڈینیشن کے ساتھ) اور یہ فوری طور پر کام کرے گی جیسا کہ اسے کرنا چاہیے۔

اگر آپ کو Hetzner, OVH کے لیے اسی طرح کی چیزیں ترتیب دینے کا تجربہ ہے، تو یہ وہاں مختلف ہے۔ زیادہ مشکل.

eno1 نیٹ ورک کارڈ نمبر 1 کا نام ہے (سست لیکن لامحدود)۔
eno2 نیٹ ورک کارڈ #2 کا نام ہے (تیز، لیکن ٹیرف کے ساتھ)۔
tun0 OpenVPN سے ورچوئل نیٹ ورک کارڈ کا نام ہے۔
XX.XX.XX.X0 - eno4 پر IPv1 #1۔
XX.XX.XX.X1 - eno4 پر IPv2 #1۔
XX.XX.XX.X2 - eno4 پر IPv3 #1۔
XX.XX.XX.X5 - eno4 پر IPv1 #2۔
XX.XX.XX.1 - IPv4 گیٹ وے۔
XXXX:XXXX:XXXX:XXXX::/64 - پورے سرور کے لیے IPv6۔
XXXX:XXXX:XXXX:XXXX:1:2::/96 - eno6 کے لیے IPv2، باہر سے باقی سب کچھ eno1 میں جاتا ہے۔
XXXX:XXXX:XXXX:XXXX::1 — IPv6 گیٹ وے (یہ بات قابل غور ہے کہ یہ مختلف طریقے سے کیا جا سکتا ہے/ ہونا چاہیے۔ IPv6 سوئچ کی وضاحت کریں)۔
dns-nameservers - 127.0.0.1 اشارہ کیا گیا ہے (کیونکہ بائنڈ مقامی طور پر انسٹال ہے) اور 213.248.1.6 (یہ tech.ru سے ہے)۔

"ٹیبل eno1t" اور "table eno2t" - ان روٹ رولز کا مطلب یہ ہے کہ eno1 -> سے داخل ہونے والی ٹریفک اس سے نکلے گی، اور eno2 -> سے داخل ہونے والی ٹریفک اس سے نکلے گی۔ اور سرور کے ذریعے شروع کیے گئے کنکشن بھی eno1 کے ذریعے جائیں گے۔

ip route add default via XX.XX.XX.1 table eno1t

اس کمانڈ کے ساتھ ہم واضح کرتے ہیں کہ کوئی بھی ناقابل فہم ٹریفک جو کسی بھی قاعدہ کے تحت آتا ہے "ٹیبل eno1t" -> نشان زد کیا جاتا ہے eno1 انٹرفیس پر بھیجا جائے۔

ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1t

اس کمانڈ کے ساتھ ہم یہ بتاتے ہیں کہ سرور کی طرف سے شروع کی جانے والی کسی بھی ٹریفک کو eno1 انٹرفیس کی طرف لے جانا چاہیے۔

ip rule add table eno1t from XX.XX.XX.X0
ip rule add table eno1t to XX.XX.XX.X0

اس کمانڈ کے ساتھ ہم ٹریفک کو نشان زد کرنے کے اصول طے کرتے ہیں۔

auto eno1:2
iface eno1:2 inet static
address XX.XX.XX.X2
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X2
        post-up ip rule add table eno1t to XX.XX.XX.X2

یہ بلاک eno4 انٹرفیس کے لیے دوسرا IPv1 متعین کرتا ہے۔

ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t

اس کمانڈ کے ساتھ ہم نے OpenVPN کلائنٹس سے مقامی IPv4 کا راستہ سیٹ کیا سوائے XX.XX.XX.X0 کے۔
مجھے ابھی تک سمجھ نہیں آئی کہ یہ کمانڈ تمام IPv4 کے لیے کیوں کافی ہے۔

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
        gateway XXXX:XXXX:XXXX:XXXX::1

یہ وہ جگہ ہے جہاں ہم انٹرفیس کے لیے ایڈریس سیٹ کرتے ہیں۔ سرور اسے ایک "آؤٹ گوئنگ" ایڈریس کے طور پر استعمال کرے گا۔ دوبارہ کسی بھی طرح استعمال نہیں کیا جائے گا۔

":1:1::" اتنا پیچیدہ کیوں ہے؟ تاکہ OpenVPN صحیح طریقے سے اور صرف اس کے لیے کام کرے۔ اس پر مزید بعد میں۔

گیٹ وے کے موضوع پر - یہ اس طرح کام کرتا ہے اور یہ ٹھیک ہے۔ لیکن درست طریقہ یہ ہے کہ یہاں اس سوئچ کے IPv6 کی نشاندہی کی جائے جس سے سرور منسلک ہے۔

تاہم، اگر میں یہ کرتا ہوں تو کسی وجہ سے IPv6 کام کرنا بند کر دیتا ہے۔ یہ شاید کسی قسم کا tech.ru مسئلہ ہے۔

ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE

یہ انٹرفیس میں ایک IPv6 ایڈریس شامل کر رہا ہے۔ اگر آپ کو سو ایڈریسز کی ضرورت ہے تو اس کا مطلب ہے اس فائل میں سو لائنیں۔

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
...
iface eno2 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:2::/96
...
iface tun0 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:3::/80

میں نے اسے واضح کرنے کے لیے تمام انٹرفیس کے ایڈریس اور ذیلی نیٹ کو نوٹ کیا۔
eno1 - ہونا چاہیے"/64کیونکہ یہ ہمارے پتے کا پورا تالاب ہے۔
tun0 - سب نیٹ eno1 سے بڑا ہونا چاہیے۔ بصورت دیگر، OpenVPN کلائنٹس کے لیے IPv6 گیٹ وے کو ترتیب دینا ممکن نہیں ہوگا۔
eno2 - سب نیٹ tun0 سے بڑا ہونا چاہیے۔ بصورت دیگر، OpenVPN کلائنٹس مقامی IPv6 پتوں تک رسائی حاصل نہیں کر سکیں گے۔
وضاحت کے لیے، میں نے 16 کے ذیلی نیٹ مرحلے کا انتخاب کیا، لیکن اگر آپ چاہیں، تو آپ "1" قدم بھی کر سکتے ہیں۔
اس کے مطابق، 64+16 = 80، اور 80+16 = 96۔

اس سے بھی زیادہ وضاحت کے لیے:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY ایسے پتے ہیں جو eno1 انٹرفیس پر مخصوص سائٹس یا خدمات کو تفویض کیے جانے چاہئیں۔
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY ایسے پتے ہیں جو eno2 انٹرفیس پر مخصوص سائٹس یا خدمات کو تفویض کیے جانے چاہئیں۔
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY ایسے پتے ہیں جو OpenVPN کلائنٹس کو تفویض کیے جانے چاہئیں یا OpenVPN سروس ایڈریس کے طور پر استعمال کیے جائیں۔

نیٹ ورک کو ترتیب دینے کے لیے، سرور کو دوبارہ شروع کرنا ممکن ہونا چاہیے۔
آئی پی وی 4 تبدیلیاں عمل میں آنے پر اٹھا لی جاتی ہیں (اسے اسکرین میں لپیٹنا یقینی بنائیں - بصورت دیگر یہ کمانڈ سرور پر نیٹ ورک کو کریش کر دے گی):

/etc/init.d/networking restart

فائل کے آخر میں شامل کریں "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

اس کے بغیر، آپ "/etc/network/interfaces" فائل میں اپنی مرضی کے مطابق میزیں استعمال نہیں کر سکتے۔
نمبر منفرد اور 65535 سے کم ہونے چاہئیں۔

IPv6 تبدیلیاں ریبوٹ کیے بغیر آسانی سے تبدیل کی جا سکتی ہیں، لیکن ایسا کرنے کے لیے آپ کو کم از کم تین کمانڈز سیکھنے ہوں گے۔

ip -6 addr ...
ip -6 route ...
ip -6 neigh ...

سیٹنگ "/etc/sysctl.conf"

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward = 1

# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.all.send_redirects = 0

# For receiving ARP replies
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.arp_filter = 0

# For sending ARP
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.default.arp_announce = 0

# Enable IPv6
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

# IPv6 configuration
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.accept_ra = 0

# For OpenVPN
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

# For nginx on boot
net.ipv6.ip_nonlocal_bind = 1

یہ میرے سرور کی "sysctl" ترتیبات ہیں۔ میں ایک اہم بات کی طرف اشارہ کرتا ہوں۔

net.ipv4.ip_forward = 1

اس کے بغیر، OpenVPN بالکل کام نہیں کرے گا۔

net.ipv6.ip_nonlocal_bind = 1

کوئی بھی جو انٹرفیس ختم ہونے کے فوراً بعد IPv6 (مثال کے طور پر nginx) کو باندھنے کی کوشش کرتا ہے اسے ایک خرابی موصول ہوگی۔ کہ یہ پتہ دستیاب نہیں ہے۔

ایسی صورت حال سے بچنے کے لیے ایسی ترتیب دی جاتی ہے۔

net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

ان IPv6 ترتیبات کے بغیر، OpenVPN کلائنٹ سے ٹریفک دنیا میں نہیں جاتی ہے۔

دیگر ترتیبات یا تو متعلقہ نہیں ہیں یا مجھے یاد نہیں کہ وہ کس لیے ہیں۔
لیکن صرف اس صورت میں، میں اسے "جیسے ہے" چھوڑ دیتا ہوں۔

اس فائل میں تبدیلیاں سرور کو ریبوٹ کیے بغیر اٹھانے کے لیے، آپ کو کمانڈ چلانے کی ضرورت ہے:

sysctl -p

"ٹیبل" کے قواعد کے بارے میں مزید تفصیلات: habr.com/post/108690

============= OpenVPN =============

OpenVPN IPv4 iptables کے بغیر کام نہیں کرتا۔

میرے iptables VPN کے لیے اس طرح ہیں:

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
##iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

YY.YY.YY.YY مقامی مشین کا میرا جامد IPv4 پتہ ہے۔
10.8.0.0/24 - IPv4 اوپن وی پی این نیٹ ورک۔ اوپن وی پی این کلائنٹس کے لیے IPv4 پتے۔
قوانین کی مستقل مزاجی ضروری ہے۔

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
...
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

یہ ایک حد ہے تاکہ صرف میں اپنے جامد IP سے OpenVPN استعمال کر سکوں۔

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
  -- или --
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE

OpenVPN کلائنٹس اور انٹرنیٹ کے درمیان IPv4 پیکٹ فارورڈ کرنے کے لیے، آپ کو ان میں سے ایک کمانڈ کو رجسٹر کرنے کی ضرورت ہے۔

مختلف معاملات کے لئے، اختیارات میں سے ایک مناسب نہیں ہے.
دونوں کمانڈز میرے کیس کے لیے موزوں ہیں۔
دستاویزات کو پڑھنے کے بعد، میں نے پہلا آپشن منتخب کیا کیونکہ یہ کم CPU استعمال کرتا ہے۔

ریبوٹ کے بعد تمام iptables کی ترتیبات کو لینے کے لیے، آپ کو انہیں کہیں محفوظ کرنے کی ضرورت ہے۔

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

ایسے نام اتفاق سے نہیں چنے گئے تھے۔ وہ "iptables-persistent" پیکیج کے ذریعہ استعمال ہوتے ہیں۔

apt-get install iptables-persistent

مین اوپن وی پی این پیکیج کو انسٹال کرنا:

apt-get install openvpn easy-rsa

آئیے سرٹیفکیٹس کے لیے ایک ٹیمپلیٹ ترتیب دیں (اپنی اقدار کو تبدیل کریں):

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
ln -s openssl-1.0.0.cnf openssl.cnf

آئیے سرٹیفکیٹ ٹیمپلیٹ کی ترتیبات میں ترمیم کریں:

mcedit vars

...
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Krasnodar"
export KEY_CITY="Dinskaya"
export KEY_ORG="Own"
export KEY_EMAIL="[email protected]"
export KEY_OU="VPN"

# X509 Subject Field
export KEY_NAME="server"
...

سرور سرٹیفکیٹ بنائیں:

cd ~/openvpn-ca
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret keys/ta.key

آئیے حتمی "client-name.opvn" فائلیں بنانے کی صلاحیت تیار کریں:

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
mcedit ~/client-configs/base.conf

# Client mode
client

# Interface tunnel type
dev tun

# TCP protocol
proto tcp-client

# Address/Port of VPN server
remote XX.XX.XX.X0 1194

# Don't bind to local port/address
nobind

# Don't need to re-read keys and re-create tun at restart
persist-key
persist-tun

# Remote peer must have a signed certificate
remote-cert-tls server
ns-cert-type server

# Enable compression
comp-lzo

# Custom
ns-cert-type server
tls-auth ta.key 1
cipher DES-EDE3-CBC

آئیے ایک اسکرپٹ تیار کرتے ہیں جو تمام فائلوں کو ایک ہی opvn فائل میں ضم کردے گی۔

mcedit ~/client-configs/make_config.sh
chmod 700 ~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} 
    <(echo -e '<ca>') 
    ${KEY_DIR}/ca.crt 
    <(echo -e '</ca>n<cert>') 
    ${KEY_DIR}/.crt 
    <(echo -e '</cert>n<key>') 
    ${KEY_DIR}/.key 
    <(echo -e '</key>n<tls-auth>') 
    ${KEY_DIR}/ta.key 
    <(echo -e '</tls-auth>') 
    > ${OUTPUT_DIR}/.ovpn

پہلا OpenVPN کلائنٹ بنانا:

cd ~/openvpn-ca
source vars
./build-key client-name
cd ~/client-configs
./make_config.sh client-name

فائل "~/client-configs/files/client-name.ovpn" کلائنٹ کے آلے پر بھیجی جاتی ہے۔

iOS کلائنٹس کے لیے آپ کو درج ذیل چال کرنے کی ضرورت ہوگی:
"tls-auth" ٹیگ کا مواد تبصروں کے بغیر ہونا چاہیے۔
اور "tls-auth" ٹیگ سے پہلے "key-direction 1" بھی لگائیں۔

آئیے اوپن وی پی این سرور کی تشکیل کو ترتیب دیں:

cd ~/openvpn-ca/keys
cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/server.conf
mcedit /etc/openvpn/server.conf

# Listen port
port 1194

# Protocol
proto tcp-server

# IP tunnel
dev tun0
tun-ipv6
push tun-ipv6

# Master certificate
ca ca.crt

# Server certificate
cert server.crt

# Server private key
key server.key

# Diffie-Hellman parameters
dh dh2048.pem

# Allow clients to communicate with each other
client-to-client

# Client config dir
client-config-dir /etc/openvpn/ccd

# Run client-specific script on connection and disconnection
script-security 2
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
client-disconnect "/usr/bin/sudo -u root /etc/openvpn/server-clientdisconnect.sh"

# Server mode and client subnets
server 10.8.0.0 255.255.255.0
server-ipv6 XXXX:XXXX:XXXX:XXXX:1:3::/80
topology subnet

# IPv6 routes
push "route-ipv6 XXXX:XXXX:XXXX:XXXX::/64"
push "route-ipv6 2000::/3"

# DNS (for Windows)
# These are OpenDNS
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

# Configure all clients to redirect their default network gateway through the VPN
push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway ipv6" #For iOS

# Don't need to re-read keys and re-create tun at restart
persist-key
persist-tun

# Ping every 10s. Timeout of 120s.
keepalive 10 120

# Enable compression
comp-lzo

# User and group
user vpn
group vpn

# Log a short status
status openvpn-status.log

# Logging verbosity
##verb 4

# Custom config
tls-auth ta.key 0
cipher DES-EDE3-CBC

ہر کلائنٹ کے لیے ایک جامد پتہ مقرر کرنے کے لیے اس کی ضرورت ہے (ضروری نہیں، لیکن میں اسے استعمال کرتا ہوں):

# Client config dir
client-config-dir /etc/openvpn/ccd

سب سے مشکل اور کلیدی تفصیل۔

بدقسمتی سے، OpenVPN ابھی تک نہیں جانتا ہے کہ کلائنٹس کے لیے IPv6 گیٹ وے کو آزادانہ طور پر کیسے ترتیب دیا جائے۔
آپ کو ہر کلائنٹ کے لیے اسے "دستی طور پر" آگے بڑھانا ہوگا۔

# Run client-specific script on connection and disconnection
script-security 2
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
client-disconnect "/usr/bin/sudo -u root /etc/openvpn/server-clientdisconnect.sh"

فائل "/etc/openvpn/server-clientconnect.sh":

#!/bin/sh

# Check client variables
if [ -z "$ifconfig_pool_remote_ip" ] || [ -z "$common_name" ]; then
        echo "Missing environment variable."
        exit 1
fi

# Load server variables
. /etc/openvpn/variables

ipv6=""

# Find out if there is a specific config with fixed IPv6 for this client
if [ -f "/etc/openvpn/ccd/$common_name" ]; then
        # Get fixed IPv6 from client config file
        ipv6=$(sed -nr 's/^.*ifconfig-ipv6-push[ t]+([0-9a-fA-F:]+).*$/1/p' "/etc/openvpn/ccd/$common_name")
        echo $ipv6
fi

# Get IPv6 from IPv4
if [ -z "$ipv6" ]; then
        ipp=$(echo "$ifconfig_pool_remote_ip" | cut -d. -f4)
        if ! [ "$ipp" -ge 2 -a "$ipp" -le 254 ] 2>/dev/null; then
                echo "Invalid IPv4 part."
                exit 1
        fi
        hexipp=$(printf '%x' $ipp)
        ipv6="$prefix$hexipp"
fi

# Create proxy rule
/sbin/ip -6 neigh add proxy $ipv6 dev eno1

فائل "/etc/openvpn/server-clientdisconnect.sh":

#!/bin/sh

# Check client variables
if [ -z "$ifconfig_pool_remote_ip" ] || [ -z "$common_name" ]; then
        echo "Missing environment variable."
        exit 1
fi

# Load server variables
. /etc/openvpn/variables

ipv6=""

# Find out if there is a specific config with fixed IPv6 for this client
if [ -f "/etc/openvpn/ccd/$common_name" ]; then
        # Get fixed IPv6 from client config file
        ipv6=$(sed -nr 's/^.*ifconfig-ipv6-push[ t]+([0-9a-fA-F:]+).*$/1/p' "/etc/openvpn/ccd/$common_name")
fi

# Get IPv6 from IPv4
if [ -z "$ipv6" ]; then
        ipp=$(echo "$ifconfig_pool_remote_ip" | cut -d. -f4)
        if ! [ "$ipp" -ge 2 -a "$ipp" -le 254 ] 2>/dev/null; then
                echo "Invalid IPv4 part."
                exit 1
        fi
        hexipp=$(printf '%x' $ipp)
        ipv6="$prefix$hexipp"
fi

# Delete proxy rule
/sbin/ip -6 neigh del proxy $ipv6 dev eno1

دونوں اسکرپٹس "/etc/openvpn/variables" فائل کا استعمال کرتی ہیں:

# Subnet
prefix=XXXX:XXXX:XXXX:XXXX:2:
# netmask
prefixlen=112

مجھے یہ یاد رکھنا مشکل ہے کہ ایسا کیوں لکھا ہے۔

اب netmask = 112 عجیب لگ رہا ہے (یہ وہیں 96 ہونا چاہئے)۔
اور سابقہ ​​عجیب ہے، یہ tun0 نیٹ ورک سے میل نہیں کھاتا۔
لیکن ٹھیک ہے، میں اسے ویسے ہی چھوڑ دوں گا۔

cipher DES-EDE3-CBC

یہ سب کے لیے نہیں ہے - میں نے کنکشن کو خفیہ کرنے کا یہ طریقہ منتخب کیا۔

OpenVPN IPv4 ترتیب دینے کے بارے میں مزید جانیں۔

OpenVPN IPv6 ترتیب دینے کے بارے میں مزید جانیں۔

============= پوسٹ فکس =============

مرکزی پیکج کی تنصیب:

apt-get install postfix

انسٹال کرتے وقت، "انٹرنیٹ سائٹ" کو منتخب کریں۔

میرا "/etc/postfix/main.cf" اس طرح لگتا ہے:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1

smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_loglevel = 1

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = domain1.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = domain1.com
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

internal_mail_filter_classes = bounce

# Storage type
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

# SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        #reject_invalid_hostname,
        #reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client sbl.spamhaus.org,
        check_policy_service unix:private/policyd-spf

smtpd_helo_restrictions =
        #reject_invalid_helo_hostname,
        #reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname

smtpd_client_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_helo_hostname,
        permit

# SPF
policyd-spf_time_limit = 3600

# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock

# IP address per domain
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcre

آئیے اس ترتیب کی تفصیلات دیکھیں۔

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key

Khabrovsk کے رہائشیوں کے مطابق، اس بلاک میں "غلط معلومات اور غلط مقالے" شامل ہیں۔اپنے کیریئر کے آغاز کے صرف 8 سال بعد میں نے یہ سمجھنا شروع کیا کہ SSL کیسے کام کرتا ہے۔

لہذا، میں SSL کو استعمال کرنے کا طریقہ بیان کرنے کی آزادی لوں گا ("یہ کیسے کام کرتا ہے؟" اور "یہ کیوں کام کرتا ہے؟" کے سوالات کا جواب دیئے بغیر)۔

جدید خفیہ کاری کی بنیاد ایک کلیدی جوڑے کی تخلیق ہے (حروف کی دو بہت لمبی تاریں)۔

ایک "کلید" نجی ہے، دوسری کلید "عوامی" ہے۔ ہم نجی کلید کو بہت احتیاط سے خفیہ رکھتے ہیں۔ ہم عوامی کلید سب کو تقسیم کرتے ہیں۔

عوامی کلید کا استعمال کرتے ہوئے، آپ متن کی ایک تار کو خفیہ کر سکتے ہیں تاکہ صرف نجی کلید کا مالک ہی اسے ڈکرپٹ کر سکے۔
ٹھیک ہے، یہ ٹیکنالوجی کی پوری بنیاد ہے.

مرحلہ نمبر 1 - https سائٹس۔
کسی سائٹ تک رسائی حاصل کرتے وقت، براؤزر ویب سرور سے سیکھتا ہے کہ سائٹ https ہے اور اس لیے عوامی کلید کی درخواست کرتا ہے۔
ویب سرور عوامی کلید دیتا ہے۔ براؤزر HTTP-درخواست کو خفیہ کرنے اور بھیجنے کے لیے عوامی کلید کا استعمال کرتا ہے۔
HTTP-درخواست کا مواد صرف وہی پڑھ سکتے ہیں جن کے پاس نجی کلید ہے، یعنی صرف وہی سرور جس سے درخواست کی گئی ہے۔
Http-request میں کم از کم ایک URI شامل ہے۔ لہذا، اگر کوئی ملک پوری سائٹ تک نہیں بلکہ ایک مخصوص صفحہ تک رسائی کو محدود کرنے کی کوشش کر رہا ہے، تو https سائٹس کے لیے ایسا کرنا ناممکن ہے۔

مرحلہ نمبر 2 - خفیہ کردہ جواب۔
ویب سرور ایک جواب فراہم کرتا ہے جسے سڑک پر آسانی سے پڑھا جا سکتا ہے۔
حل انتہائی آسان ہے - براؤزر مقامی طور پر ہر https سائٹ کے لیے ایک ہی نجی عوامی کلید کا جوڑا تیار کرتا ہے۔
اور سائٹ کی عوامی کلید کی درخواست کے ساتھ، یہ اپنی مقامی عوامی کلید بھیجتا ہے۔
ویب سرور اسے یاد رکھتا ہے اور، جب http-response بھیجتا ہے، تو اسے مخصوص کلائنٹ کی عوامی کلید کے ساتھ خفیہ کرتا ہے۔
اب HTTP-response کو صرف کلائنٹ کے براؤزر کی نجی کلید (یعنی خود کلائنٹ) کے مالک کے ذریعے ہی ڈکرپٹ کیا جا سکتا ہے۔

مرحلہ نمبر 3 - عوامی چینل کے ذریعے ایک محفوظ کنکشن قائم کرنا۔
مثال نمبر 2 میں ایک کمزوری ہے - خیر خواہوں کو HTTP-درخواست کو روکنے اور عوامی کلید کے بارے میں معلومات میں ترمیم کرنے سے کوئی چیز نہیں روکتی ہے۔
اس طرح، ثالث کو بھیجے گئے اور موصول ہونے والے پیغامات کا تمام مواد واضح طور پر نظر آئے گا جب تک کہ کمیونیکیشن چینل تبدیل نہ ہو جائے۔
اس سے نمٹنا انتہائی آسان ہے - صرف براؤزر کی عوامی کلید کو ویب سرور کی عوامی کلید کے ساتھ خفیہ کردہ پیغام کے طور پر بھیجیں۔
ویب سرور پھر سب سے پہلے جواب بھیجتا ہے جیسے "آپ کی عوامی کلید ایسی ہے" اور اسی عوامی کلید کے ساتھ اس پیغام کو خفیہ کرتا ہے۔
براؤزر جواب کو دیکھتا ہے - اگر "آپ کی عوامی کلید ایسی ہے" پیغام موصول ہوتا ہے - تو یہ 100% گارنٹی ہے کہ یہ مواصلاتی چینل محفوظ ہے۔
یہ کتنا محفوظ ہے؟
اس طرح کے محفوظ مواصلاتی چینل کی تخلیق پنگ*2 کی رفتار سے ہوتی ہے۔ مثال کے طور پر 20ms
حملہ آور کے پاس فریقین میں سے کسی ایک کی ذاتی کلید پہلے سے ہونی چاہیے۔ یا چند ملی سیکنڈ میں ایک نجی کلید تلاش کریں۔
ایک جدید نجی کلید کو ہیک کرنے میں ایک سپر کمپیوٹر پر کئی دہائیاں لگیں گی۔

مرحلہ نمبر 4 - عوامی چابیاں کا عوامی ڈیٹا بیس۔
ظاہر ہے کہ اس پوری کہانی میں حملہ آور کے لیے کلائنٹ اور سرور کے درمیان کمیونیکیشن چینل پر بیٹھنے کا موقع موجود ہے۔
کلائنٹ سرور ہونے کا بہانہ کرسکتا ہے، اور سرور کلائنٹ ہونے کا بہانہ کرسکتا ہے۔ اور دونوں سمتوں میں چابیاں کا ایک جوڑا نقل کریں۔
پھر حملہ آور تمام ٹریفک کو دیکھے گا اور ٹریفک کو "ترمیم" کرنے کے قابل ہو جائے گا۔
مثال کے طور پر، وہ پتہ تبدیل کریں جہاں پیسہ بھیجنا ہے یا آن لائن بینکنگ سے پاس ورڈ کاپی کرنا ہے یا "قابل اعتراض" مواد بلاک کرنا ہے۔
ایسے حملہ آوروں کا مقابلہ کرنے کے لیے، وہ ہر https سائٹ کے لیے پبلک کیز کے ساتھ ایک عوامی ڈیٹا بیس لے کر آئے۔
ہر براؤزر تقریباً 200 ایسے ڈیٹا بیس کے وجود کے بارے میں "جانتا ہے"۔ یہ ہر براؤزر میں پہلے سے انسٹال ہوتا ہے۔
"علم" کو ہر سرٹیفکیٹ سے عوامی کلید کی حمایت حاصل ہے۔ یعنی، ہر مخصوص سرٹیفیکیشن اتھارٹی کے کنکشن کو جعلی نہیں بنایا جا سکتا۔

اب یہاں ایک سادہ سی سمجھ ہے کہ https کے لیے SSL کیسے استعمال کیا جائے۔
اگر آپ اپنا دماغ استعمال کرتے ہیں تو یہ واضح ہو جائے گا کہ اسپیشل سروسز اس ڈھانچے میں کسی چیز کو کس طرح ہیک کر سکتی ہیں۔ لیکن اس کے لیے انہیں بڑی کوششوں کی لاگت آئے گی۔
اور NSA یا CIA سے چھوٹی تنظیمیں - VIPs کے لیے بھی تحفظ کی موجودہ سطح کو ہیک کرنا تقریباً ناممکن ہے۔

میں ssh کنکشن کے بارے میں بھی شامل کروں گا۔ وہاں کوئی عوامی چابیاں نہیں ہیں، تو آپ کیا کر سکتے ہیں؟ مسئلہ دو طریقوں سے حل ہوتا ہے۔
آپشن ssh بائی پاس ورڈ:
پہلے کنکشن کے دوران، ssh کلائنٹ کو خبردار کرنا چاہیے کہ ہمارے پاس ssh سرور سے ایک نئی عوامی کلید ہے۔
اور مزید رابطوں کے دوران، اگر انتباہ "ssh سرور سے نئی عوامی کلید" ظاہر ہوتا ہے، تو اس کا مطلب ہوگا کہ وہ آپ کو چھپانے کی کوشش کر رہے ہیں۔
یا آپ کو آپ کے پہلے کنکشن پر چھپایا گیا تھا، لیکن اب آپ بیچوان کے بغیر سرور کے ساتھ بات چیت کرتے ہیں۔
دراصل، اس حقیقت کی وجہ سے کہ وائر ٹیپنگ کی حقیقت آسانی سے، جلدی اور آسانی کے ساتھ آشکار ہو جاتی ہے، یہ حملہ صرف ایک مخصوص کلائنٹ کے لیے خاص معاملات میں استعمال ہوتا ہے۔

آپشن ssh-by-key:
ہم ایک فلیش ڈرائیو لیتے ہیں، اس پر ssh سرور کے لیے پرائیویٹ کلید لکھتے ہیں (اس کے لیے شرائط اور بہت سی اہم باریکیاں ہیں، لیکن میں ایک تعلیمی پروگرام لکھ رہا ہوں، استعمال کے لیے ہدایات نہیں)۔
ہم عوامی کلید کو مشین پر چھوڑ دیتے ہیں جہاں ssh کلائنٹ ہوگا اور ہم اسے خفیہ بھی رکھتے ہیں۔
ہم فلیش ڈرائیو کو سرور پر لاتے ہیں، اسے داخل کرتے ہیں، پرائیویٹ کلید کو کاپی کرتے ہیں، اور فلیش ڈرائیو کو جلا کر راکھ کو ہوا میں بکھیر دیتے ہیں (یا کم از کم اسے صفر کے ساتھ فارمیٹ کرتے ہیں)۔
بس - اس طرح کے آپریشن کے بعد اس طرح کے ایس ایس ایس کنکشن کو ہیک کرنا ناممکن ہو جائے گا۔ یقیناً، 10 سالوں میں سپر کمپیوٹر پر ٹریفک دیکھنا ممکن ہو جائے گا - لیکن یہ ایک الگ کہانی ہے۔

میں آف ٹاپک کے لیے معذرت خواہ ہوں۔

تو اب نظریہ معلوم ہو گیا ہے۔ میں آپ کو SSL سرٹیفکیٹ بنانے کے بہاؤ کے بارے میں بتاؤں گا۔

"openssl genrsa" کا استعمال کرتے ہوئے ہم عوامی کلید کے لیے ایک نجی کلید اور "خالی جگہیں" بناتے ہیں۔
ہم "خالی جگہیں" فریق ثالث کی کمپنی کو بھیجتے ہیں، جس کو ہم سادہ ترین سرٹیفکیٹ کے لیے تقریباً $9 ادا کرتے ہیں۔

چند گھنٹوں کے بعد، ہمیں اس تھرڈ پارٹی کمپنی سے اپنی "عوامی" کلید اور کئی عوامی کلیدوں کا ایک سیٹ موصول ہوتا ہے۔

میری عوامی کلید کی رجسٹریشن کے لیے فریق ثالث کمپنی کو ادائیگی کیوں کرنی چاہیے یہ ایک الگ سوال ہے، ہم یہاں اس پر غور نہیں کریں گے۔

اب یہ واضح ہو گیا ہے کہ تحریر کا کیا مطلب ہے:

smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key

"/etc/ssl" فولڈر میں ssl مسائل کے لیے تمام فائلیں شامل ہیں۔
domain1.com — ڈومین نام۔
2018 کلیدی تخلیق کا سال ہے۔
"کلید" - عہدہ کہ فائل ایک نجی کلید ہے۔

اور اس فائل کا مطلب:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com — ڈومین نام۔
2018 کلیدی تخلیق کا سال ہے۔
زنجیروں سے جڑا ہوا - عہدہ کہ عوامی چابیاں کی ایک زنجیر ہے (پہلی ہماری عوامی کلید ہے اور باقی وہ ہیں جو عوامی کلید جاری کرنے والی کمپنی سے آئی ہیں)۔
crt - عہدہ کہ ایک تیار شدہ سرٹیفکیٹ ہے (تکنیکی وضاحت کے ساتھ عوامی کلید)۔

smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1

یہ ترتیب اس معاملے میں استعمال نہیں کی گئی ہے بلکہ بطور مثال لکھی گئی ہے۔

کیونکہ اس پیرامیٹر میں خرابی آپ کے سرور سے (آپ کی مرضی کے بغیر) سپیم بھیجنے کا باعث بنے گی۔

پھر سب پر ثابت کرو کہ تم مجرم نہیں ہو۔

recipient_delimiter = +

بہت سے لوگ نہیں جانتے ہوں گے، لیکن ای میلز کی درجہ بندی کے لیے یہ ایک معیاری کردار ہے، اور اسے زیادہ تر جدید میل سرورز کے ذریعے سپورٹ کیا جاتا ہے۔

مثال کے طور پر، اگر آپ کے پاس میل باکس ہے "[ای میل محفوظ]"بھیجنے کی کوشش کریں"[ای میل محفوظ]"دیکھو اس سے کیا نکلتا ہے۔

inet_protocols = ipv4

یہ مبہم ہوسکتا ہے۔

لیکن یہ صرف ایسا نہیں ہے۔ ہر نیا ڈومین بطور ڈیفالٹ صرف IPv4 ہوتا ہے، پھر میں ہر ایک کے لیے علیحدہ علیحدہ IPv6 آن کرتا ہوں۔

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

یہاں ہم یہ بتاتے ہیں کہ تمام آنے والی میل dovecot کو جاتی ہے۔
اور ڈومین، میل باکس، عرف کے اصول - ڈیٹا بیس میں دیکھیں۔

/etc/postfix/mysql-virtual-mailbox-domains.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

/etc/postfix/mysql-virtual-mailbox-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

/etc/postfix/mysql-virtual-alias-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

# SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

اب پوسٹ فکس کو معلوم ہے کہ ڈوکوٹ کے ساتھ اجازت کے بعد ہی مزید بھیجنے کے لیے میل کو قبول کیا جا سکتا ہے۔

مجھے واقعی سمجھ نہیں آرہی ہے کہ اسے یہاں کیوں نقل کیا گیا ہے۔ ہم نے پہلے ہی ہر وہ چیز بتا دی ہے جس کی "ورچوئل_ٹرانسپورٹ" میں ضرورت ہے۔

لیکن پوسٹ فکس سسٹم بہت پرانا ہے - شاید یہ پرانے دنوں کا ایک تھرو بیک ہے۔

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

یہ ہر میل سرور کے لیے مختلف طریقے سے ترتیب دیا جا سکتا ہے۔

میرے پاس 3 میل سرورز ہیں اور یہ ترتیبات مختلف استعمال کی ضروریات کی وجہ سے بہت مختلف ہیں۔

آپ کو اسے احتیاط سے کنفیگر کرنے کی ضرورت ہے - بصورت دیگر فضول آپ کے اندر آجائے گا، یا اس سے بھی بدتر - آپ سے اسپام نکلے گا۔

# SPF
policyd-spf_time_limit = 3600

آنے والے خطوط کے SPF کو چیک کرنے سے متعلق کچھ پلگ ان کے لیے ترتیب دینا۔

# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock

ترتیب یہ ہے کہ ہمیں تمام باہر جانے والی ای میلز کے ساتھ DKIM دستخط فراہم کرنا چاہیے۔

# IP address per domain
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcre

پی ایچ پی اسکرپٹس سے خط بھیجتے وقت یہ لیٹر روٹنگ میں ایک اہم تفصیل ہے۔

فائل "/etc/postfix/sdd_transport.pcre":

/^[email protected]$/ domain1:
/^[email protected]$/ domain2:
/^[email protected]$/ domain3:
/@domain1.com$/             domain1:
/@domain2.com$/             domain2:
/@domain3.com$/             domain3:

بائیں طرف باقاعدہ تاثرات ہیں۔ دائیں طرف ایک لیبل ہے جو خط کو نشان زد کرتا ہے۔
لیبل کے مطابق پوسٹ فکس - ایک مخصوص خط کے لیے کچھ مزید کنفیگریشن لائنوں کو مدنظر رکھے گا۔

کسی مخصوص خط کے لیے پوسٹ فکس کو کس طرح دوبارہ ترتیب دیا جائے گا اس کی نشاندہی "master.cf" میں کی جائے گی۔

لائنز 4، 5، 6 اہم ہیں۔ ہم کس ڈومین کی طرف سے خط بھیج رہے ہیں، ہم یہ لیبل لگاتے ہیں۔
لیکن پرانے کوڈ میں پی ایچ پی اسکرپٹس میں ہمیشہ "منجانب" فیلڈ کی نشاندہی نہیں کی جاتی ہے۔ پھر صارف نام بچاؤ کے لئے آتا ہے۔

مضمون پہلے سے ہی وسیع ہے - میں nginx+fpm ترتیب دے کر مشغول نہیں ہونا چاہوں گا۔

مختصراً، ہر سائٹ کے لیے ہم اس کا اپنا لینکس صارف کا مالک مقرر کرتے ہیں۔ اور اس کے مطابق آپ کا ایف پی ایم پول۔

Fpm-pool php کا کوئی بھی ورژن استعمال کرتا ہے (یہ بہت اچھا ہے جب ایک ہی سرور پر آپ php کے مختلف ورژن اور یہاں تک کہ مختلف php.ini ہمسایہ سائٹس کے لیے بغیر کسی پریشانی کے استعمال کر سکتے ہیں)۔

لہذا، ایک مخصوص لینکس صارف "www-domain2" کی ویب سائٹ domain2.com ہے۔ اس سائٹ میں سے فیلڈ کی وضاحت کیے بغیر ای میلز بھیجنے کا کوڈ ہے۔

لہذا، اس معاملے میں بھی، خطوط صحیح طریقے سے بھیجے جائیں گے اور کبھی بھی اسپام میں ختم نہیں ہوں گے۔

میرا "/etc/postfix/master.cf" اس طرح لگتا ہے:

...
smtp      inet  n       -       y       -       -       smtpd
  -o content_filter=spamassassin
...
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
...
policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

spamassassin unix -     n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}
...
domain1  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X1
   -o smtp_helo_name=domain1.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:1:1
   -o syslog_name=postfix-domain1

domain2  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X5
   -o smtp_helo_name=domain2.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:2:1:1
   -o syslog_name=postfix-domain2

domain3  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X2
   -o smtp_helo_name=domain3
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:5:1
   -o syslog_name=postfix-domain3

فائل مکمل طور پر فراہم نہیں کی گئی ہے - یہ پہلے ہی بہت بڑی ہے۔
میں نے صرف نوٹ کیا کہ کیا تبدیل ہوا ہے۔

smtp      inet  n       -       y       -       -       smtpd
  -o content_filter=spamassassin
...
spamassassin unix -     n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}

یہ اسپاماساسین سے متعلق ترتیبات ہیں، اس پر مزید بعد میں۔

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

ہم آپ کو پورٹ 587 کے ذریعے میل سرور سے جڑنے کی اجازت دیتے ہیں۔
ایسا کرنے کے لیے، آپ کو لاگ ان کرنا ہوگا۔

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

SPF چیک کو فعال کریں۔

apt-get install postfix-policyd-spf-python

آئیے اوپر SPF چیک کے لیے پیکج انسٹال کریں۔

domain1  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X1
   -o smtp_helo_name=domain1.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:1:1
   -o syslog_name=postfix-domain1

اور یہ سب سے دلچسپ چیز ہے۔ یہ مخصوص IPv4/IPv6 ایڈریس سے مخصوص ڈومین کے لیے خطوط بھیجنے کی صلاحیت ہے۔

یہ rDNS کی خاطر کیا جاتا ہے۔ rDNS IP ایڈریس کے ذریعہ سٹرنگ وصول کرنے کا عمل ہے۔
اور میل کے لیے، یہ فیچر اس بات کی تصدیق کے لیے استعمال کیا جاتا ہے کہ ہیلو بالکل اس ایڈریس کے rDNS سے میل کھاتا ہے جہاں سے ای میل بھیجا گیا تھا۔

اگر ہیلو اس ای میل ڈومین سے مماثل نہیں ہے جس کی جانب سے خط بھیجا گیا تھا، تو اسپام پوائنٹس دیئے جاتے ہیں۔

Helo rDNS سے میل نہیں کھاتا ہے - بہت سارے اسپام پوائنٹس دیئے جاتے ہیں۔
اس کے مطابق، ہر ڈومین کا اپنا IP پتہ ہونا چاہیے۔
OVH کے لیے - کنسول میں rDNS کی وضاحت ممکن ہے۔
tech.ru کے لیے - مسئلہ کو سپورٹ کے ذریعے حل کیا جاتا ہے۔
AWS کے لیے، مسئلہ کو سپورٹ کے ذریعے حل کیا جاتا ہے۔
"inet_protocols" اور "smtp_bind_address6" - ہم IPv6 سپورٹ کو فعال کرتے ہیں۔
IPv6 کے لیے آپ کو rDNS بھی رجسٹر کرنے کی ضرورت ہے۔
"syslog_name" - اور یہ لاگ پڑھنے میں آسانی کے لیے ہے۔

سرٹیفکیٹ خریدیں۔ میں یہاں تجویز کرتا ہوں۔.

پوسٹ فکس + ڈوکوٹ لنک یہاں ترتیب دے رہا ہے۔.

ایس پی ایف کی ترتیب۔

============== کبوتر =============

apt-get install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-antispam

mysql ترتیب دینا، پیکجز خود انسٹال کرنا۔

فائل "/etc/dovecot/conf.d/10-auth.conf"

disable_plaintext_auth = yes
auth_mechanisms = plain login

اجازت صرف خفیہ کردہ ہے۔

فائل "/etc/dovecot/conf.d/10-mail.conf"

mail_location = maildir:/var/mail/vhosts/%d/%n

یہاں ہم حروف کے لیے ذخیرہ کرنے کی جگہ کی نشاندہی کرتے ہیں۔

میں چاہتا ہوں کہ انہیں فائلوں میں محفوظ کیا جائے اور ڈومین کے لحاظ سے گروپ کیا جائے۔

فائل "/etc/dovecot/conf.d/10-master.conf"

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    address = XX.XX.XX.X1, XX.XX.XX.X2, XX.XX.XX.X5, [XXXX:XXXX:XXXX:XXXX:1:1:1:1], [XXXX:XXXX:XXXX:XXXX:1:2:1:1], [XXXX:XXXX:XXXX:XXXX:1:1:5:1]
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    address = XX.XX.XX.X1, XX.XX.XX.X2, XX.XX.XX.X5, [XXXX:XXXX:XXXX:XXXX:1:1:1:1], [XXXX:XXXX:XXXX:XXXX:1:2:1:1], [XXXX:XXXX:XXXX:XXXX:1:1:5:1]
    port = 995
    ssl = yes
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}
service imap {
}
service pop3 {
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }

  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

یہ مین ڈوکوٹ کنفیگریشن فائل ہے۔
یہاں ہم غیر محفوظ کنکشن کو غیر فعال کر دیتے ہیں۔
اور محفوظ رابطوں کو فعال کریں۔

فائل "/etc/dovecot/conf.d/10-ssl.conf"

ssl = required
ssl_cert = </etc/nginx/ssl/domain1.com.2018.chained.crt
ssl_key = </etc/nginx/ssl/domain1.com.2018.key
local XX.XX.XX.X5 {
  ssl_cert = </etc/nginx/ssl/domain2.com.2018.chained.crt
  ssl_key =  </etc/nginx/ssl/domain2.com.2018.key
}

ایس ایس ایل ترتیب دینا۔ ہم اشارہ کرتے ہیں کہ ایس ایس ایل کی ضرورت ہے۔
اور سرٹیفکیٹ خود۔ اور ایک اہم تفصیل "مقامی" ہدایت ہے۔ بتاتا ہے کہ کون سا ssl سرٹیفکیٹ کس مقامی IPv4 سے منسلک کرتے وقت استعمال کرنا ہے۔

ویسے، IPv6 یہاں کنفیگر نہیں ہے، میں اس غلطی کو بعد میں درست کروں گا۔
XX.XX.XX.X5 (domain2) - کوئی سرٹیفکیٹ نہیں۔ کلائنٹس کو جوڑنے کے لیے آپ کو domain1.com کی وضاحت کرنی ہوگی۔
XX.XX.XX.X2 (domain3) - ایک سرٹیفکیٹ ہے، آپ کلائنٹس کو جوڑنے کے لیے domain1.com یا domain3.com کی وضاحت کر سکتے ہیں۔

فائل "/etc/dovecot/conf.d/15-lda.conf"

protocol lda {
  mail_plugins = $mail_plugins sieve
}

مستقبل میں اسپاماساسن کے لیے اس کی ضرورت ہوگی۔

فائل "/etc/dovecot/conf.d/20-imap.conf"

protocol imap {
  mail_plugins = $mail_plugins antispam
}

یہ ایک antispam پلگ ان ہے۔ "اسپام" فولڈر میں / سے منتقلی کے وقت اسپاماساسین کو تربیت دینے کی ضرورت ہے۔

فائل "/etc/dovecot/conf.d/20-pop3.conf"

protocol pop3 {
}

بس ایسی فائل ہے۔

فائل "/etc/dovecot/conf.d/20-lmtp.conf"

protocol lmtp {
  mail_plugins = $mail_plugins sieve
  postmaster_address = [email protected]
}

lmtp ترتیب دے رہا ہے۔

فائل "/etc/dovecot/conf.d/90-antispam.conf"

plugin {
  antispam_backend = pipe
  antispam_trash = Trash;trash
  antispam_spam = Junk;Spam;SPAM
  antispam_pipe_program_spam_arg = --spam
  antispam_pipe_program_notspam_arg = --ham
  antispam_pipe_program = /usr/bin/sa-learn
  antispam_pipe_program_args = --username=%Lu
}

اسپام فولڈر میں/سے منتقلی کے وقت اسپاماسسین ٹریننگ سیٹنگز۔

فائل "/etc/dovecot/conf.d/90-sieve.conf"

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_after = /var/lib/dovecot/sieve/default.sieve
}

ایک فائل جو یہ بتاتی ہے کہ آنے والے حروف کے ساتھ کیا کرنا ہے۔

فائل "/var/lib/dovecot/sieve/default.sieve"

require ["fileinto", "mailbox"];

if header :contains "X-Spam-Flag" "YES" {
        fileinto :create "Spam";
}

آپ کو فائل کو مرتب کرنے کی ضرورت ہے: "sievec default.sieve".

فائل "/etc/dovecot/conf.d/auth-sql.conf.ext"

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

اجازت کے لیے sql فائلوں کی وضاحت کرنا۔
اور فائل کو خود اجازت کے طریقہ کار کے طور پر استعمال کیا جاتا ہے۔

فائل "/etc/dovecot/dovecot-sql.conf.ext"

driver = mysql
connect = host=127.0.0.1 dbname=servermail user=usermail password=password
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

یہ پوسٹ فکس کے لیے اسی طرح کی ترتیبات کے مساوی ہے۔

فائل "/etc/dovecot/dovecot.conf"

protocols = imap lmtp pop3
listen = *, ::
dict {
}
!include conf.d/*.conf
!include_try local.conf

مین کنفیگریشن فائل۔
اہم بات یہ ہے کہ ہم یہاں اشارہ کرتے ہیں - پروٹوکول شامل کریں۔

============ SpamAssassin =============

apt-get install spamassassin spamc

آئیے پیکجز کو انسٹال کرتے ہیں۔

adduser spamd --disabled-login

آئیے ایک صارف کو شامل کریں جس کی طرف سے۔

systemctl enable spamassassin.service

ہم لوڈ ہونے پر خودکار لوڈنگ اسپاماساسن سروس کو فعال کرتے ہیں۔

فائل "/etc/default/spamassassin":

CRON=1

"بذریعہ ڈیفالٹ" قواعد کی خودکار اپ ڈیٹ کو فعال کرکے۔

فائل "/etc/spamassassin/local.cf":

report_safe 0

use_bayes          1
bayes_auto_learn   1
bayes_auto_expire  1
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn      DBI:mysql:sa:localhost:3306
bayes_sql_username sa
bayes_sql_password password

آپ کو mysql میں ایک ڈیٹا بیس "sa" بنانے کی ضرورت ہے جس میں صارف "sa" پاس ورڈ "پاس ورڈ" کے ساتھ ہے (کسی مناسب چیز سے تبدیل کریں)۔

report_safe - یہ خط کے بجائے سپیم ای میل کی رپورٹ بھیجے گا۔
use_bayes spamassassin مشین لرننگ سیٹنگز ہیں۔

باقی spamassassin ترتیبات مضمون میں پہلے استعمال کیا گیا تھا.

عام ترتیب "اسپاماساسن".
نئے سپام ای میلز کو IMAP "Spam" فولڈر میں منتقل کرنے کے بارے میں.
Dovecot + SpamAssassin کے ایک سادہ مجموعہ کے بارے میں.
میں اماپ فولڈرز میں حروف کو منتقل کرتے وقت اسپاماساسین لرننگ تھیوری کو پڑھنے کی تجویز کرتا ہوں (اور میں اسے استعمال کرنے کی سفارش نہیں کرتا ہوں).

============= کمیونٹی سے اپیل =============

میں کمیونٹی میں ایک خیال بھی ڈالنا چاہوں گا کہ آگے بھیجے گئے خطوط کی حفاظت کی سطح کو کیسے بڑھایا جائے۔ چونکہ میں میل کے موضوع میں بہت گہرائی سے ڈوبا ہوا ہوں۔

تاکہ صارف اپنے کلائنٹ پر چابیاں کا ایک جوڑا بنا سکے (آؤٹ لک، تھنڈر برڈ، براؤزر پلگ ان، ...)۔ پبلک اور پرائیویٹ۔ عوامی - DNS کو بھیجیں۔ پرائیویٹ - کلائنٹ پر بچت کریں۔ میل سرورز کسی مخصوص وصول کنندہ کو بھیجنے کے لیے عوامی کلید استعمال کر سکیں گے۔

اور اس طرح کے حروف کے ساتھ سپیم سے بچانے کے لیے (جی ہاں، میل سرور مواد کو نہیں دیکھ سکے گا) - آپ کو 3 اصول متعارف کرانے کی ضرورت ہوگی:

  1. لازمی اصلی DKIM دستخط، لازمی SPF، لازمی rDNS۔
  2. اینٹی اسپام ٹریننگ کے موضوع پر ایک نیورل نیٹ ورک + کلائنٹ کی طرف سے اس کے لیے ڈیٹا بیس۔
  3. خفیہ کاری کا الگورتھم ایسا ہونا چاہیے کہ بھیجنے والے فریق کو وصول کنندہ کے مقابلے میں 100 گنا زیادہ CPU پاور انکرپشن پر خرچ کرنا چاہیے۔

عوامی خطوط کے علاوہ، "محفوظ خط و کتابت شروع کرنے کے لیے" ایک معیاری تجویز خط تیار کریں۔ صارفین میں سے ایک (میل باکس) دوسرے میل باکس میں منسلکہ کے ساتھ ایک خط بھیجتا ہے۔ خط میں خط و کتابت کے لیے ایک محفوظ مواصلاتی چینل شروع کرنے کی تجویز اور میل باکس کے مالک کی عوامی کلید (کلائنٹ کی طرف ایک نجی کلید کے ساتھ) شامل ہے۔

یہاں تک کہ آپ خاص طور پر ہر خط و کتابت کے لیے چند چابیاں بھی بنا سکتے ہیں۔ وصول کنندہ صارف اس پیشکش کو قبول کر سکتا ہے اور اپنی عوامی کلید بھیج سکتا ہے (خاص طور پر اس خط و کتابت کے لیے بھی بنایا گیا ہے)۔ اگلا، پہلا صارف ایک سروس کنٹرول لیٹر بھیجتا ہے (دوسرے صارف کی عوامی کلید کے ساتھ خفیہ کردہ) - جس کی وصولی پر دوسرا صارف تشکیل شدہ مواصلاتی چینل کو قابل اعتماد سمجھ سکتا ہے۔ اگلا، دوسرا صارف ایک کنٹرول لیٹر بھیجتا ہے - اور پھر پہلا صارف تشکیل شدہ چینل کو بھی محفوظ سمجھ سکتا ہے۔

سڑک پر چابیاں کی مداخلت سے نمٹنے کے لیے، پروٹوکول کو فلیش ڈرائیو کا استعمال کرتے ہوئے کم از کم ایک عوامی کلید کو منتقل کرنے کا امکان فراہم کرنا چاہیے۔

اور سب سے اہم بات یہ ہے کہ یہ سب کام کرتا ہے (سوال یہ ہے کہ "اس کی ادائیگی کون کرے گا؟"):
10 سال کے لیے $3 سے شروع ہونے والے پوسٹل سرٹیفکیٹ درج کریں۔ جو بھیجنے والے کو ڈی این ایس میں یہ بتانے کی اجازت دے گا کہ "میری عوامی چابیاں وہاں موجود ہیں۔" اور وہ آپ کو ایک محفوظ کنکشن شروع کرنے کا موقع دیں گے۔ ایک ہی وقت میں، اس طرح کے کنکشن کو قبول کرنا مفت ہے۔
جی میل آخر کار اپنے صارفین کو منیٹائز کر رہا ہے۔ $10 فی 3 سال کے لیے - محفوظ خط و کتابت کے چینلز بنانے کا حق۔

============= نتیجہ ============

پورے مضمون کو جانچنے کے لیے، میں ایک مہینے کے لیے ایک سرشار سرور کرایہ پر لینے اور SSL سرٹیفکیٹ کے ساتھ ایک ڈومین خریدنے جا رہا تھا۔

لیکن زندگی کے حالات نے ترقی کی تو یہ مسئلہ 2 مہینے تک گھسیٹتا رہا۔
اور اس طرح، جب مجھے دوبارہ فارغ وقت ملا، تو میں نے مضمون کو اسی طرح شائع کرنے کا فیصلہ کیا، بجائے اس کے کہ اشاعت ایک اور سال تک جاری رہے گی۔

اگر بہت سارے سوالات ہیں جیسے کہ "لیکن یہ کافی تفصیل سے بیان نہیں کیا گیا ہے"، تو شاید ایک نئے ڈومین اور ایک نئے SSL سرٹیفکیٹ کے ساتھ ایک سرشار سرور لینے اور اسے مزید تفصیل سے بیان کرنے کی طاقت ہو گی اور، زیادہ تر اہم بات یہ ہے کہ تمام گمشدہ اہم تفصیلات کی شناخت کریں۔

میں پوسٹل سرٹیفکیٹس کے بارے میں خیالات پر بھی رائے حاصل کرنا چاہوں گا۔ اگر آپ کو یہ آئیڈیا پسند ہے تو میں rfc کے لیے مسودہ لکھنے کی طاقت تلاش کرنے کی کوشش کروں گا۔

کسی مضمون کے بڑے حصوں کو نقل کرتے وقت، اس مضمون کا لنک فراہم کریں۔
کسی دوسری زبان میں ترجمہ کرتے وقت اس مضمون کا لنک فراہم کریں۔
میں خود اس کا انگریزی میں ترجمہ کرنے کی کوشش کروں گا اور کراس حوالہ جات چھوڑ دوں گا۔


ماخذ: www.habr.com

نیا تبصرہ شامل کریں