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

Þessi grein er um hvernig á að setja upp nútíma póstþjón.
Postfix + Dovecot. SPF + DKIM + rDNS. Með IPv6.
Með TSL dulkóðun. Með stuðningi fyrir mörg lén - hluti með alvöru SSL vottorði.
Með ruslpóstvörn og háu spameinkunn frá öðrum póstþjónum.
Styður mörg líkamleg viðmót.
Með OpenVPN, tengingin við það er í gegnum IPv4, og sem veitir IPv6.

Ef þú vilt ekki læra alla þessa tækni, en vilt setja upp slíkan netþjón, þá er þessi grein fyrir þig.

Greinin gerir enga tilraun til að útskýra hvert smáatriði. Skýringin fer í það sem er ekki stillt sem staðlað eða er mikilvægt frá sjónarhóli neytenda.

Hvatinn til að setja upp póstþjón hefur lengi verið draumur minn. Þetta hljómar kannski heimskulega, en IMHO, það er miklu betra en að dreyma um nýjan bíl frá uppáhalds vörumerkinu þínu.

Það eru tvær ástæður fyrir því að setja upp IPv6. Sérfræðingur í upplýsingatækni þarf stöðugt að læra nýja tækni til að lifa af. Mig langar að leggja mitt af mörkum til baráttunnar gegn ritskoðun.

Hvatinn til að setja upp OpenVPN er bara að fá IPv6 til að virka á staðbundinni vél.
Ástæðan fyrir því að setja upp nokkur líkamleg viðmót er sú að á netþjóninum mínum er ég með eitt viðmót „hægt en ótakmarkað“ og annað „hratt en með gjaldskrá“.

Ástæðan fyrir því að setja upp Bind stillingar er að ISP minn veitir óstöðugan DNS netþjón og google mistekst líka stundum. Ég vil hafa stöðugan DNS netþjón til einkanota.

Hvatning til að skrifa grein - ég skrifaði drög fyrir 10 mánuðum síðan, og ég hef þegar skoðað það tvisvar. Jafnvel þótt höfundur þurfi þess reglulega eru miklar líkur á að aðrir þurfi þess líka.

Það er engin alhliða lausn fyrir póstþjón. En ég mun reyna að skrifa eitthvað eins og "gerðu þetta og þá, þegar allt virkar eins og það á að gera, hentu aukadótinu út."

Fyrirtækið tech.ru er með Colocation netþjón. Það er hægt að bera saman við OVH, Hetzner, AWS. Til að leysa þetta vandamál verður samstarf við tech.ru mun skilvirkara.

Debian 9 er sett upp á þjóninum.

Miðlarinn er með 2 tengi 'eno1' og 'eno2'. Sú fyrri er ótakmörkuð og sú seinni er hröð, í sömu röð.

Það eru 3 fastar IP vistföng, XX.XX.XX.X0 og XX.XX.XX.X1 og XX.XX.XX.X2 á „eno1“ viðmótinu og XX.XX.XX.X5 á „eno2“ viðmótinu .

Í boði XXXX:XXXX:XXXX:XXXX::/64 hópur af IPv6 vistföngum sem eru úthlutað á `eno1` viðmótið og úr því XXXX:XXXX:XXXX:XXXX:1:2::/96 var úthlutað til `eno2` að beiðni minni.

Það eru 3 lén `domain1.com`, `domain2.com`, `domain3.com`. Það er SSL vottorð fyrir `domain1.com` og `domain3.com`.

