Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + Интерфейсҳои бисёрҷониба + SpamAssassin-learn + Bind

Ин мақола дар бораи чӣ гуна сохтани сервери почтаи муосир мебошад.
Postfix + Dovecot. SPF + DKIM + rDNS. Бо IPv6.
Бо рамзгузории TSL. Бо дастгирии доменҳои сершумор - қисм бо шаҳодатномаи воқеии SSL.
Бо ҳифзи зидди спам ва рейтинги баланди антиспам аз серверҳои почтаи дигар.
Якчанд интерфейсҳои физикиро дастгирӣ мекунад.
Бо OpenVPN, ки пайвастшавӣ ба он тавассути IPv4 аст ва IPv6-ро таъмин мекунад.

Агар шумо нахоҳед, ки ҳамаи ин технологияҳоро омӯзед, аммо хоҳед, ки чунин сервер таъсис диҳед, пас ин мақола барои шумост.

Мақола кӯшиш намекунад, ки ҳар як ҷузъиётро шарҳ диҳад. Шарҳ ба он чизе меравад, ки ҳамчун стандарт танзим карда нашудааст ё аз нуқтаи назари истеъмолкунанда муҳим аст.

Ҳавасмандӣ барои таъсиси сервери почта орзуи деринаи ман буд. Ин метавонад беақл садо диҳад, аммо IMHO, ин аз орзуи мошини нав аз бренди дӯстдоштаи худ беҳтар аст.

Барои насб кардани IPv6 ду сабаб вуҷуд дорад. Мутахассиси IT бояд пайваста технологияҳои навро омӯзад, то зинда монад. Ман мехостам дар мубориза ба мукобили сензура хиссаи хоксоронаи худро гузорам.

Ҳавасмандӣ барои таъсиси OpenVPN танҳо он аст, ки IPv6 дар мошини маҳаллӣ кор кунад.
Ҳавасмандии таъсиси якчанд интерфейсҳои физикӣ дар он аст, ки ман дар сервери ман як интерфейси "суст, вале номаҳдуд" ва дигаре "тез, вале бо тариф" дорам.

Ҳавасмандӣ барои насб кардани танзимоти Bind дар он аст, ки ISP-и ман сервери DNS-и ноустуворро таъмин мекунад ва google низ баъзан ноком мешавад. Ман сервери устувори DNS барои истифодаи шахсӣ мехоҳам.

Ҳавасмандӣ барои навиштани мақола - Ман 10 моҳ пеш лоиҳаро навишта будам ва ман аллакай ду маротиба онро дидаам. Ҳатто агар муаллиф мунтазам ба он ниёз дошта бошад ҳам, эҳтимоли зиёд вуҷуд дорад, ки дигарон низ ба он ниёз доранд.

Барои сервери почта ягон ҳалли универсалӣ вуҷуд надорад. Аммо ман кӯшиш мекунам чизе нависам, ба мисли "инро иҷро кунед ва баъд, вақте ки ҳама чиз ба таври лозимӣ кор мекунад, чизҳои иловагиро партоед."

Ширкати tech.ru дорои сервери Colocation мебошад. Бо OVH, Hetzner, AWS муқоиса кардан мумкин аст. Барои ҳалли ин мушкилот, ҳамкорӣ бо tech.ru хеле самараноктар хоҳад буд.

Debian 9 дар сервер насб шудааст.

Сервер дорои 2 интерфейси "eno1" ва "eno2" мебошад. Якум номаҳдуд аст ва дуюм мутаносибан зуд аст.

3 суроғаҳои IP статикӣ мавҷуданд, XX.XX.XX.X0 ва XX.XX.XX.X1 ва XX.XX.XX.X2 дар интерфейси “eno1” ва XX.XX.XX.X5 дар интерфейси “eno2” .

Дастрас XXXX:XXXX:XXXX:XXXX::/64 ҳавзи суроғаҳои IPv6, ки ба интерфейси "eno1" таъин шудаанд ва аз он XXXX:XXXX:XXXX:XXXX:1:2::/96 бо дархости ман ба "eno2" таъин карда шуд.

3 домени `domain1.com`, `domain2.com`, `domain3.com` мавҷуданд. Барои 'domain1.com' ва 'domain3.com' сертификати SSL мавҷуд аст.

