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

دا مقاله د عصري میل سرور تنظیم کولو څرنګوالي په اړه ده.
Postfix + Dovecot. 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 په سرور کې نصب شوی.

سرور دوه انٹرفیسونه لري `eno2` او `eno1`. لومړی لامحدود دی، او دوهم په ترتیب سره چټک دی.

دلته 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' ته ګمارل شوی و.

دلته درې ډومینونه دي `domain3.com`، `domain1.com`، `domain2.com`. د `domain3.com` او `domain1.com` لپاره د SSL سند شتون لري.

زه یو ګوګل حساب لرم چې زه غواړم خپل میل باکس ورسره لینک کړم[ایمیل خوندي شوی]` (د بریښنالیک ترلاسه کول او مستقیم د جی میل انٹرفیس څخه بریښنالیک لیږل).
دلته باید یو میل بکس وي[ایمیل خوندي شوی]`، د بریښنالیک یوه کاپي چې زه یې غواړم په خپل جی میل کې وګورم. او دا نادره ده چې د `` په استازیتوب یو څه لیږلو توان ولري[ایمیل خوندي شوی]د ویب انٹرفیس له لارې.

دلته باید یو میل بکس وي[ایمیل خوندي شوی]'، کوم چې ایوانوف به د خپل آی فون څخه کار واخلي.

لیږل شوي بریښنالیکونه باید د ټولو عصري ضد سپیم اړتیاو سره مطابقت ولري.
په عامه شبکو کې باید د کوډ کولو لوړه کچه شتون ولري.
د لیکونو لیږلو او ترلاسه کولو لپاره باید د IPv6 ملاتړ شتون ولري.
دلته باید یو SpamAssassin وي چې هیڅکله به بریښنالیکونه حذف نکړي. او دا به یا اچونه یا پریږدي یا د IMAP "سپیم" فولډر ته واستوي.
د SpamAssassin اتومات زده کړه باید تنظیم شي: که زه د سپیم فولډر ته یو لیک ولیږم، دا به له دې څخه زده کړي؛ که زه د سپیم فولډر څخه یو لیک ولیږم، دا به له دې څخه زده کړي. د SpamAssassin روزنې پایلې باید اغیزه وکړي چې آیا لیک په سپیم فولډر کې پای ته رسیږي.
د PHP سکریپټونه باید د دې وړتیا ولري چې په ورکړل شوي سرور کې د هر ډومین په استازیتوب بریښنالیک واستوي.
دلته باید د Openvpn خدمت شتون ولري، د IPv6 کارولو وړتیا سره په هغه پیرودونکي کې چې IPv6 نلري.

لومړی تاسو اړتیا لرئ د IPv6 په شمول د انٹرفیس او روټینګ تنظیم کړئ.
بیا تاسو اړتیا لرئ د OpenVPN تنظیم کړئ، کوم چې به د IPv4 له لارې وصل شي او پیرودونکي ته د جامد - ریښتیني IPv6 پته چمتو کړي. دا پیرودونکی به په سرور کې ټولو IPv6 خدماتو ته لاسرسی ولري او په انټرنیټ کې هرې IPv6 سرچینو ته لاسرسی ولري.
بیا تاسو اړتیا لرئ د لیکونو لیږلو لپاره پوسټ فکس تنظیم کړئ + SPF + DKIM + rDNS او ورته نور کوچني شیان.
بیا تاسو اړتیا لرئ د Dovecot تنظیم کړئ او ملټي ډومین تنظیم کړئ.
بیا تاسو اړتیا لرئ د SpamAssassin تنظیم او روزنه تنظیم کړئ.
په نهایت کې ، بانډ نصب کړئ.

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

د انٹرفیسونو تنظیم کولو لپاره ، تاسو اړتیا لرئ دا په "/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 کې په هر سرور کې پلي کیدی شي (د ملاتړ سره لږ همغږي سره) او دا به سمدلاسه کار وکړي لکه څنګه چې باید وي.

که تاسو د هټزنر، OVH لپاره ورته شیانو ترتیب کولو تجربه لرئ، دا هلته توپیر لري. ډیر ستونزمن.

