Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + Multi-interfaces + SpamAssassin-Learn + Bind

මෙම ලිපිය නවීන තැපැල් සේවාදායකයක් සකසන්නේ කෙසේද යන්නයි.
Postfix + Dovecot. SPF + DKIM + rDNS. IPv6 සමඟ.
TSL සංකේතනය සමඟ. බහු වසම් සඳහා සහය ඇතිව - සැබෑ SSL සහතිකයක් සමඟ කොටස.
antispam ආරක්ෂාව සහ අනෙකුත් තැපැල් සේවාදායකයන්ගෙන් ඉහළ antispam ශ්‍රේණිගත කිරීමක් සමඟ.
බහු භෞතික අතුරුමුහුණත් සඳහා සහය දක්වයි.
OpenVPN සමඟින්, IPv4 හරහා සම්බන්ධ වන අතර IPv6 සපයනු ලැබේ.

ඔබට මෙම සියලු තාක්ෂණයන් ඉගෙන ගැනීමට අවශ්‍ය නැතිනම්, නමුත් එවැනි සේවාදායකයක් සැකසීමට අවශ්‍ය නම්, මෙම ලිපිය ඔබ සඳහා වේ.

ලිපිය සෑම විස්තරයක්ම පැහැදිලි කිරීමට උත්සාහ නොකරයි. පැහැදිලි කිරීම සම්මත ලෙස වින්‍යාස කර නැති හෝ පාරිභෝගිකයාගේ දෘෂ්ටි කෝණයෙන් වැදගත් දේ වෙත යයි.

තැපැල් සේවාදායකයක් සැකසීමට පෙළඹවීම මගේ දිගුකාලීන සිහිනයකි. මෙය මෝඩකමක් ලෙස පෙනෙන්නට පුළුවන, නමුත් IMHO, එය ඔබගේ ප්රියතම වෙළඳ නාමයෙන් නව මෝටර් රථයක් ගැන සිහින දකිනවාට වඩා හොඳය.

IPv6 පිහිටුවීම සඳහා පෙළඹවීම් දෙකක් තිබේ. තොරතුරු තාක්ෂණ විශේෂඥයෙකුට පැවැත්ම සඳහා නව තාක්ෂණයන් නිරන්තරයෙන් ඉගෙන ගත යුතුය. වාරණයට එරෙහි සටනට මගේ නිහතමානී දායකත්වය ලබා දීමට මම කැමතියි.

OpenVPN පිහිටුවීමේ අභිප්‍රේරණය වන්නේ දේශීය යන්ත්‍රය මත IPv6 ක්‍රියා කරවීම පමණි.
භෞතික අතුරුමුහුණත් කිහිපයක් පිහිටුවීම සඳහා අභිප්රේරණය වන්නේ මගේ සේවාදායකයේ එක් අතුරු මුහුණතක් "මන්දගාමී නමුත් අසීමිත" සහ තවත් "වේගවත් නමුත් තීරුබදු" ඇති බවයි.

Bind සිටුවම් පිහිටුවීමේ අභිප්‍රේරණය වන්නේ මගේ ISP අස්ථායී DNS සේවාදායකයක් ලබා දීම සහ google සමහර විට අසාර්ථක වීමයි. මට පුද්ගලික භාවිතය සඳහා ස්ථාවර DNS සේවාදායකයක් අවශ්‍යයි.

ලිපියක් ලිවීමට පෙළඹවීම - මම මාස 10 කට පෙර කෙටුම්පතක් ලිව්වා, මම දැනටමත් එය දෙවරක් බැලුවෙමි. කතුවරයාට එය නිතිපතා අවශ්‍ය වුවද, අන් අයටද එය අවශ්‍ය වීමේ ඉහළ සම්භාවිතාවක් ඇත.

තැපැල් සේවාදායකයක් සඳහා විශ්වීය විසඳුමක් නොමැත. නමුත් මම "මෙය කරන්න, පසුව, සියල්ල කළ යුතු පරිදි ක්‍රියාත්මක වන විට, අමතර දේවල් ඉවතට විසි කරන්න" වැනි දෙයක් ලිවීමට උත්සාහ කරමි.

