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

Dan l-artikolu huwa dwar kif twaqqaf server tal-posta modern.
Postfix + Dovecot. SPF + DKIM + rDNS. Bl-IPv6.
Bil-kriptaġġ TSL. B'appoġġ għal oqsma multipli - parti b'ċertifikat SSL reali.
Bi protezzjoni kontra l-ispam u klassifikazzjoni għolja kontra l-ispam minn servers tal-posta oħra.
Jappoġġja interfaces fiżiċi multipli.
Ma 'OpenVPN, il-konnessjoni li għalih hija permezz ta' IPv4, u li jipprovdi IPv6.

Jekk ma tridx titgħallem dawn it-teknoloġiji kollha, imma trid twaqqaf server bħal dan, allura dan l-artikolu huwa għalik.

L-artiklu ma jagħmel l-ebda tentattiv biex jispjega kull dettall. L-ispjegazzjoni tmur għal dak li mhuwiex ikkonfigurat bħala standard jew huwa importanti mill-aspett tal-konsumatur.

Il-motivazzjoni biex jitwaqqaf server tal-posta ilha ħolma tiegħi. Dan jista 'ħoss stupid, imma IMHO, huwa ħafna aħjar milli ħolm ta' karozza ġdida mill-marka favorita tiegħek.

Hemm żewġ motivazzjonijiet għat-twaqqif tal-IPv6. Speċjalista tal-IT jeħtieġ li jitgħallem teknoloġiji ġodda kontinwament sabiex jgħix. Nixtieq nagħti l-kontribut modest tiegħi fil-ġlieda kontra ċ-ċensura.

Il-motivazzjoni għat-twaqqif ta 'OpenVPN hija biss li l-IPv6 jaħdem fuq il-magna lokali.
Il-motivazzjoni għat-twaqqif ta 'diversi interfaces fiżiċi hija li fuq is-server tiegħi għandi interface waħda "bil-mod iżda bla limitu" u oħra "mgħaġġla iżda b'tariffa".

Il-motivazzjoni għat-twaqqif ta 'settings ta' Bind hija li l-ISP tiegħi jipprovdi server DNS instabbli, u google kultant jonqos ukoll. Irrid server DNS stabbli għall-użu personali.

Motivazzjoni biex tikteb artiklu - ktibt abbozz 10 xhur ilu, u diġà ħarist lejh darbtejn. Anke jekk l-awtur għandu bżonnha regolarment, hemm probabbiltà kbira li oħrajn ikollhom bżonnha wkoll.

M'hemm l-ebda soluzzjoni universali għal server tal-posta. Imma nipprova nikteb xi ħaġa bħal "agħmel dan u mbagħad, meta kollox jaħdem kif suppost, armi l-affarijiet żejda."

Il-kumpanija tech.ru għandha server ta’ Colocation. Huwa possibbli li tqabbel ma 'OVH, Hetzner, AWS. Biex issolvi din il-problema, il-kooperazzjoni ma 'tech.ru se tkun ħafna aktar effettiva.

Debian 9 huwa installat fuq is-server.

Is-server għandu 2 interfaces "eno1" u "eno2". L-ewwel huwa illimitat, u t-tieni huwa mgħaġġel, rispettivament.

Hemm 3 indirizzi IP statiċi, XX.XX.XX.X0 u XX.XX.XX.X1 u XX.XX.XX.X2 fuq l-interface `eno1` u XX.XX.XX.X5 fuq l-interface `eno2` .

Disponibbli XXXX:XXXX:XXXX:XXXX::/64 ġabra ta' indirizzi IPv6 li huma assenjati lill-interface `eno1` u minnha XXXX:XXXX:XXXX:XXXX:1:2::/96 ġiet assenjata lil `eno2` fuq talba tiegħi.

Hemm 3 oqsma `domain1.com`, `domain2.com`, `domain3.com`. Hemm ċertifikat SSL għal "domain1.com" u "domain3.com".

Għandi kont tal-Google li nixtieq ngħaqqad il-kaxxa postali tiegħi miegħu[protett bl-email]` (li tirċievi posta u tibgħat posta direttament mill-interface tal-gmail).
Għandu jkun hemm kaxxa tal-posta'[protett bl-email]`, kopja tal-email li minnha nixtieq nara fil-gmail tiegħi. U huwa rari li tkun tista 'tibgħat xi ħaġa f'isem `[protett bl-email]` permezz tal-interface tal-web.

Għandu jkun hemm kaxxa tal-posta'[protett bl-email]`, li Ivanov se juża mill-iPhone tiegħu.

L-emails mibgħuta għandhom jikkonformaw mar-rekwiżiti moderni kollha kontra l-ispam.
Għandu jkun hemm l-ogħla livell ta' kriptaġġ ipprovdut fin-netwerks pubbliċi.
Għandu jkun hemm appoġġ IPv6 kemm biex jintbagħtu kif ukoll biex jirċievu l-ittri.
Għandu jkun hemm SpamAssassin li qatt mhu se jħassar emails. U se jew bounce jew taqbeż jew jibgħat lill-folder IMAP "Spam".
It-tagħlim awtomatiku ta' SpamAssassin irid jiġi kkonfigurat: jekk nimxi ittra fil-folder tal-Ispam, titgħallem minn dan; jekk nimxi ittra mill-folder tal-Ispam, titgħallem minn dan. Ir-riżultati tat-taħriġ SpamAssassin għandhom jinfluwenzaw jekk l-ittra tispiċċax fil-folder tal-Ispam.
L-iskripts PHP għandhom ikunu jistgħu jibagħtu posta f'isem kwalunkwe dominju fuq server partikolari.
Għandu jkun hemm servizz openvpn, bil-kapaċità li tuża IPv6 fuq klijent li m'għandux IPv6.

