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

Dësen Artikel geet iwwer wéi een e modernen Mailserver opstellt.
Postfix + Dovecot. SPF + DKIM + rDNS. Mat IPv6.
Mat TSL Verschlësselung. Mat Ënnerstëtzung fir verschidde Domainen - Deel mat engem richtege SSL Zertifika.
Mat Antispam Schutz an engem héije Antispam Bewäertung vun anere Mail Serveren.
Ënnerstëtzt verschidde kierperlech Interfaces.
Mat OpenVPN, d'Verbindung mat deem iwwer IPv4 ass, an déi IPv6 ubitt.

Wann Dir net all dës Technologien léiere wëllt, awer sou e Server wëllt opbauen, dann ass dësen Artikel fir Iech.

Den Artikel mécht kee Versuch all Detail z'erklären. D'Erklärung geet op wat net als Standard konfiguréiert ass oder aus der Siicht vum Konsument wichteg ass.

D'Motivatioun fir e Mail-Server opzestellen war e laangjärege Dram vu mir. Dëst kléngt vläicht domm, awer IMHO, et ass vill besser wéi vun engem neien Auto vun Ärer Liiblingsmark ze dreemen.

Et ginn zwou Motivatioune fir IPv6 opzestellen. En IT Spezialist muss stänneg nei Technologien léieren fir ze iwwerliewen. Ech wëll mäi bescheidenen Bäitrag zum Kampf géint Zensur leeschten.

D'Motivatioun fir OpenVPN opzestellen ass just fir IPv6 op der lokaler Maschinn ze schaffen.
D'Motivatioun fir verschidde physesch Interfaces opzestellen ass datt ech op mengem Server eng Interface "lues awer onlimitéiert" hunn an eng aner "schnell awer mat engem Tarif".

D'Motivatioun fir Bind-Astellungen opzestellen ass datt mäi ISP en onbestännegen DNS-Server ubitt, a Google klappt och heiansdo. Ech wëll e stabilen DNS Server fir perséinlech Benotzung.

Motivatioun en Artikel ze schreiwen - ech hunn en Entworf geschriwwen virun 10 Méint, an ech hunn et schonn zweemol gekuckt. Och wann den Auteur et reegelméisseg brauch, besteet eng grouss Wahrscheinlechkeet, datt anerer et och brauchen.

Et gëtt keng universell Léisung fir e Mailserver. Awer ech probéieren eppes ze schreiwen wéi "maacht dëst an dann, wann alles funktionnéiert wéi et soll, déi extra Saachen erauswerfen."

D'Firma tech.ru huet e Colocation Server. Et ass méiglech mat OVH, Hetzner, AWS ze vergläichen. Fir dëse Problem ze léisen, wäert d'Zesummenaarbecht mat tech.ru vill méi effektiv sinn.

Debian 9 ass um Server installéiert.

De Server huet 2 Interfaces `eno1` an `eno2`. Déi éischt ass onlimitéiert, an déi zweet ass séier, respektiv.

Et ginn 3 statesch IP Adressen, XX.XX.XX.X0 an XX.XX.XX.X1 an XX.XX.XX.X2 op der "eno1" Interface an XX.XX.XX.X5 op der "eno2" Interface .

Verfügbar XXXX:XXXX:XXXX:XXXX::/64 e Pool vun IPv6 Adressen, déi dem 'eno1' Interface zougewisen sinn an aus deem XXXX: XXXX: XXXX: XXXX: 1: 2 ::/96 gouf op meng Ufro un 'eno2' zougewisen.

Et ginn 3 Domainen `domain1.com`, `domain2.com`, `domain3.com`. Et gëtt en SSL Zertifika fir `domain1.com` an `domain3.com`.