tech.ru සමාගමට Colocation සේවාදායකයක් ඇත. OVH, Hetzner, AWS සමඟ සංසන්දනය කළ හැකිය. මෙම ගැටළුව විසඳීම සඳහා, tech.ru සමඟ සහයෝගයෙන් කටයුතු කිරීම වඩාත් ඵලදායී වනු ඇත.

Debian 9 සේවාදායකයේ ස්ථාපනය කර ඇත.

සේවාදායකයට `eno2` සහ `eno1` අතුරුමුහුණත් 2ක් ඇත. පළමුවැන්න අසීමිත වන අතර දෙවැන්න පිළිවෙලින් වේගවත් වේ.

ස්ථිතික IP ලිපින 3ක් ඇත, XX.XX.XX.X0 සහ XX.XX.XX.X1 සහ XX.XX.XX.X2 `eno1` අතුරුමුහුණත මත සහ XX.XX.XX.X5 `eno2` අතුරුමුහුණත මත .

තිබේ XXXX:XXXX:XXXX:XXXX::/64 `eno6` අතුරුමුහුණතට පවරන ලද IPv1 ලිපින සංචිතයක් සහ එයින් XXXX:XXXX:XXXX:XXXX:1:2::/96 මගේ ඉල්ලීම පරිදි `eno2` වෙත පවරන ලදී.

වසම් 3ක් ඇත `domain1.com`, `domain2.com`, `domain3.com`. `domain1.com` සහ `domain3.com` සඳහා SSL සහතිකයක් ඇත.

මගේ තැපැල් පෙට්ටිය සම්බන්ධ කිරීමට මා කැමති Google ගිණුමක් මා සතුව ඇත[විද්‍යුත් ආරක්‍ෂිත]` (තැපෑල ලැබීම සහ gmail අතුරුමුහුණතෙන් කෙලින්ම තැපැල් යැවීම).
තැපැල් පෙට්ටියක් තිබිය යුතුය`[විද්‍යුත් ආරක්‍ෂිත]`, මට මගේ gmail හි දැකීමට අවශ්‍ය විද්‍යුත් තැපෑලෙහි පිටපතක්. තවද ` වෙනුවෙන් යමක් යැවීමට හැකි වීම දුර්ලභය[විද්‍යුත් ආරක්‍ෂිත]වෙබ් අතුරු මුහුණත හරහා.

තැපැල් පෙට්ටියක් තිබිය යුතුය`[විද්‍යුත් ආරක්‍ෂිත]`, Ivanov ඔහුගේ iPhone වෙතින් භාවිතා කරනු ඇත.

යවන ලද ඊමේල් සියලුම නවීන ප්‍රති-ස්පෑම් අවශ්‍යතාවලට අනුකූල විය යුතුය.
පොදු ජාල තුළ සපයා ඇති ඉහළම මට්ටමේ සංකේතනය තිබිය යුතුය.
ලිපි යැවීම සහ ලැබීම යන දෙකටම IPv6 සහාය තිබිය යුතුය.
ඊමේල් කිසිදා මකා නොදමන SpamAssassin එකක් තිබිය යුතුය. තවද එය IMAP "අයාචිත තැපෑල" ෆෝල්ඩරය වෙත පැනීම හෝ මඟ හැරීම හෝ යවනු ඇත.
SpamAssassin ස්වයංක්‍රීය ඉගෙනීම වින්‍යාසගත කළ යුතුය: මම ලිපියක් ස්පෑම් ෆෝල්ඩරය වෙත ගෙන ගියහොත්, එය මෙයින් ඉගෙන ගනු ඇත; මම ස්පෑම් ෆෝල්ඩරයෙන් ලිපියක් ගෙන ගියහොත්, එය මෙයින් ඉගෙන ගනු ඇත. SpamAssassin පුහුණුවේ ප්‍රතිඵල ලිපිය අයාචිත තැපැල් ෆෝල්ඩරය තුළ අවසන් වේද යන්න කෙරෙහි බලපෑම් කළ යුතුය.
දී ඇති සේවාදායකයක ඕනෑම වසමක් වෙනුවෙන් තැපැල් යැවීමට PHP ස්ක්‍රිප්ට්වලට හැකි විය යුතුය.
IPv6 නොමැති සේවාලාභියෙකු මත IPv6 භාවිතා කිරීමේ හැකියාව සහිත openvpn සේවාවක් තිබිය යුතුය.