eno1 د شبکې کارت # 1 نوم دی (سست مګر نامحدود).
eno2 د شبکې کارت #2 نوم دی (چټک، مګر د تعرفې سره).
tun0 د OpenVPN څخه د مجازی شبکې کارت نوم دی.
XX.XX.XX.X0 - IPv4 #1 په eno1.
XX.XX.XX.X1 - IPv4 #2 په eno1.
XX.XX.XX.X2 - IPv4 #3 په eno1.
XX.XX.XX.X5 - IPv4 #1 په eno2.
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" او "جدول 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

د دې کمانډ سره موږ له XX.XX.XX.X4 پرته د OpenVPN پیرودونکو څخه محلي IPv0 ته لاره تنظیم کړه.
زه لاهم نه پوهیږم چې ولې دا کمانډ د ټولو 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 - subnet باید د eno1 څخه لوی وي. که نه نو ، دا به امکان ونلري چې د OpenVPN پیرودونکو لپاره د IPv6 ګیټ وے تنظیم کړئ.
eno2 - subnet باید د 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 خدماتو پتې په توګه وکارول شي.

د شبکې تنظیمولو لپاره، دا باید ممکن وي چې سرور بیا پیل کړئ.
د IPv4 بدلونونه غوره کیږي کله چې اجرا شي (ډاډ ترلاسه کړئ چې دا په سکرین کې وتړئ - که نه نو دا کمانډ به په ساده ډول په سرور کې شبکه خرابه کړي):

/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 openvpn شبکه. IPv4 پتې د Openvpn پیرودونکو لپاره.
د قواعدو دوام مهم دی.

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

د اصلي OpenVPN کڅوړه نصب کول:

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" ټګ څخه سمدلاسه د "کیلي لارښود 1" ځای په ځای کړئ.

راځئ چې د OpenVPN سرور ترتیب تنظیم کړو:

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

د خابروسک د اوسیدونکو په وینا، دا بلاک "غلط معلومات او غلط مقالې" لري.زما د کیریر له پیل څخه یوازې 8 کاله وروسته ما په دې پوهیدل پیل کړل چې SSL څنګه کار کوي.

له همدې امله، زه به د SSL کارولو څرنګوالی تشریح کولو ازادي واخلم (پرته له دې چې پوښتنې ځواب کړي "دا څنګه کار کوي؟" او "ولې دا کار کوي؟").

د عصري کوډ کولو اساس د کلیدي جوړه رامینځته کول دي (د کرکټرونو دوه خورا اوږد تارونه).

یوه "کیلي" شخصي ده، بله کیلي "عامه" ده. موږ شخصي کیلي په ډیر احتیاط سره پټ ساتو. موږ هرچا ته عامه کیلي توزیع کوو.

د عامه کیلي په کارولو سره ، تاسو کولی شئ د متن یو تار کوډ کړئ نو یوازې د شخصي کیلي مالک کولی شي دا کوډ کړي.
ښه، دا د ټیکنالوژۍ ټول اساس دی.

ګام #1 - https سایټونه.
کله چې سایټ ته لاسرسی ومومئ ، براوزر د ویب سرور څخه زده کوي چې سایټ https دی او له همدې امله د عامه کیلي غوښتنه کوي.
د ویب سرور عامه کیلي ورکوي. براوزر عامه کیلي د HTTP غوښتنه کوډ کولو او لیږلو لپاره کاروي.
د http-غوښتنې مینځپانګه یوازې د هغه چا لخوا لوستل کیدی شي څوک چې شخصي کیلي لري ، دا یوازې هغه سرور دی چې غوښتنه یې کیږي.
د Http غوښتنه لږترلږه یو URI لري. له همدې امله، که چیرې یو هیواد هڅه وکړي چې لاسرسی محدود کړي نه ټول سایټ ته، مګر یو ځانګړي پاڼې ته، نو دا د https سایټونو لپاره ناممکن کار دی.

ګام #2 - کوډ شوی ځواب.
ویب سرور یو ځواب وړاندې کوي چې په اسانۍ سره په سړک کې لوستل کیدی شي.
حل خورا ساده دی - براوزر په محلي توګه د هر https سایټ لپاره ورته شخصي - عامه کلیدي جوړه رامینځته کوي.
او د سایټ د عامه کیلي غوښتنې سره سره، دا خپل محلي عامه کیلي لیږي.
د ویب سرور دا په یاد لري او کله چې د http-response لیږل کیږي، دا د یو ځانګړي پیرودونکي عامه کیلي سره کوډ کوي.
اوس د HTTP ځواب یوازې د پیرودونکي د براوزر شخصي کیلي مالک لخوا ډیکریټ کیدی شي (یعنی پخپله پیرودونکي).

