Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + ืจื™ื‘ื•ื™ ืžืžืฉืงื™ื + SpamAssassin-learn + Bind

ืžืืžืจ ื–ื” ืขื•ืกืง ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืฉืจืช ื“ื•ืืจ ืžื•ื“ืจื ื™.
ืคื•ืกื˜ืคื™ืงืก +ืฉื•ื‘ืœืช ื™ื•ื ื™ื. SPF + DKIM + rDNS. ืขื IPv6.
ืขื ื”ืฆืคื ืช TSL. ืขื ืชืžื™ื›ื” ื‘ืžืกืคืจ ื“ื•ืžื™ื™ื ื™ื - ื—ืœืง ืžืชืขื•ื“ืช SSL ืืžื™ืชื™ืช.
ืขื ื”ื’ื ื” ื ื’ื“ ืกืคืื ื•ื“ื™ืจื•ื’ ืื ื˜ื™ ืกืคืื ื’ื‘ื•ื” ืžืฉืจืชื™ ื“ื•ืืจ ืื—ืจื™ื.
ืชื•ืžืš ื‘ืžืกืคืจ ืžืžืฉืงื™ื ืคื™ื–ื™ื™ื.
ืขื OpenVPN, ืฉื”ื—ื™ื‘ื•ืจ ืืœื™ื• ื”ื•ื ื‘ืืžืฆืขื•ืช IPv4, ื•ืืฉืจ ืžืกืคืง IPv6.

ืื ืืชื” ืœื ืจื•ืฆื” ืœืœืžื•ื“ ืืช ื›ืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืืœื”, ืื‘ืœ ืจื•ืฆื” ืœื”ืงื™ื ืฉืจืช ื›ื–ื”, ืื– ื”ืžืืžืจ ื”ื–ื” ื”ื•ื ื‘ืฉื‘ื™ืœืš.

ื”ืžืืžืจ ืื™ื ื• ืžื ืกื” ืœื”ืกื‘ื™ืจ ื›ืœ ืคืจื˜. ื”ื”ืกื‘ืจ ื”ื•ืœืš ืœืžื” ืฉืœื ืžื•ื’ื“ืจ ื›ืกื˜ื ื“ืจื˜ ืื• ื—ืฉื•ื‘ ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ื”ืฆืจื›ืŸ.

ื”ืžื•ื˜ื™ื‘ืฆื™ื” ืœื”ืงื™ื ืฉืจืช ื“ื•ืืจ ื”ื™ื™ืชื” ื—ืœื•ื ืžื–ืžืŸ ืฉืœื™. ื–ื” ืื•ืœื™ ื ืฉืžืข ื˜ื™ืคืฉื™, ืื‘ืœ IMHO, ื–ื” ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ ืžืืฉืจ ืœื—ืœื•ื ืขืœ ืžื›ื•ื ื™ืช ื—ื“ืฉื” ืžื”ืžื•ืชื’ ื”ืื”ื•ื‘ ืขืœื™ืš.

ื™ืฉ ืฉื ื™ ืžื ื™ืขื™ื ืœื”ื’ื“ืจืช IPv6. ืžื•ืžื—ื” IT ืฆืจื™ืš ืœืœืžื•ื“ ื›ืœ ื”ื–ืžืŸ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื›ื“ื™ ืœืฉืจื•ื“. ืื ื™ ืจื•ืฆื” ืœืชืจื•ื ืืช ืชืจื•ืžืชื™ ื”ืฆื ื•ืขื” ืœืžืื‘ืง ื‘ืฆื ื–ื•ืจื”.

ื”ืžื•ื˜ื™ื‘ืฆื™ื” ืœื”ื’ื“ืจืช OpenVPN ื”ื™ื ืจืง ืœื’ืจื•ื ืœ-IPv6 ืœืขื‘ื•ื“ ืขืœ ื”ืžื—ืฉื‘ ื”ืžืงื•ืžื™.
ื”ืžื•ื˜ื™ื‘ืฆื™ื” ืœื”ืงืžืช ืžืกืคืจ ืžืžืฉืงื™ื ืคื™ื–ื™ื™ื ื”ื™ื ืฉื‘ืฉืจืช ืฉืœื™ ื™ืฉ ืžืžืฉืง ืื—ื“ "ืื™ื˜ื™ ืื‘ืœ ื‘ืœืชื™ ืžื•ื’ื‘ืœ" ื•ืื—ืจ "ืžื”ื™ืจ ืื‘ืœ ืขื ืชืขืจื™ืฃ".

ื”ืžื ื™ืข ืœื”ื’ื“ืจืช ื”ื’ื“ืจื•ืช Bind ื”ื•ื ืฉ-ISP ืฉืœื™ ืžืกืคืง ืฉืจืช DNS ืœื ื™ืฆื™ื‘, ื•ื’ื ื’ื•ื’ืœ ืœืคืขืžื™ื ื ื›ืฉืœ. ืื ื™ ืจื•ืฆื” ืฉืจืช DNS ื™ืฆื™ื‘ ืœืฉื™ืžื•ืฉ ืื™ืฉื™.

ืžื•ื˜ื™ื‘ืฆื™ื” ืœื›ืชื•ื‘ ืžืืžืจ - ื›ืชื‘ืชื™ ื˜ื™ื•ื˜ื” ืœืคื ื™ 10 ื—ื•ื“ืฉื™ื, ื•ื›ื‘ืจ ื”ืกืชื›ืœืชื™ ืขืœื™ื” ืคืขืžื™ื™ื. ื’ื ืื ื”ืžื—ื‘ืจ ื–ืงื•ืง ืœื• ื‘ืื•ืคืŸ ืงื‘ื•ืข, ื™ืฉ ืกื‘ื™ืจื•ืช ื’ื‘ื•ื”ื” ืฉื’ื ืื—ืจื™ื ื™ื–ื“ืงืงื• ืœื•.

