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”:
============= 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.
============= 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
============= Ħ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.
============= 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:
- Firma DKIM reali obbligatorja, SPF obbligatorja, rDNS obbligatorja.
- Netwerk newrali dwar is-suġġett ta 'taħriġ kontra l-ispam + database għaliha fuq in-naħa tal-klijent.
- 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