පළමුව ඔබ IPv6 ඇතුළුව අතුරුමුහුණත් සහ මාර්ගගත කිරීම් වින්‍යාසගත කළ යුතුය.
එවිට ඔබට OpenVPN වින්‍යාස කිරීමට අවශ්‍ය වනු ඇත, එය IPv4 හරහා සම්බන්ධ වී සේවාදායකයාට ස්ථිතික-සැබෑ IPv6 ලිපිනයක් ලබා දෙනු ඇත. මෙම සේවාදායකයාට සේවාදායකයේ සියලුම IPv6 සේවාවන් වෙත ප්‍රවේශය සහ අන්තර්ජාලයේ ඇති ඕනෑම IPv6 සම්පත් වෙත ප්‍රවේශය ඇත.
එවිට ඔබට ලිපි + SPF + DKIM + rDNS සහ වෙනත් සමාන කුඩා දේවල් යැවීමට Postfix වින්‍යාස කිරීමට අවශ්‍ය වනු ඇත.
එවිට ඔබට Dovecot වින්‍යාස කිරීමට සහ Multidomain වින්‍යාස කිරීමට අවශ්‍ය වනු ඇත.
එවිට ඔබට 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 - IPv4 #1 on eno1.
XX.XX.XX.X1 - IPv4 #2 on eno1.
XX.XX.XX.X2 - IPv4 #3 on eno1.
XX.XX.XX.X5 - IPv4 #1 on eno2.
XX.XX.XX.1 - IPv4 ද්වාරය.
XXXX:XXX:XXXX:XXXX::/64 - සම්පූර්ණ සේවාදායකය සඳහා IPv6.
Eno1 සඳහා XXXX:XXXX:XXXX:XXXX:2:96::/6 - IPv2, පිටතින් ඇති අනෙක් සියල්ල eno1 වෙත යයි.
XXXX:XXXX:XXXX:XXXX::1 — IPv6 ද්වාරය (මෙය වෙනස් ලෙස කළ හැකි/කළ යුතු බව සඳහන් කිරීම වටී. IPv6 ස්විචය සඳහන් කරන්න).
dns-nameservers - 127.0.0.1 දක්වා ඇත (බන්ධන දේශීයව ස්ථාපනය කර ඇති නිසා) සහ 213.248.1.6 (මෙය tech.ru වෙතින්).

“table eno1t” සහ “table eno2t” - මෙම මාර්ග-නීතිවල තේරුම නම්, eno1 -> හරහා ඇතුළු වන ගමනාගමනය ඒ හරහා පිටත් වන අතර, eno2 -> හරහා ඇතුළු වන ගමනාගමනය ඒ හරහා පිටව යනු ඇත. තවද සේවාදායකය විසින් ආරම්භ කරන ලද සම්බන්ධතා eno1 හරහා ගමන් කරයි.

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

මෙම විධානය සමඟින් අපි සඳහන් කරන්නේ “table 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 - උපජාලය 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 සේවා ලිපින ලෙස භාවිතා කළ යුතු ලිපින වේ.

ජාලය වින්‍යාස කිරීම සඳහා, සේවාදායකය නැවත ආරම්භ කිරීමට හැකි විය යුතුය.
ක්‍රියාත්මක වූ විට 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 නොමැතිව ක්‍රියා නොකරයි.

VPN සඳහා මගේ iptables මේ වගේ ය:

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 ජාලය. openvpn සේවාලාභීන් සඳහා 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

ප්රධාන 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

ඇයි මෙහෙම ලියන්නේ කියලා මට මතක තියාගන්න අමාරුයි.

දැන් නෙට්මාස්ක් = 112 අමුතුයි (එය 96 විය යුතුය).
උපසර්ගය අමුතුයි, එය tun0 ජාලයට නොගැලපේ.
ඒත් හරි මම ඒක එහෙමම තියන්නම්.

cipher DES-EDE3-CBC

මෙය සෑම කෙනෙකුටම නොවේ - මම සම්බන්ධතාවය සංකේතනය කිරීමේ මෙම ක්‍රමය තෝරා ගත්තෙමි.