L-ewwel trid tikkonfigura l-interfaces u r-rotot, inkluż l-IPv6.
Imbagħad ser ikollok bżonn tikkonfigura OpenVPN, li se tikkonnettja permezz ta 'IPv4 u tipprovdi lill-klijent b'indirizz IPv6 statiku-reali. Dan il-klijent ikollu aċċess għas-servizzi IPv6 kollha fuq is-server u aċċess għal kwalunkwe riżorsi IPv6 fuq l-Internet.
Imbagħad ikollok bżonn tikkonfigura Postfix biex tibgħat ittri + SPF + DKIM + rDNS u affarijiet żgħar oħra simili.
Imbagħad ikollok bżonn tikkonfigura Dovecot u tikkonfigura Multidomain.
Imbagħad ikollok bżonn tikkonfigura SpamAssassin u tikkonfigura t-taħriġ.
Fl-aħħarnett, installa Bind.

============= Multi-interfaces =============

Biex tikkonfigura l-interfaces, trid tikteb dan fi "/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

Dawn is-settings jistgħu jiġu applikati fuq kwalunkwe server f'tech.ru (bi ftit koordinazzjoni bl-appoġġ) u se jaħdem immedjatament kif suppost.

Jekk għandek esperjenza twaqqaf affarijiet simili għal Hetzner, OVH, hemm differenti. Aktar diffiċli.

