Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + Multi-koòdone + SpamAssassin-aprann + Bind

Atik sa a se sou fason yo mete kanpe yon sèvè lapòs modèn.
Postfix + Dovecot. SPF + DKIM + rDNS. Avèk IPv6.
Avèk chifreman TSL. Avèk sipò pou plizyè domèn - pati ak yon sètifika SSL reyèl.
Avèk pwoteksyon antispam ak yon evalyasyon segondè antispam soti nan lòt serveurs lapòs.
Sipòte plizyè interfaces fizik.
Avèk OpenVPN, koneksyon ak ki se atravè IPv4, epi ki bay IPv6.

Si ou pa vle aprann tout teknoloji sa yo, men ou vle mete kanpe tankou yon sèvè, Lè sa a, atik sa a se pou ou.

Atik la pa fè okenn tantativ pou eksplike tout detay. Eksplikasyon an ale nan sa ki pa configuré kòm estanda oswa ki enpòtan nan pwen de vi konsomatè a.

Motivasyon pou mete sou pye yon sèvè pa lapòs se te yon rèv ki dire lontan. Sa a ka sanble estipid, men IMHO, li pi bon pase rèv nan yon machin nouvo soti nan mak pi renmen ou.

Gen de motivasyon pou mete kanpe IPv6. Yon espesyalis IT bezwen aprann nouvo teknoloji toujou ap nan lòd yo siviv. Mwen ta renmen fè kontribisyon modès mwen nan batay kont sansi a.

Motivasyon pou mete OpenVPN se jis pou fè IPv6 travay sou machin lokal la.
Motivasyon pou mete kanpe plizyè interfaces fizik se ke sou sèvè mwen an mwen gen yon sèl koòdone "ralanti men san limit" ak yon lòt "vit men ak yon tarif".

Motivasyon pou mete anviwònman Bind se ke ISP mwen an bay yon sèvè DNS enstab, epi google tou pafwa echwe. Mwen vle yon sèvè DNS ki estab pou itilizasyon pèsonèl.

Motivasyon pou ekri yon atik - Mwen te ekri yon bouyon 10 mwa de sa, epi mwen te deja gade li de fwa. Menm si otè a regilyèman bezwen li, gen yon gwo pwobabilite ke lòt moun pral bezwen li tou.

Pa gen okenn solisyon inivèsèl pou yon sèvè lapòs. Men, mwen pral eseye ekri yon bagay tankou "fè sa a epi lè sa a, lè tout bagay ap mache jan li ta dwe, jete bagay siplemantè yo."

Konpayi tech.ru a gen yon sèvè Colocation. Li posib pou konpare ak OVH, Hetzner, AWS. Pou rezoud pwoblèm sa a, koperasyon ak tech.ru pral pi efikas.

Debian 9 enstale sou sèvè a.

Sèvè a gen 2 koòdone `eno1` ak `eno2`. Premye a se san limit, ak dezyèm lan se vit, respektivman.

Gen 3 adrès IP estatik, XX.XX.XX.X0 ak XX.XX.XX.X1 ak XX.XX.XX.X2 sou koòdone `eno1` ak XX.XX.XX.X5 sou koòdone `eno2` .

Disponib XXXX:XXXX:XXXX:XXXX::/64 yon rezèvwa adrès IPv6 yo te asiyen nan koòdone `eno1` ak nan li XXXX:XXXX:XXXX:XXXX:1:2::/96 yo te asiyen nan `eno2` sou demann mwen an.

Gen 3 domèn `domain1.com`, `domain2.com`, `domain3.com`. Gen yon sètifika SSL pou `domain1.com` ak `domain3.com`.

Mwen gen yon kont Google ke mwen ta renmen konekte bwat lèt mwen an[imèl pwoteje]` (resevwa lapòs epi voye lapòs dirèkteman nan koòdone gmail la).
Dwe gen yon bwat lèt[imèl pwoteje]`, yon kopi imèl mwen vle wè nan gmail mwen an. Epi li ra pou kapab voye yon bagay sou non `[imèl pwoteje]` atravè koòdone entènèt la.