OpenVPN IPv4 පිහිටුවීම ගැන තව දැනගන්න.

OpenVPN IPv6 පිහිටුවීම ගැන තව දැනගන්න.

============= Postfix ==============

ප්රධාන පැකේජය ස්ථාපනය කිරීම:

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

අපි බලමු මේ config එකේ විස්තර.

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-ඉල්ලීමෙහි අවම වශයෙන් URI එකක්වත් අඩංගු වේ. එමනිසා, රටක් සම්පූර්ණ වෙබ් අඩවියට නොව නිශ්චිත පිටුවකට ප්‍රවේශය සීමා කිරීමට උත්සාහ කරන්නේ නම්, https අඩවි සඳහා මෙය කළ නොහැක.

පියවර #2 - සංකේතාත්මක ප්‍රතිචාරය.
වෙබ් සේවාදායකය මාර්ගයෙන් පහසුවෙන් කියවිය හැකි පිළිතුරක් සපයයි.
විසඳුම අතිශයින්ම සරලයි - බ්‍රවුසරය එක් එක් https අඩවිය සඳහා දේශීයව එකම පුද්ගලික-පොදු යතුරු යුගලයක් ජනනය කරයි.
සහ වෙබ් අඩවියේ පොදු යතුර සඳහා වන ඉල්ලීම සමග, එය එහි දේශීය පොදු යතුර යවයි.
වෙබ් සේවාදායකය එය මතක තබා ගන්නා අතර, http-ප්‍රතිචාරය යැවීමේදී, එය විශේෂිත සේවාලාභියෙකුගේ පොදු යතුර සමඟ සංකේතනය කරයි.
දැන් http-ප්‍රතිචාරය විකේතනය කළ හැක්කේ සේවාලාභියාගේ බ්‍රවුසරයේ පුද්ගලික යතුරේ හිමිකරුට පමණි (එනම් සේවාලාභියාටම).

පියවර අංක 3 - පොදු නාලිකාවක් හරහා ආරක්ෂිත සම්බන්ධතාවයක් ස්ථාපිත කිරීම.
උදාහරණ අංක 2 හි අවදානමක් ඇත - http-ඉල්ලීමකට බාධා කිරීමෙන් සහ පොදු යතුර පිළිබඳ තොරතුරු සංස්කරණය කිරීමෙන් යහපත කැමති අයට කිසිවක් වළක්වන්නේ නැත.
මේ අනුව, සන්නිවේදන නාලිකාව වෙනස් වන තුරු යවන ලද සහ ලැබුණු පණිවිඩවල සියලුම අන්තර්ගතයන් අතරමැදියා පැහැදිලිව දකිනු ඇත.
මෙය සමඟ කටයුතු කිරීම අතිශයින්ම සරලයි - බ්‍රවුසරයේ පොදු යතුර වෙබ් සේවාදායකයේ පොදු යතුර සමඟ සංකේතනය කරන ලද පණිවිඩයක් ලෙස යවන්න.
පසුව වෙබ් සේවාදායකය මුලින්ම “ඔබේ පොදු යතුර මේ වගේ” වැනි ප්‍රතිචාරයක් යවා මෙම පණිවිඩය එම පොදු යතුරෙන් සංකේතනය කරයි.
බ්‍රවුසරය ප්‍රතිචාරය දෙස බලයි - “ඔබේ පොදු යතුර මේ වගේ” පණිවිඩය ලැබුනේ නම් - මෙය මෙම සන්නිවේදන නාලිකාව ආරක්ෂිත බවට 100% සහතිකයකි.
එය කෙතරම් ආරක්ෂිතද?
එවැනි ආරක්ෂිත සන්නිවේදන නාලිකාවක් නිර්මාණය කිරීම පිං * 2 වේගයකින් සිදු වේ. උදාහරණයක් ලෙස 20ms.
ප්‍රහාරකයාට කල්තියා එක් පාර්ශ්වයක පුද්ගලික යතුර තිබිය යුතුය. නැතහොත් මිලි තත්පර කිහිපයකින් පුද්ගලික යතුරක් සොයා ගන්න.
එක් නවීන පුද්ගලික යතුරක් හැක් කිරීම සුපිරි පරිගණකයක දශක ගණනාවක් ගතවනු ඇත.