دریم ګام - د عامه چینل له لارې د خوندي پیوستون رامینځته کول.
د مثال په نمبر 2 کې یو زیان شتون لري - هیڅ شی د خیر غوښتونکو مخه نه نیسي چې د HTTP غوښتنې مداخله وکړي او د عامه کیلي په اړه معلومات ترمیم کړي.
په دې توګه، منځګړیتوب به په واضح ډول د لیږل شوي او ترلاسه شوي پیغامونو ټول مینځپانګې تر هغه وخته پورې وګوري چې د ارتباطي چینل بدلون ومومي.
د دې سره معامله کول خورا ساده دي - یوازې د براوزر عامه کیلي د ویب سرور عامه کیلي سره کوډ شوي پیغام په توګه واستوئ.
ویب سرور بیا لومړی ځواب لیږي لکه "ستاسو عامه کیلي داسې ده" او دا پیغام د ورته عامه کیلي سره کوډ کوي.
براوزر ځواب ته ګوري - که چیرې پیغام "ستاسو عامه کیلي داسې وي" ترلاسه شي - نو دا 100٪ تضمین دی چې دا ارتباطي چینل خوندي دی.
دا څومره خوندي دی؟
د داسې خوندي ارتباطي چینل رامینځته کول د پینګ * 2 په سرعت سره پیښیږي. د مثال په توګه 20ms.
برید کوونکی باید مخکې له مخکې د یوې خوا شخصي کیلي ولري. یا په څو ملی ثانیو کې شخصي کیلي ومومئ.
د یوې عصري شخصي کیلي هیک کول به په سوپر کمپیوټر کې لسیزې وخت ونیسي.

څلورم ګام - د عامه کیلي عامه ډیټابیس.
په ښکاره ډول ، پدې ټوله کیسه کې د برید کونکي لپاره فرصت شتون لري چې د پیرودونکي او سرور ترمینځ د ارتباطي چینل کې ناست وي.
پیرودونکی کولی شي د سرور په توګه وښیې، او سرور کولی شي د پیرودونکي په توګه وښيي. او په دواړو لورو کې د کیلي یوه جوړه تقلید کړئ.
بیا برید کونکی به ټول ټرافیک وګوري او د دې وړتیا ولري چې ترافیک "اډیټ" کړي.
د مثال په توګه، د پیسو لیږلو پته بدل کړئ یا د آنلاین بانکدارۍ څخه پاسورډ کاپي کړئ یا "د اعتراض وړ" مینځپانګې بلاک کړئ.
د داسې برید کونکو سره د مبارزې لپاره، دوی د هر https سایټ لپاره د عامه کلیدونو سره د عامه ډیټابیس سره راغلل.
هر براوزر د شاوخوا 200 داسې ډیټابیسونو شتون په اړه "پوهیږي". دا په هر براوزر کې دمخه نصب شوی.
"پوهه" د هر سند څخه د عامه کیلي لخوا ملاتړ کیږي. دا دی ، د هر ځانګړي تصدیق ادارې سره اړیکه نشي جعلي کیدی.

اوس د https لپاره د SSL کارولو څرنګوالي ساده پوهه شتون لري.
که تاسو خپل دماغ کاروئ، نو دا به روښانه شي چې څنګه ځانګړي خدمتونه په دې جوړښت کې یو څه هیک کولی شي. مګر دا به دوی ته سختې هڅې مصرف کړي.
او هغه سازمانونه چې د NSA یا CIA څخه کوچني دي - د محافظت موجوده کچې هیک کول تقریبا ناممکن دي ، حتی د VIPs لپاره.

زه به د ssh اړیکو په اړه هم اضافه کړم. هلته عامه کیلي نشته، نو تاسو څه کولی شئ؟ مسله په دوه لارو حل کیږي.
د ssh په واسطه د پاسورډ اختیار:
د لومړۍ اړیکې په جریان کې، د ssh مراجع باید خبرداری ورکړي چې موږ د ssh سرور څخه نوې عامه کیلي لرو.
او د نورو اړیکو په جریان کې ، که خبرداری "د ssh سرور څخه نوې عامه کیلي" څرګند شي ، نو دا به پدې معنی وي چې دوی هڅه کوي تاسو ته غوږ ونیسي.
یا تاسو په لومړي اړیکه کې غوږ نیول شوی و، مګر اوس تاسو د منځګړیتوب پرته له سرور سره اړیکه ونیسئ.
په حقیقت کې، د دې حقیقت له امله چې د تار ټایپ کولو حقیقت په اسانۍ، ګړندۍ او په اسانۍ سره څرګند شوی، دا برید یوازې د یو ځانګړي پیرودونکي لپاره په ځانګړو قضیو کې کارول کیږي.