ืื™ืŸ ืคืชืจื•ืŸ ืื•ื ื™ื‘ืจืกืœื™ ืœืฉืจืช ื“ื•ืืจ. ืื‘ืœ ืื ื™ ืื ืกื” ืœื›ืชื•ื‘ ืžืฉื”ื• ื›ืžื• "ืชืขืฉื” ืืช ื–ื” ื•ืื–, ื›ืฉื”ื›ืœ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš, ืœื–ืจื•ืง ืืช ื”ื“ื‘ืจื™ื ื”ื ื•ืกืคื™ื".

ืœื—ื‘ืจืช tech.ru ื™ืฉ ืฉืจืช Colocation. ืืคืฉืจ ืœื”ืฉื•ื•ืช ืขื OVH, Hetzner, AWS. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•, ืฉื™ืชื•ืฃ ื”ืคืขื•ืœื” ืขื tech.ru ื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ื™ืขื™ืœ.

ื“ื‘ื™ืืŸ 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`. ื™ืฉ ืื™ืฉื•ืจ SSL ืขื‘ื•ืจ `domain1.com` ื•`domain3.com`.

ื™ืฉ ืœื™ ื—ืฉื‘ื•ืŸ ื’ื•ื’ืœ ืฉื‘ืจืฆื•ื ื™ ืœืงืฉืจ ืืœื™ื• ืืช ืชื™ื‘ืช ื”ื“ื•ืืจ ืฉืœื™[ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ]` (ืงื‘ืœืช ื“ื•ืืจ ื•ืฉืœื™ื—ืช ื“ื•ืืจ ื™ืฉื™ืจื•ืช ืžืžืžืฉืง ื”-gmail).
ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืชื™ื‘ืช ื“ื•ืืจ`[ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ]`, ืขื•ืชืง ืฉืœ ื”ืื™ืžื™ื™ืœ ืฉืžืžื ื• ืื ื™ ืจื•ืฆื” ืœืจืื•ืช ื‘-gmail ืฉืœื™. ื•ื–ื” ื ื“ื™ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืฉืœื•ื— ืžืฉื”ื• ื‘ืฉื `[ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ]` ื“ืจืš ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜.

ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืชื™ื‘ืช ื“ื•ืืจ`[ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ]`, ืฉื‘ื• ืื™ื‘ื ื•ื‘ ื™ืฉืชืžืฉ ืžื”ืื™ื™ืคื•ืŸ ืฉืœื•.

ื”ื•ื“ืขื•ืช ื“ื•ื"ืœ ืฉื ืฉืœื—ื•ืช ื—ื™ื™ื‘ื•ืช ืœืขืžื•ื“ ื‘ื›ืœ ื“ืจื™ืฉื•ืช ื”ืื ื˜ื™ ืกืคืื ื”ืžื•ื“ืจื ื™ื•ืช.
ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืจืžืช ื”ื”ืฆืคื ื” ื”ื’ื‘ื•ื”ื” ื‘ื™ื•ืชืจ ื”ืžืกื•ืคืงืช ื‘ืจืฉืชื•ืช ืฆื™ื‘ื•ืจื™ื•ืช.
ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืชืžื™ื›ื” ื‘-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.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 ืขื‘ื•ืจ ื›ืœ ื”ืฉืจืช.
XXXX:XXXX:XXXX: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:XXXX:XXXX:XXXX:1:1:YYYY:YYYY ื”ืŸ ื›ืชื•ื‘ื•ืช ืฉื™ืฉ ืœื”ืงืฆื•ืช ืœืืชืจื™ื ืื• ืฉื™ืจื•ืชื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืžืžืฉืง eno1.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY ื”ืŸ ื›ืชื•ื‘ื•ืช ืฉื™ืฉ ืœื”ืงืฆื•ืช ืœืืชืจื™ื ืื• ืฉื™ืจื•ืชื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืžืžืฉืง eno2.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY ื”ืŸ ื›ืชื•ื‘ื•ืช ืฉื™ืฉ ืœื”ืงืฆื•ืช ืœืœืงื•ื—ื•ืช OpenVPN ืื• ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื›ื›ืชื•ื‘ื•ืช ืฉื™ืจื•ืช OpenVPN.

ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืจืฉืช, ื–ื” ืืžื•ืจ ืœื”ื™ื•ืช ืืคืฉืจื™ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืฉืจืช.
ืฉื™ื ื•ื™ื™ื ื‘-IPv4 ื ืงืœื˜ื™ื ื‘ืขืช ื‘ื™ืฆื•ืข (ื”ืงืคื“ ืœืขื˜ื•ืฃ ืื•ืชื• ื‘ืžืกืš - ืื—ืจืช ื”ืคืงื•ื“ื” ื”ื–ื• ืคืฉื•ื˜ ืชืงืจื•ืก ืืช ื”ืจืฉืช ื‘ืฉืจืช):

/etc/init.d/networking restart

ื”ื•ืกืฃ ืœืกื•ืฃ ื”ืงื•ื‘ืฅ "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

ื‘ืœื™ ื–ื”, ืœื ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื˜ื‘ืœืื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ื‘ืงื•ื‘ืฅ "/etc/network/interfaces".
ื”ืžืกืคืจื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื™ื™ื—ื•ื“ื™ื™ื ื•ืคื—ื•ืช ืž-65535.