පියවර #4 - පොදු යතුරු වල පොදු දත්ත සමුදාය.
නිසැකවම, මෙම සම්පූර්ණ කතාව තුළ ප්‍රහාරකයෙකුට සේවාදායකයා සහ සේවාදායකයා අතර සන්නිවේදන නාලිකාවේ වාඩි වීමට අවස්ථාවක් තිබේ.
සේවාදායකයාට සේවාදායකයා ලෙස පෙනී සිටිය හැකි අතර සේවාදායකයාට සේවාදායකයා ලෙස පෙනී සිටිය හැකිය. සහ දෙපැත්තටම යතුරු යුගලයක් අනුකරණය කරන්න.
එවිට ප්රහාරකයා සියලු මාර්ග තදබදය දකින අතර ගමනාගමනය "සංස්කරණය" කිරීමට හැකි වනු ඇත.
උදාහරණයක් ලෙස, මුදල් එවිය යුතු ලිපිනය වෙනස් කිරීම හෝ සබැඳි බැංකුකරණයෙන් මුරපදය පිටපත් කිරීම හෝ "විරෝධී" අන්තර්ගතය අවහිර කරන්න.
එවැනි ප්‍රහාරකයන්ට එරෙහිව සටන් කිරීම සඳහා, ඔවුන් එක් එක් https වෙබ් අඩවිය සඳහා පොදු යතුරු සහිත පොදු දත්ත ගබඩාවක් ඉදිරිපත් කළහ.
එක් එක් බ්රවුසරය එවැනි දත්ත සමුදායන් 200 ක් පමණ පැවැත්ම ගැන "දනී". මෙය සෑම බ්‍රව්සරයකම පෙර ස්ථාපනය කර ඇත.
"දැනුම" සඳහා එක් එක් සහතිකයෙන් පොදු යතුරකින් පිටුබලය ලැබේ. එනම්, එක් එක් නිශ්චිත සහතික කිරීමේ අධිකාරියට සම්බන්ධය ව්යාජ ලෙස සකස් කළ නොහැකිය.

දැන් https සඳහා SSL භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ සරල අවබෝධයක් තිබේ.
ඔබ ඔබේ මොළය භාවිතා කරන්නේ නම්, විශේෂ සේවාවන් මෙම ව්‍යුහය තුළ යමක් හැක් කළ හැකි ආකාරය පැහැදිලි වනු ඇත. නමුත් එය ඔවුන්ට දරුණු උත්සාහයක් දැරීමට සිදුවනු ඇත.
NSA හෝ CIA ට වඩා කුඩා සංවිධාන - VIP සඳහා පවා පවතින ආරක්ෂණ මට්ටම හැක් කිරීම පාහේ කළ නොහැක්කකි.

මම ssh සම්බන්ධතා ගැනත් එකතු කරන්නම්. එහි පොදු යතුරු නොමැත, එබැවින් ඔබට කුමක් කළ හැකිද? ප්රශ්නය ක්රම දෙකකින් විසඳනු ලැබේ.
විකල්පය ssh-by-password:
පළමු සම්බන්ධතාවය අතරතුර, 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

දැන් postfix දන්නවා තැපැල් වැඩිදුර යැවීම සඳහා පිළිගත හැක්කේ dovecot සමඟ අවසර දීමෙන් පසුව පමණක් බව.

මෙය මෙහි අනුපිටපත් කරන්නේ මන්දැයි මට ඇත්තටම තේරෙන්නේ නැත. "අථත්‍ය_ප්‍රවාහනය" තුළ අවශ්‍ය සියල්ල අපි දැනටමත් සඳහන් කර ඇත.

නමුත් postfix පද්ධතිය ඉතා පැරණි ය - බොහෝ විට එය පැරණි දින සිට ආපසු හැරීමකි.

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:

වම් පසින් නිත්‍ය ප්‍රකාශන ඇත. දකුණු පසින් අකුර සලකුණු කරන ලේබලයක් ඇත.
ලේබලයට අනුකූලව Postfix - නිශ්චිත ලිපියක් සඳහා තවත් වින්යාස රේඛා කිහිපයක් සැලකිල්ලට ගනී.