eno1 huwa l-isem tal-karta tan-netwerk #1 (bil-mod iżda bla limitu).
eno2 huwa l-isem tal-karta tan-netwerk #2 (mgħaġġla, iżda b'tariffa).
tun0 huwa l-isem tal-karta tan-netwerk virtwali minn OpenVPN.
XX.XX.XX.X0 - IPv4 #1 fuq eno1.
XX.XX.XX.X1 - IPv4 #2 fuq eno1.
XX.XX.XX.X2 - IPv4 #3 fuq eno1.
XX.XX.XX.X5 - IPv4 #1 fuq eno2.
XX.XX.XX.1 - gateway IPv4.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 għas-server kollu.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 għal eno2, kull ħaġa oħra minn barra tidħol f'eno1.
XXXX:XXXX:XXXX:XXXX::1 — IPv6 gateway (ta' min jinnota li dan jista'/għandu jsir b'mod differenti. Speċifika l-iswiċċ IPv6).
dns-nameservers - 127.0.0.1 huwa indikat (għax bind huwa installat lokalment) u 213.248.1.6 (dan huwa minn tech.ru).

"table eno1t" u "table eno2t" - it-tifsira ta' dawn ir-regoli tar-rotta hija li t-traffiku li jidħol minn eno1 -> jitlaq minnu, u t-traffiku li jidħol minn eno2 -> jitlaq minnu. U wkoll konnessjonijiet mibdija mis-server jgħaddu minn eno1.

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

B'dan il-kmand aħna nispeċifikaw li kwalunkwe traffiku li ma jinftiehemx li jaqa' taħt kwalunkwe regola mmarkata "tabella eno1t" -> jintbagħat lill-interface eno1.

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

B'dan il-kmand aħna nispeċifikaw li kwalunkwe traffiku mibdi mis-server għandu jkun dirett lejn l-interface eno1.

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

B'dan il-kmand nistabbilixxu r-regoli għall-immarkar tat-traffiku.

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

Din il-blokka tispeċifika t-tieni IPv4 għall-interface eno1.

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

B'dan il-kmand aħna nissettjaw ir-rotta mill-klijenti OpenVPN għal IPv4 lokali ħlief XX.XX.XX.X0.
Għadni ma nifhimx għaliex dan il-kmand huwa biżżejjed għall-IPv4 kollu.

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

Dan huwa fejn nissettjaw l-indirizz għall-interface innifsu. Is-server se jużah bħala indirizz "ħerġin". Mhux se jerġa' jintuża bl-ebda mod.

Għaliex ":1:1::" hija daqshekk ikkumplikata? Sabiex OpenVPN jaħdem b'mod korrett u għal dan biss. Aktar dwar dan aktar tard.

Fuq is-suġġett tal-portal - hekk jaħdem u tajjeb. Iżda l-mod korrett huwa li tindika hawn l-IPv6 tas-swiċċ li miegħu huwa konness is-server.

Madankollu, għal xi raġuni IPv6 jieqaf jaħdem jekk nagħmel dan. Din hija probabbilment xi tip ta 'problema tech.ru.

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

Dan qed iżżid indirizz IPv6 mal-interface. Jekk għandek bżonn mitt indirizz, dan ifisser mitt linja f'dan il-fajl.

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

Innota l-indirizzi u s-subnets tal-interfaces kollha biex tagħmilha ċara.
eno1 - għandu jkun "/64" - għaliex dan huwa l-grupp kollu tagħna ta 'indirizzi.
tun0 - is-subnet trid tkun akbar minn eno1. Inkella, mhux se jkun possibbli li jiġi kkonfigurat portal IPv6 għall-klijenti OpenVPN.
eno2 - is-subnet trid tkun akbar minn tun0. Inkella, il-klijenti OpenVPN ma jkunux jistgħu jaċċessaw l-indirizzi IPv6 lokali.
Għaċ-ċarezza, għażilt pass ta 'subnet ta' 16, imma jekk tixtieq, tista 'saħansitra tagħmel pass "1".
Għaldaqstant, 64+16 = 80, u 80+16 = 96.

Għal aktar ċarezza:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY huma indirizzi li għandhom jiġu assenjati għal siti jew servizzi speċifiċi fuq l-interface eno1.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY huma indirizzi li għandhom jiġu assenjati għal siti jew servizzi speċifiċi fuq l-interface eno2.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY huma indirizzi li għandhom jiġu assenjati lill-klijenti OpenVPN jew użati bħala indirizzi tas-servizz OpenVPN.

Biex jiġi kkonfigurat in-netwerk, għandu jkun possibbli li terġa 'tibda s-server.
Il-bidliet tal-IPv4 jinġabru meta jiġu eżegwiti (kun żgur li wżawha fl-iskrin - inkella dan il-kmand sempliċement jikkraxxja n-netwerk fuq is-server):

/etc/init.d/networking restart

Żid fl-aħħar tal-fajl “/etc/iproute2/rt_tables”:

100 eno1t
101 eno2t

Mingħajr dan, ma tistax tuża tabelli tad-dwana fil-fajl "/etc/network/interfaces".
In-numri għandhom ikunu uniċi u inqas minn 65535.

Il-bidliet tal-IPv6 jistgħu jinbidlu faċilment mingħajr ma jerġgħu jibdew, iżda biex tagħmel dan trid titgħallem mill-inqas tliet kmandi:

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

Issettjar "/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

Dawn huma s-settings tas-"sysctl" tas-server tiegħi. Ħa nindika xi ħaġa importanti.

net.ipv4.ip_forward = 1

Mingħajr dan, OpenVPN ma jaħdem xejn.

net.ipv6.ip_nonlocal_bind = 1

Kull min jipprova jorbot l-IPv6 (per eżempju nginx) immedjatament wara li l-interface tkun up se tirċievi żball. Li dan l-indirizz mhux disponibbli.

Biex tiġi evitata sitwazzjoni bħal din, isir tali setting.

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

Mingħajr dawn is-settings IPv6, it-traffiku mill-klijent OpenVPN ma joħroġx fid-dinja.

Settings oħra jew mhumiex rilevanti jew ma niftakarx għalxiex huma.
Imma fil-każ, inħalliha "kif inhu."

Sabiex il-bidliet f'dan il-fajl jinġabru mingħajr ma jerġa' jibda s-server, trid tħaddem il-kmand:

sysctl -p

Aktar dettalji dwar ir-regoli tal-“mejda”: habr.com/post/108690

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

OpenVPN IPv4 ma jaħdimx mingħajr iptables.

L-iptables tiegħi huma bħal dan għal 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 huwa l-indirizz IPv4 statiku tiegħi tal-magna lokali.
10.8.0.0/24 - IPv4 netwerk openvpn. Indirizzi IPv4 għall-klijenti openvpn.
Il-konsistenza tar-regoli hija importanti.

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

Din hija limitazzjoni sabiex jien biss nista' nuża OpenVPN mill-IP statiku tiegħi.

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

Biex tibgħat pakketti IPv4 bejn il-klijenti OpenVPN u l-Internet, għandek bżonn tirreġistra wieħed minn dawn il-kmandi.

Għal każijiet differenti, waħda mill-għażliet mhix adattata.
Iż-żewġ kmandi huma adattati għall-każ tiegħi.
Wara li qrajt id-dokumentazzjoni, għażilt l-ewwel għażla għax tuża inqas CPU.

Sabiex is-settings kollha tal-iptables jinġabru wara l-istartjar mill-ġdid, għandek bżonn issalvahom x'imkien.

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

Ismijiet bħal dawn ma ġewx magħżula b’kumbinazzjoni. Jintużaw mill-pakkett "iptables-persistent".

apt-get install iptables-persistent

Installazzjoni tal-pakkett prinċipali OpenVPN:

apt-get install openvpn easy-rsa

Ejja nwaqqfu mudell għaċ-ċertifikati (issostitwixxi l-valuri tiegħek):

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

Ejja neditjaw is-settings tal-mudell taċ-ċertifikat:

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"
...

Oħloq ċertifikat tas-server:

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

Ejja nħejju l-abbiltà li noħolqu l-fajls finali “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

Ejja nħejju skript li jingħaqad il-fajls kollha f'fajl wieħed 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

Il-ħolqien tal-ewwel klijent OpenVPN:

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

Il-fajl "~/client-configs/files/client-name.ovpn" jintbagħat lill-apparat tal-klijent.

Għall-klijenti iOS ser ikollok bżonn tagħmel dan li ġej:
Il-kontenut tat-tikketta "tls-auth" għandu jkun mingħajr kummenti.
U poġġi wkoll "key-direction 1" immedjatament qabel it-tikketta "tls-auth".

Ejja kkonfiguraw il-konfigurazzjoni tas-server 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

Dan huwa meħtieġ sabiex jiġi stabbilit indirizz statiku għal kull klijent (mhux meħtieġ, imma nużah):

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

L-aktar dettall diffiċli u ewlieni.

Sfortunatament, OpenVPN għadu ma jafx kif tikkonfigura b'mod indipendenti portal IPv6 għall-klijenti.
Int trid tibgħat dan "manwalment" għal kull klijent.

# 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"

Fajl “/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

Fajl “/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

Iż-żewġ skripts jużaw il-fajl “/etc/openvpn/variables”:

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

Insibha diffiċli niftakar għaliex miktub hekk.

Issa netmask = 112 tidher stramba (għandu jkun 96 hemm).
U l-prefiss huwa stramb, ma jaqbilx man-netwerk tun0.
Imma okay, inħalliha kif inhu.

cipher DES-EDE3-CBC

Dan mhux għal kulħadd - għażilt dan il-metodu ta 'kodifikazzjoni tal-konnessjoni.

Tgħallem aktar dwar it-twaqqif ta' OpenVPN IPv4.

Tgħallem aktar dwar it-twaqqif ta' OpenVPN IPv6.

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

Installazzjoni tal-pakkett prinċipali:

apt-get install postfix

Meta tinstalla, agħżel "sit tal-internet".

"/etc/postfix/main.cf" tiegħi jidher bħal dan:

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

Ejja nħarsu lejn id-dettalji ta 'din il-konfigurazzjoni.

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

Skont ir-residenti ta' Khabrovsk, dan il-blokk fih "informazzjoni ħażina u teżijiet mhux korretti."8 snin biss wara l-bidu tal-karriera tiegħi bdejt nifhem kif taħdem l-SSL.

Għalhekk, se nieħu l-libertà li niddeskrivi kif tuża SSL (mingħajr ma nwieġeb il-mistoqsijiet "Kif taħdem?" u "Għaliex taħdem?").

Il-bażi tal-kriptaġġ modern huwa l-ħolqien ta 'par ta' ċavetta (żewġ strings twal ħafna ta 'karattri).

"Ċavetta" waħda hija privata, iċ-ċavetta l-oħra hija "pubblika". Aħna nżommu sigriet iċ-ċavetta privata b'attenzjoni kbira. Aħna nqassmu ċ-ċavetta pubblika lil kulħadd.

Bl-użu ta 'ċavetta pubblika, tista' tikkodifika sensiela ta 'test sabiex is-sid taċ-ċavetta privata biss ikun jista' jiddeċifraha.
Ukoll, dik hija l-bażi kollha tat-teknoloġija.

Pass #1 - siti https.
Meta jaċċessa sit, il-browser jitgħallem mis-server tal-web li s-sit huwa https u għalhekk jitlob ċavetta pubblika.
Is-server tal-web jagħti ċ-ċavetta pubblika. Il-browser juża ċ-ċavetta pubblika biex jikkripta t-talba http u jibgħatha.
Il-kontenut ta' http-request jista' jinqara biss minn dawk li għandhom iċ-ċavetta privata, jiġifieri s-server biss li għalih issir it-talba.
It-talba Http fiha mill-inqas URI. Għalhekk, jekk pajjiż qed jipprova jirrestrinġi l-aċċess mhux għas-sit kollu, iżda għal paġna speċifika, allura dan huwa impossibbli li jsir għas-siti https.

Pass #2 - rispons kriptat.
Is-server tal-web jipprovdi tweġiba li tista 'tinqara faċilment fit-triq.
Is-soluzzjoni hija estremament sempliċi - il-browser jiġġenera lokalment l-istess par ċavetta privata-pubblika għal kull sit https.
U flimkien mat-talba għaċ-ċavetta pubblika tas-sit, tibgħat iċ-ċavetta pubblika lokali tagħha.
Is-server tal-web jiftakarha u, meta jibgħat http-response, jikkripta biċ-ċavetta pubblika ta 'klijent speċifiku.
Issa http-response jista 'jiġi decrypted biss mis-sid taċ-ċavetta privata tal-browser tal-klijent (jiġifieri, il-klijent innifsu).

Pass Nru 3 - tistabbilixxi konnessjoni sigura permezz ta 'kanal pubbliku.
Hemm vulnerabbiltà fl-eżempju Nru 2 - xejn ma jipprevjeni lil dawk li jixtieq tajjeb milli jinterċettaw talba http u jeditjaw informazzjoni dwar iċ-ċavetta pubblika.
Għalhekk, l-intermedjarju se jara b'mod ċar il-kontenut kollu tal-messaġġi mibgħuta u riċevuti sakemm jinbidel il-kanal ta 'komunikazzjoni.
It-trattament ma 'dan huwa estremament sempliċi - ibgħat biss iċ-ċavetta pubblika tal-browser bħala messaġġ encrypted biċ-ċavetta pubblika tas-server tal-web.
Is-server tal-web imbagħad l-ewwel jibgħat tweġiba bħal "ċ-ċavetta pubblika tiegħek hija bħal din" u jikkripta dan il-messaġġ bl-istess ċavetta pubblika.
Il-browser iħares lejn ir-rispons - jekk il-messaġġ "ċ-ċavetta pubblika tiegħek hija bħal din" jasal - allura din hija garanzija ta '100% li dan il-kanal ta' komunikazzjoni huwa sigur.
Kemm hu sigur?
Il-ħolqien stess ta 'tali kanal ta' komunikazzjoni sigur iseħħ b'veloċità ta 'ping*2. Per eżempju 20ms.
L-attakkant irid ikollu ċ-ċavetta privata ta’ waħda mill-partijiet minn qabel. Jew issib ċavetta privata fi ftit millisekondi.
Il-hacking ta’ ċavetta privata moderna waħda se jieħu għexieren ta’ snin fuq superkompjuter.

Pass #4 - database pubblika ta 'ċwievet pubbliċi.
Ovvjament, f'din l-istorja kollha hemm opportunità għal attakkant biex joqgħod fuq il-kanal ta 'komunikazzjoni bejn il-klijent u s-server.
Il-klijent jista 'jippretendu li huwa s-server, u s-server jista' jippretendi li huwa l-klijent. U jimita par ċwievet fiż-żewġ direzzjonijiet.
Imbagħad l-attakkant se jara t-traffiku kollu u jkun jista '"jeditja" it-traffiku.
Pereżempju, ibdel l-indirizz fejn tibgħat il-flus jew tikkopja l-password minn servizzi bankarji onlajn jew imblokka kontenut "oġġezzjonabbli".
Biex jiġġieldu attakkanti bħal dawn, ħarġu b'database pubblika b'ċwievet pubbliċi għal kull sit https.
Kull browser "jaf" dwar l-eżistenza ta 'madwar 200 database bħal dawn. Dan jiġi installat minn qabel f'kull browser.
"Għarfien" huwa sostnut minn ċavetta pubblika minn kull ċertifikat. Jiġifieri, il-konnessjoni ma 'kull awtorità ta' ċertifikazzjoni speċifika ma tistax tiġi ffalsifikata.

Issa hemm għarfien sempliċi ta 'kif tuża SSL għal https.
Jekk tuża moħħok, se jkun ċar kif is-servizzi speċjali jistgħu Hack xi ħaġa f'din l-istruttura. Iżda dan se jiswielhom sforzi enormi.
U organizzazzjonijiet iżgħar mill-NSA jew is-CIA - huwa kważi impossibbli li tħassar il-livell eżistenti ta 'protezzjoni, anke għal VIPs.

Ser inżid ukoll dwar konnessjonijiet ssh. M'hemm l-ebda ċwievet pubbliċi hemmhekk, allura x'tista 'tagħmel? Il-kwistjoni hija solvuta b'żewġ modi.
Għażla ssh-by-password:
Matul l-ewwel konnessjoni, il-klijent ssh għandu jwissi li għandna ċavetta pubblika ġdida mis-server ssh.
U waqt konnessjonijiet ulterjuri, jekk tidher it-twissija "ċavetta pubblika ġdida mis-server ssh", dan ikun ifisser li qed jippruvaw jisimgħuk.
Jew inti kont eavesdropped fuq l-ewwel konnessjoni tiegħek, iżda issa int tikkomunika mas-server mingħajr intermedjarji.
Fil-fatt, minħabba l-fatt li l-fatt tal-wiretapping jiġi żvelat faċilment, malajr u mingħajr sforz, dan l-attakk jintuża biss f'każijiet speċjali għal klijent speċifiku.

Għażla ssh-by-key:
Nieħdu flash drive, ikteb iċ-ċavetta privata għas-server ssh fuqha (hemm termini u ħafna sfumaturi importanti għal dan, imma qed nikteb programm edukattiv, mhux struzzjonijiet għall-użu).
Inħallu ċ-ċavetta pubblika fuq il-magna fejn se jkun il-klijent ssh u nżommuha sigrieta wkoll.
Aħna nġibu l-flash drive lis-server, daħħalha, nikkopja ċ-ċavetta privata, u naħarqu l-flash drive u nxerrdu l-irmied mar-riħ (jew għall-inqas ifformattjaha b'żeri).
Dak kollox - wara operazzjoni bħal din se jkun impossibbli li tħassar konnessjoni ssh bħal din. Naturalment, fi żmien 10 snin se jkun possibbli li tara t-traffiku fuq superkompjuter - iżda din hija storja differenti.

Niskuża ruħi għall-offtopic.

Allura issa li t-teorija hija magħrufa. Jien ngħidlek dwar il-fluss tal-ħolqien ta 'ċertifikat SSL.

Bl-użu "openssl genrsa" noħolqu ċavetta privata u "vojt" għaċ-ċavetta pubblika.
Nibagħtu l-"blanks" lil kumpanija ta 'parti terza, li lilha nħallsu madwar $9 għall-aktar ċertifikat sempliċi.

Wara ftit sigħat, nirċievu ċ-ċavetta "pubblika" tagħna u sett ta 'diversi ċwievet pubbliċi minn din il-kumpanija ta' parti terza.

Għaliex għandha kumpannija ta 'parti terza tħallas għar-reġistrazzjoni taċ-ċavetta pubblika tiegħi hija mistoqsija separata, mhux se nqisuha hawn.

Issa huwa ċar x'inhi t-tifsira tal-iskrizzjoni:

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

Il-folder “/etc/ssl” fih il-fajls kollha għall-kwistjonijiet ssl.
domain1.com — isem tad-dominju.
L-2018 hija s-sena tal-ħolqien taċ-ċavetta.
"ċavetta" - isem li l-fajl huwa ċavetta privata.

U t-tifsira ta' dan il-fajl:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com — isem tad-dominju.
L-2018 hija s-sena tal-ħolqien taċ-ċavetta.
b'katina - isem li hemm katina ta 'ċwievet pubbliċi (l-ewwel huwa ċ-ċavetta pubblika tagħna u l-bqija huma dawk li ġew mill-kumpanija li ħarġet iċ-ċavetta pubblika).
crt - isem li hemm ċertifikat lest (ċavetta pubblika bi spjegazzjonijiet tekniċi).

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

Dan is-setting ma jintużax f'dan il-każ, iżda huwa miktub bħala eżempju.

Minħabba li żball f'dan il-parametru se jwassal biex jintbagħat spam mis-server tiegħek (mingħajr ir-rieda tiegħek).

Imbagħad ipprova lil kulħadd li m'intix ħati.

recipient_delimiter = +

Ħafna nies jistgħu ma jafux, iżda dan huwa karattru standard għall-klassifikazzjoni tal-emails, u huwa appoġġjat mill-biċċa l-kbira tas-servers tal-posta moderni.

Per eżempju, jekk għandek mailbox "[protett bl-email]"pprova ibgħat lil"[protett bl-email]"- ara x'jiġri minnha.

inet_protocols = ipv4

Dan jista 'jkun konfuż.

Imma mhux hekk biss. Kull dominju ġdid huwa awtomatikament IPv4 biss, imbagħad nixgħel l-IPv6 għal kull wieħed separatament.

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

Hawnhekk nispeċifikaw li l-posta kollha li tidħol tmur għand il-gamiem.
U r-regoli għad-dominju, kaxxa postali, alias - ħares fid-database.

/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

Issa postfix jaf li huwa possibbli li taċċetta posta għal aktar tibgħat biss wara awtorizzazzjoni bil-gamiem.

Verament ma tantx nifhem għaliex dan huwa duplikat hawn. Diġà speċifikajna dak kollu li huwa meħtieġ fi "virtual_transport".

Iżda s-sistema tal-postfix hija antika ħafna - probabbilment hija throwback mill-antik.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Dan jista 'jiġi kkonfigurat b'mod differenti għal kull server tal-posta.

Għandi 3 servers tal-posta għad-dispożizzjoni tiegħi u dawn is-settings huma differenti ħafna minħabba rekwiżiti ta 'użu differenti.

Ikollok bżonn tikkonfiguraha bir-reqqa - inkella l-ispam se jferragħ lilek, jew saħansitra agħar - l-ispam se jitferra minnek.

# SPF
policyd-spf_time_limit = 3600

Twaqqif għal xi plugin relatat mal-iċċekkjar tal-SPF tal-ittri deħlin.

# 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

L-issettjar huwa li rridu nipprovdu firma DKIM mal-emails kollha ħerġin.

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

Dan huwa dettall ewlieni fir-rotta tal-ittri meta tibgħat ittri minn skripts PHP.

Fajl “/etc/postfix/sdd_transport.pcre”:

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

Fuq ix-xellug hemm espressjonijiet regolari. Fuq il-lemin hemm tikketta li timmarka l-ittra.
Postfix skond it-tikketta - se tqis ftit aktar linji ta 'konfigurazzjoni għal ittra speċifika.

Kif eżattament il-postfix se jiġi kkonfigurat mill-ġdid għal ittra speċifika se jiġi indikat f'“master.cf”.

Linji 4, 5, 6 huma dawk ewlenin. F'isem liema dominju qed nibagħtu l-ittra, inpoġġu din it-tikketta.
Iżda l-qasam "minn" mhux dejjem ikun indikat fl-iskripts PHP fil-kodiċi l-antik. Imbagħad l-isem tal-utent jiġi għas-salvataġġ.

L-artiklu huwa diġà estensiv - ma nixtieqx inkun distratt billi nwaqqaf nginx + fpm.

Fil-qosor, għal kull sit aħna stabbilixxew is-sid tal-utent tal-Linux tiegħu stess. U għalhekk fpm-pool tiegħek.

Fpm-pool juża kwalunkwe verżjoni ta 'php (huwa tajjeb meta fuq l-istess server tista' tuża verżjonijiet differenti ta 'php u anke php.ini differenti għal siti ġirien mingħajr problemi).

Allura, utent speċifiku tal-linux "www-domain2" għandu websajt domain2.com. Dan is-sit għandu kodiċi biex jintbagħtu emails mingħajr ma jispeċifika l-qasam minn.

Għalhekk, anke f'dan il-każ, l-ittri se jintbagħtu b'mod korrett u qatt ma jispiċċaw fl-ispam.

"/etc/postfix/master.cf" tiegħi jidher bħal dan:

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

Il-fajl mhuwiex ipprovdut kollu - diġà huwa kbir ħafna.
Innota biss dak li nbidel.

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}

Dawn huma settings relatati ma 'spamassasin, aktar dwar dan aktar tard.

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

Aħna nħalluk tikkonnettja mas-server tal-posta permezz tal-port 587.
Biex tagħmel dan, trid tidħol.

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

Ippermetti l-kontroll SPF.

apt-get install postfix-policyd-spf-python

Ejja ninstallaw il-pakkett għall-kontrolli SPF hawn fuq.

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

U din hija l-iktar ħaġa interessanti. Din hija l-abbiltà li tibgħat ittri għal dominju speċifiku minn indirizz IPv4/IPv6 speċifiku.

Dan isir għall-fini ta 'rDNS. rDNS huwa l-proċess li jirċievi string mill-indirizz IP.
U għall-posta, din il-karatteristika tintuża biex tikkonferma li l-helo jaqbel eżatt mal-rDNS tal-indirizz minn fejn intbagħtet l-email.

Jekk il-helo ma jaqbilx mad-dominju tal-email li f'isem min intbagħtet l-ittra, jingħataw punti spam.

Helo ma jaqbilx ma' rDNS - jingħataw ħafna punti ta' spam.
Għaldaqstant, kull dominju għandu jkollu l-indirizz IP tiegħu stess.
Għal OVH - fil-console huwa possibbli li tispeċifika rDNS.
Għal tech.ru - il-kwistjoni tiġi solvuta permezz ta 'appoġġ.
Għal AWS, il-kwistjoni tiġi solvuta permezz ta 'appoġġ.
“inet_protocols” u “smtp_bind_address6” - nippermettu l-appoġġ IPv6.
Għall-IPv6 trid tirreġistra wkoll l-rDNS.
"syslog_name" - u dan huwa għall-faċilità tal-qari taz-zkuk.

Ixtri ċertifikati Nirrakkomanda hawn.

Twaqqif tal-link postfix+dovecot hawn.

Issettjar SPF.

============= Ħamiem ==============

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

Twaqqif ta 'mysql, installazzjoni tal-pakketti nfushom.

Fajl "/etc/dovecot/conf.d/10-auth.conf"

disable_plaintext_auth = yes
auth_mechanisms = plain login

L-awtorizzazzjoni hija kkodifikata biss.

Fajl “/etc/dovecot/conf.d/10-mail.conf”

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

Hawnhekk nindikaw il-post tal-ħażna għall-ittri.

Irrid li jinħażnu f'fajls u miġbura skont id-dominju.

Fajl "/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 {
  }
}