اختیار ssh-by-key:
موږ یو فلش ډرایو اخلو ، په دې کې د ssh سرور لپاره شخصي کیلي ولیکئ (د دې لپاره شرایط او ډیری مهم نزاکتونه شتون لري ، مګر زه یو تعلیمي برنامه لیکم ، نه د کارولو لارښوونې).
موږ عامه کیلي په ماشین کې پریږدو چیرې چې د 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

دا د لیک روټینګ کې کلیدي توضیحات دي کله چې د PHP سکریپټونو څخه لیکونه لیږل کیږي.

دوتنه "/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-پول.

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 سره سمون لري چې بریښنالیک یې لیږل شوی.

که هیلو د بریښنالیک ډومین سره سمون ونلري د چا په استازیتوب چې لیک لیږل شوی و، سپیم پوائنټونه ورکول کیږي.

هیلو د rDNS سره سمون نه خوري - ډیری سپیم ټکي ورکړل شوي.
په دې اساس، هر ډومین باید خپل IP پته ولري.
د OVH لپاره - په کنسول کې دا ممکنه ده چې rDNS مشخص کړئ.
د tech.ru لپاره - مسله د ملاتړ له لارې حل کیږي.
د AWS لپاره، مسله د ملاتړ له لارې حل کیږي.
"inet_protocols" او "smtp_bind_address6" - موږ د IPv6 ملاتړ فعالوو.
د IPv6 لپاره تاسو د rDNS راجستر کولو ته هم اړتیا لرئ.
"syslog_name" - او دا د لوګو لوستلو اسانه کولو لپاره دی.

سندونه واخلئ زه دلته وړاندیز کوم.

دلته د پوسټ فکس + ډوکوټ لینک تنظیم کول.

د SPF تنظیم کول.

==============================

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 {
  }
}

دا د اصلي dovecot ترتیب کولو فایل دی.
دلته موږ غیر خوندي اړیکې غیر فعال کوو.
او خوندي اړیکې فعال کړئ.

دوتنه "/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
}

دا د سپیم ضد پلگ ان دی. د "سپیم" فولډر څخه د لیږد په وخت کې د سپماساسین روزنې ته اړتیا ده.

دوتنه "/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 د سپماساسین ماشین زده کړې ترتیبات دي.

پاتې سپماساسین ترتیبات په مقاله کې مخکې کارول شوي.

عمومي ترتیب "سپماساسین".
د IMAP "سپیم" فولډر ته د نوي سپیم بریښنالیکونو لیږدولو په اړه.
د Dovecot + SpamAssassin ساده ترکیب په اړه.
زه د اماپ فولډرونو کې د لیکونو حرکت کولو پر مهال د سپماساسین زده کړې تیوري لوستلو وړاندیز کوم (او زه یې د کارولو وړاندیز نه کوم).

================================================

زه هم غواړم په ټولنه کې د وړاندې شوي لیکونو د امنیت کچې لوړولو څرنګوالي په اړه یو نظر وړاندې کړم. ځکه چې زه د میل په موضوع کې خورا ژور ډوب شوی یم.

د دې لپاره چې کارونکي کولی شي په خپل پیرودونکي کې یو جوړه کیلي رامینځته کړي (آؤټ لک ، تندربرډ ، براوزر پلگ ان ، ...). عامه او خصوصي. عامه - DNS ته لیږل. شخصي - په پیرودونکي کې خوندي کړئ. د بریښنالیک سرورونه به وکولی شي یو ځانګړي ترلاسه کونکي ته د لیږلو لپاره عامه کیلي وکاروي.