ืฉื™ื ื•ื™ื™ื ื‘-IPv6 ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื‘ืงืœื•ืช ืœืœื ืืชื—ื•ืœ ืžื—ื“ืฉ, ืืš ืœืฉื ื›ืš ืขืœื™ืš ืœืœืžื•ื“ ืœืคื—ื•ืช ืฉืœื•ืฉ ืคืงื•ื“ื•ืช:

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

ื”ื’ื“ืจืช "/etc/sysctl.conf"

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

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

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

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

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

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

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

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

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

ืืœื• ื”ืŸ ื”ื’ื“ืจื•ืช "sysctl" ืฉืœ ื”ืฉืจืช ืฉืœื™. ืชืŸ ืœื™ ืœืฆื™ื™ืŸ ืžืฉื”ื• ื—ืฉื•ื‘.

net.ipv4.ip_forward = 1

ื‘ืœื™ ื–ื”, OpenVPN ืœื ื™ืขื‘ื•ื“ ื‘ื›ืœืœ.

net.ipv6.ip_nonlocal_bind = 1

ื›ืœ ืžื™ ืฉื™ื ืกื” ืœืื’ื“ ืืช IPv6 (ืœื“ื•ื’ืžื” nginx) ืžื™ื“ ืœืื—ืจ ืฉื”ืžืžืฉืง ืžื•ืคืขืœ ื™ืงื‘ืœ ืฉื’ื™ืื”. ืฉื”ื›ืชื•ื‘ืช ื”ื–ื• ืœื ื–ืžื™ื ื”.

ื›ื“ื™ ืœืžื ื•ืข ืžืฆื‘ ื›ื–ื”, ืžืชื‘ืฆืขืช ื”ื’ื“ืจื” ื›ื–ื•.

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

ืœืœื ื”ื’ื“ืจื•ืช IPv6 ืืœื•, ื”ืชืขื‘ื•ืจื” ืžืœืงื•ื— OpenVPN ืœื ื™ื•ืฆืืช ืœืขื•ืœื.

ื”ื’ื“ืจื•ืช ืื—ืจื•ืช ืื• ืฉืื™ื ืŸ ืจืœื•ื•ื ื˜ื™ื•ืช ืื• ืฉืื ื™ ืœื ื–ื•ื›ืจ ืœืžื” ื”ืŸ ืžื™ื•ืขื“ื•ืช.
ืื‘ืœ ืœื™ืชืจ ื‘ื™ื˜ื—ื•ืŸ, ืื ื™ ืžืฉืื™ืจ ืืช ื–ื” "ื›ืžื• ืฉื”ื•ื".

ืขืœ ืžื ืช ืฉืฉื™ื ื•ื™ื™ื ื‘ืงื•ื‘ืฅ ื–ื” ื™ื™ืงืœื˜ื• ืžื‘ืœื™ ืœืืชื—ืœ ืืช ื”ืฉืจืช, ืขืœื™ืš ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื”:

sysctl -p

ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื›ืœืœื™ "ืฉื•ืœื—ืŸ": habr.com/post/108690

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

OpenVPN IPv4 ืœื ืขื•ื‘ื“ ื‘ืœื™ iptables.

ื”-iptables ืฉืœื™ ื”ื ื›ืš ืขื‘ื•ืจ VPN:

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

YY.YY.YY.YY ื”ื™ื ื›ืชื•ื‘ืช ื”-IPv4 ื”ืกื˜ื˜ื™ืช ืฉืœื™ ืฉืœ ื”ืžื—ืฉื‘ ื”ืžืงื•ืžื™.
10.8.0.0/24 - ืจืฉืช IPv4 openvpn. ื›ืชื•ื‘ื•ืช IPv4 ืขื‘ื•ืจ ืœืงื•ื—ื•ืช openvpn.
ื”ืขืงื‘ื™ื•ืช ืฉืœ ื”ื›ืœืœื™ื ื—ืฉื•ื‘ื”.

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

ื–ื•ื”ื™ ืžื’ื‘ืœื” ื›ืš ืฉืจืง ืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-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 ืœืื™ื ื˜ืจื ื˜, ืขืœื™ืš ืœืจืฉื•ื ืื—ืช ืžื”ืคืงื•ื“ื•ืช ื”ืœืœื•.

ืœืžืงืจื™ื ืฉื•ื ื™ื, ืื—ืช ื”ืืคืฉืจื•ื™ื•ืช ืื™ื ื” ืžืชืื™ืžื”.
ืฉืชื™ ื”ืคืงื•ื“ื•ืช ืžืชืื™ืžื•ืช ืœืžืงืจื” ืฉืœื™.
ืœืื—ืจ ืงืจื™ืืช ื”ืชื™ืขื•ื“, ื‘ื—ืจืชื™ ื‘ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื” ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ืžืฉืชืžืฉืช ื‘ืคื—ื•ืช ืžืขื‘ื“.