නිශ්චිත ලිපියක් සඳහා හරියටම postfix නැවත සකස් කරන්නේ කෙසේද යන්න “master.cf” හි දක්වනු ඇත.

4, 5, 6 පේළි ඒ අතරින් ප්‍රධානයි. අපි ලිපිය යවන්නේ කුමන වසම වෙනුවෙන්ද, අපි මෙම ලේබලය තබමු.
නමුත් පැරණි කේතයේ PHP ස්ක්‍රිප්ට් වල "from" ක්ෂේත්‍රය සැමවිටම දක්වා නැත. එවිට පරිශීලක නාමය ගලවා ගැනීමට පැමිණේ.

ලිපිය දැනටමත් පුළුල් ය - nginx+fpm පිහිටුවීමෙන් අවධානය වෙනතකට යොමු කිරීමට මට අවශ්‍ය නැත.

කෙටියෙන් කිවහොත්, සෑම වෙබ් අඩවියක් සඳහාම අපි එහි ලිනක්ස්-පරිශීලක හිමිකරු සකස් කරමු. ඒ අනුව ඔබේ fpm-pool.

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}

මේවා spamassasin හා සම්බන්ධ සැකසුම් වේ, ඒ ගැන පසුව.

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 හරියටම ගැලපෙන බව තහවුරු කිරීමට මෙම විශේෂාංගය භාවිතා කරයි.

ලිපිය යවන ලද ඊමේල් වසම සමඟ helo නොගැලපේ නම්, අයාචිත තැපැල් ලකුණු ප්‍රදානය කෙරේ.

Helo rDNS සමඟ නොගැලපේ - ස්පෑම් ලකුණු ගොඩක් පිරිනමනු ලැබේ.
ඒ අනුව, සෑම වසමකටම තමන්ගේම IP ලිපිනයක් තිබිය යුතුය.
OVH සඳහා - කොන්සෝලය තුළ එය rDNS සඳහන් කළ හැකිය.
tech.ru සඳහා - ගැටළුව සහාය හරහා විසඳා ඇත.
AWS සඳහා, ගැටළුව සහාය හරහා විසඳනු ලැබේ.
“inet_protocols” සහ “smtp_bind_address6” - අපි IPv6 සහාය සක්‍රීය කරමු.
IPv6 සඳහා ඔබ ද rDNS ලියාපදිංචි කළ යුතුය.
"syslog_name" - මෙය ලඝු-සටහන් කියවීමේ පහසුව සඳහා වේ.

සහතික මිලදී ගන්න මම මෙහි නිර්දේශ කරමි.

මෙහි postfix+dovecot සබැඳිය පිහිටුවීම.

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 පිහිටුවීම. ssl අවශ්‍ය බව අපි පෙන්වා දෙමු.
සහ සහතිකය ම. වැදගත් විස්තරයක් වන්නේ "දේශීය" නියෝගයයි. කුමන දේශීය IPv4 වෙත සම්බන්ධ වන විට කුමන SSL සහතිකය භාවිතා කළ යුතුද යන්න දක්වයි.

මාර්ගය වන විට, 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 ප්ලගිනයකි. "අයාචිත තැපෑල" ෆෝල්ඩරය වෙත / සිට මාරු කරන අවස්ථාවේ දී spamassasin පුහුණු කිරීම සඳහා අවශ්ය වේ.

ගොනුව "/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
}

ස්පෑම් ෆෝල්ඩරය වෙත/එමෙන්ම මාරු කරන අවස්ථාවේදී Spamassasin පුහුණු සැකසුම්.

ගොනුව "/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';

මෙය postfix සඳහා සමාන සැකසුම් වලට අනුරූප වේ.

ගොනුව "/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

"මුරපද" මුරපදය සමඟ "sa" පරිශීලකයා සමඟ mysql හි "sa" දත්ත සමුදායක් සෑදිය යුතුය (ප්‍රමාණවත් දෙයක් සමඟ ප්‍රතිස්ථාපනය කරන්න).

report_safe - මෙය ලිපියක් වෙනුවට ස්පෑම් ඊමේල් වාර්තාවක් එවනු ඇත.
use_bayes යනු spamassassin යන්ත්‍ර ඉගෙනුම් සැකසුම් වේ.