Ман ҳисоби Google дорам, ки мехоҳам паёмдони худро ба он пайваст кунам[почтаи электронӣ ҳифз карда шудааст]` (қабули почта ва фиристодани почта бевосита аз интерфейси gmail).
Бояд як қуттии почта бошад`[почтаи электронӣ ҳифз карда шудааст]`, нусхаи почтаи электронӣ, ки ман мехоҳам онро дар gmail-и худ бубинам. Ва он кам аст, ки қодир ба фиристодани чизе аз номи `[почтаи электронӣ ҳифз карда шудааст]` тавассути интерфейси веб.

Бояд як қуттии почта бошад`[почтаи электронӣ ҳифз карда шудааст]`, ки Иванов аз iPhone-и худ истифода хоҳад кард.

Паёмҳои ирсолшуда бояд ба ҳама талаботи муосири зидди спам мувофиқат кунанд.
Дар шабакаҳои ҷамъиятӣ бояд сатҳи баландтарини рамзгузорӣ мавҷуд бошад.
Барои фиристодан ва гирифтани мактубҳо бояд дастгирии IPv6 бошад.
Бояд як SpamAssassin бошад, ки ҳеҷ гоҳ мактубҳоро нест намекунад. Ва он ба папкаи IMAP "Спам" меафтад ё мефиристад.
Омӯзиши автоматии SpamAssassin бояд танзим карда шавад: агар ман мактубро ба ҷузвдони Спам интиқол диҳам, он аз ин меомӯзад; агар ман мактубро аз папкаи Спам кӯчонам, аз ин ибрат мегирад. Натиҷаҳои омӯзиши SpamAssassin бояд ба он таъсир расонанд, ки оё мактуб дар папкаи Спам хотима меёбад.
Скриптҳои PHP бояд қодир бошанд, ки аз номи ягон домен дар сервери додашуда почта фиристанд.
Бояд хидмати openvpn мавҷуд бошад, ки қобилияти истифодаи IPv6 дар мизоҷе, ки IPv6 надорад.

Аввал шумо бояд интерфейсҳо ва масирро танзим кунед, аз ҷумла IPv6.
Он гоҳ шумо бояд OpenVPN-ро танзим кунед, ки тавассути IPv4 пайваст мешавад ва ба муштарӣ суроғаи статикӣ-воқеии IPv6 медиҳад. Ин муштарӣ ба ҳама хидматҳои IPv6 дар сервер ва дастрасӣ ба ҳама гуна захираҳои IPv6 дар Интернет дастрасӣ дорад.
Пас ба шумо лозим меояд, ки Postfix-ро барои фиристодани номаҳо + SPF + DKIM + rDNS ва дигар чизҳои ба ин монанд танзим кунед.
Он гоҳ ба шумо лозим меояд, ки 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 дар 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.
ХХХ:ХХХ:ХХХ:ХХХ::/64 - IPv6 барои тамоми сервер.
XXXX:XXXX:XXXXX:XXXX:1:2::/96 - IPv6 барои eno2, ҳама чизи дигар аз берун ба eno1 дохил мешавад.
XXXX:XXXX:XXXX:XXXX::1 — Шлюзи IPv6 (бояд қайд кард, ки ин метавонад/бояд ба таври дигар анҷом дода шавад. Калиди IPv6-ро муайян кунед).
dns-nameservers - 127.0.0.1 нишон дода шудааст (зеро bind ба таври маҳаллӣ насб шудааст) ва 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

Ин блок IPv4 дуюмро барои интерфейси eno1 муайян мекунад.

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

Бо ин фармон мо масирро аз муштариёни OpenVPN ба IPv4 маҳаллӣ ба истиснои XX.XX.XX.X0 муқаррар мекунем.
Ман то ҳол намефаҳмам, ки чаро ин фармон барои ҳама IPv4 кофӣ аст.

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

Дар ин ҷо мо суроғаи худи интерфейсро муқаррар мекунем. Сервер онро ҳамчун суроғаи "баромад" истифода хоҳад кард. Боз ба ҳеҷ ваҷҳ истифода намешавад.

Чаро ":1:1::" ин қадар мураккаб аст? Ҳамин тавр, OpenVPN дуруст ва танҳо барои ин кор мекунад. Муфассалтар дар ин бора баъдтар.

Дар мавзӯи дарвоза - он чӣ гуна кор мекунад ва ин хуб аст. Аммо роҳи дуруст ин аст, ки дар ин ҷо нишон додани IPv6-и гузариш, ки сервер ба он пайваст аст.

Аммо, агар ман ин корро кунам, бо баъзе сабабҳо IPv6 кор намекунад. Шояд ин як навъ мушкилоти tech.ru бошад.

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

Ин ба интерфейс суроғаи IPv6 илова мекунад. Агар ба шумо сад суроға лозим бошад, ин маънои сад сатр дар ин файлро дорад.

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

Ман суроғаҳо ва зершабакаҳои ҳама интерфейсҳоро қайд кардам, то равшан шавад.
eno1 - бояд бошад "/64"- зеро ин тамоми суроғаҳои мост.
tun0 - зершабакаи бояд аз eno1 калонтар бошад. Дар акси ҳол, конфигуратсия кардани шлюзи IPv6 барои муштариёни OpenVPN ғайриимкон хоҳад буд.
eno2 - зершабака бояд аз tun0 калонтар бошад. Дар акси ҳол, муштариёни OpenVPN наметавонанд ба суроғаҳои маҳаллии IPv6 дастрасӣ пайдо кунанд.
Барои равшанӣ, ман як қадами зершабакаи 16-ро интихоб кардам, аммо агар шумо хоҳед, шумо ҳатто метавонед қадами "1" -ро иҷро кунед.
Мутаносибан, 64+16 = 80 ва 80+16 = 96.

Барои боз ҳам равшантар:
XXXX:XXXXX:XXXXX:XXXX:1:1:YYYY:YYYY суроғаҳое мебошанд, ки бояд ба сайтҳо ё хидматҳои мушаххас дар интерфейси eno1 таъин карда шаванд.
XXXX:XXXXX:XXXXX:XXXX:1:2:YYYY:YYYY суроғаҳое мебошанд, ки бояд ба сайтҳо ё хидматҳои мушаххас дар интерфейси eno2 таъин карда шаванд.
XXXX:XXXXX:XXXXX: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 - Шабакаи openvpn IPv4. Суроғаҳои 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

Ин маҳдудиятест, ки танҳо ман метавонам OpenVPN-ро аз IP статикии худ истифода барам.

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

Барои фиристодани бастаҳои IPv4 байни муштариёни OpenVPN ва Интернет, шумо бояд яке аз ин фармонҳоро сабт кунед.

Барои ҳолатҳои гуногун, яке аз вариантҳо мувофиқ нест.
Ҳарду фармон барои парвандаи ман мувофиқанд.
Пас аз хондани ҳуҷҷатҳо, ман варианти аввалро интихоб кардам, зеро он 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" бояд бидуни шарҳ бошад.
Ва инчунин "калиди-самти 1" -ро фавран пеш аз теги "tls-auth" гузоред.

Биёед конфигуратсияи сервери 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

Биёед тафсилоти ин конфигуратсияро бубинем.

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-ҷавоб онро бо калиди ҷамъиятии муштарии мушаххас рамзгузорӣ мекунад.
Ҳоло http-вокуниш танҳо аз ҷониби соҳиби калиди хусусии браузери муштарӣ (яъне худи муштарӣ) метавонад рамзкушо карда шавад.

Қадами № 3 - таъсиси пайвасти бехатар тавассути канали ҷамъиятӣ.
Дар мисоли № 2 осебпазирӣ мавҷуд аст - ҳеҷ чиз ба хайрхоҳон халал намерасонад, ки дархости http ва таҳрири иттилоотро дар бораи калиди оммавӣ таҳрир кунанд.
Ҳамин тариқ, миёнарав тамоми мундариҷаи паёмҳои ирсолшуда ва қабулшударо то тағир додани канали алоқа ба таври возеҳ мебинад.
Мубориза бо ин хеле содда аст - танҳо калиди ҷамъиятии браузерро ҳамчун паёме фиристед, ки бо калиди ҷамъиятии сервери веб рамзгузорӣ шудааст.
Пас аз он веб-сервер аввал посухе ба мисли "калиди ҷамъиятии шумо чунин аст" мефиристад ва ин паёмро бо ҳамон калиди ҷамъиятӣ рамзгузорӣ мекунад.
Браузер ба посух назар мекунад - агар паёми "калиди ҷамъиятии шумо чунин аст" гирифта шавад - пас ин 100% кафолати бехатарии ин канали алоқа аст.
Он то чӣ андоза бехатар аст?
Худи таъсиси чунин канали бехатари алоқа бо суръати пинг*2 сурат мегирад. Масалан, 20ms.
Ҳамлагар бояд калиди махфии яке аз тарафҳоро пешакӣ дошта бошад. Ё дар як чанд миллисония калиди хусусиро пайдо кунед.
Хакер кардани як калиди хусусии муосир дар суперкомпютер даҳсолаҳо тӯл мекашад.

Қадами №4 - махзани оммавии калидҳои оммавӣ.
Аён аст, ки дар тамоми ин ҳикоя имкони ҳамлагар дар канали иртиботӣ байни муштарӣ ва сервер нишинад.
Мизоҷ метавонад худро сервер вонамуд кунад ва сервер метавонад худро муштарӣ вонамуд кунад. Ва ба як ҷуфт калидҳо дар ҳар ду самт тақлид кунед.
Он гоҳ ҳамлакунанда тамоми трафикро мебинад ва метавонад трафикро таҳрир кунад.
Масалан, суроғаеро, ки пул фиристода мешавад, иваз кунед ё паролро аз бонкдории онлайн нусхабардорӣ кунед ё мундариҷаи "эътибор"-ро маҳкам кунед.
Барои мубориза бо чунин ҳамлагарон, онҳо як пойгоҳи ҷамъиятӣ бо калидҳои оммавӣ барои ҳар як сайти https пайдо карданд.
Ҳар як браузер дар бораи мавҷудияти тақрибан 200 чунин базаи маълумот "медонад". Ин дар ҳар як браузер пешакӣ насб карда шудааст.
"Дониш" бо калиди оммавӣ аз ҳар як сертификат дастгирӣ карда мешавад. Яъне, пайвастшавӣ ба ҳар як мақоми мушаххаси сертификатсия наметавонад қалбакӣ бошад.

Ҳоло фаҳмиши оддии истифодаи SSL барои https вуҷуд дорад.
Агар шумо мағзи худро истифода баред, маълум мешавад, ки хадамоти махсус чӣ гуна метавонанд чизеро дар ин сохтор вайрон кунанд. Аммо ин ба онҳо саъю кӯшишҳои даҳшатнок лозим аст.
Ва созмонҳои хурдтар аз NSA ё CIA - вайрон кардани сатҳи мавҷудаи муҳофизат, ҳатто барои VIPҳо қариб ғайриимкон аст.

Ман инчунин дар бораи пайвастҳои ssh илова мекунам. Дар он ҷо калидҳои ҷамъиятӣ вуҷуд надоранд, пас шумо чӣ кор карда метавонед? Масъала бо ду роҳ ҳал карда мешавад.
Варианти ssh-by-parol:
Ҳангоми пайвасти аввал, муштарии ssh бояд огоҳ кунад, ки мо калиди ҷамъиятии нави сервери ssh дорем.
Ва ҳангоми пайвастшавии минбаъда, агар огоҳии "калиди нави ҷамъиятӣ аз сервери ssh" пайдо шавад, ин маънои онро дорад, ки онҳо кӯшиш мекунанд, ки шуморо гӯш кунанд.
Ё шумо дар пайвасти аввалини худ гӯш кардаед, аммо ҳоло шумо бо сервер бе миёнарав муошират мекунед.
Воқеан, аз сабаби он, ки далели гӯш кардани телефон ба осонӣ, зуд ва бемаҳдуд ошкор мешавад, ин ҳамла танҳо дар ҳолатҳои махсус барои муштарии мушаххас истифода мешавад.

Варианти ssh-ба-калид:
Мо флешдорро мегирем, калиди хусусии сервери 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

Дар ин ҷо мо муайян мекунем, ки ҳама паёмҳои воридотӣ ба doecot мераванд.
Ва қоидаҳои домен, қуттии почта, тахаллус - дар базаи маълумот нигаред.

/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 барои фиристодани минбаъда қабул кардан мумкин аст.

Ман аслан намефаҳмам, ки чаро ин дар ин ҷо такрор мешавад. Мо аллакай ҳама чизеро, ки дар "virtual_transport" лозим аст, муайян кардем.

Аммо системаи постфикс хеле кӯҳна аст - эҳтимол ин як бозгашт аз рӯзҳои кӯҳна аст.

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 дар коди кӯҳна нишон дода мешавад. Он гоҳ номи корбар ба наҷот меояд.

Мақола аллакай васеъ аст - ман намехоҳам бо насб кардани nginx+fpm парешон шавам.

Хулоса, барои ҳар як сайт мо соҳиби худи Linux-корбарро муқаррар мекунем. Ва мувофиқан, ҳавзи fpm шумо.

Fpm-pool ҳама гуна версияи php-ро истифода мебарад (хеле хуб аст, вақте ки дар як сервер шумо метавонед версияҳои гуногуни php ва ҳатто php.ini гуногунро барои сайтҳои ҳамсоя бидуни мушкилот истифода баред).

Ҳамин тавр, корбари мушаххаси Linux-и "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 мебошад.
Ва барои почта, ин хусусият барои тасдиқ кардани он истифода мешавад, ки helo ба rDNS суроғае, ки аз он почтаи электронӣ фиристода шудааст, мувофиқат мекунад.

Агар helo ба домени почтаи электронӣ, ки аз номи ӯ мактуб фиристода шудааст, мувофиқат накунад, нуқтаҳои спам дода мешаванд.

Helo ба rDNS мувофиқат намекунад - бисёр нуқтаҳои спам дода мешаванд.
Мувофиқи он, ҳар як домен бояд суроғаи IP-и худро дошта бошад.
Барои OVH - дар консол rDNS-ро муайян кардан мумкин аст.
Барои tech.ru - масъала тавассути дастгирӣ ҳал карда мешавад.
Барои AWS, масъала тавассути дастгирӣ ҳал карда мешавад.
"inet_protocols" ва "smtp_bind_address6" - мо дастгирии IPv6-ро фаъол мекунем.
Барои IPv6 шумо инчунин бояд rDNS-ро ба қайд гиред.
"syslog_name" - ва ин барои осонии хондани гузоришҳо аст.

Шаҳодатномаҳо харед Ман дар ин ҷо тавсия медиҳам.

Истиноди postfix+dovecot дар ин ҷо насб карда мешавад.

Танзими SPF.

============= Dovecot =============

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 лозим аст.
Ва худи сертификат. Ва як ҷузъиёти муҳим дастури "маҳаллӣ" аст. Нишон медиҳад, ки кадом сертификати 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
}

Ин барои spamassassin дар оянда лозим мешавад.

Файл "/etc/dovecot/conf.d/20-imap.conf"

protocol imap {
  mail_plugins = $mail_plugins 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

Шумо бояд дар Mysql пойгоҳи додаи "sa"-ро бо корбари "sa" бо пароли "парол" эҷод кунед (бо ягон чизи мувофиқ иваз кунед).

report_safe - ин ба ҷои мактуб гузориши почтаи спамро мефиристад.
use_bayes танзимоти омӯзиши мошини spamassassin мебошанд.

Танзимоти боқимондаи spamassassin қаблан дар мақола истифода шуда буданд.

Танзимоти умумӣ "spamassassin".
Дар бораи интиқоли паёмҳои нави спам ба ҷузвдони IMAP "Spam".
Дар бораи комбинатсияи оддии Dovecot + SpamAssassin.
Ман тавсия медиҳам, ки назарияи омӯзиши спамассасинро ҳангоми интиқоли ҳарфҳо дар папкаҳои imap хонед (ва ман истифодаи онро тавсия намедиҳам).

============= Муроҷиат ба ҷомеа =============

Ман инчунин мехостам дар бораи чӣ гуна баланд бардоштани сатҳи бехатарии мактубҳои ирсолшуда як идеяро ба ҷомеа гузорам. Азбаски ман ба мавзӯи почта хеле ғарқ шудаам.

Барои он ки корбар метавонад дар муштарии худ як ҷуфт калид эҷод кунад (outlook, thunderbird, браузер-плагин, ...). Ҷамъиятӣ ва хусусӣ. Ҷамъиятӣ - ба DNS фиристед. Хусусӣ - дар муштарӣ захира кунед. Серверҳои почта метавонанд калиди оммавиро барои фиристодан ба қабулкунандаи мушаххас истифода баранд.

Ва барои муҳофизат аз спам бо чунин ҳарфҳо (бале, сервери почта наметавонад мундариҷаро бубинад) - шумо бояд 3 қоидаро ҷорӣ кунед:

  1. Имзои ҳатмии воқеии DKIM, SPF ҳатмӣ, rDNS ҳатмӣ.
  2. Шабакаи нейрон дар мавзӯи омӯзиши антиспам + пойгоҳи додаҳо барои он дар тарафи муштарӣ.
  3. Алгоритми рамзгузорӣ бояд тавре бошад, ки ҷониби ирсолкунанда нисбат ба тарафи қабулкунанда бояд 100 маротиба бештар қувваи CPU барои рамзгузорӣ сарф кунад.

Илова ба мактубҳои оммавӣ, як номаи стандартии пешниҳоди "барои оғози мукотибаи бехатар" таҳия кунед. Яке аз корбарон (қуттии почта) мактубро бо замима ба қуттии почтаи дигар мефиристад. Дар мактуб пешниҳоди матнӣ оид ба оғози канали мухобироти бехатар барои мукотиба ва калиди ҷамъиятии соҳиби қуттии почта (бо калиди махфӣ дар тарафи муштарӣ) иборат аст.

Шумо ҳатто метавонед барои ҳар як мукотиба якчанд калид созед. Истифодабарандаи гиранда метавонад ин пешниҳодро қабул кунад ва калиди ҷамъиятии худро фиристад (инчунин махсус барои ин мукотиба сохта шудааст). Баъдан, истифодабарандаи якум мактуби назоратии хидматрасониро мефиристад (бо калиди кушодаи корбари дуюм рамзгузорӣ шудааст) - ҳангоми гирифтани он корбари дуюм метавонад канали алоқаи ташаккулёфтаро боэътимод ҳисоб кунад. Баъдан, корбари дуюм мактуби назоратӣ мефиристад - ва он гоҳ корбари аввал низ метавонад канали ташаккулёфтаро бехатар ҳисоб кунад.

Барои мубориза бо боздошти калидҳо дар роҳ, протокол бояд имкони интиқоли ҳадди аққал як калиди оммавиро бо истифода аз флеш-диск пешбинӣ кунад.

Ва аз ҳама муҳимаш ин аст, ки ҳамааш кор мекунад (савол ин аст, ки «кӣ пул медиҳад?»):
Шаҳодатномаҳои почтаро аз 10 доллар барои 3 сол ворид кунед. Ин ба фиристанда имкон медиҳад, ки дар DNS нишон диҳад, ки "калидҳои оммавии ман дар он ҷо ҳастанд." Ва онҳо ба шумо имкон медиҳанд, ки пайвасти бехатарро оғоз кунед. Дар баробари ин, қабули чунин пайвастҳо ройгон аст.
gmail ниҳоят корбарони худро монетизатсия мекунад. Барои $10 дар як 3 сол - ҳуқуқи эҷоди каналҳои мукотибаи бехатар.

============== Хулоса =============

Барои санҷидани тамоми мақола, ман мехостам сервери махсусро барои як моҳ иҷора гирам ва доменеро бо сертификати SSL харам.

Аммо шароити зиндагӣ инкишоф ёфта, ин масъала 2 моҳ кашол ёфт.
Ҳамин тавр, вақте ки ман боз вақти холӣ пайдо кардам, ман тасмим гирифтам, ки мақоларо ҳамон тавре ки ҳаст, нашр кунам, на аз хатари он ки нашрия як соли дигар кашол меёбад.

Агар саволҳои зиёде ба мисли "вале ин ба таври кофӣ тавсиф карда нашудааст" вуҷуд дошта бошад, пас эҳтимол дорад, ки сервери махсусро бо домени нав ва сертификати нави SSL гирифта, онро боз ҳам муфассалтар тавсиф кунед ва бештар муҳимтар аз ҳама, муайян кардани ҳамаи ҷузъиёти муҳими гумшуда.

Ман инчунин мехоҳам фикру мулоҳизаҳоро дар бораи шаҳодатномаҳои почта гирам. Агар идея ба шумо маъқул бошад, ман кӯшиш мекунам, ки қувват барои навиштани лоиҳа барои rfc пайдо кунам.

Ҳангоми нусхабардории қисмҳои зиёди мақола, истиноди ин мақоларо пешниҳод кунед.
Ҳангоми тарҷума ба ягон забони дигар, истиноди ин мақоларо пешниҳод кунед.
Ман кӯшиш мекунам, ки онро ба забони англисӣ худам тарҷума кунам ва истинодҳои байниҳамдигарӣ гузорам.


Манбаъ: will.com

Илова Эзоҳ