ื›ื“ื™ ืฉื›ืœ ื”ื’ื“ืจื•ืช 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-request ื•ืœืฉืœื•ื— ืื•ืชื”.
ื”ืชื•ื›ืŸ ืฉืœ http-request ื™ื›ื•ืœ ืœื”ื™ืงืจื ืจืง ืขืœ ื™ื“ื™ ืžื™ ืฉื™ืฉ ืœื• ืืช ื”ืžืคืชื— ื”ืคืจื˜ื™, ื›ืœื•ืžืจ ืจืง ื”ืฉืจืช ืฉืืœื™ื• ืžืชื‘ืฆืขืช ื”ื‘ืงืฉื”.
Http-request ืžื›ื™ืœ URI ืœืคื—ื•ืช. ืœื›ืŸ, ืื ืžื“ื™ื ื” ืžื ืกื” ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ื™ืฉื” ืœื ืœื›ืœ ื”ืืชืจ, ืืœื ืœืขืžื•ื“ ืžืกื•ื™ื, ืื– ื–ื” ื‘ืœืชื™ ืืคืฉืจื™ ืœืขืฉื•ืช ืขื‘ื•ืจ ืืชืจื™ https.

ืฉืœื‘ ืžืก' 2 - ืชื’ื•ื‘ื” ืžื•ืฆืคื ืช.
ืฉืจืช ื”ืื™ื ื˜ืจื ื˜ ื ื•ืชืŸ ืžืขื ื” ืฉื ื™ืชืŸ ืœืงืจื•ื ื‘ืงืœื•ืช ื‘ื“ืจื›ื™ื.
ื”ืคืชืจื•ืŸ ืคืฉื•ื˜ ื‘ื™ื•ืชืจ - ื”ื“ืคื“ืคืŸ ืžื™ื™ืฆืจ ื‘ืื•ืคืŸ ืžืงื•ืžื™ ืืช ืื•ืชื• ืฆืžื“ ืžืคืชื—ื•ืช ืคืจื˜ื™ื™ื-ืฆื™ื‘ื•ืจื™ื™ื ืœื›ืœ ืืชืจ https.
ื•ื™ื—ื“ ืขื ื”ื‘ืงืฉื” ืœืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ื”ืืชืจ, ื”ื•ื ืฉื•ืœื— ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ื”ืžืงื•ืžื™ ืฉืœื•.
ืฉืจืช ื”ืื™ื ื˜ืจื ื˜ ื–ื•ื›ืจ ืืช ื–ื”, ื•ื‘ืขืช ืฉืœื™ื—ืช ืชื’ื•ื‘ืช http, ืžืฆืคื™ืŸ ืื•ืชื• ื‘ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ืœืงื•ื— ืกืคืฆื™ืคื™.
ื›ืขืช ื ื™ืชืŸ ืœืคืขื ื— http-response ืจืง ืขืœ ื™ื“ื™ ื”ื‘ืขืœื™ื ืฉืœ ื”ืžืคืชื— ื”ืคืจื˜ื™ ืฉืœ ื”ื“ืคื“ืคืŸ ืฉืœ ื”ืœืงื•ื— (ื›ืœื•ืžืจ, ื”ืœืงื•ื— ืขืฆืžื•).

ืฉืœื‘ ืžืก' 3 - ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ืžืื•ื‘ื˜ื— ื‘ืขืจื•ืฅ ืฆื™ื‘ื•ืจื™.
ื™ืฉื ื” ืคื’ื™ืขื•ืช ื‘ื“ื•ื’ืžื” ืžืก' 2 - ืฉื•ื ื“ื‘ืจ ืœื ืžื•ื ืข ืžืžื™ื˜ื™ื‘ื™ ืœื›ืช ืœื™ื™ืจื˜ ื‘ืงืฉืช http ื•ืœืขืจื•ืš ืžื™ื“ืข ืขืœ ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™.
ื›ืš, ื”ืžืชื•ื•ืš ื™ืจืื” ื‘ื‘ื™ืจื•ืจ ืืช ื›ืœ ืชื•ื›ืŸ ื”ื”ื•ื“ืขื•ืช ืฉื ืฉืœื—ื• ื•ื”ืชืงื‘ืœื• ืขื“ ืœืฉื™ื ื•ื™ ืขืจื•ืฅ ื”ืชืงืฉื•ืจืช.
ื”ื”ืชืžื•ื“ื“ื•ืช ืขื ื–ื” ื”ื™ื ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ - ืคืฉื•ื˜ ืฉืœื— ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ื”ื“ืคื“ืคืŸ ื›ื”ื•ื“ืขื” ืžื•ืฆืคื ืช ืขื ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ืฉืจืช ื”ืื™ื ื˜ืจื ื˜.
ืœืื—ืจ ืžื›ืŸ, ืฉืจืช ื”ืื™ื ื˜ืจื ื˜ ืฉื•ืœื— ืชื—ื™ืœื” ืชื’ื•ื‘ื” ื›ืžื• "ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœืš ื”ื•ื ื›ื–ื”" ื•ืžืฆืคื™ืŸ ื”ื•ื“ืขื” ื–ื• ืขื ืื•ืชื• ืžืคืชื— ืฆื™ื‘ื•ืจื™.
ื”ื“ืคื“ืคืŸ ื‘ื•ื—ืŸ ืืช ื”ืชื’ื•ื‘ื” - ืื ื”ื”ื•ื“ืขื” "ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœืš ื”ื•ื ื›ื–ื”" ืžืชืงื‘ืœืช - ืื– ื–ื•ื”ื™ ืขืจื•ื‘ื” ืฉืœ 100% ืœืขืจื•ืฅ ื”ืชืงืฉื•ืจืช ื”ื–ื” ืžืื•ื‘ื˜ื—.
ืขื“ ื›ืžื” ื–ื” ื‘ื˜ื•ื—?
ืขืฆื ื”ื™ืฆื™ืจื” ืฉืœ ืขืจื•ืฅ ืชืงืฉื•ืจืช ืžืื•ื‘ื˜ื— ื›ื–ื” ืžืชืจื—ืฉืช ื‘ืžื”ื™ืจื•ืช ืฉืœ ping*2. ืœืžืฉืœ 20ms.
ืขืœ ื”ืชื•ืงืฃ ืœื”ื—ื–ื™ืง ืืช ื”ืžืคืชื— ื”ืคืจื˜ื™ ืฉืœ ืื—ื“ ื”ืฆื“ื“ื™ื ืžืจืืฉ. ืื• ืœืžืฆื•ื ืžืคืชื— ืคืจื˜ื™ ืชื•ืš ื›ืžื” ืืœืคื™ื•ืช ืฉื ื™ื•ืช.
ืคืจื™ืฆืช ืžืคืชื— ืคืจื˜ื™ ืžื•ื“ืจื ื™ ืื—ื“ ืชืืจืš ืขืฉืจื•ืช ืฉื ื™ื ื‘ืžื—ืฉื‘ ืขืœ.