Dwe gen yon bwat lèt[imèl pwoteje]`, ki Ivanov pral itilize nan iPhone li.

Imèl yo voye yo dwe konfòme yo ak tout kondisyon modèn antispam.
Dwe gen pi wo nivo chifreman yo bay nan rezo piblik yo.
Ta dwe gen sipò IPv6 pou tou de voye ak resevwa lèt.
Ta dwe gen yon SpamAssassin ki pap janm efase imèl. Epi li pral swa rebondi oswa sote oswa voye nan katab la "Spam" IMAP.
SpamAssassin oto-learning dwe configuré: si mwen deplase yon lèt nan katab la Spam, li pral aprann nan sa a; si mwen deplase yon lèt ki soti nan Katab Spam, li pral aprann nan sa a. Rezilta fòmasyon SpamAssassin ta dwe enfliyanse si lèt la fini nan katab Spam la.
Scripts PHP yo dwe kapab voye lapòs sou non nenpòt domèn sou yon sèvè bay yo.
Ta dwe gen yon sèvis openvpn, ak kapasite pou itilize IPv6 sou yon kliyan ki pa gen IPv6.

Premye ou bezwen konfigirasyon interfaces ak routage, ki gen ladan IPv6.
Lè sa a, w ap bezwen konfigirasyon OpenVPN, ki pral konekte atravè IPv4 epi bay kliyan an yon adrès IPv6 estatik-reyèl. Kliyan sa a pral gen aksè a tout sèvis IPv6 sou sèvè a ak aksè a nenpòt resous IPv6 sou entènèt la.
Lè sa a, w ap bezwen konfigirasyon Postfix pou voye lèt + SPF + DKIM + rDNS ak lòt ti bagay ki sanble.
Lè sa a, w ap bezwen konfigirasyon Dovecot ak konfigirasyon Multidomain.
Lè sa a, w ap bezwen konfigirasyon SpamAssassin ak konfigirasyon fòmasyon.
Finalman, enstale Bind.

============= Multi-koòdone =============

Pou konfigirasyon interfaces, ou bezwen ekri sa a nan "/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

Anviwònman sa yo ka aplike sou nenpòt sèvè nan tech.ru (ak yon ti kowòdinasyon ak sipò) epi li pral imedyatman travay jan li ta dwe.

Si ou gen eksperyans mete kanpe bagay ki sanble pou Hetzner, OVH, li diferan la. Pi difisil.

eno1 se non kat rezo #1 (ralanti men san limit).
eno2 se non kat rezo #2 (vit, men ak yon tarif).
tun0 se non kat rezo vityèl ki soti nan OpenVPN.
XX.XX.XX.X0 - IPv4 #1 sou eno1.
XX.XX.XX.X1 - IPv4 #2 sou eno1.
XX.XX.XX.X2 - IPv4 #3 sou eno1.
XX.XX.XX.X5 - IPv4 #1 sou eno2.
XX.XX.XX.1 - IPv4 pòtay.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 pou tout sèvè a.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 pou eno2, tout lòt bagay ki soti deyò antre nan eno1.
XXXX:XXXX:XXXX:XXXX::1 - IPv6 pòtay (li vo anyen ke sa a ka / ta dwe fè yon fason diferan. Espesifye switch la IPv6).
dns-nameservers - 127.0.0.1 endike (paske bind enstale lokalman) ak 213.248.1.6 (sa a soti nan tech.ru).

"table eno1t" ak "table eno2t" - siyifikasyon wout-règle sa yo se ke trafik k ap antre nan eno1 -> ta soti nan li, ak trafik k ap antre nan eno2 -> ta soti nan li. Epi tou koneksyon inisye pa sèvè a ta ale nan eno1.

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

Avèk lòd sa a nou presize ke nenpòt trafik enkonpreyansib ki tonbe anba nenpòt règ ki make "tab eno1t" -> dwe voye nan koòdone eno1 la.

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

Avèk lòd sa a nou presize ke nenpòt trafik inisye pa sèvè a ta dwe dirije nan koòdone eno1 la.

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

Avèk lòd sa a nou mete règ yo pou make trafik.

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

Blòk sa a presize yon dezyèm IPv4 pou koòdone eno1 la.

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

Avèk lòd sa a nou mete wout la soti nan kliyan OpenVPN nan IPv4 lokal eksepte XX.XX.XX.X0.
Mwen toujou pa konprann poukisa kòmandman sa a ase pou tout IPv4.

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

Sa a se kote nou mete adrès la pou koòdone nan tèt li. Sèvè a pral sèvi ak li kòm yon adrès "sòtan". Yo pap itilize okenn fason ankò.

Poukisa ":1:1::" tèlman konplike? Se konsa, ke OpenVPN travay kòrèkteman epi sèlman pou sa a. Plis sou sa pita.

Sou sijè a nan pòtay - sa a ki jan li fonksyone ak sa a amann. Men, fason ki kòrèk la se endike isit la IPv6 nan switch la ki sèvè a konekte.

Sepandan, pou kèk rezon IPv6 sispann travay si mwen fè sa. Sa a se pwobableman yon kalite pwoblèm tech.ru.

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

Sa a se ajoute yon adrès IPv6 nan koòdone a. Si ou bezwen yon santèn adrès, sa vle di yon santèn liy nan dosye sa a.

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

Mwen te note adrès yo ak subnets nan tout interfaces pou fè li klè.
eno1 - dwe "/64"- paske sa a se tout pisin nou an nan adrès.
tun0 - sous-rezo a dwe pi gwo pase eno1. Sinon, li pa pral posib pou konfigirasyon yon pòtay IPv6 pou kliyan OpenVPN.
eno2 - sous-rezo a dwe pi gwo pase tun0. Sinon, kliyan OpenVPN yo p ap kapab jwenn aksè nan adrès IPv6 lokal yo.
Pou klè, mwen te chwazi yon etap subnet nan 16, men si ou vle, ou ka menm fè "1" etap.
An konsekans, 64+16 = 80, ak 80+16 = 96.

Pou plis klè toujou:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY se adrès ki ta dwe asiyen nan sit oswa sèvis espesifik sou koòdone eno1 la.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY se adrès ki ta dwe asiyen nan sit oswa sèvis espesifik sou koòdone eno2 la.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY se adrès ki ta dwe bay kliyan OpenVPN oswa itilize kòm adrès sèvis OpenVPN.

Pou konfigirasyon rezo a, li ta dwe posib pou rekòmanse sèvè a.
Chanjman IPv4 yo ranmase lè yo egzekite (asire w ou vlope li nan ekran - otreman lòd sa a pral tou senpleman aksidan rezo a sou sèvè a):

/etc/init.d/networking restart

Ajoute nan fen fichye a "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

San sa a, ou pa ka itilize tab koutim nan fichye "/etc/network/interfaces".
Nimewo yo dwe inik ak mwens pase 65535.

Chanjman IPv6 yo ka chanje fasil san yo pa rekòmanse, men pou fè sa ou bezwen aprann omwen twa kòmandman:

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

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

Sa yo se paramèt "sysctl" sèvè mwen an. Kite m 'montre yon bagay enpòtan.

net.ipv4.ip_forward = 1

San sa a, OpenVPN pa pral travay ditou.

net.ipv6.ip_nonlocal_bind = 1

Nenpòt moun ki eseye mare IPv6 (pa egzanp nginx) imedyatman apre koòdone a leve ap resevwa yon erè. Ke adrès sa a pa disponib.

Pou evite yon sitiyasyon konsa, yo fè yon anviwònman konsa.

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

San yo pa anviwònman IPv6 sa yo, trafik ki soti nan kliyan OpenVPN la pa ale nan mond lan.

Lòt paramèt yo swa pa enpòtan oswa mwen pa sonje pou sa yo ye.
Men, jis nan ka, mwen kite li "jan li ye."

Nan lòd pou chanjman nan dosye sa a yo dwe ranmase san yo pa rdemare sèvè a, ou bezwen kouri lòd la:

sysctl -p

Plis detay sou règ "tablo": habr.com/post/108690

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

OpenVPN IPv4 pa travay san iptables.

iptables mwen yo tankou sa a pou 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 se adrès IPv4 estatik mwen nan machin lokal la.
10.8.0.0/24 - IPv4 rezo openvpn. Adrès IPv4 pou kliyan openvpn.
Konsistans règ yo enpòtan.

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

Sa a se yon limit pou mwen sèlman ka itilize OpenVPN nan IP estatik mwen an.

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

Pou voye pake IPv4 ant kliyan OpenVPN ak entènèt la, ou bezwen anrejistre youn nan kòmandman sa yo.

Pou diferan ka, youn nan opsyon yo pa apwopriye.
Tou de kòmand yo apwopriye pou ka mwen an.
Apre mwen fin li dokiman an, mwen te chwazi premye opsyon a paske li itilize mwens CPU.

Nan lòd pou tout paramèt iptables yo dwe ranmase apre rdemare, ou bezwen sove yo yon kote.

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

Non sa yo pa te chwazi pa chans. Yo itilize pa "iptables-persistent" pake a.

apt-get install iptables-persistent

Enstale pake prensipal OpenVPN la:

apt-get install openvpn easy-rsa

Ann mete yon modèl pou sètifika (ranplase valè ou yo):

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

Ann edite paramèt modèl sètifika yo:

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

Kreye yon sètifika sèvè:

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

Ann prepare kapasite pou kreye final "client-name.opvn" dosye yo:

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

Ann prepare yon script ki pral rantre tout fichye yo nan yon sèl fichye opvn.

mcedit ~/client-configs/make_config.sh
chmod 700 ~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} 
    <(echo -e '<ca>') 
    ${KEY_DIR}/ca.crt 
    <(echo -e '</ca>n<cert>') 
    ${KEY_DIR}/.crt 
    <(echo -e '</cert>n<key>') 
    ${KEY_DIR}/.key 
    <(echo -e '</key>n<tls-auth>') 
    ${KEY_DIR}/ta.key 
    <(echo -e '</tls-auth>') 
    > ${OUTPUT_DIR}/.ovpn

Kreye premye kliyan OpenVPN la:

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

Dosye "~/client-configs/files/client-name.ovpn" voye nan aparèy kliyan an.

Pou kliyan iOS ou pral bezwen fè jwe fent sa a:
Kontni tag "tls-auth" la dwe san kòmantè.
Epi tou mete "kle-direksyon 1" imedyatman anvan tag "tls-auth".

Ann konfigirasyon konfigirasyon sèvè OpenVPN la:

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

Sa a nesesè yo nan lòd yo mete yon adrès estatik pou chak kliyan (pa nesesè, men mwen sèvi ak li):

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

Detay ki pi difisil ak kle.

Malerezman, OpenVPN poko konnen ki jan poukont li configured yon pòtay IPv6 pou kliyan yo.
Ou dwe "manyèlman" voye sa a pou chak kliyan.

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

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

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

Tou de scripts itilize fichye a "/etc/openvpn/variables":

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

Mwen twouve li difisil pou m sonje poukisa li ekri konsa.

Koulye a, netmask = 112 sanble etranj (li ta dwe 96 la menm).
Ak prefiks la se etranj, li pa matche ak rezo a tun0.
Men, oke, mwen pral kite li jan li ye.

cipher DES-EDE3-CBC

Sa a se pa pou tout moun - mwen te chwazi metòd sa a nan chifreman koneksyon an.

Aprann plis sou konfigirasyon OpenVPN IPv4.

Aprann plis sou konfigirasyon OpenVPN IPv6.

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

Enstale pake prensipal la:

apt-get install postfix

Lè w ap enstale, chwazi "sit entènèt".

"/etc/postfix/main.cf" mwen an sanble sa a:

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

Ann gade detay yo nan konfigirasyon sa a.

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

Dapre rezidan Khabrovsk, blòk sa a gen "moze enfòmasyon ak tèz kòrèk."Se sèlman 8 ane apre kòmansman karyè mwen mwen te kòmanse konprann ki jan SSL fonksyone.

Se poutèt sa, mwen pral pran libète pou dekri kijan pou itilize SSL (san yo pa reponn kesyon "Ki jan li fonksyone?" ak "Poukisa li travay?").

Baz la nan cryptage modèn se kreyasyon an nan yon pè kle (de kòd trè long nan karaktè).

Yon "kle" se prive, lòt kle a se "piblik". Nou kenbe kle prive a ak anpil atansyon sekrè. Nou distribye kle piblik la bay tout moun.

Sèvi ak yon kle piblik, ou ka ankripte yon seri tèks pou sèlman mèt kay la nan kle prive a ka dechifre li.
Oke, se tout baz teknoloji a.

Etap #1 - sit https.
Lè w ap jwenn aksè nan yon sit, navigatè a aprann nan men sèvè entènèt la ke sit la se https epi kidonk li mande yon kle piblik.
Sèvè entènèt la bay kle piblik la. Navigatè a sèvi ak kle piblik la pou ankripte demann http la epi voye li.
Kontni an nan yon http-demann ka sèlman li pa moun ki gen kle prive a, se sa ki, se sèlman sèvè a ke yo te fè demann lan.
Http-demann gen omwen yon URI. Se poutèt sa, si yon peyi ap eseye mete restriksyon sou aksè pa nan sit la tout antye, men nan yon paj espesifik, Lè sa a, sa a se enposib fè pou sit https.

Etap #2 - repons chiffres.
Sèvè entènèt la bay yon repons ki ka fasil pou li sou wout la.
Solisyon an trè senp - navigatè a jenere lokalman menm pè kle prive-piblik pou chak sit https.
Ak ansanm ak demann lan pou kle piblik sit la, li voye kle piblik lokal li yo.
Sèvè entènèt la sonje li epi, lè w ap voye repons http, li ankripte li ak kle piblik yon kliyan espesifik.
Koulye a, http-repons ka sèlman dechifre pa mèt kay la nan kle prive navigatè kliyan an (ki se, kliyan an tèt li).

Etap No 3 - etabli yon koneksyon an sekirite atravè yon chanèl piblik.
Gen yon vilnerabilite nan egzanp No 2 - pa gen anyen ki anpeche moun k ap fè bon volonte entèsepte yon demann http ak koreksyon enfòmasyon sou kle piblik la.
Kidonk, entèmedyè a pral wè klèman tout sa ki nan mesaj voye ak resevwa jiskaske chanèl kominikasyon an chanje.
Fè fas ak sa a se trè senp - jis voye kle piblik navigatè a kòm yon mesaj chiffres ak kle piblik sèvè entènèt la.
Lè sa a, sèvè entènèt la premye voye yon repons tankou "kle piblik ou a se tankou sa a" epi ankripte mesaj sa a ak menm kle piblik la.
Navigatè a gade repons lan - si mesaj "kle piblik ou a se tankou sa a" resevwa - Lè sa a, sa a se yon garanti 100% ke kanal kominikasyon sa a an sekirite.
Ki jan li an sekirite?
Kreyasyon an menm nan yon kanal kominikasyon an sekirite rive nan yon vitès nan ping * 2. Pou egzanp 20ms.
Atakè a dwe gen kle prive youn nan pati yo davans. Oswa jwenn yon kle prive nan yon koup de milisgond.
Hacking yon sèl kle prive modèn pral pran plizyè deseni sou yon supercomputer.

Etap #4 - baz done piblik kle piblik yo.
Li evidan, nan tout istwa sa a gen yon opòtinite pou yon atakè yo chita sou kanal la kominikasyon ant kliyan an ak sèvè a.
Kliyan an ka pran pòz sèvè a, epi sèvè a ka pran pòz li se kliyan an. Epi imite yon pè kle nan toude direksyon yo.
Lè sa a, atakè a pral wè tout trafik la epi yo pral kapab "edite" trafik la.
Pa egzanp, chanje adrès kote pou voye lajan an oswa kopye modpas ki soti nan bank sou entènèt oswa bloke kontni "reprèt".
Pou konbat atakè sa yo, yo te vini ak yon baz done piblik ak kle piblik pou chak sit https.
Chak navigatè "konnen" sou egzistans lan nan apeprè 200 baz done sa yo. Sa a vini pre-enstale nan chak navigatè.
"Konesans" apiye pa yon kle piblik ki soti nan chak sètifika. Sa vle di, koneksyon an ak chak otorite sètifikasyon espesifik pa ka fo.

Koulye a, gen yon konpreyansyon senp sou kouman yo sèvi ak SSL pou https.
Si ou sèvi ak sèvo ou, li pral vin klè ki jan sèvis espesyal yo ka Hack yon bagay nan estrikti sa a. Men, li pral koute yo efò kolosal.
Ak òganizasyon ki pi piti pase NSA a oswa CIA - li se prèske enposib Hack nivo a ki deja egziste nan pwoteksyon, menm pou VIPs.

Mwen pral ajoute tou sou koneksyon ssh. Pa gen kle piblik la, kisa ou ka fè? Pwoblèm nan rezoud nan de fason.
Opsyon ssh-pa-modpas:
Pandan premye koneksyon an, kliyan ssh la ta dwe avèti ke nou gen yon nouvo kle piblik ki soti nan sèvè ssh la.
Ak pandan plis koneksyon, si avètisman "nouvo kle piblik ki soti nan sèvè ssh la" parèt, sa pral vle di ke yo ap eseye ekout sou ou.
Oswa ou te ekoute sou premye koneksyon ou, men kounye a ou kominike ak sèvè a san entèmedyè.
Aktyèlman, akòz lefèt ke reyalite a nan wiretapping se fasil, byen vit ak efor revele, atak sa a yo itilize sèlman nan ka espesyal pou yon kliyan espesifik.

Opsyon ssh-pa-kle:
Nou pran yon kondwi flash, ekri kle prive a pou sèvè ssh la sou li (gen tèm ak yon anpil nan nuans enpòtan pou sa a, men mwen ekri yon pwogram edikasyon, pa enstriksyon pou itilize).
Nou kite kle piblik la sou machin nan kote kliyan ssh la pral ye epi nou tou kenbe li sekrè.
Nou pote flash kondwi a nan sèvè a, mete li, kopye kle prive a, epi boule flash kondwi a epi gaye sann yo nan van an (oswa omwen fòma li ak zewo).
Sa a tout - apre yon operasyon konsa li pral enposib Hack tankou yon koneksyon ssh. Natirèlman, nan 10 ane li pral posib yo wè trafik sou yon supercomputer - men sa a se yon istwa diferan.

Mwen eskize pou offtopic la.

Se konsa, kounye a ke se teyori a li te ye. Mwen pral di w sou koule nan kreye yon sètifika SSL.

Sèvi ak "openssl genrsa" nou kreye yon kle prive ak "vide" pou kle piblik la.
Nou voye "blanks" yo bay yon konpayi twazyèm pati, kote nou peye apeprè $9 pou sètifika ki pi senp la.

Apre kèk èdtan, nou resevwa kle "piblik" nou an ak yon seri plizyè kle piblik nan men konpayi twazyèm pati sa a.

Poukisa yo ta dwe yon konpayi twazyèm-pati peye pou anrejistreman kle piblik mwen an se yon kesyon separe, nou pa pral konsidere li isit la.

Koulye a, li klè ki siyifikasyon an nan inscription la se:

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

Katab "/etc/ssl" la gen tout dosye pou pwoblèm ssl.
domain1.com — non domèn.
2018 se ane kreyasyon kle.
"kle" - deziyasyon ke dosye a se yon kle prive.

Ak siyifikasyon dosye sa a:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com — non domèn.
2018 se ane kreyasyon kle.
chenn - deziyasyon ke gen yon chèn nan kle piblik (premye a se kle piblik nou an ak rès yo se sa ki soti nan konpayi an ki bay kle piblik la).
crt - deziyasyon ke gen yon sètifika pare-fè (kle piblik ak eksplikasyon teknik).

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

Anviwònman sa a pa itilize nan ka sa a, men li ekri kòm yon egzanp.

Paske yon erè nan paramèt sa a ap mennen nan voye spam nan sèvè ou a (san volonte ou).

Lè sa a, pwouve tout moun ke ou pa koupab.

recipient_delimiter = +

Anpil moun ka pa konnen, men sa a se yon karaktè estanda pou klasman imèl, epi li sipòte pa pifò serveurs lapòs modèn.

Pou egzanp, si ou gen yon bwat lèt "[imèl pwoteje]"eseye voye bay"[imèl pwoteje]"- Gade sa ki soti nan li.

inet_protocols = ipv4

Sa a ta ka konfizyon.

Men se pa sèlman konsa. Chak nouvo domèn se pa default sèlman IPv4, Lè sa a, mwen vire sou IPv6 pou chak youn separeman.

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

Isit la nou presize ke tout lapòs fèk ap rantre ale nan gwenye pijon.
Ak règ yo pou domèn, bwat lèt, alyas - gade nan baz done a.

/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

Koulye a, postfix konnen ke lapòs ka aksepte pou plis voye sèlman apre otorizasyon ak gwenye pijon.

Mwen reyèlman pa reyèlman konprann poukisa sa a se kopi isit la. Nou te deja espesifye tout sa ki nesesè nan "virtual_transport".

Men, sistèm postfix la trè fin vye granmoun - pwobableman li se yon throwback soti nan tan lontan yo.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Sa a ka configuré yon fason diferan pou chak sèvè lapòs.

Mwen gen 3 serveurs lapòs a jete mwen ak paramèt sa yo trè diferan akòz kondisyon itilizasyon diferan.

Ou bezwen konfigirasyon li ak anpil atansyon - otreman spam pral vide nan ou, oswa menm vin pi mal - spam pral vide soti nan ou.

# SPF
policyd-spf_time_limit = 3600

Mete kanpe pou kèk Plugin ki gen rapò ak tcheke SPF nan lèt fèk ap rantre yo.

# 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

Anviwònman an se ke nou dwe bay yon siyati DKIM ak tout imèl sortan yo.

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

Sa a se yon detay kle nan routage lèt lè w ap voye lèt ki soti nan script PHP.

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

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

Sou bò gòch la gen ekspresyon regilye. Sou bò dwat la se yon etikèt ki make lèt la.
Postfix an akò ak etikèt la - pral pran an kont yon kèk plis liy konfigirasyon pou yon lèt espesifik.

Nan "master.cf" pral endike kijan egzakteman postfix yo pral rekonfigire pou yon lèt espesifik.

Liy 4, 5, 6 yo se prensipal yo. Nan non ki domèn nou ap voye lèt la, nou mete etikèt sa a.
Men, jaden an "soti nan" pa toujou endike nan scripts PHP nan ansyen kòd la. Lè sa a, non itilizatè a vin sekou.

Atik la deja vaste - mwen pa ta vle distrè pa mete kanpe nginx + fpm.

Yon ti tan, pou chak sit nou mete pwòp pwopriyetè linux-itilizatè li yo. Epi kòmsadwa fpm-pool ou.

Fpm-pool itilize nenpòt vèsyon php (li bon lè sou menm sèvè a ou ka itilize diferan vèsyon php e menm diferan php.ini pou sit vwazen san pwoblèm).

Se konsa, yon espesifik linux-itilizatè "www-domain2" gen yon sit entènèt domain2.com. Sit sa a gen yon kòd pou voye imèl san yo pa espesifye jaden ki soti nan.

Se konsa, menm nan ka sa a, lèt yo pral voye kòrèkteman epi yo pa janm pral fini nan spam.

"/etc/postfix/master.cf" mwen an sanble sa a:

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

Fichye a pa bay an antye - li deja trè gwo.
Mwen sèlman te note sa ki te chanje.

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}

Sa yo se anviwònman ki gen rapò ak spamassasin, plis sou sa pita.

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

Nou pèmèt ou konekte ak sèvè lapòs la atravè pò 587.
Pou fè sa, ou dwe konekte.

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

Pèmèt SPF tcheke.

apt-get install postfix-policyd-spf-python

Ann enstale pake a pou chèk SPF pi wo a.

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

Ak sa a se bagay ki pi enteresan. Sa a se kapasite pou voye lèt pou yon domèn espesifik ki soti nan yon adrès espesifik IPv4/IPv6.

Sa a se fè pou dedomajman pou rDNS. rDNS se pwosesis pou resevwa yon kòd pa adrès IP.
Ak pou lapòs, yo itilize karakteristik sa a pou konfime ke elo a egzakteman matche ak rDNS adrès kote yo te voye imel la.

Si elo a pa matche ak domèn imel la sou non moun yo te voye lèt la, pwen spam yo akòde.

Helo pa matche ak rDNS - yo bay anpil pwen spam.
An konsekans, chak domèn dwe gen pwòp adrès IP li.
Pou OVH - nan konsole a li posib pou presize rDNS.
Pou tech.ru - pwoblèm nan rezoud atravè sipò.
Pou AWS, pwoblèm nan rezoud atravè sipò.
"inet_protocols" ak "smtp_bind_address6" - nou pèmèt sipò IPv6.
Pou IPv6 ou bezwen tou anrejistre rDNS.
"syslog_name" - ak sa a se pou fasilite lekti mòso bwa.

Achte sètifika Mwen rekòmande isit la.

Mete kanpe lyen postfix+dovecot isit la.

Anviwònman SPF.

============= Pijon =============

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

Mete kanpe mysql, enstale pakè yo tèt yo.

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

disable_plaintext_auth = yes
auth_mechanisms = plain login

Se sèlman kode otorizasyon.

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

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

Isit la nou endike kote depo pou lèt yo.

Mwen vle yo dwe estoke nan dosye ak gwoupe pa domèn.

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

Sa a se dosye prensipal la konfigirasyon gwenye pijon.
Isit la nou enfim koneksyon ki pa garanti.
Epi pèmèt koneksyon an sekirite.

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

Mete kanpe ssl. Nou endike ke ssl obligatwa.
Ak sètifika a li menm. Ak yon detay enpòtan se "lokal" direktiv la. Endike ki sètifika SSL pou itilize lè w konekte ak ki IPv4 lokal yo.

By wout la, IPv6 pa konfigirasyon isit la, mwen pral korije omisyon sa a pita.
XX.XX.XX.X5 (domain2) - pa gen okenn sètifika. Pou konekte kliyan ou bezwen presize domain1.com.
XX.XX.XX.X2 (domain3) - gen yon sètifika, ou ka presize domain1.com oswa domain3.com konekte kliyan.

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

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Sa a pral bezwen pou spamassassin nan tan kap vini an.

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

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Sa a se yon plugin antispam. Bezwen pou fòmasyon spamassasin nan moman transfere nan / soti nan katab la "Spam".

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

protocol pop3 {
}

Gen jis yon dosye konsa.

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

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

Mete kanpe lmtp.

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

Anviwònman fòmasyon Spamassasin nan moman transfere nan / soti nan katab la Spam.

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

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

Yon fichye ki presize sa pou w fè ak lèt ​​k ap vini yo.

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

require ["fileinto", "mailbox"];

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

Ou bezwen konpile dosye a: "sievec default.sieve".

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

Espesifye dosye sql pou otorizasyon.
Epi yo itilize dosye a li menm kòm yon metòd otorizasyon.

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

Sa a koresponn ak anviwònman menm jan an pou postfix.

Fichye "/etc/dovecot/dovecot.conf"

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

Fichye konfigirasyon prensipal la.
Bagay la enpòtan se ke nou endike isit la - ajoute pwotokòl.

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

apt-get install spamassassin spamc

Ann enstale pakè yo.

adduser spamd --disabled-login

Ann ajoute yon itilizatè sou non ki moun.

systemctl enable spamassassin.service

Nou pèmèt oto-chaje sèvis spamassassin sou chaj.

Fichye "/etc/default/spamassassin":

CRON=1

Pa pèmèt aktyalizasyon otomatik nan règ "pa default".

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

Ou bezwen kreye yon baz done "sa" nan mysql ak itilizatè "sa" ak modpas la "modpas" (ranplase ak yon bagay adekwa).

report_safe - sa a pral voye yon rapò sou imèl spam olye de yon lèt.
use_bayes se paramèt aprantisaj machin spamassassin.

Anviwònman spamassassin ki rete yo te itilize pi bonè nan atik la.

Anviwònman jeneral "spamassassin".
Konsènan deplase nouvo imèl Spam nan katab IMAP "Spam"..
Konsènan yon konbinezon senp nan Dovecot + SpamAssassin.
Mwen rekòmande li teyori aprantisaj spamassasin la lè w ap deplase lèt nan dosye imap (e mwen pa rekòmande pou itilize li).

============= Apèl bay kominote a ==============

Mwen ta renmen tou voye yon lide nan kominote a sou fason pou ogmante nivo sekirite lèt yo voye yo. Depi mwen se konsa pwofondman plonje nan sijè a nan lapòs.

Se konsa, itilizatè a ka kreye yon pè nan kle sou kliyan li (pespektiv, thunderbird, navigatè-plugin, ...). Piblik ak prive. Piblik - voye bay DNS. Prive - sove sou kliyan an. Sèvè lapòs yo ta kapab sèvi ak yon kle piblik pou voye bay yon moun k ap resevwa espesifik.

Ak pou pwoteje kont spam ak lèt ​​sa yo (wi, sèvè lapòs la pa pral kapab wè kontni an) - w ap bezwen prezante 3 règ:

  1. Obligatwa siyati DKIM reyèl, obligatwa SPF, obligatwa rDNS.
  2. Yon rezo neral sou sijè a nan fòmasyon antispam + yon baz done pou li sou bò kliyan an.
  3. Algorithm chifreman an dwe konsa ke bò k ap voye a dwe depanse 100 fwa plis CPU pouvwa sou chifreman pase bò k ap resevwa a.

Anplis lèt piblik, devlope yon lèt pwopozisyon estanda "pou kòmanse korespondans sekirite." Youn nan itilizatè yo (bwat lèt) voye yon lèt ak yon atachman nan yon lòt bwat lèt. Lèt la gen yon pwopozisyon tèks pou kòmanse yon kanal kominikasyon an sekirite pou korespondans ak kle piblik pwopriyetè bwat lèt la (ak yon kle prive sou bò kliyan an).

Ou ka menm fè yon koup nan kle espesyalman pou chak korespondans. Itilizatè moun k ap resevwa a ka aksepte òf sa a epi voye kle piblik li a (ki fèt tou espesyalman pou korespondans sa a). Apre sa, premye itilizatè a voye yon lèt kontwòl sèvis (ankripte ak kle piblik dezyèm itilizatè a) - lè li resevwa dezyèm itilizatè a ka konsidere kanal kominikasyon ki fòme a serye. Apre sa, itilizatè a dezyèm voye yon lèt kontwòl - ak Lè sa a, itilizatè a premye ka konsidere tou chanèl la fòme an sekirite.

Pou konbat entèsepsyon kle sou wout la, pwotokòl la dwe bay posibilite pou transmèt omwen yon kle piblik lè l sèvi avèk yon kondwi flash.

Ak sa ki pi enpòtan an se ke li tout travay (kesyon an se "ki moun ki pral peye pou li?"):
Antre sètifika lapòs kòmanse nan $10 pou 3 zan. Ki pral pèmèt moun k ap voye a endike nan dns yo ke "kle piblik mwen yo la." Epi yo pral ba ou opòtinite pou yo kòmanse yon koneksyon an sekirite. An menm tan an, aksepte koneksyon sa yo gratis.
gmail finalman monetize itilizatè li yo. Pou $10 pou chak 3 ane - dwa pou kreye chanèl korespondans an sekirite.

============= Konklizyon ==============

Pou teste tout atik la, mwen te pral lwe yon sèvè dedye pou yon mwa epi achte yon domèn ak yon sètifika SSL.

Men, sikonstans lavi devlope konsa pwoblèm sa a trennen sou pou 2 mwa.
Se konsa, lè m te gen tan lib ankò, mwen te deside pibliye atik la jan li ye a, olye m riske ke piblikasyon an ta trennen pou yon lòt ane.

Si gen anpil kesyon tankou "men sa a pa dekri an detay ase", Lè sa a, pral pwobableman gen fòs pou pran yon sèvè devwe ak yon nouvo domèn ak yon nouvo sètifika SSL epi dekri li an plis detay ak, pi fò. sa ki enpòtan, idantifye tout detay enpòtan ki manke yo.

Mwen ta renmen tou jwenn fidbak sou lide sou sètifika lapòs. Si ou renmen lide a, mwen pral eseye jwenn fòs pou ekri yon bouyon pou rfc.

Lè w kopye gwo pati nan yon atik, bay yon lyen ki mennen nan atik sa a.
Lè w ap tradui nan nenpòt lòt lang, bay yon lyen ki mennen nan atik sa a.
Mwen pral eseye tradui li nan lang angle tèt mwen epi kite kwa-referans.


Sous: www.habr.com

Add nouvo kòmantè