او د داسې لیکونو سره د سپیم په وړاندې د ساتنې لپاره (هو، د میل سرور به د مینځپانګې لیدلو توان ونلري) - تاسو اړتیا لرئ 3 مقررات معرفي کړئ:

  1. لازمي اصلي DKIM لاسلیک، لازمي SPF، لازمي rDNS.
  2. د انټي سپیم روزنې په اړه عصبي شبکه + د پیرودونکي اړخ کې د دې لپاره ډیټابیس.
  3. د کوډ کولو الګوریتم باید داسې وي چې د لیږلو اړخ باید د ترلاسه کونکي اړخ په پرتله د کوډ کولو لپاره 100 ځله ډیر CPU بریښنا مصرف کړي.

د عامه لیکونو سربیره، یو معیاري پروپوزل لیک جوړ کړئ "د خوندي لیکونو پیل کولو لپاره." یو کارونکي (میل باکس) بل میل باکس ته د ضمیمې سره یو لیک لیږي. په لیک کې د متن وړاندیز شتون لري چې د لیک لپاره د خوندي مخابراتو چینل پیل کړي او د میل باکس مالک عامه کیلي (د پیرودونکي اړخ کې د شخصي کیلي سره).

تاسو حتی کولی شئ په ځانګړي ډول د هرې لیکنې لپاره یو څو کلیدونه جوړ کړئ. ترلاسه کونکی کارن کولی شي دا وړاندیز ومني او خپل عامه کیلي واستوي (هم په ځانګړي ډول د دې لیک لپاره جوړ شوی). بیا ، لومړی کارونکی د خدماتو کنټرول لیک لیږي (د دوهم کارونکي عامه کیلي سره کوډ شوی) - د ترلاسه کولو سره چې دوهم کارونکی کولی شي رامینځته شوی ارتباطي چینل د باور وړ وګڼي. بیا ، دوهم کارونکي د کنټرول لیک لیږي - او بیا لومړی کارونکی کولی شي رامینځته شوی چینل خوندي په پام کې ونیسي.

په سړک کې د کیلي د مداخلې سره د مبارزې لپاره، پروتوکول باید د فلش ډرایو په کارولو سره لږترلږه د یوې عامه کیلي لیږدولو امکان چمتو کړي.

او ترټولو مهمه خبره دا ده چې دا ټول کار کوي (پوښتنه دا ده چې "څوک به د دې لپاره پیسې ورکړي؟"):
پوستي سندونه دننه کړئ چې د 10 کلونو لپاره $ 3 څخه پیل کیږي. کوم چې به لیږونکي ته اجازه ورکړي چې په dns کې په ګوته کړي چې "زما عامه کیلي هلته دي." او دوی به تاسو ته د خوندي پیوستون پیل کولو فرصت درکړي. په ورته وخت کې، دا ډول اړیکې منل وړیا دي.
gmail په پای کې خپل کاروونکي منیټ کوي. په هرو دریو کلونو کې د 10 ډالرو لپاره - د خوندي لیکونو چینلونو جوړولو حق.

============= پایله ============

د ټولې مقالې ازموینې لپاره ، زه د یوې میاشتې لپاره وقف شوی سرور کرایه کوم او د SSL سند سره ډومین واخلم.

مګر د ژوند شرایطو وده وکړه نو دا مسله د 2 میاشتو لپاره وغځېده.
او په دې توګه، کله چې ما یو ځل بیا وړیا وخت درلود، ما پریکړه وکړه چې مقاله خپره کړم، د دې خطر پرځای چې خپرونه به د بل کال لپاره ودروي.

که چیرې ډیری پوښتنې شتون ولري لکه "مګر دا په کافي توضیحاتو کې ندي بیان شوي" ، نو بیا به شاید ځواک وي چې د نوي ډومین او نوي SSL سند سره وقف شوي سرور واخلئ او دا په ډیر تفصیل سره تشریح کړئ او ډیری مهم، ټول ورک شوي مهم توضیحات وپیژني.

زه هم غواړم د پوستي سندونو په اړه د نظرونو په اړه نظرونه ترلاسه کړم. که تاسو نظر خوښ کړئ، زه به هڅه وکړم چې د rfc لپاره د مسودې لیکلو ځواک ومومئ.

کله چې د یوې مقالې لویې برخې کاپي کوئ، د دې مقالې لینک چمتو کړئ.
کله چې کومې بلې ژبې ته ژباړئ، د دې مقالې لینک چمتو کړئ.
زه به هڅه وکړم چې دا پخپله انګلیسي ته وژباړم او کراس حواله پریږدم.


سرچینه: www.habr.com

Add a comment