ืฉืœื‘ ืžืก' 4 - ืžืกื“ ื ืชื•ื ื™ื ืฆื™ื‘ื•ืจื™ ืฉืœ ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื.
ื‘ืจื•ืจ ืฉื‘ื›ืœ ื”ืกื™ืคื•ืจ ื”ื–ื” ื™ืฉ ื”ื–ื“ืžื ื•ืช ืœืชื•ืงืฃ ืœืฉื‘ืช ืขืœ ืขืจื•ืฅ ื”ืชืงืฉื•ืจืช ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช.
ื”ืœืงื•ื— ื™ื›ื•ืœ ืœื”ืขืžื™ื“ ืคื ื™ื ืฉื”ื•ื ื”ืฉืจืช, ื•ื”ืฉืจืช ื™ื›ื•ืœ ืœื”ืขืžื™ื“ ืคื ื™ื ืฉื”ื•ื ื”ืœืงื•ื—. ื•ืœื“ืžื•ืช ื–ื•ื’ ืžืคืชื—ื•ืช ื‘ืฉื ื™ ื”ื›ื™ื•ื•ื ื™ื.
ืื– ื”ืชื•ืงืฃ ื™ืจืื” ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื•ื™ื•ื›ืœ "ืœืขืจื•ืš" ืืช ื”ืชืขื‘ื•ืจื”.
ืœื“ื•ื’ืžื”, ืฉื ื” ืืช ื”ื›ืชื•ื‘ืช ืœืืŸ ืœืฉืœื•ื— ื›ืกืฃ ืื• ื”ืขืชืง ืืช ื”ืกื™ืกืžื” ืžื”ื‘ื ืงืื•ืช ื”ืžืงื•ื•ื ืช ืื• ื—ืกื•ื ืชื•ื›ืŸ "ืžืขื•ืจืจ ื”ืชื ื’ื“ื•ืช".
ื›ื“ื™ ืœื”ื™ืœื—ื ื‘ืชื•ืงืคื™ื ื›ืืœื”, ื”ื ื”ืžืฆื™ืื• ืžืกื“ ื ืชื•ื ื™ื ืฆื™ื‘ื•ืจื™ ืขื ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื ืœื›ืœ ืืชืจ https.
ื›ืœ ื“ืคื“ืคืŸ "ื™ื•ื“ืข" ืขืœ ืงื™ื•ืžื ืฉืœ ื›-200 ืžืื’ืจื™ ืžื™ื“ืข ื›ืืœื”. ื–ื” ืžื•ืชืงืŸ ืžืจืืฉ ื‘ื›ืœ ื“ืคื“ืคืŸ.
"ื™ื“ืข" ืžื’ื•ื‘ื” ื‘ืžืคืชื— ืฆื™ื‘ื•ืจื™ ืžื›ืœ ืชืขื•ื“ื”. ื›ืœื•ืžืจ, ืœื ื ื™ืชืŸ ืœื–ื™ื™ืฃ ืืช ื”ื—ื™ื‘ื•ืจ ืœื›ืœ ืจืฉื•ืช ืื™ืฉื•ืจื™ื ืกืคืฆื™ืคื™ืช.

ื›ืขืช ื™ืฉ ื”ื‘ื ื” ืคืฉื•ื˜ื” ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-SSL ืขื‘ื•ืจ https.
ืื ืชืฉืชืžืฉ ื‘ืžื•ื— ืฉืœืš, ื™ืชื‘ืจืจ ืื™ืš ื”ืฉื™ืจื•ืชื™ื ื”ืžื™ื•ื—ื“ื™ื ื™ื›ื•ืœื™ื ืœืคืจื•ืฅ ืžืฉื”ื• ื‘ืžื‘ื ื” ื”ื–ื”. ืื‘ืœ ื–ื” ื™ืขืœื” ืœื”ื ืžืืžืฆื™ื ืžืคืœืฆืชื™ื™ื.
ื•ืืจื’ื•ื ื™ื ืงื˜ื ื™ื ื™ื•ืชืจ ืžื”-NSA ืื• ื”-CIA - ื›ืžืขื˜ ื‘ืœืชื™ ืืคืฉืจื™ ืœืคืจื•ืฅ ืืช ืจืžืช ื”ื”ื’ื ื” ื”ืงื™ื™ืžืช, ืืคื™ืœื• ืขื‘ื•ืจ VIPs.