ඉතිරි spamassassin සැකසුම් කලින් ලිපියේ භාවිතා කරන ලදී.

සාමාන්‍ය සැකසුම "spamassassin".
නව අයාචිත තැපෑල IMAP “අයාචිත තැපැල්” ෆෝල්ඩරය වෙත ගෙන යාම ගැන.
Dovecot + SpamAssassin හි සරල සංයෝජනයක් ගැන.
imap ෆෝල්ඩරවල අකුරු ගෙන යාමේදී spamassasin ඉගෙනුම් න්‍යාය කියවීමට මම නිර්දේශ කරමි (සහ එය භාවිතා කිරීම මම නිර්දේශ නොකරමි).

============= ප්‍රජාවට ආයාචනා කරන්න =============

ඉදිරියට යවන ලද ලිපිවල ආරක්‍ෂිත මට්ටම වැඩි කරන්නේ කෙසේද යන්න පිළිබඳ අදහසක් සමාජයට විසි කිරීමට ද මම කැමැත්තෙමි. මක්නිසාද යත් මම තැපෑල මාතෘකාවේ ගැඹුරින් ගිලී සිටිමි.

එවිට පරිශීලකයාට තම සේවාලාභියා මත යතුරු යුගලයක් නිර්මාණය කළ හැකිය (දෘෂ්ටිමාන, තණ්ඩර්බර්ඩ්, බ්‍රවුසර-ප්ලගිනය, ...). පොදු සහ පෞද්ගලික. පොදු - DNS වෙත යවන්න. පුද්ගලික - සේවාදායකයා මත ඉතිරි කරන්න. තැපැල් සේවාදායකයන්ට නිශ්චිත ලබන්නෙකු වෙත යැවීමට පොදු යතුරක් භාවිතා කිරීමට හැකි වනු ඇත.

එවැනි ලිපි සහිත අයාචිත තැපැල් වලින් ආරක්ෂා වීමට (ඔව්, තැපැල් සේවාදායකයට අන්තර්ගතය බැලීමට නොහැකි වනු ඇත) - ඔබට නීති 3 ක් හඳුන්වා දිය යුතුය:

  1. අනිවාර්ය සැබෑ DKIM අත්සන, අනිවාර්ය SPF, අනිවාර්ය rDNS.
  2. antispam පුහුණු විෂය පිළිබඳ ස්නායු ජාලයක් + සේවාලාභියාගේ පැත්තෙන් ඒ සඳහා දත්ත සමුදායක්.
  3. එන්ක්‍රිප්ෂන් ඇල්ගොරිතම විය යුත්තේ එවන පැත්තට ලැබෙන පැත්තට වඩා 100 ගුණයකින් වැඩි CPU බලයක් සංකේතනය සඳහා වැය කළ යුතු බවයි.

පොදු ලිපි වලට අමතරව, "ආරක්ෂිත ලිපි හුවමාරුව ආරම්භ කිරීම සඳහා" සම්මත යෝජනා ලිපියක් සංවර්ධනය කරන්න. එක් පරිශීලකයෙකු (තැපැල් පෙට්ටිය) වෙනත් තැපැල් පෙට්ටියකට ඇමුණුමක් සහිත ලිපියක් යවයි. ලිපි හුවමාරුව සඳහා ආරක්ෂිත සන්නිවේදන නාලිකාවක් ආරම්භ කිරීමට පෙළ යෝජනාවක් සහ තැපැල් පෙට්ටියේ හිමිකරුගේ පොදු යතුර (සේවාදායකයාගේ පැත්තෙන් පුද්ගලික යතුරක් සමඟ) ලිපියේ අඩංගු වේ.

එක් එක් ලිපි හුවමාරුව සඳහා ඔබට විශේෂයෙන් යතුරු කිහිපයක් සෑදිය හැකිය. ලබන්නාගේ පරිශීලකයාට මෙම පිරිනැමීම පිළිගෙන ඔහුගේ පොදු යතුර යැවිය හැක (මෙම ලිපි හුවමාරුව සඳහා විශේෂයෙන් සාදා ඇත). ඊළඟට, පළමු පරිශීලකයා සේවා පාලන ලිපියක් යවයි (දෙවන පරිශීලකයාගේ පොදු යතුර සමඟ සංකේතනය කර ඇත) - එය ලැබීමෙන් පසු දෙවන පරිශීලකයාට පිහිටුවා ඇති සන්නිවේදන නාලිකාව විශ්වාසදායක ලෙස සැලකිය හැකිය. ඊළඟට, දෙවන පරිශීලකයා පාලන ලිපියක් යවයි - ඉන්පසු පළමු පරිශීලකයාට සාදන ලද නාලිකාව ආරක්ෂිත යැයි සැලකිය හැකිය.