Dan huwa l-fajl ewlieni tal-konfigurazzjoni tal-gamiem.
Hawnhekk aħna tiddiżattiva konnessjonijiet mhux assigurati.
U jippermettu konnessjonijiet sikuri.

Fajl "/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
}

It-twaqqif ta' ssl. Aħna nindikaw li ssl huwa meħtieġ.
U ċ-ċertifikat innifsu. U dettall importanti huwa d-direttiva “lokali”. Jindika liema ċertifikat SSL tuża meta tikkonnettja ma' liema IPv4 lokali.

Mill-mod, IPv6 mhux ikkonfigurat hawn, jien ser nikkoreġi din l-ommissjoni aktar tard.
XX.XX.XX.X5 (domain2) - l-ebda ċertifikat. Biex tgħaqqad il-klijenti għandek bżonn tispeċifika domain1.com.
XX.XX.XX.X2 (domain3) - hemm ċertifikat, tista 'tispeċifika domain1.com jew domain3.com biex tgħaqqad il-klijenti.

Fajl "/etc/dovecot/conf.d/15-lda.conf"

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Dan se jkun meħtieġ għal spamassassin fil-futur.

Fajl "/etc/dovecot/conf.d/20-imap.conf"

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Dan huwa plugin antispam. Meħtieġa għat-taħriġ spamassasin fil-ħin tat-trasferiment lejn/mill-folder "Spam".