ืื•ืกื™ืฃ ื’ื ืขืœ ื—ื™ื‘ื•ืจื™ 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 ื”ื™ื ืฉื ืช ื™ืฆื™ืจืช ื”ืžืคืชื—.
chained - ืฆื™ื•ืŸ ืฉื™ืฉ ืฉืจืฉืจืช ืฉืœ ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื (ื”ืจืืฉื•ืŸ ื”ื•ื ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœื ื• ื•ื”ืฉืืจ ื”ื ืžื” ืฉื”ื’ื™ืข ืžื”ื—ื‘ืจื” ืฉื”ื ืคื™ืงื” ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™).
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

ื›ืืŸ ืื ื• ืžืฆื™ื™ื ื™ื ืฉื›ืœ ื”ื“ื•ืืจ ื”ื ื›ื ืก ืขื•ื‘ืจ ืœืฉื•ื‘ืจืช ื™ื•ื ื™ื.
ื•ื”ื›ืœืœื™ื ืœื“ื•ืžื™ื™ืŸ, ืชื™ื‘ืช ื“ื•ืืจ, ื›ื™ื ื•ื™ - ื—ืคืฉ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื.

/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 ื™ื•ื“ืข ืฉื ื™ืชืŸ ืœืงื‘ืœ ื“ื•ืืจ ืœืฉืœื™ื—ื” ื ื•ืกืคืช ืจืง ืœืื—ืจ ืื™ืฉื•ืจ ืขื ืงื• ื™ื•ื ื™ื.

ืื ื™ ื‘ืืžืช ืœื ืžืžืฉ ืžื‘ื™ืŸ ืœืžื” ื–ื” ืžืฉื•ื›ืคืœ ื›ืืŸ. ื›ื‘ืจ ืคื™ืจื˜ื ื• ืืช ื›ืœ ืžื” ืฉืฆืจื™ืš ื‘"ื”ื•ื‘ืœื”_ื•ื™ืจื˜ื•ืืœื™ืช".

ืื‘ืœ ืžืขืจื›ืช ื”ืคื•ืกื˜-ืชื™ืงื•ืŸ ื™ืฉื ื” ืžืื•ื“ - ื›ื ืจืื” ืฉื–ื• ื—ื–ืจื” ืžื”ื™ืžื™ื ื”ื”ื.

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

ืืœื• ื”ื’ื“ืจื•ืช ื”ืงืฉื•ืจื•ืช ืœืกืคืืžืืกืกื™ืŸ, ืขืœ ื›ืš ื‘ื”ืžืฉืš.

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+ืงื™ืฉื•ืจ ื™ื•ื ื™ื ื›ืืŸ.

ื”ื’ื“ืจืช 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 {
  }
}

ื–ื”ื• ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื”ืจืืฉื™ ืฉืœ ืฆื™ื‘ืช ื”ื™ื•ื ื™ื.
ื›ืืŸ ืื ื• ืžืฉื‘ื™ืชื™ื ื—ื™ื‘ื•ืจื™ื ืœื ืžืื•ื‘ื˜ื—ื™ื.
ื•ืืคืฉืจ ื—ื™ื‘ื•ืจื™ื ืžืื•ื‘ื˜ื—ื™ื.

ืงื•ื‘ืฅ "/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 (ื“ื•ืžื™ื™ืŸ2) - ืœืœื ืื™ืฉื•ืจ. ื›ื“ื™ ืœื—ื‘ืจ ืœืงื•ื—ื•ืช ืขืœื™ืš ืœืฆื™ื™ืŸ 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

ืื ื• ืžืืคืฉืจื™ื ื˜ืขื™ื ื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืฉื™ืจื•ืช spamassassin ื‘ืขืช ื”ื˜ืขื™ื ื”.

ืงื•ื‘ืฅ "/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.
ืื ื™ ืžืžืœื™ืฅ ืœืงืจื•ื ืืช ืชื•ืจืช ื”ืœืžื™ื“ื” ืฉืœ spamassasin ื‘ืขืช ื”ืขื‘ืจืช ืื•ืชื™ื•ืช ื‘ืชื™ืงื™ื•ืช imap (ื•ืื ื™ ืœื ืžืžืœื™ืฅ ืœื”ืฉืชืžืฉ ื‘ื”).

============= ืคื ื™ื™ื” ืœืงื”ื™ืœื” =============

ืื ื™ ื’ื ืจื•ืฆื” ืœื–ืจื•ืง ืจืขื™ื•ืŸ ืœืงื”ื™ืœื” ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืจืžืช ื”ืื‘ื˜ื—ื” ืฉืœ ืžื›ืชื‘ื™ื ืฉื”ื•ืขื‘ืจื•. ืžืื– ืื ื™ ืฉืงื•ืข ื›ืœ ื›ืš ืขืžื•ืง ื‘ื ื•ืฉื ื”ื“ื•ืืจ.

ื›ืš ืฉื”ืžืฉืชืžืฉ ื™ื•ื›ืœ ืœื™ืฆื•ืจ ื–ื•ื’ ืžืคืชื—ื•ืช ื‘ืœืงื•ื— ืฉืœื• (ืืื•ื˜ืœื•ืง, thunderbird, plugin-ื“ืคื“ืคืŸ,...). ืฆื™ื‘ื•ืจื™ ื•ืคืจื˜ื™. ืฆื™ื‘ื•ืจื™ - ืฉืœื— ืœ-DNS. ืคืจื˜ื™ - ื—ืกื•ืš ืขืœ ื”ืœืงื•ื—. ืฉืจืชื™ ื“ื•ืืจ ื™ื•ื›ืœื• ืœื”ืฉืชืžืฉ ื‘ืžืคืชื— ืฆื™ื‘ื•ืจื™ ื›ื“ื™ ืœืฉืœื•ื— ืœื ืžืขืŸ ืกืคืฆื™ืคื™.