Ég er með Google reikning sem ég vil tengja pósthólfið mitt við[netvarið]` (móttaka póst og senda póst beint úr gmail viðmótinu).
Það verður að vera pósthólf`[netvarið]`, afrit af tölvupóstinum sem ég vil sjá í gmailinu mínu. Og það er sjaldgæft að geta sent eitthvað fyrir hönd `[netvarið]` í gegnum vefviðmótið.

Það verður að vera pósthólf`[netvarið]`, sem Ivanov mun nota af iPhone sínum.

Sendir tölvupóstar verða að uppfylla allar nútímakröfur um ruslpóst.
Það verður að vera hæsta stigi dulkóðunar sem veitt er í almennum netum.
Það ætti að vera IPv6 stuðningur fyrir bæði sendingu og móttöku bréfa.
Það ætti að vera til SpamAssassin sem mun aldrei eyða tölvupósti. Og það mun annað hvort hoppa eða sleppa eða senda í IMAP „Spam“ möppuna.
SpamAssassin sjálfvirkt nám verður að vera stillt: ef ég flyt bréf í ruslpóstmöppuna mun það læra af þessu; ef ég flyt bréf úr ruslpóstmöppunni lærir það af þessu. Niðurstöður SpamAssassin þjálfunar ættu að hafa áhrif á það hvort bréfið endi í ruslpóstmöppunni.
PHP forskriftir verða að geta sent póst fyrir hönd hvaða léns sem er á tilteknum netþjóni.
Það ætti að vera openvpn þjónusta, með getu til að nota IPv6 á biðlara sem er ekki með IPv6.

Fyrst þarftu að stilla viðmót og leið, þar á meðal IPv6.
Þá þarftu að stilla OpenVPN, sem mun tengjast í gegnum IPv4 og veita viðskiptavinum kyrrstöðu-raunverulegt IPv6 vistfang. Þessi viðskiptavinur mun hafa aðgang að allri IPv6 þjónustu á þjóninum og aðgang að hvaða IPv6 auðlindum sem er á internetinu.
Þá þarftu að stilla Postfix til að senda bréf + SPF + DKIM + rDNS og aðra svipaða smáhluti.
Þá þarftu að stilla Dovecot og stilla Multidomain.
Þá þarftu að stilla SpamAssassin og stilla þjálfun.
Að lokum skaltu setja upp Bind.

============= Fjölviðmót ==============

Til að stilla viðmót þarftu að skrifa þetta í "/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

Þessar stillingar er hægt að nota á hvaða netþjóni sem er í tech.ru (með smá samhæfingu við stuðning) og það mun strax virka eins og það ætti að gera.

Ef þú hefur reynslu af því að setja upp svipaða hluti fyrir Hetzner, OVH, þá er það öðruvísi þar. Erfiðara.

eno1 er nafn netkorts #1 (hægt en ótakmarkað).
eno2 er nafn netkorts #2 (hratt, en með gjaldskrá).
tun0 er nafn sýndarnetkortsins frá OpenVPN.
XX.XX.XX.X0 - IPv4 #1 á eno1.
XX.XX.XX.X1 - IPv4 #2 á eno1.
XX.XX.XX.X2 - IPv4 #3 á eno1.
XX.XX.XX.X5 - IPv4 #1 á eno2.
XX.XX.XX.1 - IPv4 gátt.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 fyrir allan netþjóninn.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 fyrir eno2, allt annað að utan fer í eno1.
XXXX:XXXX:XXXX:XXXX::1 — IPv6 gátt (það er athyglisvert að þetta er hægt/ætti að gera öðruvísi. Tilgreindu IPv6 rofann).
dns-nafnaþjónar - 127.0.0.1 er gefið til kynna (vegna þess að bindi er uppsett á staðnum) og 213.248.1.6 (þetta er frá tech.ru).

„tafla eno1t“ og „tafla eno2t“ - merking þessara leiðarreglna er að umferð sem fer inn í gegnum eno1 -> myndi fara í gegnum það og umferð sem fer inn í gegnum eno2 -> myndi fara í gegnum það. Og líka tengingar sem þjónninn kveikti á myndu fara í gegnum eno1.

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

Með þessari skipun tilgreinum við að öll óskiljanleg umferð sem fellur undir hvaða reglu sem er merkt „table eno1t“ -> sé send á eno1 viðmótið.

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

Með þessari skipun tilgreinum við að allri umferð sem þjónninn setur af stað ætti að beina til eno1 viðmótsins.

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

Með þessari skipun setjum við reglur um merkingu umferðar.

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

Þessi blokk tilgreinir annað IPv4 fyrir eno1 viðmótið.

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

Með þessari skipun setjum við leiðina frá OpenVPN viðskiptavinum yfir á staðbundið IPv4 nema XX.XX.XX.X0.
Ég skil samt ekki hvers vegna þessi skipun er nóg fyrir alla IPv4.

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

Þetta er þar sem við setjum heimilisfangið fyrir viðmótið sjálft. Miðlarinn mun nota það sem „áleiðandi“ heimilisfang. Verður ekki notað á nokkurn hátt aftur.

Af hverju er ":1:1::" svona flókið? Svo að OpenVPN virki rétt og aðeins fyrir þetta. Meira um þetta síðar.

Um efnið gátt - það er hvernig það virkar og það er allt í lagi. En rétta leiðin er að tilgreina hér IPv6 rofans sem þjónninn er tengdur við.

Hins vegar hættir IPv6 af einhverjum ástæðum að virka ef ég geri þetta. Þetta er líklega einhvers konar tech.ru vandamál.

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

Þetta er að bæta IPv6 vistfangi við viðmótið. Ef þú þarft hundrað heimilisföng þýðir það hundrað línur í þessari skrá.

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

Ég skráði heimilisföng og undirnet allra viðmóta til að gera það skýrt.
eno1 - verður að vera "/64“ - vegna þess að þetta er allur hópurinn okkar af heimilisföngum.
tun0 - undirnetið verður að vera stærra en eno1. Annars verður ekki hægt að stilla IPv6 gátt fyrir OpenVPN viðskiptavini.
eno2 - undirnetið verður að vera stærra en tun0. Annars munu OpenVPN viðskiptavinir ekki geta fengið aðgang að staðbundnum IPv6 vistföngum.
Til glöggvunar valdi ég undirnetsskref 16, en ef þú vilt geturðu jafnvel gert „1“ skref.
Samkvæmt því eru 64+16 = 80 og 80+16 = 96.

Fyrir enn meiri skýrleika:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY eru heimilisföng sem ætti að úthluta tilteknum vefsvæðum eða þjónustu á eno1 viðmótinu.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY eru heimilisföng sem ætti að úthluta tilteknum vefsvæðum eða þjónustu á eno2 viðmótinu.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY eru heimilisföng sem ætti að úthluta OpenVPN viðskiptavinum eða nota sem OpenVPN þjónustuföng.

Til að stilla netið ætti að vera hægt að endurræsa þjóninn.
IPv4 breytingar eru teknar upp þegar þær eru framkvæmdar (vertu viss um að pakka þeim inn á skjáinn - annars mun þessi skipun einfaldlega hrynja netið á þjóninum):

/etc/init.d/networking restart

Bættu við lok skrárinnar "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

Án þessa geturðu ekki notað sérsniðnar töflur í "/etc/network/interfaces" skránni.
Númerin verða að vera einstök og lægri en 65535.

Hægt er að breyta IPv6 breytingum auðveldlega án þess að endurræsa, en til að gera þetta þarftu að læra að minnsta kosti þrjár skipanir:

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

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

Þetta eru "sysctl" stillingar netþjónsins míns. Leyfðu mér að benda á eitthvað mikilvægt.

net.ipv4.ip_forward = 1

Án þessa mun OpenVPN alls ekki virka.

net.ipv6.ip_nonlocal_bind = 1

Allir sem reyna að binda IPv6 (til dæmis nginx) strax eftir að viðmótið er uppi mun fá villu. Að þetta heimilisfang sé ekki tiltækt.

Til að forðast slíkar aðstæður er slík stilling gerð.

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

Án þessara IPv6 stillinga fer umferð frá OpenVPN viðskiptavininum ekki út í heiminn.

Aðrar stillingar eru annað hvort ekki viðeigandi eða ég man ekki til hvers þær eru.
En bara ef ég læt þetta vera „eins og það er“.

Til þess að hægt sé að taka upp breytingar á þessari skrá án þess að endurræsa þjóninn þarftu að keyra skipunina:

sysctl -p

Nánari upplýsingar um reglur um „borð“: habr.com/post/108690

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

OpenVPN IPv4 virkar ekki án iptables.

iptables mínar eru svona fyrir 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 er kyrrstæða IPv4 vistfangið mitt á staðbundnu vélinni.
10.8.0.0/24 - IPv4 openvpn net. IPv4 vistföng fyrir openvpn viðskiptavini.
Samræmi reglna er mikilvægt.

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

Þetta er takmörkun þannig að aðeins ég get notað OpenVPN frá kyrrstöðu IP minn.

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

Til að framsenda IPv4 pakka á milli OpenVPN viðskiptavina og internetsins þarftu að skrá eina af þessum skipunum.

Fyrir mismunandi tilvik hentar einn af valkostunum ekki.
Báðar skipanirnar henta fyrir mitt tilvik.
Eftir að hafa lesið skjölin valdi ég fyrsta valkostinn vegna þess að hann notar minni CPU.

Til þess að allar iptables stillingar séu teknar upp eftir endurræsingu þarftu að vista þær einhvers staðar.

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

Slík nöfn voru ekki valin fyrir tilviljun. Þau eru notuð af „iptables-persistent“ pakkanum.

apt-get install iptables-persistent

Að setja upp aðal OpenVPN pakkann:

apt-get install openvpn easy-rsa

Við skulum setja upp sniðmát fyrir vottorð (skipta um gildi þín):

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

Við skulum breyta stillingum vottorðssniðmátsins:

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

Búðu til netþjónsvottorð:

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

Við skulum undirbúa getu til að búa til loka „client-name.opvn“ skrárnar:

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

Við skulum undirbúa handrit sem mun sameina allar skrár í eina opvn skrá.

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

Að búa til fyrsta OpenVPN viðskiptavininn:

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

Skráin „~/client-configs/files/client-name.ovpn“ er send í tæki viðskiptavinarins.

Fyrir iOS viðskiptavini þarftu að gera eftirfarandi bragð:
Innihald „tls-auth“ merksins verður að vera án athugasemda.
Og settu líka „key-direction 1“ strax á undan „tls-auth“ merkinu.

Við skulum stilla OpenVPN netþjónsstillinguna:

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

Þetta er nauðsynlegt til að setja fast heimilisfang fyrir hvern viðskiptavin (ekki nauðsynlegt, en ég nota það):

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

Erfiðasta og lykilatriðið.

Því miður veit OpenVPN ekki enn hvernig á að stilla IPv6 gátt fyrir viðskiptavini sjálfstætt.
Þú verður að „handvirkt“ áframsenda þetta fyrir hvern viðskiptavin.

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

Skráin „/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

Skráin „/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

Bæði forskriftirnar nota skrána „/etc/openvpn/variables“:

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

Ég á erfitt með að muna hvers vegna þetta er skrifað svona.

Nú lítur netmaska ​​= 112 undarlega út (það ætti að vera 96 ​​þarna).
Og forskeytið er skrítið, það passar ekki við tun0 netið.
En allt í lagi, ég læt það vera eins og það er.

cipher DES-EDE3-CBC

Þetta er ekki fyrir alla - ég valdi þessa aðferð til að dulkóða tenginguna.

Lærðu meira um uppsetningu OpenVPN IPv4.

Lærðu meira um uppsetningu OpenVPN IPv6.

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

Að setja upp aðalpakkann:

apt-get install postfix

Þegar þú setur upp skaltu velja „internetsíða“.

"/etc/postfix/main.cf" minn lítur svona út:

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

Við skulum skoða smáatriði þessa stillingar.

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

Að sögn íbúa Khabrovsk inniheldur þessi blokk „rangar upplýsingar og rangar ritgerðir“.Aðeins 8 árum eftir upphaf ferils míns fór ég að skilja hvernig SSL virkar.

Þess vegna mun ég taka mér það bessaleyfi að lýsa því hvernig á að nota SSL (án þess að svara spurningunum „Hvernig virkar það?“ og „Af hverju virkar það?“).

Grundvöllur nútíma dulkóðunar er að búa til lyklapar (tveir mjög langir stafastrengir).

Einn „lykill“ er einkaaðili, hinn lykillinn er „opinber“. Við höldum einkalyklinum mjög vandlega leyndum. Við dreifum almenningslyklinum til allra.

Með því að nota opinberan lykil er hægt að dulkóða textastreng þannig að aðeins eigandi einkalykilsins geti afkóðað hann.
Jæja, það er allur grundvöllur tækninnar.

Skref #1 - https síður.
Við aðgang að vefsvæði lærir vafrinn af vefþjóninum að síðan sé https og biður því um opinberan lykil.
Vefþjónninn gefur opinbera lykilinn. Vafrinn notar opinbera lykilinn til að dulkóða http-beiðnina og senda hana.
Innihald http-beiðni geta aðeins lesið af þeim sem hafa einkalykilinn, það er aðeins þjónninn sem beiðnin er send til.
Http-beiðni inniheldur að minnsta kosti URI. Þess vegna, ef land er að reyna að takmarka aðgang ekki að öllu síðunni, heldur að tiltekinni síðu, þá er þetta ómögulegt að gera fyrir https síður.

Skref #2 - dulkóðuð svar.
Vefþjónninn veitir svar sem auðvelt er að lesa á veginum.
Lausnin er afar einföld - vafrinn býr á staðnum til sama einka-opinbera lyklaparið fyrir hverja https síðu.
Og ásamt beiðni um opinberan lykil síðunnar sendir hún staðbundinn opinberan lykil.
Vefþjónninn man það og, þegar http-svar er sent, dulkóðar það með almennum lykli tiltekins biðlara.
Nú getur http-svar aðeins verið afkóðað af eiganda einkalykils vafra viðskiptavinarins (þ.e. biðlarans sjálfs).

Skref nr. 3 - að koma á öruggri tengingu í gegnum opinbera rás.
Það er varnarleysi í dæmi nr. 2 - ekkert kemur í veg fyrir velviljaða menn í að stöðva http-beiðni og breyta upplýsingum um opinbera lykilinn.
Þannig mun milliliðurinn sjá greinilega allt innihald sendra og móttekinna skeyta þar til samskiptarásin breytist.
Að takast á við þetta er mjög einfalt - sendu bara almenningslykil vafrans sem skilaboð dulkóðuð með opinberum lykli vefþjónsins.
Vefþjónninn sendir þá fyrst svar eins og „opinberi lykillinn þinn er svona“ og dulkóðar þessi skilaboð með sama opinbera lyklinum.
Vafrinn horfir á svarið - ef skilaboðin „opinberi lykillinn þinn er svona“ berast - þá er þetta 100% trygging fyrir því að þessi samskiptarás sé örugg.
Hversu öruggt er það?
Sjálf sköpun svo öruggrar samskiptarásar á sér stað með hraða ping*2. Til dæmis 20ms.
Árásarmaðurinn verður að hafa einkalykil eins aðila fyrirfram. Eða finndu einkalykil á nokkrum millisekúndum.
Að hakka einn nútíma einkalykil mun taka áratugi á ofurtölvu.

Skref #4 - opinber gagnagrunnur yfir opinbera lykla.
Augljóslega, í allri þessari sögu er tækifæri fyrir árásarmann að sitja á samskiptarásinni milli viðskiptavinarins og netþjónsins.
Viðskiptavinurinn getur þykjast vera þjónninn og þjónninn getur þykjast vera viðskiptavinurinn. Og líkja eftir pari af lyklum í báðar áttir.
Þá mun árásarmaðurinn sjá alla umferðina og geta „breytt“ umferðinni.
Til dæmis, breyttu heimilisfanginu hvert á að senda peninga eða afritaðu lykilorðið úr netbanka eða lokaðu fyrir „óþægilegt“ efni.
Til að berjast gegn slíkum árásarmönnum komu þeir með opinberan gagnagrunn með opinberum lyklum fyrir hverja https síðu.
Hver vafri „veit“ um tilvist um 200 slíkra gagnagrunna. Þetta kemur fyrirfram uppsett í hverjum vafra.
„Þekking“ er studd af opinberum lykli frá hverju vottorði. Það er, ekki er hægt að falsa tenginguna við hvert sérstakt vottunaryfirvald.

Nú er einfaldur skilningur á því hvernig á að nota SSL fyrir https.
Ef þú notar heilann kemur í ljós hvernig sérþjónusturnar geta hakkað eitthvað í þessa uppbyggingu. En það mun kosta þá ægilega viðleitni.
Og stofnanir minni en NSA eða CIA - það er næstum ómögulegt að hakka núverandi verndarstig, jafnvel fyrir VIP.

Ég mun líka bæta við um ssh tengingar. Það eru engir opinberir lyklar þar, svo hvað geturðu gert? Málið er leyst með tvennum hætti.
Valkostur ssh-by-password:
Við fyrstu tengingu ætti ssh biðlarinn að vara við því að við höfum nýjan opinberan lykil frá ssh þjóninum.
Og við frekari tengingar, ef viðvörunin „nýr opinber lykill frá ssh netþjóninum“ birtist, þýðir það að þeir séu að reyna að hlera þig.
Eða þú varst hleraður af fyrstu tengingunni þinni, en núna hefur þú samskipti við netþjóninn án milliliða.
Reyndar, vegna þess að staðreyndin um símhlerun er auðveld, fljótt og áreynslulaust afhjúpuð, er þessi árás aðeins notuð í sérstökum tilvikum fyrir tiltekinn viðskiptavin.

Valkostur ssh-by-key:
Við tökum glampi drif, skrifum einkalykilinn fyrir ssh netþjóninn á það (það eru hugtök og mikið af mikilvægum blæbrigðum fyrir þetta, en ég er að skrifa fræðsluforrit, ekki notkunarleiðbeiningar).
Við skiljum eftir almenningslykilinn á vélinni þar sem ssh viðskiptavinurinn verður og við höldum honum líka leyndum.
Við komum með flash-drifið á netþjóninn, setjum það inn, afritum einkalykilinn og brennum flash-drifið og dreifum öskunni í vindinn (eða að minnsta kosti forsníða því með núllum).
Það er allt - eftir slíka aðgerð verður ómögulegt að hakka slíka ssh tengingu. Auðvitað, eftir 10 ár verður hægt að skoða umferð á ofurtölvu - en það er önnur saga.

Ég biðst afsökunar á offtopic.

Svo nú þegar kenningin er þekkt. Ég skal segja þér frá flæðinu við að búa til SSL vottorð.

Með því að nota „openssl genrsa“ búum við til einkalykil og „eyður“ fyrir opinbera lykilinn.
Við sendum „eyðurnar“ til þriðja aðila fyrirtækis, sem við borgum um það bil $9 fyrir einfaldasta vottorðið.

Eftir nokkrar klukkustundir fáum við „opinbera“ lykilinn okkar og sett af nokkrum opinberum lyklum frá þessu þriðja aðila fyrirtæki.

Hvers vegna ætti þriðja aðila fyrirtæki að borga fyrir skráningu á opinbera lyklinum mínum er sérstök spurning, við munum ekki íhuga það hér.

Nú er ljóst hver merking áletrunarinnar er:

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

"/etc/ssl" mappan inniheldur allar skrárnar fyrir ssl mál.
domain1.com - lén.
Árið 2018 er ár lykilsköpunar.
„lykill“ - tákn um að skráin sé einkalykill.

Og merking þessarar skráar:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com - lén.
Árið 2018 er ár lykilsköpunar.
hlekkjaður - tákn um að það sé keðja af opinberum lyklum (fyrri er almenningslykillinn okkar og restin er það sem kom frá fyrirtækinu sem gaf út opinbera lykilinn).
crt - merking um að tilbúið vottorð sé til (opinber lykill með tæknilegum skýringum).

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

Þessi stilling er ekki notuð í þessu tilfelli, en er skrifuð sem dæmi.

Vegna þess að villa í þessari breytu mun leiða til þess að ruslpóstur er sendur frá þjóninum þínum (án þíns vilja).

Sannaðu síðan fyrir öllum að þú sért ekki sekur.

recipient_delimiter = +

Margir vita það kannski ekki, en þetta er staðalstafur til að raða tölvupósti og það er stutt af flestum nútíma póstþjónum.

Til dæmis, ef þú ert með pósthólf "[netvarið]"reyndu að senda til"[netvarið]"- sjáðu hvað kemur út úr því.

inet_protocols = ipv4

Þetta gæti verið ruglingslegt.

En það er ekki bara þannig. Hvert nýtt lén er sjálfgefið aðeins IPv4, þá kveiki ég á IPv6 fyrir hvert og eitt fyrir sig.

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

Hér tilgreinum við að allur póstur sem kemur inn fari í dúfnakofa.
Og reglurnar fyrir lén, pósthólf, alias - skoðaðu í gagnagrunninum.

/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

Nú veit postfix að aðeins er hægt að taka við pósti til frekari sendingar eftir heimild með dúfnakofa.

Ég skil eiginlega ekki hvers vegna þetta er afritað hér. Við höfum þegar tilgreint allt sem þarf í „virtual_transport“.

En postfix kerfið er mjög gamalt - líklega er það afturhvarf frá gamla daga.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Þetta er hægt að stilla á mismunandi hátt fyrir hvern póstþjón.

Ég hef 3 póstþjóna til umráða og þessar stillingar eru mjög mismunandi vegna mismunandi notkunarkröfur.

Þú þarft að stilla það vandlega - annars mun ruslpóstur streyma inn til þín, eða jafnvel verra - ruslpóstur streymir út frá þér.

# SPF
policyd-spf_time_limit = 3600

Uppsetning fyrir einhverja viðbót sem tengist því að athuga SPF fyrir komandi bréf.

# 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

Stillingin er sú að við verðum að veita DKIM undirskrift með öllum útsendingum tölvupósti.

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

Þetta er lykilatriði í bréfaleiðsögn þegar bréf eru send úr PHP forskriftum.

Skráin „/etc/postfix/sdd_transport.pcre“:

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

Vinstra megin eru regluleg tjáning. Hægra megin er merkimiði sem merkir stafinn.
Postfix í samræmi við merkimiðann - mun taka mið af nokkrum fleiri stillingarlínum fyrir tiltekinn staf.

Hvernig nákvæmlega postfix verður endurstillt fyrir tiltekinn staf verður tilgreint í „master.cf“.

Línur 4, 5, 6 eru þær helstu. Fyrir hönd hvaða léns við erum að senda bréfið setjum við þennan merkimiða.
En „frá“ reiturinn er ekki alltaf tilgreindur í PHP forskriftum í gamla kóðanum. Þá kemur notendanafnið til bjargar.

Greinin er nú þegar umfangsmikil - ég myndi ekki vilja láta trufla mig með því að setja upp nginx+fpm.

Í stuttu máli, fyrir hverja síðu setjum við sinn eigin linux-notandaeiganda. Og í samræmi við það fpm-laugin þín.

Fpm-pool notar hvaða útgáfu sem er af php (það er frábært þegar þú getur notað mismunandi útgáfur af php á sama netþjóni og jafnvel mismunandi php.ini fyrir aðliggjandi síður án vandræða).

Svo, sérstakur Linux-notandi „www-domain2“ er með vefsíðu domain2.com. Þessi síða hefur kóða til að senda tölvupóst án þess að tilgreina frá reitinn.

Svo, jafnvel í þessu tilfelli, verða bréfin send rétt og munu aldrei lenda í ruslpósti.

"/etc/postfix/master.cf" minn lítur svona út:

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

Skráin er ekki gefin upp í heild sinni - hún er nú þegar mjög stór.
Ég tók aðeins eftir því sem var breytt.

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}

Þetta eru stillingar sem tengjast spamassasin, meira um það síðar.

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

Við leyfum þér að tengjast póstþjóninum í gegnum port 587.
Til að gera þetta verður þú að skrá þig inn.

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

Virkja SPF athugun.

apt-get install postfix-policyd-spf-python

Við skulum setja upp pakkann fyrir SPF athuganir hér að ofan.

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

Og þetta er það áhugaverðasta. Þetta er hæfileikinn til að senda bréf fyrir tiltekið lén frá tilteknu IPv4/IPv6 vistfangi.

Þetta er gert vegna rDNS. rDNS er ferlið við að fá streng eftir IP tölu.
Og fyrir póst er þessi eiginleiki notaður til að staðfesta að helóið passi nákvæmlega við rDNS netfangsins sem tölvupósturinn var sendur frá.

Ef helóið passar ekki við tölvupóstlénið sem bréfið var sent fyrir hönd fást ruslpóststig.

Helo passar ekki við rDNS - mikið af ruslpóststigum eru veitt.
Samkvæmt því verður hvert lén að hafa sína eigin IP tölu.
Fyrir OVH - í stjórnborðinu er hægt að tilgreina rDNS.
Fyrir tech.ru - málið er leyst með stuðningi.
Fyrir AWS er ​​málið leyst með stuðningi.
„inet_protocols“ og „smtp_bind_address6“ - við virkum IPv6 stuðning.
Fyrir IPv6 þarftu líka að skrá rDNS.
"syslog_name" - og þetta er til að auðvelda lestur annála.

Kaupa skírteini Ég mæli með hér.

Setja upp postfix+dovecot tengil hér.

Stilling á SPF.

============= Dúfnakofa ==============

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

Setja upp mysql, setja upp pakkana sjálfa.

Skráin "/etc/dovecot/conf.d/10-auth.conf"

disable_plaintext_auth = yes
auth_mechanisms = plain login

Heimild er aðeins dulkóðuð.

Skráin „/etc/dovecot/conf.d/10-mail.conf“

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

Hér tilgreinum við geymslustað bréfanna.

Ég vil að þær séu geymdar í skrám og flokkaðar eftir léni.

Skráin "/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 {
  }
}

Þetta er aðal stillingarskráin fyrir dúfukótinn.
Hér slökkum við á ótryggðum tengingum.
Og virkjaðu öruggar tengingar.

Skráin "/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
}

Að setja upp ssl. Við gefum til kynna að ssl sé krafist.
Og skírteinið sjálft. Og mikilvægt smáatriði er „staðbundin“ tilskipunin. Gefur til kynna hvaða SSL vottorð á að nota við tengingu við hvaða staðbundna IPv4.

Við the vegur, IPv6 er ekki stillt hér, ég mun leiðrétta þessa aðgerðaleysi síðar.
XX.XX.XX.X5 (lén2) - ekkert vottorð. Til að tengja viðskiptavini þarftu að tilgreina domain1.com.
XX.XX.XX.X2 (domain3) - það er vottorð, þú getur tilgreint domain1.com eða domain3.com til að tengja viðskiptavini.

Skráin "/etc/dovecot/conf.d/15-lda.conf"

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Þetta verður þörf fyrir spamassassin í framtíðinni.

Skráin "/etc/dovecot/conf.d/20-imap.conf"

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Þetta er ruslpóstforrit. Nauðsynlegt til að þjálfa spamassasin við flutning til/frá „Spam“ möppunni.

Skráin "/etc/dovecot/conf.d/20-pop3.conf"

protocol pop3 {
}

Það er bara svona skrá.

Skráin „/etc/dovecot/conf.d/20-lmtp.conf“

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

Að setja upp lmtp.

Skráin "/etc/dovecot/conf.d/90-antispam.conf"

plugin {
  antispam_backend = pipe
  antispam_trash = Trash;trash
  antispam_spam = Junk;Spam;SPAM
  antispam_pipe_program_spam_arg = --spam
  antispam_pipe_program_notspam_arg = --ham
  antispam_pipe_program = /usr/bin/sa-learn
  antispam_pipe_program_args = --username=%Lu
}

Spamassasin þjálfunarstillingar við flutning í/frá ruslpóstmöppunni.

Skráin "/etc/dovecot/conf.d/90-sieve.conf"

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

Skrá sem tilgreinir hvað á að gera við komandi bréf.

Skráin "/var/lib/dovecot/sieve/default.sieve"

require ["fileinto", "mailbox"];

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

Þú þarft að setja saman skrána: “sievec default.sieve”.

Skráin "/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
}

Að tilgreina sql skrár fyrir heimild.
Og skráin sjálf er notuð sem heimildaraðferð.

Skráin "/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';

Þetta samsvarar svipuðum stillingum fyrir postfix.

Skráin "/etc/dovecot/dovecot.conf"

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

Aðalstillingarskrá.
Það mikilvæga er að við tökum til kynna hér - bætið við samskiptareglum.

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

apt-get install spamassassin spamc

Við skulum setja upp pakkana.

adduser spamd --disabled-login

Bætum við notanda fyrir hans hönd.

systemctl enable spamassassin.service

Við virkum sjálfvirka hleðslu spamassassin þjónustu við hleðslu.

Skráin "/etc/default/spamassassin":

CRON=1

Með því að virkja sjálfvirka uppfærslu á reglum „sjálfgefið“.

Skráin “/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

Þú þarft að búa til gagnagrunn „sa“ í mysql með notandanum „sa“ með lykilorðinu „lykilorði“ (skipta út fyrir eitthvað fullnægjandi).

report_safe - þetta mun senda tilkynningu um ruslpóst í stað bréfs.
use_bayes eru spamassassin vélanámsstillingar.

Eftirstöðvar spamassassin stillingar voru notaðar fyrr í greininni.

Almenn stilling "spamassassin".
Um að flytja nýjan ruslpóst í IMAP „Spam“ möppuna.
Um einfalda samsetningu af Dovecot + SpamAssassin.
Ég mæli með því að lesa spamassasin námskenninguna þegar þú flytur stafi í imap möppur (og ég mæli ekki með því að nota hana).

============= Áfrýja til samfélagsins ==============

Mig langar líka að varpa hugmynd út í samfélagið um hvernig auka megi öryggisstig áframsendra bréfa. Þar sem ég er svo djúpt á kafi í umræðuefni pósts.

Svo að notandinn geti búið til lyklapar á biðlara sínum (outlook, thunderbird, vafraviðbót, ...). Opinberir og einkaaðilar. Opinber - send til DNS. Einkamál - sparaðu á viðskiptavininn. Póstþjónar gætu notað opinberan lykil til að senda til ákveðins viðtakanda.

Og til að verjast ruslpósti með slíkum stöfum (já, póstþjónninn mun ekki geta skoðað efnið) - þú þarft að kynna 3 reglur:

  1. Lögboðin raunveruleg DKIM undirskrift, skyldubundin SPF, skyldubundin rDNS.
  2. Tauganet um efni þjálfunar gegn ruslpósti + gagnagrunnur fyrir það á viðskiptavinamegin.
  3. Dulkóðunaralgrímið verður að vera þannig að sendandi hliðin verður að eyða 100 sinnum meiri örgjörvaafli í dulkóðun en móttökuhliðin.

Til viðbótar við opinber bréf skaltu þróa staðlað tillögubréf "til að hefja örugga bréfaskipti." Einn notenda (pósthólf) sendir bréf með viðhengi í annað pósthólf. Í bréfinu er textatillaga um að koma af stað öruggri samskiptarás fyrir bréfaskipti og opinberan lykil eiganda pósthólfsins (með einkalykli viðskiptavinamegin).

Þú getur jafnvel búið til nokkra lykla sérstaklega fyrir hverja bréfaskipti. Viðtakandi notandi getur samþykkt þetta tilboð og sent opinbera lykilinn sinn (einnig gerður sérstaklega fyrir þessa bréfaskipti). Næst sendir fyrsti notandinn þjónustustýringarbréf (dulkóðað með opinberum lykli annars notandans) - við móttöku þess getur annar notandinn talið samskiptarásina sem myndast er áreiðanleg. Næst sendir annar notandinn stjórnbréf - og þá getur fyrsti notandinn líka talið myndaða rásina örugga.

Til að berjast gegn hlerun lykla á veginum verður bókunin að gera ráð fyrir að hægt sé að senda að minnsta kosti einn almenningslykil með því að nota leifturdrif.

Og það mikilvægasta er að þetta virkar allt (spurningin er "hver mun borga fyrir það?"):
Sláðu inn póstskírteini sem byrja á $10 fyrir 3 ár. Sem gerir sendanda kleift að gefa til kynna í dns að „opinberu lyklarnir mínir séu þarna.“ Og þeir munu gefa þér tækifæri til að hefja örugga tengingu. Á sama tíma er ókeypis að samþykkja slíkar tengingar.
gmail er loksins að afla tekna af notendum sínum. Fyrir $10 á 3 ár - rétt til að búa til öruggar bréfarásir.

============= Niðurstaða ==============

Til að prófa alla greinina ætlaði ég að leigja sérstakan netþjón í mánuð og kaupa lén með SSL vottorði.

En lífsaðstæður þróuðust þannig að þetta mál dróst í 2 mánuði.
Og því þegar ég fékk lausan tíma á ný ákvað ég að birta greinina eins og hún er, frekar en að hætta á að útgáfan dregist á langinn í eitt ár.

Ef það eru töluvert margar spurningar eins og „en þessu er ekki lýst nægilega ítarlega“, þá mun líklega vera styrkur til að taka sérstakan netþjón með nýju léni og nýju SSL vottorði og lýsa því enn nánar og, flest mikilvægara, auðkenna allar mikilvægar upplýsingar sem vantar.

Mig langar líka að fá viðbrögð við hugmyndum um póstvottorð. Ef þér líkar hugmyndin mun ég reyna að finna styrk til að skrifa uppkast fyrir rfc.

Þegar þú afritar stóra hluta greinar skaltu gefa upp tengil á þessa grein.
Þegar þú ert að þýða á annað tungumál, gefðu upp hlekk á þessa grein.
Ég mun reyna að þýða hana á ensku sjálfur og skilja eftir krossvísanir.


Heimild: www.habr.com

Bæta við athugasemd