Fajl "/etc/dovecot/conf.d/20-pop3.conf"

protocol pop3 {
}

Hemm biss tali fajl.

Fajl “/etc/dovecot/conf.d/20-lmtp.conf”

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

Twaqqif ta' lmtp.

Fajl “/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
}

Is-settings tat-taħriġ ta' Spamassasin fil-ħin tat-trasferiment lejn/mill-folder tal-Ispam.

Fajl "/etc/dovecot/conf.d/90-sieve.conf"

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

Fajl li jispeċifika x'għandek tagħmel bl-ittri deħlin.

Fajl "/var/lib/dovecot/sieve/default.sieve"

require ["fileinto", "mailbox"];

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

Trid tikkompila l-fajl: "sievec default.sieve".

Fajl "/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
}

Tispeċifika fajls sql għall-awtorizzazzjoni.
U l-fajl innifsu jintuża bħala metodu ta 'awtorizzazzjoni.

Fajl "/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';

Dan jikkorrispondi għal settings simili għal postfix.

Fajl "/etc/dovecot/dovecot.conf"

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

Fajl tal-konfigurazzjoni prinċipali.
L-importanti huwa li aħna nindikaw hawn - żid protokolli.

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

apt-get install spamassassin spamc

Ejja ninstallaw il-pakketti.