ื•ื›ื“ื™ ืœื”ื’ืŸ ืžืคื ื™ ื“ื•ืืจ ื–ื‘ืœ ืขื ืื•ืชื™ื•ืช ื›ืืœื” (ื›ืŸ, ืฉืจืช ื”ื“ื•ืืจ ืœื ื™ื•ื›ืœ ืœืจืื•ืช ืืช ื”ืชื•ื›ืŸ) - ืชืฆื˜ืจืš ืœื”ืฆื™ื’ 3 ื›ืœืœื™ื:

  1. ื—ืชื™ืžืช DKIM ืืžื™ืชื™ืช ื—ื•ื‘ื”, SPF ื—ื•ื‘ื”, rDNS ื—ื•ื‘ื”.
  2. ืจืฉืช ื ื•ื™ืจื•ื ื™ื ื‘ื ื•ืฉื ื”ื“ืจื›ื” ื ื’ื“ ืกืคืื + ืžืกื“ ื ืชื•ื ื™ื ืขื‘ื•ืจื• ื‘ืฆื“ ื”ืœืงื•ื—.
  3. ืืœื’ื•ืจื™ืชื ื”ื”ืฆืคื ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื›ื–ื” ืฉื”ืฆื“ ื”ืฉื•ืœื— ื—ื™ื™ื‘ ืœื”ื•ืฆื™ื ืคื™ 100 ื™ื•ืชืจ ื›ื•ื— ืžืขื‘ื“ ื‘ื”ืฆืคื ื” ืžืืฉืจ ื”ืฆื“ ื”ืžืงื‘ืœ.

ื‘ื ื•ืกืฃ ืœืžื›ืชื‘ื™ื ืคื•ืžื‘ื™ื™ื, ืคืชื— ืžื›ืชื‘ ื”ืฆืขื” ืกื˜ื ื“ืจื˜ื™ "ื›ื“ื™ ืœื”ืชื—ื™ืœ ื”ืชื›ืชื‘ื•ืช ืžืื•ื‘ื˜ื—ืช". ืื—ื“ ื”ืžืฉืชืžืฉื™ื (ืชื™ื‘ืช ื“ื•ืืจ) ืฉื•ืœื— ืžื›ืชื‘ ืขื ืงื•ื‘ืฅ ืžืฆื•ืจืฃ ืœืชื™ื‘ืช ื“ื•ืืจ ืื—ืจืช. ื”ืžื›ืชื‘ ืžื›ื™ืœ ื”ืฆืขืช ื˜ืงืกื˜ ืœืคืชื™ื—ืช ืขืจื•ืฅ ืชืงืฉื•ืจืช ืžืื•ื‘ื˜ื— ืœื”ืชื›ืชื‘ื•ืช ื•ืžืคืชื— ืฆื™ื‘ื•ืจื™ ืฉืœ ื‘ืขืœ ืชื™ื‘ืช ื”ื“ื•ืืจ (ืขื ืžืคืชื— ืคืจื˜ื™ ื‘ืฆื“ ื”ืœืงื•ื—).

ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœื™ืฆื•ืจ ื›ืžื” ืžืคืชื—ื•ืช ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ื›ืœ ื”ืชื›ืชื‘ื•ืช. ื”ืžืฉืชืžืฉ ื”ื ืžืขืŸ ื™ื›ื•ืœ ืœืงื‘ืœ ื”ืฆืขื” ื–ื• ื•ืœืฉืœื•ื— ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœื• (ื ืขืฉื” ื’ื ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ื”ืชื›ืชื‘ื•ืช ื–ื•). ืœืื—ืจ ืžื›ืŸ, ื”ืžืฉืชืžืฉ ื”ืจืืฉื•ืŸ ืฉื•ืœื— ืžื›ืชื‘ ื‘ืงืจืช ืฉื™ืจื•ืช (ืžื•ืฆืคืŸ ืขื ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ื”ืžืฉืชืžืฉ ื”ืฉื ื™) - ืขื ืงื‘ืœืชื• ื™ื›ื•ืœ ื”ืžืฉืชืžืฉ ื”ืฉื ื™ ืœืจืื•ืช ืืช ืขืจื•ืฅ ื”ืชืงืฉื•ืจืช ืฉื ื•ืฆืจ ื›ืืžื™ืŸ. ืœืื—ืจ ืžื›ืŸ, ื”ืžืฉืชืžืฉ ื”ืฉื ื™ ืฉื•ืœื— ืžื›ืชื‘ ื‘ืงืจื” - ื•ืื– ื”ืžืฉืชืžืฉ ื”ืจืืฉื•ืŸ ื™ื›ื•ืœ ื’ื ืœื”ืชื™ื™ื—ืก ืœืื‘ื˜ื—ืช ื”ืขืจื•ืฅ ืฉื ื•ืฆืจ.

ื›ื“ื™ ืœื”ื™ืœื—ื ื‘ื™ื™ืจื•ื˜ ืžืคืชื—ื•ืช ืขืœ ื”ื›ื‘ื™ืฉ, ื”ืคืจื•ื˜ื•ืงื•ืœ ื—ื™ื™ื‘ ืœืืคืฉืจ ื”ืขื‘ืจืช ืžืคืชื— ืฆื™ื‘ื•ืจื™ ืื—ื“ ืœืคื—ื•ืช ื‘ืืžืฆืขื•ืช ื›ื•ื ืŸ ื”ื‘ื–ืง.