Ech hunn e Google Kont op deen ech gär meng Mailbox verbannen[Email geschützt]` (E-Mail kréien an E-Mail direkt vun der Gmail Interface schécken).
Et muss eng Mailbox ginn`[Email geschützt]`, eng Kopie vun der E-Mail aus där ech a mengem Gmail wëll gesinn. An et ass selten eppes am Numm vun `[Email geschützt]` iwwer de Webinterface.

Et muss eng Mailbox ginn`[Email geschützt]`, deen den Ivanov vu sengem iPhone benotzt.

Geschéckt E-Maile mussen all modern Antispam Ufuerderunge entspriechen.
Et muss den héchsten Niveau vun der Verschlësselung an ëffentlechen Netzwierker geliwwert ginn.
Et soll IPv6 Ënnerstëtzung fir Bréiwer ze schécken an ze kréien.
Et soll e SpamAssassin ginn, deen ni E-Maile läscht. An et wäert entweder sprangen oder sprangen oder an den IMAP "Spam" Dossier schécken.
SpamAssassin Auto-Learning muss konfiguréiert sinn: wann ech e Bréif an de Spam-Ordner réckelen, da léiert en dovunner; wann ech e Bréif aus dem Spam Dossier réckelen, wäert et aus dëser léieren. D'Resultater vum SpamAssassin Training sollten beaflossen ob de Bréif am Spam Dossier endet.
PHP Scripte musse fäeg sinn E-Mail am Numm vun all Domain op engem bestëmmte Server ze schécken.
Et soll en openvpn Service sinn, mat der Fäegkeet IPv6 op engem Client ze benotzen deen net IPv6 huet.

Als éischt musst Dir Interfaces a Routing konfiguréieren, dorënner IPv6.
Da musst Dir OpenVPN konfiguréieren, deen iwwer IPv4 verbënnt an de Client eng statesch-real IPv6 Adress gëtt. Dëse Client huet Zougang zu all IPv6 Servicer um Server an Zougang zu all IPv6 Ressourcen um Internet.
Da musst Dir Postfix konfiguréieren fir Bréiwer + SPF + DKIM + rDNS an aner ähnlech kleng Saachen ze schécken.
Da musst Dir Dovecot konfiguréieren a Multidomain konfiguréieren.
Da musst Dir SpamAssassin konfiguréieren an Training konfiguréieren.
Endlech installéiert Bind.

============== Multi-Interfaces ==============

Fir Interfaces ze konfiguréieren, musst Dir dëst an "/etc/network/interfaces" schreiwen.

# 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

Dës Astellunge kënnen op all Server an tech.ru applizéiert ginn (mat e bësse Koordinatioun mat Ënnerstëtzung) an et funktionnéiert direkt wéi et soll.

Wann Dir Erfahrung hutt ähnlech Saachen fir Hetzner, OVH opzestellen, ass et anescht do. Méi schwéier.

eno1 ass den Numm vun der Netzwierkkaart #1 (lues awer onlimitéiert).
eno2 ass den Numm vun der Netzwierkkaart #2 (séier, awer mat engem Tarif).
tun0 ass den Numm vun der virtueller Netzwierkkaart vun OpenVPN.
XX.XX.XX.X0 - IPv4 #1 op eno1.
XX.XX.XX.X1 - IPv4 #2 op eno1.
XX.XX.XX.X2 - IPv4 #3 op eno1.
XX.XX.XX.X5 - IPv4 #1 op eno2.
XX.XX.XX.1 - IPv4 Gateway.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 fir de ganze Server.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 fir eno2, alles anescht vu baussen geet an eno1.
XXXX:XXXX:XXXX:XXXX::1 — IPv6-Paart (et ass derwäert ze notéieren datt dëst anescht ka/soll gemaach ginn. Den IPv6-Schalter uginn).
dns-Nameservers - 127.0.0.1 gëtt uginn (well Bind ass lokal installéiert) an 213.248.1.6 (dëst ass vun tech.ru).

"Table eno1t" an "Table eno2t" - d'Bedeitung vun dëse Route-Reegelen ass datt de Verkéier, deen duerch eno1 erakënnt -> doduerch fortgeet, an de Traffic, deen duerch eno2 erakoum -> doduerch géif fortgoen. An och Verbindungen, déi vum Server initiéiert goufen, géifen duerch eno1 goen.

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

Mat dësem Kommando spezifizéiere mir datt all onverständleche Verkéier, deen ënner all Regel markéiert "Table eno1t" fällt -> op d'eno1 Interface geschéckt ginn.

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

Mat dësem Kommando spezifizéiere mir datt all Traffic, deen vum Server initiéiert gëtt, op d'eno1 Interface geleet gëtt.

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

Mat dësem Kommando setzen mir d'Regele fir de Verkéier ze markéieren.

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

Dëse Block spezifizéiert eng zweet IPv4 fir d'eno1 Interface.

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

Mat dësem Kommando setzen mir de Wee vun OpenVPN Clienten op lokal IPv4 ausser XX.XX.XX.X0.
Ech verstinn nach ëmmer net firwat dëse Kommando genuch ass fir all IPv4.

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

Dëst ass wou mir d'Adress fir den Interface selwer setzen. De Server wäert et als "ausgehend" Adress benotzen. Wäert op keng Manéier erëm benotzt ginn.

Firwat ass ":1:1::" sou komplizéiert? Also datt OpenVPN richteg funktionnéiert an nëmme fir dëst. Méi iwwer dëst méi spéit.

Zum Thema Gateway - dat ass wéi et funktionnéiert an dat ass gutt. Awer de richtege Wee ass hei den IPv6 vum Schalter unzeweisen, mat deem de Server ugeschloss ass.

Wéi och ëmmer, aus iergendengem Grond hält IPv6 op wann ech dat maachen. Dëst ass wahrscheinlech eng Zort tech.ru Problem.

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

Dëst füügt eng IPv6 Adress un d'Interface. Wann Dir honnert Adressen braucht, dat heescht honnert Zeilen an dësem Fichier.

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

Ech hunn d'Adressen an d'Subnets vun all Interfaces notéiert fir et kloer ze maachen.
eno1 - muss sinn "/64" - well dëst ass eise ganze Pool vun Adressen.
tun0 - de Subnet muss méi grouss sinn wéi eno1. Soss ass et net méiglech eng IPv6 Gateway fir OpenVPN Clienten ze konfiguréieren.
eno2 - de Subnet muss méi grouss sinn wéi tun0. Soss kënnen OpenVPN Clienten net Zougang zu lokalen IPv6 Adressen kréien.
Fir Kloerheet hunn ech e Subnet Schrëtt vun 16 gewielt, awer wann Dir wëllt, kënnt Dir souguer "1" Schrëtt maachen.
Deementspriechend, 64+16 = 80, an 80+16 = 96.

Fir nach méi Kloerheet:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY sinn Adressen déi spezifesch Siten oder Servicer op der eno1 Interface zougewisen solle ginn.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY sinn Adressen déi spezifesch Siten oder Servicer op der eno2 Interface zougewisen solle ginn.
XXXX: XXXX: XXXX: XXXX: 1: 3: YYYY: YYYY sinn Adressen déi un OpenVPN Clienten zougewisen solle ginn oder als OpenVPN Serviceadressen benotzt ginn.

Fir de Reseau ze konfiguréieren, sollt et méiglech sinn de Server nei ze starten.
IPv4 Ännerungen ginn opgeholl wann se ausgefouert ginn (passt sécher datt Dir se um Bildschierm wéckelt - soss wäert dëse Kommando einfach d'Netzwierk um Server erofsetzen):

/etc/init.d/networking restart

Füügt um Enn vun der Datei "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

Ouni dëst kënnt Dir net personaliséiert Dëscher an der Datei "/etc/network/interfaces" benotzen.
D'Zuelen mussen eenzegaarteg sinn a manner wéi 65535.

IPv6 Ännerungen kënnen einfach geännert ginn ouni Neistart, awer fir dëst ze maachen musst Dir op d'mannst dräi Kommandoen léieren:

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

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

Dëst sinn meng Server "sysctl" Astellungen. Loosst mech eppes Wichtegs opweisen.

net.ipv4.ip_forward = 1

Ouni dëst funktionnéiert OpenVPN guer net.

net.ipv6.ip_nonlocal_bind = 1

Jiddereen dee probéiert IPv6 (zum Beispill nginx) direkt nodeems d'Interface erop ass, ze binden, kritt e Feeler. Datt dës Adress net verfügbar ass.

Fir esou eng Situatioun ze vermeiden, gëtt esou eng Astellung gemaach.

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

Ouni dës IPv6 Astellunge geet den Traffic vum OpenVPN Client net an d'Welt eraus.

Aner Astellunge sinn entweder net relevant oder ech erënnere mech net fir wat se sinn.
Awer just am Fall, ech loossen et "wéi ass."

Fir Ännerungen an dëser Datei opzehuelen ouni de Server nei ze starten, musst Dir de Kommando ausféieren:

sysctl -p

Méi Detailer iwwer "Dësch" Regelen: habr.com/post/108690

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

OpenVPN IPv4 funktionnéiert net ouni iptables.

Meng iptables sinn esou fir 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 ass meng statesch IPv4 Adress vun der lokaler Maschinn.
10.8.0.0/24 - IPv4 openvpn Netzwierk. IPv4 Adressen fir openvpn Clienten.
D'Konsistenz vun de Regelen ass wichteg.

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

Dëst ass eng Begrenzung sou datt nëmmen ech OpenVPN vu menger statescher IP benotze kann.

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

Fir IPv4 Pakete tëscht OpenVPN Clienten an dem Internet weiderzebréngen, musst Dir ee vun dëse Kommandoen registréieren.

Fir verschidde Fäll ass eng vun den Optiounen net gëeegent.
Béid Kommandoe si passend fir mäi Fall.
Nodeems ech d'Dokumentatioun gelies hunn, hunn ech déi éischt Optioun gewielt well se manner CPU benotzt.

Fir datt all iptables Astellunge nom Restart opgeholl ginn, musst Dir se iergendwou späicheren.

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

Esou Nimm goufen net zoufälleg gewielt. Si gi vum "iptables-persistent" Package benotzt.

apt-get install iptables-persistent

Installéiert den Haapt OpenVPN Package:

apt-get install openvpn easy-rsa

Loosst eis eng Schabloun fir Certificaten opstellen (ersetzen Är Wäerter):

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

Loosst eis d'Zertifikat Template Astellunge änneren:

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

Erstellt e Serverzertifika:

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

Loosst eis d'Fäegkeet virbereeden fir déi lescht "client-name.opvn" Dateien ze kreéieren:

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

Loosst eis e Skript virbereeden deen all Dateien an eng eenzeg opvn Datei fusionéiert.

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

Den éischten OpenVPN Client erstellen:

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

D'Datei "~/client-configs/files/client-name.ovpn" gëtt op den Apparat vum Client geschéckt.

Fir iOS Clienten musst Dir de folgenden Trick maachen:
Den Inhalt vum Tag "tls-auth" muss ouni Kommentaren sinn.
An och "Schlëssel-Direktioun 1" direkt virum "tls-auth" Tag setzen.

Loosst eis d'OpenVPN Server Konfiguratioun konfiguréieren:

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

Dëst ass néideg fir eng statesch Adress fir all Client ze setzen (net néideg, awer ech benotzen se):

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

Déi schwieregst a Schlëssel Detail.

Leider weess OpenVPN nach net wéi een en IPv6 Paart fir Clienten onofhängeg konfiguréiert.
Dir musst dëst "manuell" fir all Client weiderginn.

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

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

Datei "/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éid Skripte benotzen d'Datei "/etc/openvpn/variables":

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

Ech fannen et schwéier ze erënneren firwat et esou geschriwwen ass.

Elo gesäit Netmaske = 112 komesch aus (et soll 96 sinn).
An de Präfix ass komesch, et passt net mam tun0 Netzwierk.
Awer ok, ech loossen et sou wéi et ass.

cipher DES-EDE3-CBC

Dëst ass net fir jiddereen - ech hunn dës Method gewielt fir d'Verbindung ze verschlësselen.

Léiert méi iwwer OpenVPN IPv4 opzestellen.

Léiert méi iwwer OpenVPN IPv6 opzestellen.

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

Installéiere vum Haaptpaket:

apt-get install postfix

Wann Dir installéiert, wielt "Internet Site".

Meng "/etc/postfix/main.cf" gesäit esou aus:

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

Loosst eis d'Detailer vun dëser Configuratioun kucken.

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

No Khabrovsk Awunner, enthält dëse Block "falsch Informatioun a falsch Thesen."Nëmmen 8 Joer nom Ufank vu menger Carrière hunn ech ugefaang ze verstoen wéi SSL funktionnéiert.

Dofir wäert ech d'Fräiheet huelen fir ze beschreiwen wéi Dir SSL benotzt (ouni d'Froen ze beäntweren "Wéi funktionnéiert et?" a "Firwat funktionnéiert et?").

D'Basis vun der moderner Verschlësselung ass d'Schafung vun engem Schlësselpaar (zwee ganz laang Saiten vun Zeechen).

Ee "Schlëssel" ass privat, deen anere Schlëssel ass "ëffentlech". Mir halen de private Schlëssel ganz virsiichteg geheim. Mir verdeelen den ëffentleche Schlëssel fir jiddereen.

Mat engem ëffentleche Schlëssel kënnt Dir eng String vun Text verschlësselen, sou datt nëmmen de Besëtzer vum private Schlëssel et kann entschlësselen.
Gutt, dat ass d'ganz Basis vun der Technologie.

Schrëtt #1 - https Siten.
Beim Zougang zu engem Site léiert de Browser vum Webserver datt de Site https ass a freet dofir en ëffentleche Schlëssel.
De Webserver gëtt den ëffentleche Schlëssel. De Browser benotzt den ëffentleche Schlëssel fir d'http-Ufro ze verschlësselen an ze schécken.
Den Inhalt vun enger http-Ufro kann nëmme vun deenen gelies ginn, déi de private Schlëssel hunn, dat heescht nëmmen de Server, op deen d'Ufro gemaach gëtt.
Http-Ufro enthält op d'mannst eng URI. Dofir, wann e Land probéiert den Zougang net op de ganze Site ze beschränken, mee op eng spezifesch Säit, dann ass dat onméiglech fir https Siten ze maachen.

Schrëtt #2 - verschlësselte Äntwert.
De Webserver bitt eng Äntwert déi einfach op der Strooss gelies ka ginn.
D'Léisung ass extrem einfach - de Browser generéiert lokal datselwecht privat-ëffentlech Schlësselpaar fir all https Site.
A zesumme mat der Ufro fir den ëffentleche Schlëssel vum Site schéckt se säi lokalen ëffentleche Schlëssel.
De Webserver erënnert et an, wann Dir http-Äntwert schéckt, verschlësselt et mam ëffentleche Schlëssel vun engem spezifesche Client.
Elo kann http-Äntwert nëmmen vum Besëtzer vum Client säi Browser private Schlëssel entschlësselt ginn (dat ass de Client selwer).

Schrëtt Nr 3 - eng sécher Verbindung iwwer en ëffentleche Kanal opzebauen.
Et gëtt eng Schwachstelle am Beispill Nummer 2 - näischt verhënnert datt Wënsch eng http-Ufro offangen an Informatioun iwwer den ëffentleche Schlëssel änneren.
Also, wäert den Tëschestatioun kloer all Inhalt vun geschéckt a kritt Messagen gesinn bis de Kommunikatioun Kanal Ännerungen.
Mat dësem ëmgoen ass extrem einfach - schéckt just den ëffentleche Schlëssel vum Browser als Message verschlësselte mam ëffentleche Schlëssel vum Webserver.
De Webserver schéckt dann als éischt eng Äntwert wéi "Ären ëffentleche Schlëssel ass esou" a verschlësselt dëse Message mam selwechten ëffentleche Schlëssel.
De Browser kuckt op d'Äntwert - wann de Message "Ären ëffentleche Schlëssel ass esou" kritt ass - dann ass dat eng 100% Garantie datt dëse Kommunikatiounskanal sécher ass.
Wéi sécher ass et?
Déi ganz Kreatioun vun esou engem séchere Kommunikatiounskanal geschitt mat enger Geschwindegkeet vu Ping*2. Zum Beispill 20 ms.
Den Ugräifer muss am Viraus de private Schlëssel vun enger vun de Parteien hunn. Oder fannen e private Schlëssel an e puer Millisekonnen.
Hacking vun engem moderne private Schlëssel wäert Joerzéngte op engem Supercomputer daueren.

Schrëtt #4 - ëffentlech Datebank vun ëffentleche Schlësselen.
Natierlech gëtt et an dëser ganzer Geschicht eng Chance fir en Ugräifer um Kommunikatiounskanal tëscht dem Client an dem Server ze sëtzen.
De Client ka sech als de Server virstellen, an de Server ka sech als de Client virstellen. A emuléiert e Paar Schlësselen a béid Richtungen.
Da gesäit den Ugräifer all Traffic a kann de Traffic "editéieren".
Zum Beispill änneren d'Adress wou Dir Sue schéckt oder d'Passwuert vun der Online Banking kopéiert oder "objectionable" Inhalt blockéieren.
Fir sou Ugräifer ze bekämpfen, si si mat enger ëffentlecher Datebank mat ëffentleche Schlëssele fir all https Site erauskomm.
All Browser "kennt" iwwer d'Existenz vu ronn 200 esou Datenbanken. Dëst ass virinstalléiert an all Browser.
"Wëssen" gëtt vun engem ëffentleche Schlëssel vun all Zertifika ënnerstëtzt. Dat ass, d'Verbindung mat all spezifeschen Zertifizéierungsautoritéit kann net gefälscht ginn.

Elo gëtt et en einfache Verständnis wéi Dir SSL fir https benotzt.
Wann Dir Äert Gehir benotzt, gëtt et kloer wéi déi speziell Servicer eppes an dëser Struktur hacken. Mä et wäert hinnen monstréis Efforten kascht.
An Organisatiounen méi kleng wéi d'NSA oder CIA - et ass bal onméiglech den existente Schutzniveau ze hacken, och fir VIP'en.

Ech wäert och iwwer ssh Verbindungen derbäi. Et gi keng ëffentlech Schlësselen do, also wat kënnt Dir maachen? D'Thema gëtt op zwou Weeër geléist.
Optioun ssh-by-Passwuert:
Wärend der éischter Verbindung sollt de ssh Client warnen datt mir en neien ëffentleche Schlëssel vum ssh Server hunn.
A während weider Verbindungen, wann d'Warnung "neien ëffentleche Schlëssel vum ssh-Server" erschéngt, heescht dat datt se probéieren Iech oflauschteren.
Oder Dir sidd op Är éischt Verbindung oflauschtert, awer elo kommunizéiert Dir mam Server ouni Intermédiairen.
Eigentlech, wéinst der Tatsaach, datt d'Tatsaach vun Oflauschterskandal einfach, séier an ouni Ustrengung opgedeckt ass, gëtt dësen Attack nëmmen a spezielle Fäll fir e spezifesche Client benotzt.

Optioun ssh-by-key:
Mir huelen e Flash Drive, schreiwen de private Schlëssel fir den ssh-Server op et (et gi Begrëffer a vill wichteg Nuancen fir dëst, awer ech schreiwen e Bildungsprogramm, net d'Benotzungsinstruktiounen).
Mir loossen den ëffentleche Schlëssel op der Maschinn wou den ssh Client wäert sinn a mir halen et och geheim.
Mir bréngen de Flash Drive op de Server, setzen se an, kopéiert de private Schlëssel, a verbrennt de Flash Drive a verdeelen d'Asche op de Wand (oder op d'mannst mat Nullen formatéieren).
Dat ass alles - no sou enger Operatioun wäert et onméiglech sinn esou eng ssh Verbindung ze hacken. Natierlech wäert et an 10 Joer méiglech sinn Traffic op engem Supercomputer ze gesinn - awer dat ass eng aner Geschicht.

Ech entschëllege mech fir den Offtopic.

Also elo datt d'Theorie bekannt ass. Ech soen Iech iwwer de Flux fir en SSL Zertifika ze kreéieren.

Mat "openssl genrsa" erstellen mir e private Schlëssel an "Blanks" fir den ëffentleche Schlëssel.
Mir schécken d'"Blanks" un eng Drëtt Partei Firma, un déi mir ongeféier $ 9 fir den einfachsten Zertifika bezuelen.

No e puer Stonnen kréie mir eisen "ëffentlechen" Schlëssel an eng Rei vu verschiddene ëffentleche Schlëssele vun dëser Drëtt Partei Firma.

Firwat soll eng Drëtt Partei Firma fir d'Aschreiwung vu mengem ëffentleche Schlëssel bezuelen ass eng separat Fro, mir wäerten et net hei betruecht.

Elo ass et kloer wat d'Bedeitung vun der Inscriptioun ass:

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

Den "/etc/ssl" Dossier enthält all d'Dateien fir ssl Themen.
domain1.com - Domain Numm.
2018 ass d'Joer vun der Schlësselkreatioun.
"Schlëssel" - Bezeechnung datt d'Datei e private Schlëssel ass.

An d'Bedeitung vun dësem Fichier:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com - Domain Numm.
2018 ass d'Joer vun der Schlësselkreatioun.
chained - Bezeechnung datt et eng Kette vun ëffentleche Schlëssele gëtt (déi éischt ass eisen ëffentleche Schlëssel an de Rescht sinn dat wat vun der Firma koum déi den ëffentleche Schlëssel erausginn huet).
crt - Bezeechnung datt et e fäerdege Certificat ass (ëffentlech Schlëssel mat techneschen Erklärungen).

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

Dës Astellung gëtt net an dësem Fall benotzt, awer als Beispill geschriwwen.

Well e Feeler an dësem Parameter féiert dozou datt Spam vun Ärem Server geschéckt gëtt (ouni Äre Wëllen).

Da beweist jidderengem datt Dir net schëlleg sidd.

recipient_delimiter = +

Vill Leit wëssen et vläicht net, awer dëst ass e Standard Charakter fir E-Mailen ze klasséieren, an et gëtt vun de meeschte modernen Mailserveren ënnerstëtzt.

Zum Beispill, wann Dir eng Mailbox "[Email geschützt]"probéieren ze schécken"[Email geschützt]"- kuckt wat dovunner kënnt.

inet_protocols = ipv4

Dëst kéint duerchernee ginn.

Mä et ass net nëmmen esou. All nei Domain ass par défaut nëmmen IPv4, da schalten ech IPv6 fir all eenzel separat un.

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

Hei präziséieren mir datt all erakommen Mail un d'Dovecot geet.
An d'Regele fir Domain, Mailbox, Alias ​​- kuckt an der Datebank.

/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

Elo weess postfix datt Mail fir weider schéckt nëmmen no Autorisatioun mat dovecot akzeptéiert ginn.

Ech verstinn wierklech net wierklech firwat dat hei duplizéiert gëtt. Mir hu schonn alles präziséiert, wat am "virtuellen_transport" gebraucht gëtt.

Awer de Postfix System ass ganz al - wahrscheinlech ass et e Réckgang aus den alen Deeg.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Dëst kann fir all Mail Server anescht konfiguréiert ginn.

Ech hunn 3 Mail-Server zur Verfügung an dës Astellunge si ganz anescht wéinst verschiddene Benotzungsfuerderunge.

Dir musst et suergfälteg konfiguréieren - soss kënnt de Spam bei Iech eran, oder nach méi schlëmm - Spam kënnt vun Iech eraus.

# SPF
policyd-spf_time_limit = 3600

Astellung fir e puer Plugin am Zesummenhang mat der SPF vun erakommen Bréiwer ze kontrolléieren.

# 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

D'Astellung ass datt mir eng DKIM Ënnerschrëft mat all erausginn E-Maile mussen ubidden.

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

Dëst ass e Schlësseldetail am Bréifrouting wann Dir Bréiwer aus PHP Scripte schéckt.

Datei "/etc/postfix/sdd_transport.pcre":

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

Op der lénker Säit sinn regulär Ausdréck. Riets ass e Label deen de Bréif markéiert.
Postfix am Aklang mat der Label - wäert e puer méi Configuratioun Linnen fir eng spezifesch Bréif Rechnung huelen.

Wéi genee Postfix fir e spezifesche Bréif nei konfiguréiert gëtt, gëtt an "master.cf" uginn.

D'Linnen 4, 5, 6 sinn d'Haaptrei. Am Numm vun deem Domaine mir de Bréif schécken, setzen mir dëse Label.
Awer de "vu" Feld gëtt net ëmmer an PHP Scripten am alen Code uginn. Da kënnt de Benotzernumm zur Rettung.

Den Artikel ass scho extensiv - ech wëll net ofgelenkt ginn andeems Dir nginx + fpm opstellt.

Kuerz, fir all Site setzen mir säin eegene Linux-Benotzer Besëtzer. An deementspriechend Äre fpm-Pool.

Fpm-Pool benotzt all Versioun vu php (et ass super wann Dir um selwechte Server verschidde Versioune vu php a souguer verschidde php.ini fir Nopeschsäiten ouni Probleemer benotze kënnt).

Also, e spezifesche Linux-Benotzer "www-domain2" huet eng Websäit domain2.com. Dësem Site huet e Code fir E-Mailen ze schécken ouni de Feld vun ze spezifizéieren.

Also, och an dësem Fall, ginn d'Bréiwer richteg geschéckt a kommen ni am Spam.

Meng "/etc/postfix/master.cf" gesäit esou aus:

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

D'Datei gëtt net voll zur Verfügung gestallt - et ass scho ganz grouss.
Ech hu just festgestallt wat geännert gouf.

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}

Dëst sinn Astellungen am Zesummenhang mat Spamassasin, méi iwwer dat méi spéit.

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

Mir erlaben Iech op de Mail Server iwwer port 587 ze konnektéieren.
Fir dëst ze maachen, musst Dir Iech aloggen.

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

SPF Check aktivéieren.

apt-get install postfix-policyd-spf-python

Loosst eis de Package fir SPF Kontrollen uewen installéieren.

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

An dëst ass déi interessantst Saach. Dëst ass d'Fäegkeet fir Bréiwer fir eng spezifesch Domain vun enger spezifescher IPv4/IPv6 Adress ze schécken.

Dëst gëtt gemaach fir d'Wuel vun rDNS. rDNS ass de Prozess fir eng String no IP Adress ze kréien.
A fir Mail gëtt dës Fonktioun benotzt fir ze bestätegen datt den Helo genau mat der rDNS vun der Adress entsprécht, aus där d'E-Mail geschéckt gouf.

Wann den Helo net mat der E-Mail-Domain entsprécht am Numm vun deem de Bréif geschéckt gouf, ginn Spam-Punkte ausgezeechent.

Helo entsprécht net rDNS - vill Spam Punkte ginn ausgezeechent.
Deementspriechend muss all Domain seng eege IP Adress hunn.
Fir OVH - an der Konsole ass et méiglech rDNS ze spezifizéieren.
Fir tech.ru - d'Thema gëtt duerch Ënnerstëtzung geléist.
Fir AWS gëtt d'Thema duerch Ënnerstëtzung geléist.
"inet_protocols" an "smtp_bind_address6" - mir aktivéieren IPv6 Support.
Fir IPv6 musst Dir och rDNS registréieren.
"syslog_name" - an dëst ass fir d'Logbicher ze liesen.

Kafen Certificaten Ech recommandéieren hei.

Astelle Postfix + Dovecot Link hei.

SPF Astellung.

=============================

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

Mysql opsetzen, d'Pakete selwer installéieren.

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

disable_plaintext_auth = yes
auth_mechanisms = plain login

Autorisatioun ass nëmmen verschlësselte.

Datei "/etc/dovecot/conf.d/10-mail.conf"

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

Hei gi mir d'Lagerplaz fir d'Bréiwer un.

Ech wëll datt se an Dateien gespäichert ginn an no Domain gruppéiert ginn.

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

Dëst ass d'Haaptdovecot Konfiguratiounsdatei.
Hei deaktivéiere mir onsécher Verbindungen.
An aktivéiert sécher Verbindungen.

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

Opstellung ssl. Mir weisen datt ssl néideg ass.
An de Certificat selwer. An e wichtegen Detail ass déi "lokal" Direktiv. Gëtt un wéi ee SSL-Zertifika ze benotzen wann Dir mat engem lokalen IPv4 verbënnt.

Iwwregens, IPv6 ass net hei konfiguréiert, ech korrigéieren dës Ofdreiwung spéider.
XX.XX.XX.X5 (Domain2) - kee Certificat. Fir Clienten ze verbannen, musst Dir domain1.com spezifizéieren.
XX.XX.XX.X2 (Domain3) - et gëtt e Certificat, Dir kënnt domain1.com oder domain3.com spezifizéieren fir Clienten ze verbannen.

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

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Dëst wäert fir Spamassassin an Zukunft gebraucht ginn.

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

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Dëst ass en Antispam Plugin. Néideg fir Training Spamassasin zu der Zäit vun Transfert op / aus der "Spam" Dossier.

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

protocol pop3 {
}

Et gëtt just esou e Fichier.

Datei "/etc/dovecot/conf.d/20-lmtp.conf"

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

Astellung lmtp.

Datei "/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 Trainingsastellungen zum Zäitpunkt vum Transfert an/vum Spam Dossier.

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

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

E Fichier deen spezifizéiert wat mat erakommen Bréiwer ze maachen.

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

require ["fileinto", "mailbox"];

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

Dir musst d'Datei kompiléieren: "sievec default.sieve".

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

Spezifizéieren sql Dateien fir Autorisatioun.
An de Fichier selwer gëtt als Autorisatiounsmethod benotzt.

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

Dëst entsprécht ähnlechen Astellunge fir Postfix.

Datei "/etc/dovecot/dovecot.conf"

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

Main Configuratiounsdatei.
Déi wichteg Saach ass datt mir hei uginn - Protokoller addéieren.

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

apt-get install spamassassin spamc

Loosst eis d'Packagen installéieren.

adduser spamd --disabled-login

Loosst eis e Benotzer am Numm addéieren.

systemctl enable spamassassin.service

Mir aktivéieren automatesch Luede Spamassassin Service op Luede.

Datei "/etc/default/spamassassin":

CRON=1

Andeems Dir automatesch Aktualiséierung vu Regelen "par défaut" aktivéiert.

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

Dir musst eng Datebank "sa" an mysql erstellen mam Benotzer "sa" mam Passwuert "Passwuert" (ersetzen duerch eppes adäquate).

report_safe - dëst schéckt e Bericht iwwer Spam E-Mail anstatt e Bréif.
use_bayes sinn spamassassin Maschinn Léieren Astellunge.

Déi verbleiwen Spamassassin Astellunge goufen virdru am Artikel benotzt.

General setting "spamassassin".
Iwwert déi nei Spam E-Mailen an den IMAP "Spam" Dossier ze plënneren.
Iwwer eng einfach Kombinatioun vun Dovecot + SpamAssassin.
Ech recommandéieren d'Spamassasin Léiertheorie ze liesen wann Dir Bréiwer an imap Ordner bewegt (an ech recommandéieren et net ze benotzen).

============= Appel un d'Gemeinschaft ==============

Ech wéilt och eng Iddi an d'Gemeinschaft werfen, wéi een de Sécherheetsniveau vu weidergeleete Bréiwer erhéijen. Well ech sou déif an d'Thema Mail ënnerdaach sinn.

Fir datt de Benotzer e Paar Schlësselen op sengem Client ka kreéieren (Outlook, Thunderbird, Browser-Plugin, ...). Ëffentlech a privat. Ëffentlech - schéckt op DNS. Privat - retten op de Client. Mail-Server kéinten en ëffentleche Schlëssel benotze fir un e spezifeschen Empfänger ze schécken.

A fir géint Spam mat esou Bréiwer ze schützen (jo, de Mailserver kann den Inhalt net gesinn) - Dir musst 3 Regelen aféieren:

  1. Obligatoresch real DKIM Ënnerschrëft, obligatoresch SPF, obligatoresch rDNS.
  2. En neuralt Netzwierk zum Thema Antispam Training + eng Datebank dofir op der Client Säit.
  3. De Verschlësselungsalgorithmus muss esou sinn datt d'Sendsäit muss 100 Mol méi CPU-Kraaft op Verschlësselung verbréngen wéi déi Empfangssäit.

Zousätzlech zu ëffentleche Bréiwer, entwéckelt e Standard Propositiounsbréif "fir sécher Korrespondenz unzefänken." Ee vun de Benotzer (Mailbox) schéckt e Bréif mat engem Unhang an eng aner Mailbox. De Bréif enthält eng Textpropositioun fir e séchere Kommunikatiounskanal fir Korrespondenz an den ëffentleche Schlëssel vum Besëtzer vun der Mailbox ze starten (mat engem private Schlëssel op der Client Säit).

Dir kënnt souguer e puer Schlëssele speziell fir all Korrespondenz maachen. Den Empfänger Benotzer kann dës Offer akzeptéieren a säin ëffentleche Schlëssel schécken (och speziell fir dës Korrespondenz gemaach). Als nächst schéckt den éischte Benotzer e Service Kontrollbréif (verschlësselte mam ëffentleche Schlëssel vum zweete Benotzer) - nom Empfang vun deem den zweete Benotzer de geformte Kommunikatiounskanal zouverlässeg betruechte kann. Als nächst schéckt den zweete Benotzer e Kontrollbréif - an dann kann den éischte Benotzer och de geformte Kanal sécher betruechten.

Fir d'Interceptioun vu Schlësselen op der Strooss ze bekämpfen, muss de Protokoll d'Méiglechkeet ubidden fir op d'mannst een ëffentleche Schlëssel mat engem Flash Drive ze iwwerdroen.

An dat Wichtegst ass datt alles funktionnéiert (d'Fro ass "wien wäert et bezuelen?"):
Gitt Postzertifikater ab $ 10 fir 3 Joer. Wat erlaabt dem Sender an den dns unzeginn datt "meng ëffentlech Schlësselen do sinn." A si ginn Iech d'Méiglechkeet eng sécher Verbindung ze starten. Zur selwechter Zäit ass esou Verbindungen gratis ze akzeptéieren.
Gmail ass endlech seng Benotzer monetiséieren. Fir $ 10 pro 3 Joer - d'Recht fir sécher Korrespondenzkanäl ze kreéieren.

============== Conclusioun ==============

Fir de ganzen Artikel ze testen, wollt ech en dedizéierten Server fir e Mount lounen an en Domain mat engem SSL Zertifika kafen.

Awer d'Liewensëmstänn hunn sech entwéckelt sou datt dëst Thema fir 2 Méint gedauert huet.
An dofir, wéi ech erëm Fräizäit hat, hunn ech décidéiert den Artikel esou ze verëffentlechen, amplaz ze riskéieren, datt d'Publikatioun nach e Joer laang dauert.

Wann et zimmlech vill Froen gëtt wéi "awer dat ass net genuch detailléiert beschriwwen", da wäert et wahrscheinlech Kraaft ginn en dedizéierten Server mat engem neien Domain an engem neien SSL Zertifika ze huelen an et nach méi detailléiert ze beschreiwen an, meeschtens wichteg, identifizéieren all vermësst wichteg Detailer.

Ech géif och gären Feedback iwwert Iddien iwwer Post Certificaten kréien. Wann Dir d'Iddi gär hutt, probéieren ech d'Kraaft ze fannen fir en Entworf fir rfc ze schreiwen.

Wann Dir grouss Deeler vun engem Artikel kopéiert, gitt e Link op dësen Artikel.
Wann Dir an eng aner Sprooch iwwersetzt, gitt e Link op dësen Artikel.
Ech probéieren et selwer op Englesch ze iwwersetzen a Kräizreferenzen ze loossen.


Source: will.com

Setzt e Commentaire