adduser spamd --disabled-login

Ejja nżidu utent f'ismu.

systemctl enable spamassassin.service

Aħna nippermettu servizz ta' spamassassin ta' tagħbija awtomatika mat-tagħbija.

Fajl "/etc/default/spamassassin":

CRON=1

Billi tippermetti l-aġġornament awtomatiku tar-regoli "b'mod awtomatiku".

Fajl “/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

Għandek bżonn toħloq database "sa" f'mysql bl-utent "sa" bil-password "password" (issostitwixxi b'xi ħaġa adegwata).

report_safe - dan jibgħat rapport ta' email spam minflok ittra.
use_bayes huma settings tat-tagħlim tal-magni spamassassin.

Is-settings tal-ispamassassin li fadal intużaw aktar kmieni fl-artiklu.

Issettjar ġenerali "spamassassin".
Dwar iċ-ċaqliq ta' emails ġodda ta' Spam fil-folder IMAP "Spam"..
Dwar taħlita sempliċi ta 'Dovecot + SpamAssassin.
Nirrakkomanda li taqra t-teorija tat-tagħlim tal-ispamassasin meta ċċaqlaq ittri fil-folders tal-imap (u ma nirrakkomandax li tużaha).

============= Appell lill-komunità ==============

Nixtieq ukoll nitfa' idea fil-komunità dwar kif inżid il-livell ta' sigurtà ta' ittri mibgħuta. Peress li jien tant mgħaddsa fil-fond fis-suġġett tal-posta.

