See artikkel selgitab, kuidas seadistada kaasaegne postiserver.
Postfix + Dovecot. SPF + DKIM + rDNS. IPv6-ga.
TSL-krĂŒpteerimisega. Toetab mitmeid domeene â koos tĂ”elise SSL-sertifikaadiga.
Sisaldab rÀmpsposti kaitset ja kÔrget rÀmpsposti reitingut teiste postiserverite seas.
Toetab mitut fĂŒĂŒsilist liidest.
OpenVPN, millele pÀÀseb juurde lÀbi IPv4, ja mis vÔimaldab IPv6.
Kui te ei soovi neid tehnoloogiaid Ă”ppida, aga soovite sellist serverit seadistada â siis on see artikkel teie jaoks.
Artiklis puuduvad katsed selgitada iga detaili. Selgitused on keskendunud sellele, mis on konfigureeritud ebatavaliselt vÔi on tarbija seisukohalt oluline.
Motivatsioon postiserveri seadistamiseks â minu pikaajaline unistus. VĂ”ib-olla kĂ”lab see rumalalt, aga IMO on see palju parem, kui unistada oma lemmikmarka uuest autost.
IPv6 seadistamise motivatsioon â kaks. IT-spetsialist peab pidevalt Ă”ppima uusi tehnoloogiaid, et ellu jÀÀda. Soovin anda oma tillukese panuse tsensuuri vastu vĂ”itlemisse.
OpenVPN seadistamise motivatsioon â ainult selleks, et IPv6 töötaks kohalikus masinas.
Mitme fĂŒĂŒsilise liidese seadistamise motivatsioon â mul on serveris ĂŒks 'aeglane, kuid piiramatu' ja teine 'kiire, kuid tasuline'.
Bind'i seadistamise motivatsioon â minu teenusepakkuja pakub ebastabiilset DNS-serverit ning Google'ilgi juhtub aeg-ajalt tĂ”rkeid. Soovin stabiilset DNS-serverit isiklikuks kasutamiseks.
Artikli kirjutamise motivatsioon â mustand valmis 10 kuud tagasi ja olen seda juba kaks korda vaadanud. Kui isegi autor vajab seda regulaarselt, siis on tĂ”enĂ€osus, et teisedki vajavad seda, suur.
Ăhtset lahendust meiliserveri jaoks ei eksisteeri. Kuid pĂŒĂŒan kirjutada 'tehke nii ja kui kĂ”ik töötab nagu peab, visake ĂŒleliigne Ă€ra'.
Server on Colocation teenusepakkuja tech.ru juures. On vĂ”imalik vĂ”rrelda OVH, Hetzner ja AWS-ga. Selle ĂŒlesande lahendamiseks on koostöö tech.ru-ga tunduvalt tĂ”husam.
Serveris on paigaldatud Debian 9.
Serveris on 2 liidest `eno1` ja `eno2`. Esimene on piiramatu, teine kiire vastavalt.
On olemas 3 staatilist IP-aadressi, XX.XX.XX.X0, XX.XX.XX.X1 ja XX.XX.XX.X2 liidesele `eno1` ning XX.XX.XX.X5 liidesele `eno2`.
On olemas XXXX:XXXX:XXXX:XXXX::/64 IPv6 aadresside vahe, mis on mÀÀratud liidesele `eno1` ja sellest XXXX:XXXX:XXXX:XXXX:1:2::/96 minu taotlusel mÀÀratud `eno2`-le.
On olemas 3 domeeni `domain1.com`, `domain2.com`, `domain3.com`. Domeenidel `domain1.com` ja `domain3.com` on SSL-sertifikaadid.
On olemas Google'i konto, millele soovitakse seadistada meiliaadress `vasya.pupkin@domain1.com` (kirjade vastuvÔtt ja saatmine otse Gmaili liidesest).
Peab olema meiliaadress `support@domain2.com`, mille koopiaid soovin nÀha oma Gmailis. Ja harva vÔimalus midagi saata `support@domain2.com` nimel veebiliidese kaudu.
Peab olema meiliaadress `ivanov@domain3.com`, mida kasutab Ivanov oma iPhone'ist.
Saadetavad kirjad peavad vastama kÔikidele kaasaegsetele rÀmpsposti vastastele nÔudmistele.
Peab olema kĂ”rgeim krĂŒpteerimise tase, mis on ette nĂ€htud avalikes vĂ”rkudes.
Peab olema toetatud IPv6 kirjade saatmiseks ja vastuvÔtmiseks.
Peab olema SpamAssassin, mis kunagi ei eemalda kirju, vaid teeb kas tagasiside vÔi jÀtab need vahele vÔi saadab need IMAP kausta «RÀmps».
SpamAssassini automaatĂ”ppe peab olema seadistatud: kui liigutan posti «RĂ€mps» kausta â see Ă”pib seda; kui liigutan posti «RĂ€mps» kaustast vĂ€lja â see Ă”pib seda. SpamAssassini Ă”ppe tulemused peaksid mĂ”jutama kirjade sisenemist «RĂ€mps» kausta.
Php skriptid peavad oskama saata postitusi mis tahes domeeni nimel sellel serveril.
Peab olema openvpn teenus, vÔimalusega kasutada IPv6 klientidel, kellel pole IPv6.
Esmalt tuleb seadistada liidesed ja marsruutmise, sealhulgas IPv6.
SeejĂ€rel tuleb seadistada OpenVPN, mis ĂŒhendub IPv4 kaudu ja annab kliendile staatilise, reaalse IPv6 aadressi. Selle kliendi juures on juurdepÀÀs kĂ”ikidele serveri IPv6 teenustele ja kĂ”igile IPv6 ressurssidele internetis.
SeejÀrel tuleb seadistada Postfix e-kirjade saatmiseks + SPF + DKIM + rDNS ja kÔik muud sarnased pisiasjad.
SeejÀrel tuleb seadistada Dovecot ja seadistada Multidomain.
SeejÀrel tuleb seadistada SpamAssassin ja seadistada Ôpe.
LÔpetuseks installida Bind.
============= Multi-interfaces =============
Liideste seadistamiseks tuleb kirjutada selline rida «/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::/80Nendes seadetes saab kasutada igasuguste serverite puhul tech.ru (vÀikse kokkuleppega toega) ja need hakkavad kohe korralikult toimima.
Kui sul on kogemusi sarnaste seadete tegemisel Hetzneris vĂ”i OVH-is â seal on see teistsugune. Raskem.
eno1 on vÔrkaardi #1 nimi (aeglane, kuid piiramata).
eno2 on vÔrkaardi #2 nimi (kiire, kuid maksustatud).
tun0 on OpenVPN-i virtuaalse vÔrkaardi nimi.
XX.XX.XX.X0 â IPv4 #1 eno1-l.
XX.XX.XX.X1 â IPv4 #2 eno1-l.
XX.XX.XX.X2 â IPv4 #3 eno1-l.
XX.XX.XX.X5 â IPv4 #1 eno2-l.
XX.XX.XX.1 â IPv4 vĂ€rav.
XXXX:XXXX:XXXX:XXXX::/64 â IPv6 kogu serveri jaoks.
XXXX:XXXX:XXXX:XXXX:1:2::/96 â IPv6 eno2 jaoks, kĂ”ik muu siseneb eno1 kaudu.
XXXX:XXXX:XXXX:XXXX::1 â IPv6 vĂ€rav (tuleb mĂ€rkida, et siin saab/peab olema teisiti. Tuleb nĂ€idata IPv6 lĂŒlitust).
dns-nameservers â mÀÀratud 127.0.0.1 (sellepĂ€rast, et bind on kohapeal installitud) ja 213.248.1.6 (see on tech.ru-st).
"table eno1t" ja "table eno2t" â nende route-rule'i mĂ”te on see, et lĂ€bi eno1 sisenenud liiklus lĂ€heks lĂ€bi selle, ning lĂ€bi eno2 sisenenud liiklus lĂ€heks lĂ€bi selle. Samuti lĂ€heks serveri algatusel olevad ĂŒhendused lĂ€bi eno1.
ip route add default via XX.XX.XX.1 table eno1tSelle kĂ€suga mÀÀrame, et kĂ”ik arusaamatud andmed, mis kuuluvad alla mis tahes reegli, millel on mĂ€rgitud âtable eno1tâ -> suunatakse liidesele eno1.
ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1tSelle kÀsuga mÀÀrame, et kÔik serveripoolne liiklus suunatakse liidesele eno1.
ip rule add table eno1t from XX.XX.XX.X0
ip rule add table eno1t to XX.XX.XX.X0Selle kÀsuga mÀÀrame liikluse mÀrgistamise reeglid.
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.X2See plokk mÀÀrab teise IPv4 liidesele eno1.
ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t Selle kÀsuga mÀÀrame OpenVPN klientide marsruudi kohalike IPv4 aadresside juurde, vÀlja arvatud XX.XX.XX.X0.
Miks on see kĂ€sk piisav kĂ”igi IPv4 jaoks â ma ei saa siiani aru.
iface eno1 inet6 static
address XXXX:XXXX:XXXX:XXXX:1:1::/64
gateway XXXX:XXXX:XXXX:XXXX::1Siin mÀÀrame aadressi liidesele. Server kasutab seda kui 'vÀljuvat' aadressi. Seda enam muul viisil ei kasutata.
Miks on â:1:1::â nii keeruline? Et OpenVPN töötaks Ă”igesti ja ainult selleks. RÀÀgime sellest hiljem rohkem.
Teema gateway â see töötab ja ongi kĂ”ik. Kuid Ă”igesti öeldes tuleks siia nĂ€idata IPv6 lĂŒliti, millele server on ĂŒhendatud.
Kuid kuidagi ei tööta IPv6, kui ma seda teen. TÔenÀoliselt on see mingid tech.ru veidrad asjad.
ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACESee on IPv6 aadressi lisamine liidesesse. Kui on vaja sada aadressi â siis tĂ€hendab sada rida selles failis.
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::/80MÀrgistasin kÔikide liideste aadressid ja alamvÔrgud, et oleks selge.
eno1 â peab olema kindlasti «/64» â sest see on kogu meie aadresside grup.
tun0 â alamvĂ”rk peab olema kindlasti suurem kui eno1. Vastasel juhul ei saa seadistada IPv6 gateway'd OpenVPN klientidele.
eno2 â alamvĂ”rk peab olema kindlasti suurem kui tun0. Vastasel juhul ei saa OpenVPN kliendid pÀÀseda kohalikele IPv6 aadressidele.
Selguse huvides valisin alamvÔrgu sammu 16, kuid soovi korral vÔib isegi «1» sammu teha.
Seega 64+16 = 80, ja 80+16 = 96.Veelgi suurema selguse huvides:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY â need on aadressid, mis peaksid olema mÀÀratud konkreetsetele saitidele vĂ”i teenustele liideses eno1.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY â need aadressid, mis peavad olema mÀÀratud konkreetsete veebilehtede vĂ”i teenuste jaoks liidese eno2 peal.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY â need aadressid peavad olema mÀÀratud OpenVPN-ile vĂ”i neid kasutatakse OpenVPN teeninduslike aadressidena.
VÔrgu seadistamiseks peab olema vÔimalik serverit taaskÀivitada.
IPv4 muudatused vĂ”etakse kasutusele kĂ€ivitamisel (kindlasti tuleb see ekraanile ĂŒmber mĂ€hkida â vastasel juhul katkestab see lihtsalt vĂ”rgu serveris):
/etc/init.d/networking restartFaili â/etc/iproute2/rt_tablesâ tuleb lisada lĂ”ppu:
100 eno1t
101 eno2t Ilma selleta ei saa kasutada kohandatud tabeleid failis â/etc/network/interfacesâ.
Numbrid peavad olema unikaalsed ja alla 65535.
IPv6 muudatused on hÔlpsasti muudetavad ilma taaskÀivitamiseta, kuid selleks tuleb vÀhemalt kolme kÀsku Ôppida:
ip -6 addr ...
ip -6 route ...
ip -6 neigh ...Seadistus â/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 = 1Need on minu serveri âsysctlâ seadistused. TĂ€histan olulise.
net.ipv4.ip_forward = 1Ilma selleta OpenVPN ei tööta kuidagi.
net.ipv6.ip_nonlocal_bind = 1IgaĂŒks, kes proovib siduda IPv6 (nĂ€iteks nginx) kohe pĂ€rast liidese kĂ€ivitamist â saab vea, et selline aadress ei ole saadaval.
Selle olukorra vÀltimiseks tehaksegi selline seadistus.
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1Ilma nende seadistusteta OpenVPNi IPv6 liiklus klientidelt ei jÔua maailma.
Teised seadistused kas ei seondu asjaoluga vÔi ma ei mÀleta, miks nad on.
Aga igaks juhuks jÀtan «nagu on».
Selle faili muudatuste kÀivitamiseks ilma serveri taaskÀivitamiseta pead kÀitama kÀsku:
sysctl -pTÀpsemat teavet «table» reeglite kohta:
============= OpenVPN =============
OpenVPN IPv4 ei tööta ilma iptables'ita.
Minu iptables on VPN jaoks sellised:
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 â see on minu kohaliku masina staatiline IPv4 aadress.
10.8.0.0/24 â OpenVPNi IPv4 vĂ”rk. OpenVPNi klientide IPv4 aadressid.
Reeglite jÀrjestus on oluline.
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 DROPSee piirang on, et ainult mina oma staatilise IP-ga saaksin OpenVPNi kasutada.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
-- vÔi --
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADEIPv4 pakettide edastamiseks OpenVPN klientide ja interneti vahel â tuleb kasutada ĂŒhte jĂ€rgmistest kĂ€skudest.
Erinevates olukordades ei sobi ĂŒks versioon.
Minu olukorra jaoks sobivad mÔlemad kÀsud.
Dokumentatsiooni lugedes valisin esimese vÔimaluse, kuna see tarbib vÀhem CPU-d.
Kuna kĂ”ik iptables seadistused peavad pĂ€rast taaskĂ€ivitamist rakenduma â tuleb need kuhugi salvestada.
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6Sellised nimed valiti mitte juhuslikult. Neid kasutab pakett «iptables-persistent».
apt-get install iptables-persistentOpenVPN peamise paketi installimine:
apt-get install openvpn easy-rsaSeame sertifikaatide ƥablooni (paigaldage oma vÀÀrtused):
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
ln -s openssl-1.0.0.cnf openssl.cnfToimetame sertifikaatide ĆĄablooni seadistusi:
mcedit vars...
# Need on vaikimisi vÀÀrtused vÀljade jaoks
# mis pannakse sertifikaati.
# Ărge jĂ€tke ĂŒhtegi neist vĂ€ljadest tĂŒhjaks.
export KEY_COUNTRY="EE"
export KEY_PROVINCE="Harjumaa"
export KEY_CITY="Tallinn"
export KEY_ORG="Omand"
export KEY_EMAIL="admin@domain1.com"
export KEY_OU="VPN"
# X509 teema vÀli
export KEY_NAME="server"
...Loome serveri sertifikaadi:
cd ~/openvpn-ca
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret keys/ta.keyValmistame vÔimaluse luua lÔplikud «client-name.opvn» failid:
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-CBCValmistame skripti, mis ĂŒhendab kĂ”ik failid ĂŒhte opvn faili.
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}/${1}.crt
<(echo -e '</cert>n<key>')
${KEY_DIR}/${1}.key
<(echo -e '</key>n<tls-auth>')
${KEY_DIR}/ta.key
<(echo -e '</tls-auth>')
> ${OUTPUT_DIR}/${1}.ovpnLoo esimene OpenVPN klient:
cd ~/openvpn-ca
source vars
./build-key client-name
cd ~/client-configs
./make_config.sh client-nameFail «~/client-configs/files/client-name.ovpn» saadetakse kliendi seadmesse.
iOS klientide jaoks on vaja teha nipp:
TÀhe «tls-auth» sisu peab olema ilma kommentaarideta.
Samuti tuleb panna «key-direction 1» kohe enne tÀhte «tls-auth».
Seame ĂŒles OpenVPN serveri konfiguratsiooni:
cd ~/openvpn-ca/keys
cp ca.crt ca.key server.crt server.key ta.key /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-CBCSee on vajalik, et mÀÀrata iga kliendi jaoks staatiline aadress (mitte kohustuslik, kuid mina kasutan):
# Client config dir
client-config-dir /etc/openvpn/ccdKÔige keerukam ja oluline detail.
Kahjuks OpenVPN ei oska veel automaatselt konfigureerida IPv6 gateway'd klientide jaoks.
Peab selle iga kliendi jaoks "kÀe kaudu" edasi laadima.
# 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"Fail «/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 eno1Fail «/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 eno1MÔlemad skriptid kasutavad faili «/etc/openvpn/variables»:
# Subnet
prefix=XXXX:XXXX:XXXX:XXXX:2:
# netmask
prefixlen=112Miks see niimoodi kirjas on â raske meenutada.
Praegu tundub imelik, et netmask = 112 (siin peaks olema 96).
Ja prefix on kummaline, ei vasta vÔrgule tun0.
Aga noh, jÀtan «nagu on».
cipher DES-EDE3-CBCSee on maitse kĂŒsimus â valisin sellise krĂŒptimise meetodi.
============= Postfix =============
Peamiste pakettide installimine:
apt-get install postfixInstallimisel valida «internet-site».
Minu «/etc/postfix/main.cf» nÀeb vÀlja selline:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = ei
# .domain'i lisamine on MUA ĂŒlesanne.
append_dot_mydomain = ei
readme_directory = ei
# Vaata http://www.postfix.org/COMPATIBILITY_README.html â vaikimisi 2 uutel installatsioonidel.
compatibility_level = 2
# TLS parameetrid
smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key
smtpd_use_tls=jah
smtpd_tls_auth_only = jah
smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1
smtp_tls_security_level = vÔib olla
smtp_tls_ciphers = export
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_loglevel = 1
smtpd_relay_restrictions = luba_mynetworks luba_sasl_authenticated edasilĂŒkkamine_unauth_sihtkoht
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 = kÔik
inet_protocols = ipv4
internal_mail_filter_classes = bounce
# SalvestustĂŒĂŒp
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 seaded
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = jah
smtpd_recipient_restrictions =
luba_sasl_authenticated,
luba_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 =
luba_mynetworks,
luba_sasl_authenticated,
reject_non_fqdn_helo_hostname,
luba
# SPF
policyd-spf_time_limit = 3600
# OpenDKIM
milter_default_action = aktsepteeri
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock
# IP-aadress per domeen
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcreRÀÀgime selle konfi ĂŒksikasjadest.
smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.keyHabr-i kogukonna arvamus on, et see plokk sisaldab `valeinformatsiooni ja valevÀiteid`.Alles kaheksa aastat pÀrast oma karjÀÀri algust sain ma aru, kuidas SSL töötab.
SeetĂ”ttu julgen ma kirjeldada, kuidas SSL-i kasutada (ilma kĂŒsimustele âKuidas see töötab?â ja âMiks see töötab?â vastamata).
Kaasaegse krĂŒptimise alus on kahe vĂ”tme koodi loomine (kaks vĂ€ga pikka sĂŒmbolite jada).
Ăks âvĂ”tiâ on privaatne, teine âavalikâ. Privaatset vĂ”tit hoia kindlasti salajas. Avalikku vĂ”tme jagame kĂ”igile soovijatele.
Avaliku vĂ”tmega saab tekstijada krĂŒptida nii, et seda saab dekrĂŒpteerida ainult privaatse vĂ”tme omanik.
Noh, see on kogu tehnoloogia alus.Samm nr 1 â https saidid.
Veebibrauser, kui ta ĂŒhendub saidiga, saab veebiserverilt teada, et sait on https ja seetĂ”ttu kĂŒsib ta avalikku vĂ”tit.
Veebiserver edastab avaliku vĂ”tme. Brauser, kasutades avalikku vĂ”tme, krĂŒptib http-pĂ€ringu ja saadab selle.
HTTP-pĂ€ringut saab lugeda ainult see, kellel on erasĂŒmbol, st ainult server, millele pĂ€ring tehakse.
HTTP-pĂ€ring sisaldab vĂ€hemalt URI-d. Seega, kui riigis ĂŒritatakse ligipÀÀsu piirata mitte kogu saidile, vaid konkreetsele lehele â siis on see HTTPS-saitide puhul vĂ”imatu.Samm â2 â krĂŒpteeritud vastus.
Veebiserver annab vastuse, mille saavad teel kergesti lugeda.
Lahendus on ÀÀrmiselt lihtne â brauser genereerib endas kohalikult analoogse paarikese erasĂŒmbolist ja avalikust vĂ”tmes igale HTTPS-saidile.
Koos saidi avaliku vÔtme pÀringuga saadetakse tema kohalik avalik vÔti.
Veebiserver mĂ€letab seda ja HTTP-vastust edastades krĂŒpteerib selle konkreetse kliendi avaliku vĂ”tmega.
NĂŒĂŒd saab HTTP-vastust dekrĂŒpteerida ainult brauseri kliendi erasĂŒmbooli omanik (st klient ise).Samm â3 â kaitstud ĂŒhenduse loomine avalikul kanalil.
NĂ€ites â2 on haavatavus â pole midagi, mis takistaks headel kavatsustel HTTP-pĂ€ringu pealtkuulamist ja avaliku vĂ”tme teabe muutmist.
Seega saab vahendaja suurepÀraselt nÀha kogu saadetud ja saadud sÔnumite sisu, kuni sidekanal vahetub.
Sellega toimetulek on ÀÀrmiselt lihtne â piisab, kui saata brauseri avalik vĂ”ti sĂ”numina, mis on krĂŒpteeritud veebiserveri avaliku vĂ”tmega.
Veebiserver saadab siis esmalt vastuse, mis ĂŒtleb: "sinu avalik vĂ”ti on selline" ja krĂŒpteerib selle sĂ”numi sama avaliku vĂ”tme abil.
Brauser vaatab vastust â kui saabub sĂ”num "sinu avalik vĂ”ti on selline" â siis on see 100% garantii, et see sidekanal on turvaline.
Kui turvaline see on?
Sellise turvalise sidekanali loomine toimub speediga ping*2. NĂ€iteks 20 ms.
Kurjategijal peab olema kas eelnevalt ĂŒhe osapoole privaatvĂ”ti vĂ”i ta peab suutma privaatvĂ”tme mĂ”ne millisekundi jooksul leida.
Ăhe kaasaegse privaatvĂ”tme purustamine vĂ”taks superarvutis kĂŒmneid aastaid.Samm â4 â avalik andmebaas avalike vĂ”tmete jaoks.
On selge, et kogu selle loo kÀigus on vÔimalus kurjategijale, kes asub sidekanali vahel kliendi ja serveri vahel.
Kliendil on vÔimalus esindada serverit ja serveril esindada klienti. Samuti on vÔimalik emuleerida paari vÔtmeid mÔlemas suunas.
Siis nĂ€eb rĂŒndaja kogu liiklust ja tal on vĂ”imalus seda 'muuta'.
NÀiteks muuta aadressi, kuhu raha saata, vÔi kopeerida parool online-pangast vÔi blokeerida 'ebasobiv' sisu.
Selliste rĂŒndajate vastu mĂ”eldi vĂ€lja avalik ANDMEBAAS, kus on iga https saidi jaoks avalikud vĂ”tmed.
Iga brauser 'teab' umbes 200 sellise ANDMEBAASI olemasolust. See on iga brauserisse eelnevalt seadistatud.
See 'teadmise' tase on kinnitatud iga sertifikaadi avaliku vĂ”tmega. See tĂ€hendab, et ĂŒhenduse kuvamine iga konkreetse sertifitseerimiskeskusega ei ole vĂ”imalik.NĂŒĂŒd on lihtne arusaam SSL-i kasutamisest https-i jaoks.
Kui mÔistetakse, siis saab selgeks, kuidas eriteenistused vÔivad selles struktuuris midagi hÀkkida. Kuid see nÔuab neilt tohutult pingutust.
Organisatsioonidele, sealhulgas NSA-le vĂ”i CIA-le, on olemasoleva taseme kaitse lĂ€bimurre praktiliselt vĂ”imatu, isegi VIP-iden.Lisaks mainin ssh-ĂŒhendusi. Seal ei ole avalikke vĂ”tmeid, kuidas siis olla. KĂŒsimus lahendatakse kahel viisil.
SSH-parooli variant:
Esimese ĂŒhenduse korral peab ssh-kliendi teadma, et meil on uus avalik vĂ”ti ssh-serverilt.
Ja edasiste ĂŒhenduste puhul, kui ilmneb hoiatus 'uus avalik vĂ”ti ssh-serverilt' â tĂ€hendab see, et keegi ĂŒritab teid nuhkida.
VĂ”i esimesel ĂŒhendusel vĂ”idi teid nuhkida ja nĂŒĂŒd suhtlete serveriga ilma vahendajateta.
JĂ”hkralt seda, et nuhkimise fakt paljastub kiiresti ja lihtsalt â seda rĂŒnnakut kasutatakse ainult erijuhtudel konkreetse kliendi suhtes.SSH-vĂ”ti variant:
VĂ”tame mĂ€lupulga, salvestame sinna privaatvĂ”tme ssh-serverile (selle jaoks on terminid ja palju olulisi nĂŒanse, kuid ma kirjutan hariduse tutvustamiseks, mitte kasutusjuhendi jaoks).
Avalik vÔti jÀÀb masinale, kus on ssh-kliendi ning seda hoitakse samuti saladuses.
Viime mÀlupulga serverisse, sisestame, kopeerime privaatvÔtme, seejÀrel pÔletame mÀlupulga ja hajutame tuha tuule kÀtte (vÔi vÀhemalt vormindame selle nullidega).
Nii see lĂ€heb â pĂ€rast sellist operatsiooni on sellise ssh ĂŒhenduse hĂ€kkimine vĂ”imatu. Muidugi, kĂŒmne aasta pĂ€rast vĂ”ib superarvutis liiklust vaadata â aga see on eraldi lugu.Palun vabandust offtopiku pĂ€rast.
Nii et nĂŒĂŒd, kui teooria on teada. RÀÀgin ssl sertifikaadi loomise protsessist.
Kasutades "openssl genrsa", loome privaatvÔtme ja "ettevalmistused" avaliku vÔtme jaoks.
"ettevalmistusi" saadame kolmandale osapoolele, kellele maksame umbes 9 dollarit kÔige lihtsamate sertifikaatide eest.
Paari tunni pÀrast saame sealtpoolt ettevÔttelt meie "avaliku" vÔtme ja veel hulga teisi avalikke vÔtmeid.
Miks maksta kolmandale osapoolele minu avaliku vĂ”tme vormistamise eest â see on eraldi kĂŒsimus, seda ei aruta.
NĂŒĂŒd on selge, mis on selle kirjutise mĂ”te:
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key Katalooge "/etc/ssl" on kogutud kÔik ssl-iga seotud failid.
domain1.com â domeeninimi.
2018 â vĂ”tmete loomise aasta.
"key" â tĂ€histus, et fail on privaatvĂ”ti.
Ja selle faili mÔte:
smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com â domeeninimi.
2018 â vĂ”tmete loomise aasta.
chained â tĂ€his, et siin on avalike vĂ”tmete ahel (esimene â meie avalik ja ĂŒlejÀÀnud â need, mis tulid ettevĂ”ttelt, kes vormistas avaliku vĂ”tme).
crt â tĂ€his, et siin on valmis sertifikaat (avalik vĂ”ti koos tehniliste selgitustega).
smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1See seade ei ole antud juhul kasutusel, kuid on kirjutatud nÀitena.
Sest vea esinemine selles parameetris toob kaasa teie serveri saatmise spÀmmivisi, ilma et te ise sooviksite.
Siis tĂ”estage kĂ”igile, et te ei ole sĂŒĂŒdi.
recipient_delimiter = +VĂ”ib-olla paljud ei tea, et see on standardne sĂŒmbol e-kirjade jĂ€rjestamiseks ja seda toetavad enamik kaasaegseid meiliserversid.
NĂ€iteks kui teil on meilikoht «username@gmail.com», proovige saata «username+spam@gmail.com» â vaadake, mis juhtub.
inet_protocols = ipv4VÔib-olla see tekitab segadust.
Aga see ei ole lihtsalt niisama. Iga uus domeen â vaikimisi ainult IPv4, hiljem lĂŒlitan IPv6 sisse igaĂŒhe jaoks eraldi.
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 Siin mÀÀrame, et kogu sissetulev postkiri lÀheb dovecot'i.
Domaani, postkastide, alias'e reeglid vaata andmebaasis.
/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 = yesNĂŒĂŒd teab postfix, et postkiri edastamiseks saab vastu vĂ”tta ainult siis, kui on autoriseeritud dovecot'i kaudu.
Ma tÔesti ei saa aru, miks seda siin duplitseerida. Oleme ju juba 'virtual_transport' sees kÔik vajalikud mÀÀranud.
Aga postfix on vĂ€ga vana sĂŒsteem - ilmselt on need jĂ€relevalved vanade aegade jaoks.
smtpd_recipient_restrictions =
...
smtpd_helo_restrictions =
...
smtpd_client_restrictions =
...Iga postiserveri seadistamine on eriline.
Minu kÀsutuses on kolme postiserverit ja need seaded erinevad suuresti, kuna kasutusnÔuded on erinevad.
Seadistamine tuleb teha ettevaatlikult - vastasel juhul voolab teie poole rÀmpspost vÔi veel hullemini - voolab rÀmpspost teie poolt.
# SPF
policyd-spf_time_limit = 3600Seadistamine, mis on seotud saabuvate kirjade SPF kontrollimise plugina.
# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sockSeadistamine, et kÔik vÀlja minevad kirjad peavad olema DKIM allkirjastatud.
# IP address per domain
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcreSee on oluline komponent meilide marsruutimisel, kui neid saadetakse PHP skriptidest.
Fail â/etc/postfix/sdd_transport.pcreâ:
/^www-domain1@domain1.com$/ domain1:
/^www-domain2@domain1.com$/ domain2:
/^www-domain3@domain1.com$/ domain3:
/@domain1.com$/ domain1:
/@domain2.com$/ domain2:
/@domain3.com$/ domain3:Vasakul â regulaaravaldised. Paremal â silt, millega kiri mĂ€rgistatakse.
Postfix arvestab sildiga â see vĂ”tab arvesse veel mitmeid konfigureerimisjooni konkreetse kirja jaoks.Kuidas tĂ€pselt postfixi konkreetse kirja jaoks ĂŒmber konfigureeritakse â see on mĂ€rgitud failis âmaster.cfâ.
Read 4, 5, 6 â need on peamised. Selle domeeni nimel, millelt me kirja saadame â selline silt me paneme.
Kuid mitte alati PHP skriptides vanades koodides on vĂ€lja âfromâ mÀÀratud. Sel juhul tuleb appi kasutajanimi.Artikkel on juba ulatuslik â ei tahaks, et rĂ”hk lĂ€heks nginx+fpm seadistamisele.
LĂŒhidalt öeldes â mÀÀrame igale saidile oma linux-kasutaja omaniku. Ja vastavalt sellele oma fpm-pooli.
Fpm-pool kasutab ĂŒkskĂ”ik millist PHP versiooni (see on suurepĂ€rane, kui ĂŒhel serveril saab probleemideta kasutada erinevaid PHP versioone ja isegi erinevat php.ini-d).
Nii et konkreetsel linux-kasutajal âwww-domain2â on veebisait domain2.com. Sellel saidil on kood, mis saadab kirju ilma âfromâ vĂ€lja mÀÀramata.
Isegi sellisel juhul saadetakse kirjad korrektselt ja need ei satu kunagi spÀmi.
Minu â/etc/postfix/master.cfâ nĂ€eb vĂ€lja selline:
...
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 Fail ei ole tĂ€ielik â see on juba vĂ€ga suur.
TÔin vÀlja ainult muudetud osad.
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}Need on spamassassiniga seotud seaded, millest rÀÀgin hiljem.
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 Me lubame liituda meiliserveriga porti 587 kaudu.
Selleks tuleb kindlasti autentida.
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spfLĂŒlitame sisse SPF kontrolli.
apt-get install postfix-policyd-spf-pythonPaigaldame ĂŒlaltoodud SPF kontrollide paketi.
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-domain1Ja see on kÔige huvitavam. See vÔimalus saata kirju kindla domeeni ja konkreetse IPv4/IPv6 aadressiga.
Seda tehakse rDNS-i pÀrast. rDNS on stringi saamine IP-aadressi jÀrgi.
Ja e-kirjade puhul kasutatakse seda vÔimalust, et kinnitada, et helo vastab tÔepoolest selle aadressi rDNS-ile, kust e-kiri saadeti.Kui helo ei vasta e-kirja saatja domeenile, siis kogutakse spÀmmi punkte.
Helo ei vasta rDNS-ile â kogutakse palju spĂ€mmi punkte.
Seega peab iga domeeni jaoks olema oma IP-aadress.
OVH jaoks on kontol vÔimalik mÀÀrata rDNS.
Tech.ru puhul lahendab kĂŒsimusi tugi.
AWS puhul lahendab kĂŒsimusi tugi.
«inet_protocols» ja «smtp_bind_address6» â aktiveerime IPv6 toe.
IPv6 puhul tuleb samuti mÀÀrata rDNS.
«syslog_name» â mugavuse huvides logide lugemiseks.
Osta sertifikaate .
.
============= Dovecot =============
apt-get install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-antispamMySQL seadistamine, installime paketid ise.
Fail «/etc/dovecot/conf.d/10-auth.conf»
disable_plaintext_auth = yes
auth_mechanisms = plain loginAinult krĂŒpteeritud vormis autoriseerimine.
Fail «/etc/dovecot/conf.d/10-mail.conf»
mail_location = maildir:/var/mail/vhosts/%d/%nSiin mÀÀrame kirjade hoidmise koha.
Soovin, et need salvestataks failidesse ja oleksid rĂŒhmitatud domeenide kaupa.
Fail «/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 {
}
} See on dovecot'i peamine konfiguratsioonifail.
Siin lĂŒlitame vĂ€lja kaitsetud ĂŒhendused.
Ja aktiveerime kaitstud ĂŒhendused.
Fail «/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
}Seadistame ssl-i. MÀÀrame, et ssl on kohustuslik.
Ja sertifikaat ise. Oluline detail on direktiiv «local». See mÀÀrab, millist ssl-sertifikaati kasutada, kui ĂŒhenduse loomisel on tegu kohaliku IPv4-iga.Muide, IPv6 pole siin korraldatud, parandan selle puuduse kunagi hiljem.
XX.XX.XX.X5 (domain2) â sertifika puudub. Klientide ĂŒhendamiseks tuleb mĂ€rkida domain1.com.
XX.XX.XX.X2 (domain3) â sertifikaat on olemas, klientide ĂŒhendamiseks vĂ”ib mĂ€rkida domain1.com vĂ”i domain3.com.
Fail «/etc/dovecot/conf.d/15-lda.conf»
protocol lda {
mail_plugins = $mail_plugins sieve
}Seda on hiljem vajalik spamassassini jaoks.
Fail «/etc/dovecot/conf.d/20-imap.conf»
protocol imap {
mail_plugins = $mail_plugins antispam
}See on antispam plugin. Vajalik spamassassini Ôpetamiseks, kui liikuda kaustadesse «Spam».
Fail «/etc/dovecot/conf.d/20-pop3.conf»
protocol pop3 {
}Lihtsalt selline fail on olemas.
Fail «/etc/dovecot/conf.d/20-lmtp.conf»
protocol lmtp {
mail_plugins = $mail_plugins sieve
postmaster_address = admin@domain1.com
}lmpt seadistus.
Fail «/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
}spamassassini seadistused, kui liikuda kaustadesse «Spam».
Fail «/etc/dovecot/conf.d/90-sieve.conf»
plugin {
sieve = ~/dovecot.sieve
sieve_dir = ~/sieve
sieve_after = /var/lib/dovecot/sieve/default.sieve
}Fail, mis mÀÀrab, mida teha saabuvate kirjadega.
Fail «/var/lib/dovecot/sieve/default.sieve»
require ["fileinto", "mailbox"];
if header :contains "X-Spam-Flag" "YES" {
fileinto :create "Spam";
}Fail tuleb kompileerida: «sievec default.sieve».
Fail «/etc/dovecot/conf.d/auth-sql.conf.ext»
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
} SQL-failide mÀÀramine autoriseerimiseks.
Ja fail ise â autoriseerimise viis.
Fail «/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';See vastab Postfixi sarnastele seadistustele.
Fail «/etc/dovecot/dovecot.conf»
protocols = imap lmtp pop3
listen = *, ::
dict {
}
!include conf.d/*.conf
!include_try local.conf PÔhikonfiguratsiooni fail.
Oluline on mÀrkida, et siin mÀÀrame lisatud protokollid.
============= SpamAssassin =============
apt-get install spamassassin spamcPaigaldame paketid.
adduser spamd --disabled-loginLisame kasutaja, kelle nimel tegutseda.
systemctl enable spamassassin.serviceLĂŒlitame spamassassini teenuse automaatlaadimise sisse.
Fail «/etc/default/spamassassin»:
CRON=1LĂŒlitame vaikimisi sisse reeglite automaatse vĂ€rskendamise.
Fail «/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 passwordTuleb luua MySQL andmebaas «sa» kasutajaga «sa» ja salajase sÔnaga «password» (asu Àkki midagi mÔistlikumat).
report_safe â selle asemel, et e-kiri saadetaks, saadetakse spĂ€mmiaruande.
use_bayes â see on spamassassini masinĂ”ppe seadistus.
ĂlejÀÀnud spamassassini seadistused rakendati varem artiklis.
.
.
.
.
============= Kutsumine kogukonda =============
Tahaksin veel jagada ideed kogukonnale, kuidas suurendada edasi saadetud e-kirjade turvalisust. Kuna ma olen sel teemal sĂŒgavalt sĂŒvenenud.
Et kasutaja saaks enda kliendis (outlook, thunderbird, brauseri-plugins, ...) luua paar vĂ”tmet. Avalik ja privaatne. Avalik â saata DNS-i. Privaatne â hoida kliendil. Postiserverid oskaksid rakendada avalikku vĂ”tit, et saata konkreetsele aadressile.
Ja nende e-kirjade puhul spĂ€mmi kaitsmiseks (jah, postiserver ei saa sisu vaadata) â tuleb kehtestada kolm reeglit:
- Kohustuslik tÔeline DKIM allkiri, kohustuslik SPF, kohustuslik rDNS.
- MasinÔppe mudel antispÀmmi teemal + andmebaas, mis asub kliendi poolel.
- KrĂŒpteerimisalgoritm peaks olema selline, et saatva poole CPU ressursid peavad olema 100 korda suuremad, kui vastuvĂ”tva poole omad.
Lisaks avalikele kirjadele â töötada vĂ€lja standardiseeritud ettepanekukiri "alustada kaitstud kirjavahetust". Ăks kasutaja (meiliaadress) saadab teisele meiliaadressile kirja koos manusega. Kirjas on tekst ettepanekuga alustada kaitstud ĂŒhendust kirjavahetuseks ja saatja meiliaadressi avalik vĂ”ti (samal ajal kui privaatvĂ”ti on kliendi poolel).
Isegi paar vĂ”tmeid saab iga vestluse jaoks eraldi luua. VastuvĂ”tja kasutaja vĂ”ib selle pakkumise aktsepteerida ja saata oma avaliku vĂ”tme (mis ka on selle vestluse jaoks eraldi loodud). Siis saadab esimene kasutaja teenuslikku kontrollkirja (teise kasutaja avaliku vĂ”tmega krĂŒpteeritud) â mille saadud korral vĂ”ib teine kasutaja pidada loodud suhtlusteed usaldusvÀÀrseks. Edasi saadab teine kasutaja kontrollkirja â ja siis vĂ”ib ka esimene kasutaja pidada loodud kanali kaitstuks.
VĂ”tmete pealesaatmise pealtkatsumise vastu vĂ”itlemiseks peab protokollis olema ette nĂ€htud vĂ€hemalt ĂŒhe avaliku vĂ”tme edastamise vĂ”imalus flash-diskiga.
Ja kĂ”ige tĂ€htsam on, et kĂ”ik see toimiks (kĂŒsimus «kes selle eest maksab?»):
Sisse viia postiteenuse sertifikaadid, mille hind algab 10$ kolme aasta eest. Need vĂ”imaldavad saatjal dns-is mĂ€rkida, et «mu avalikud vĂ”tmed on seal». Ja need annavad vĂ”imaluse alustada kaitstud ĂŒhendust. Samuti â selliste ĂŒhenduste vastuvĂ”tt on tasuta.
gmail lĂ”puks monetiseerib oma kasutajaid. 10 $ kolme aasta eest â Ă”igus luua kaitstud suhtluskanaale.
============= KokkuvÔte =============
Kogu artikli testimiseks plaanisin ĂŒĂŒrida dedikeeritud serveri kuuks ja osta domeen koos ssl-sertifikaadiga.
Kuid elutingimuste tĂ”ttu venis see kĂŒsimus kahe kuu vĂ”rra.
Ja kui mul taas vaba aega tekkis â otsustasin artikli sellisena avaldada, mitte riskida sellega, et avaldamine venib veel aastaks.
Kui tuleb piisavalt palju kĂŒsimusi nagu âaga siin ei ole piisavalt detailselt kirjeldatudâ â siis ehk leian jĂ”u vĂ”tta dedikeeritud server uue domeeniga ja uue SSL-sertifikaadiga ning veelgi ĂŒksikasjalikumalt kirjeldada ja mis peamine â tuvastada kĂ”ik tĂ€htsad ĂŒksikasjad.
Samuti sooviksin kuulda tagasisidet postikinnitussertifikaatide idee kohta. Kui idee meeldib â pĂŒĂŒan leida jĂ”u kirjutada mustand rfc jaoks.
Suuri artikli osi kopeerides â nĂ€ita viidet sellele artiklile.
Iga teise keelde tĂ”lkides â nĂ€ita viidet sellele artiklile.
Inglise keeles pĂŒĂŒan ise tĂ”lkida ja jĂ€tan ristviidatud lingid.
Allikas: habr.com