ื•ื”ื“ื‘ืจ ื”ื›ื™ ื—ืฉื•ื‘ ื”ื•ื ืฉื”ื›ืœ ืขื•ื‘ื“ (ื”ืฉืืœื” ื”ื™ื "ืžื™ ื™ืฉืœื ืขืœ ื–ื”?"):
ื”ื–ืŸ ืชืขื•ื“ื•ืช ื“ื•ืืจ ื”ื—ืœ ืž-$10 ืœ-3 ืฉื ื™ื. ืžื” ืฉื™ืืคืฉืจ ืœืฉื•ืœื— ืœืฆื™ื™ืŸ ื‘-dns ืฉ"ื”ืžืคืชื—ื•ืช ื”ืฆื™ื‘ื•ืจื™ื™ื ืฉืœื™ ื ืžืฆืื™ื ืฉื." ื•ื”ื ื™ืชื ื• ืœืš ืืช ื”ื”ื–ื“ืžื ื•ืช ืœื”ืชื—ื™ืœ ื—ื™ื‘ื•ืจ ืžืื•ื‘ื˜ื—. ื™ื—ื“ ืขื ื–ืืช, ืงื‘ืœืช ืงืฉืจื™ื ื›ืืœื” ื”ื™ื ื‘ื—ื™ื ื.
gmail ืกื•ืฃ ืกื•ืฃ ืžื™ื™ืฆืจืช ืจื•ื•ื—ื™ื ืžื”ืžืฉืชืžืฉื™ื ืฉืœื”. ืชืžื•ืจืช 10$ ืœ-3 ืฉื ื™ื - ื”ื–ื›ื•ืช ืœื™ืฆื•ืจ ืขืจื•ืฆื™ ื”ืชื›ืชื‘ื•ืช ืžืื•ื‘ื˜ื—ื™ื.

============= ืžืกืงื ื” =============

ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ืžืืžืจ ื›ื•ืœื•, ื”ืชื›ื•ื•ื ืชื™ ืœืฉื›ื•ืจ ืฉืจืช ื™ื™ืขื•ื“ื™ ืœื—ื•ื“ืฉ ื•ืœืงื ื•ืช ื“ื•ืžื™ื™ืŸ ืขื ืชืขื•ื“ืช SSL.

ืื‘ืœ ื ืกื™ื‘ื•ืช ื”ื—ื™ื™ื ื”ืชืคืชื—ื• ื›ืš ืฉื”ื ื•ืฉื ื”ื–ื” ื ืžืฉืš ื—ื•ื“ืฉื™ื™ื.
ื•ื›ืš, ื›ืฉืฉื•ื‘ ื”ื™ื” ืœื™ ื–ืžืŸ ืคื ื•ื™, ื”ื—ืœื˜ืชื™ ืœืคืจืกื ืืช ื”ืžืืžืจ ื›ืคื™ ืฉื”ื•ื, ื‘ืžืงื•ื ืœื”ืกืชื›ืŸ ืฉื”ืคืจืกื•ื ื™ื™ืžืฉืš ืขื•ื“ ืฉื ื”.

ืื ื™ืฉ ื“ื™ ื”ืจื‘ื” ืฉืืœื•ืช ื›ืžื• "ืื‘ืœ ื–ื” ืœื ืžืชื•ืืจ ื‘ืคื™ืจื•ื˜ ืžืกืคื™ืง", ืื– ื›ื ืจืื” ื™ื”ื™ื” ื›ื•ื— ืœืงื—ืช ืฉืจืช ื™ื™ืขื•ื“ื™ ืขื ื“ื•ืžื™ื™ืŸ ื—ื“ืฉ ื•ืชืขื•ื“ืช SSL ื—ื“ืฉื” ื•ืœืชืืจ ืืช ื–ื” ื‘ื™ืชืจ ืคื™ืจื•ื˜, ื•ืจื•ื‘ ื—ืฉื•ื‘ ืœื–ื”ื•ืช ืืช ื›ืœ ื”ืคืจื˜ื™ื ื”ื—ืฉื•ื‘ื™ื ื”ื—ืกืจื™ื.

ืื ื™ ื’ื ืจื•ืฆื” ืœืงื‘ืœ ืžืฉื•ื‘ ืขืœ ืจืขื™ื•ื ื•ืช ืœื’ื‘ื™ ืชืขื•ื“ื•ืช ื“ื•ืืจ. ืื ืืชื” ืื•ื”ื‘ ืืช ื”ืจืขื™ื•ืŸ, ืื ื™ ืื ืกื” ืœืžืฆื•ื ืืช ื”ื›ื•ื— ืœื›ืชื•ื‘ ื˜ื™ื•ื˜ื” ืขื‘ื•ืจ rfc.

ื‘ืขืช ื”ืขืชืงืช ื—ืœืงื™ื ื’ื“ื•ืœื™ื ืžืžืืžืจ, ืกืคืง ืงื™ืฉื•ืจ ืœืžืืžืจ ื–ื”.
ื‘ืขืช ืชืจื’ื•ื ืœื›ืœ ืฉืคื” ืื—ืจืช, ืกืคืง ืงื™ืฉื•ืจ ืœืžืืžืจ ื–ื”.
ืื ืกื” ืœืชืจื’ื ืื•ืชื• ืœืื ื’ืœื™ืช ื‘ืขืฆืžื™ ื•ืœื”ืฉืื™ืจ ื”ืคื ื™ื•ืช ืžื•ืฆืœื‘ื•ืช.


ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”