Sabiex l-utent jista 'joħloq par ta' ċwievet fuq il-klijent tiegħu (outlook, thunderbird, browser-plugin, ...). Pubbliku u privat. Pubbliku - ibgħat lid-DNS. Privat - ħlief fuq il-klijent. Is-servers tal-posta jkunu jistgħu jużaw ċavetta pubblika biex jibagħtu lil riċevitur speċifiku.

U biex tipproteġi kontra l-ispam b'ittri bħal dawn (iva, is-server tal-posta mhux se jkun jista 'jara l-kontenut) - ser ikollok bżonn tintroduċi 3 regoli:

  1. Firma DKIM reali obbligatorja, SPF obbligatorja, rDNS obbligatorja.
  2. Netwerk newrali dwar is-suġġett ta 'taħriġ kontra l-ispam + database għaliha fuq in-naħa tal-klijent.
  3. L-algoritmu tal-kriptaġġ għandu jkun tali li n-naħa li tibgħat trid tonfoq 100 darba aktar qawwa tas-CPU fuq l-encryption min-naħa li tirċievi.

Minbarra l-ittri pubbliċi, żviluppa ittra ta’ proposta standard “biex tibda korrispondenza sigura.” Wieħed mill-utenti (kaxxa postali) jibgħat ittra b'anness ma' kaxxa postali oħra. L-ittra fiha proposta ta' test biex jinbeda kanal ta' komunikazzjoni sigur għall-korrispondenza u ċ-ċavetta pubblika tas-sid tal-kaxxa postali (b'ċavetta privata fuq in-naħa tal-klijent).

Tista 'anki tagħmel koppja ta' ċwievet speċifikament għal kull korrispondenza. L-utent riċevitur jista 'jaċċetta din l-offerta u jibgħat iċ-ċavetta pubblika tiegħu (magħmula wkoll speċifikament għal din il-korrispondenza). Sussegwentement, l-ewwel utent jibgħat ittra ta 'kontroll tas-servizz (kodifikata biċ-ċavetta pubblika tat-tieni utent) - malli jirċieviha t-tieni utent jista' jqis il-kanal ta 'komunikazzjoni ffurmat affidabbli. Sussegwentement, it-tieni utent jibgħat ittra ta 'kontroll - u mbagħad l-ewwel utent jista' wkoll iqis il-kanal iffurmat sigur.

Biex tiġġieled l-interċettazzjoni taċ-ċwievet fit-triq, il-protokoll għandu jipprovdi għall-possibbiltà li tiġi trażmessa mill-inqas ċavetta pubblika waħda bl-użu ta 'flash drive.

U l-iktar ħaġa importanti hija li kollox jaħdem (il-mistoqsija hija "min se jħallas għaliha?"):
Daħħal ċertifikati postali li jibdew minn $10 għal 3 snin. Li se jippermetti lill-mittent jindika fid-DNS li "ċ-ċwievet pubbliċi tiegħi qegħdin hemmhekk." U jagħtuk l-opportunità li tibda konnessjoni sigura. Fl-istess ħin, l-aċċettazzjoni ta 'konnessjonijiet bħal dawn hija b'xejn.
gmail fl-aħħar qed monetizing lill-utenti tiegħu. Għal $10 għal kull 3 snin - id-dritt li jinħolqu kanali ta 'korrispondenza siguri.

============= Konklużjoni ==============

Biex nittestja l-artiklu kollu, kont se nikri server dedikat għal xahar u nixtri dominju b'ċertifikat SSL.

Iżda ċ-ċirkostanzi tal-ħajja żviluppaw u għalhekk din il-kwistjoni damet tkaxkar għal xahrejn.
U għalhekk, meta erġajt kelli l-ħin liberu, iddeċidejt li nippubblika l-artiklu kif inhu, aktar milli nirriskja li l-pubblikazzjoni tkaxkar għal sena oħra.

Jekk ikun hemm ħafna mistoqsijiet bħal "iżda dan mhux deskritt f'dettall suffiċjenti", allura probabbilment ikun hemm saħħa biex tieħu server dedikat b'dominju ġdid u ċertifikat SSL ġdid u tiddeskrivih f'aktar dettall u, l-aktar importanti, identifika d-dettalji importanti kollha neqsin.

Nixtieq ukoll nikseb feedback dwar ideat dwar ċertifikati postali. Jekk togħġbok l-idea, nipprova nsib is-saħħa biex nikteb abbozz għal rfc.

Meta tikkopja partijiet kbar ta' artiklu, ipprovdi link għal dan l-artikolu.
Meta tittraduċi fi kwalunkwe lingwa oħra, ipprovdi link għal dan l-artikolu.
Se nipprova nittraduċiha għall-Ingliż jien stess u nħalli referenzi inkroċjati.


Sors: www.habr.com

Żid kumment