මාර්ගයේ යතුරු අවහිර කිරීමට එරෙහිව සටන් කිරීම සඳහා, ෆ්ලෑෂ් ධාවකය භාවිතයෙන් අවම වශයෙන් එක් පොදු යතුරක් සම්ප්රේෂණය කිරීමේ හැකියාව සඳහා ප්රොටෝකෝලය සැපයිය යුතුය.

වැදගත්ම දෙය නම් ඒ සියල්ල ක්‍රියාත්මක වීමයි (ප්‍රශ්නය “ඒ සඳහා ගෙවන්නේ කවුද?”):
ඩොලර් 10 සිට වසර 3ක් සඳහා තැපැල් සහතික ඇතුළත් කරන්න. "මගේ පොදු යතුරු එහි ඇති" බව dns හි සඳහන් කිරීමට යවන්නාට ඉඩ සලසයි. තවද ඔවුන් ඔබට ආරක්ෂිත සම්බන්ධතාවයක් ආරම්භ කිරීමට අවස්ථාව ලබා දෙනු ඇත. ඒ අතරම, එවැනි සම්බන්ධතා පිළිගැනීම නොමිලේ.
gmail අවසානයේ එහි පරිශීලකයින් මුදල් උපයමින් සිටී. වසර 10 කට ඩොලර් 3 ක් සඳහා - ආරක්ෂිත ලිපි හුවමාරු නාලිකා නිර්මාණය කිරීමේ අයිතිය.

============= නිගමනය ==============

සම්පූර්ණ ලිපිය පරීක්ෂා කිරීම සඳහා, මම මාසයකට කැපවූ සේවාදායකයක් කුලියට ගෙන SSL සහතිකයක් සහිත වසමක් මිලදී ගැනීමට සූදානම්ව සිටියෙමි.

නමුත් ජීවන තත්වයන් වර්ධනය වූ නිසා මෙම ගැටළුව මාස 2 ක් දක්වා ඇදී ගියේය.
ඉතින්, මට නැවත විවේක කාලයක් ලැබුණු විට, ප්‍රකාශනය තවත් වසරක් ඇදගෙන යාමේ අවදානමට වඩා ලිපිය එලෙසම පළ කිරීමට මම තීරණය කළෙමි.

“නමුත් මෙය ප්‍රමාණවත් ලෙස විස්තර කර නැත” වැනි ප්‍රශ්න රාශියක් තිබේ නම්, නව වසමක් සහ නව SSL සහතිකයක් සහිත කැප වූ සේවාදායකයක් ගෙන එය වඩාත් විස්තරාත්මකව විස්තර කිරීමට සහ බොහෝ විට ශක්තිය ලැබෙනු ඇත. වැදගත් ලෙස, අතුරුදහන් වූ සියලුම වැදගත් තොරතුරු හඳුනා ගන්න.

තැපැල් සහතික පිළිබඳ අදහස් පිළිබඳ ප්‍රතිපෝෂණ ලබා ගැනීමට ද මම කැමැත්තෙමි. ඔබ අදහසට කැමති නම්, මම rfc සඳහා කෙටුම්පතක් ලිවීමට ශක්තිය සොයා ගැනීමට උත්සාහ කරමි.

ලිපියක විශාල කොටස් පිටපත් කිරීමේදී, මෙම ලිපියට සබැඳියක් ලබා දෙන්න.
වෙනත් ඕනෑම භාෂාවකට පරිවර්තනය කිරීමේදී, මෙම ලිපියට සබැඳියක් ලබා දෙන්න.
මම එය ඉංග්‍රීසියට පරිවර්තනය කර හරස් යොමු තැබීමට උත්සාහ කරමි.


මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න