Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + Aml-rhyngwynebau + SpamAssassin-learn + Bind

Mae'r erthygl hon yn ymwneud â sut i sefydlu gweinydd post modern.
Postfix + Colomendy. SPF + DKIM + rDNS. Gyda IPv6.
Gydag amgryptio TSL. Gyda chefnogaeth ar gyfer parthau lluosog - rhan gyda thystysgrif SSL go iawn.
Gydag amddiffyniad gwrth-spam a sgôr gwrth-spam uchel gan weinyddion post eraill.
Yn cefnogi rhyngwynebau corfforol lluosog.
Gydag OpenVPN, y mae'r cysylltiad ag ef trwy IPv4, ac sy'n darparu IPv6.

Os nad ydych chi eisiau dysgu'r holl dechnolegau hyn, ond eisiau sefydlu gweinydd o'r fath, yna mae'r erthygl hon ar eich cyfer chi.

Nid yw'r erthygl yn gwneud unrhyw ymdrech i egluro pob manylyn. Mae'r esboniad yn mynd i'r hyn nad yw wedi'i ffurfweddu'n safonol neu sy'n bwysig o safbwynt y defnyddiwr.

Mae'r cymhelliant i sefydlu gweinydd post wedi bod yn freuddwyd hir i mi. Efallai bod hyn yn swnio'n dwp, ond IMHO, mae'n llawer gwell na breuddwydio am gar newydd o'ch hoff frand.

Mae dau gymhelliant ar gyfer sefydlu IPv6. Mae angen i arbenigwr TG ddysgu technolegau newydd yn gyson er mwyn goroesi. Hoffwn wneud fy nghyfraniad cymedrol i'r frwydr yn erbyn sensoriaeth.

Y cymhelliant ar gyfer sefydlu OpenVPN yw cael IPv6 i weithio ar y peiriant lleol.
Y cymhelliad dros sefydlu sawl rhyngwyneb corfforol yw bod gen i un rhyngwyneb ar fy ngwasanaethwr “araf ond anghyfyngedig” ac un arall “cyflym ond gyda thariff”.

Y cymhelliant ar gyfer sefydlu gosodiadau Bind yw bod fy ISP yn darparu gweinydd DNS ansefydlog, ac mae google hefyd weithiau'n methu. Rwyf am weinydd DNS sefydlog ar gyfer defnydd personol.

Cymhelliant i ysgrifennu erthygl - ysgrifennais ddrafft 10 mis yn ôl, ac rwyf eisoes wedi edrych arno ddwywaith. Hyd yn oed os yw’r awdur ei angen yn rheolaidd, mae’n debygol iawn y bydd ei angen ar eraill hefyd.

Nid oes ateb cyffredinol ar gyfer gweinydd post. Ond byddaf yn ceisio ysgrifennu rhywbeth fel “gwnewch hyn ac yna, pan fydd popeth yn gweithio fel y dylai, taflwch y pethau ychwanegol.”

Mae gan y cwmni tech.ru weinydd Colocation. Mae'n bosibl cymharu ag OVH, Hetzner, AWS. I ddatrys y broblem hon, bydd cydweithrediad â tech.ru yn llawer mwy effeithiol.

Mae Debian 9 wedi'i osod ar y gweinydd.

Mae gan y gweinydd 2 ryngwyneb `eno1` ac `eno2`. Mae'r cyntaf yn anghyfyngedig, ac mae'r ail yn gyflym, yn y drefn honno.

Mae yna 3 chyfeiriad IP statig, XX.XX.XX.X0 a XX.XX.XX.X1 a XX.XX.XX.X2 ar y rhyngwyneb `eno1` a XX.XX.XX.X5 ar y rhyngwyneb `eno2` .

Ar gael XXXX:XXXX:XXXX:XXXX::/64 neilltuwyd cronfa o gyfeiriadau IPv6 sy'n cael eu neilltuo i'r rhyngwyneb `eno1` ac ohono XXXX:XXXX:XXXX:XXXX:1:2::/96 i `eno2` ar fy nghais i.

Mae yna 3 parth `domain1.com`, `domain2.com`, `domain3.com`. Mae tystysgrif SSL ar gyfer `domain1.com` a `domain3.com`.

Mae gen i gyfrif Google yr hoffwn gysylltu fy mlwch post ag ef[e-bost wedi'i warchod]` (derbyn post ac anfon post yn uniongyrchol o'r rhyngwyneb gmail).
Rhaid cael blwch post`[e-bost wedi'i warchod]`, copi o'r e-bost yr wyf am ei weld yn fy gmail. Ac mae'n anaml gallu anfon rhywbeth ar ran `[e-bost wedi'i warchod]` trwy'r rhyngwyneb gwe.

Rhaid cael blwch post`[e-bost wedi'i warchod]`, y bydd Ivanov yn ei ddefnyddio o'i iPhone.

Rhaid i e-byst a anfonir gydymffurfio â'r holl ofynion gwrth-spam modern.
Rhaid darparu'r lefel uchaf o amgryptio mewn rhwydweithiau cyhoeddus.
Dylai fod cefnogaeth IPv6 ar gyfer anfon a derbyn llythyrau.
Dylai fod SpamAssassin na fydd byth yn dileu e-byst. A bydd naill ai'n bownsio neu'n sgipio neu'n ei anfon i ffolder “Sbam” IMAP.
Rhaid ffurfweddu awto-ddysgu SpamAssassin: os symudaf lythyren i'r ffolder Spam, bydd yn dysgu o hyn; os byddaf yn symud llythyr o'r ffolder Spam, bydd yn dysgu o hyn. Dylai canlyniadau hyfforddiant SpamAssassin ddylanwadu a yw'r llythyren yn dod i ben yn y ffolder Spam.
Rhaid i sgriptiau PHP allu anfon post ar ran unrhyw barth ar weinydd penodol.
Dylai fod gwasanaeth openvpn, gyda'r gallu i ddefnyddio IPv6 ar gleient nad oes ganddo IPv6.

Yn gyntaf mae angen i chi ffurfweddu rhyngwynebau a llwybro, gan gynnwys IPv6.
Yna bydd angen i chi ffurfweddu OpenVPN, a fydd yn cysylltu trwy IPv4 ac yn rhoi cyfeiriad IPv6 statig-real i'r cleient. Bydd gan y cleient hwn fynediad i'r holl wasanaethau IPv6 ar y gweinydd a mynediad i unrhyw adnoddau IPv6 ar y Rhyngrwyd.
Yna bydd angen i chi ffurfweddu Postfix i anfon llythyrau + SPF + DKIM + rDNS a phethau bach tebyg eraill.
Yna bydd angen i chi ffurfweddu Dovecot a ffurfweddu Multidomain.
Yna bydd angen i chi ffurfweddu SpamAssassin a ffurfweddu hyfforddiant.
Yn olaf, gosodwch Bind.

============ Aml-ryngwynebau ===========

I ffurfweddu rhyngwynebau, mae angen i chi ysgrifennu hwn yn “/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

Gellir cymhwyso'r gosodiadau hyn ar unrhyw weinydd yn tech.ru (gydag ychydig o gydlynu gyda chefnogaeth) a bydd yn gweithio ar unwaith fel y dylai.

Os oes gennych brofiad o sefydlu pethau tebyg ar gyfer Hetzner, OVH, mae'n wahanol yno. Yn fwy anodd.

eno1 yw enw cerdyn rhwydwaith #1 (araf ond diderfyn).
eno2 yw enw cerdyn rhwydwaith #2 (cyflym, ond gyda thariff).
tun0 yw enw'r cerdyn rhwydwaith rhithwir gan OpenVPN.
XX.XX.XX.X0 - IPv4 #1 ar eno1.
XX.XX.XX.X1 - IPv4 #2 ar eno1.
XX.XX.XX.X2 - IPv4 #3 ar eno1.
XX.XX.XX.X5 - IPv4 #1 ar eno2.
XX.XX.XX.1 - porth IPv4.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 ar gyfer y gweinydd cyfan.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 ar gyfer eno2, mae popeth arall o'r tu allan yn mynd i eno1.
XXXX:XXXX:XXXX:XXXX::1 — Porth IPv6 (mae'n werth nodi y gellir/dylid gwneud hyn yn wahanol. Nodwch y switsh IPv6).
dns-nameservers - nodir 127.0.0.1 (oherwydd bod rhwymiad wedi'i osod yn lleol) a 213.248.1.6 (mae hyn o tech.ru).

“table eno1t” a “table eno2t” - ystyr y rheolau llwybr hyn yw y byddai traffig sy'n mynd i mewn trwy eno1 -> yn gadael trwyddo, a byddai traffig sy'n mynd i mewn trwy eno2 -> yn gadael trwyddo. A hefyd byddai cysylltiadau a gychwynnir gan y gweinydd yn mynd trwy eno1.

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

Gyda'r gorchymyn hwn rydym yn nodi bod unrhyw draffig annealladwy sy'n dod o dan unrhyw reol a nodir “table eno1t” -> yn cael ei anfon i'r rhyngwyneb eno1.

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

Gyda'r gorchymyn hwn rydym yn nodi y dylai unrhyw draffig a gychwynnir gan y gweinydd gael ei gyfeirio at y rhyngwyneb eno1.

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

Gyda'r gorchymyn hwn rydym yn gosod y rheolau ar gyfer marcio traffig.

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

Mae'r bloc hwn yn pennu ail IPv4 ar gyfer y rhyngwyneb eno1.

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

Gyda'r gorchymyn hwn rydym yn gosod y llwybr o gleientiaid OpenVPN i IPv4 lleol ac eithrio XX.XX.XX.X0.
Nid wyf yn deall o hyd pam mae'r gorchymyn hwn yn ddigon ar gyfer pob IPv4.

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

Dyma lle rydym yn gosod y cyfeiriad ar gyfer y rhyngwyneb ei hun. Bydd y gweinydd yn ei ddefnyddio fel cyfeiriad “allanol”. Ni chaiff ei ddefnyddio mewn unrhyw ffordd eto.

Pam mae " :1:1 :: " mor gymhleth? Fel bod OpenVPN yn gweithio'n gywir a dim ond ar gyfer hyn. Mwy am hyn yn nes ymlaen.

Ar bwnc porth - dyna sut mae'n gweithio ac mae hynny'n iawn. Ond y ffordd gywir yw nodi yma IPv6 y switsh y mae'r gweinydd wedi'i gysylltu ag ef.

Fodd bynnag, am ryw reswm mae IPv6 yn stopio gweithio os gwnaf hyn. Mae'n debyg bod hyn yn rhyw fath o broblem tech.ru.

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

Mae hyn yn ychwanegu cyfeiriad IPv6 at y rhyngwyneb. Os oes angen cant o gyfeiriadau arnoch, mae hynny'n golygu can llinell yn y ffeil hon.

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

Nodais gyfeiriadau ac is-rwydweithiau pob rhyngwyneb i'w gwneud yn glir.
eno1 - rhaid bod "/64" - oherwydd dyma ein cronfa gyfan o gyfeiriadau.
tun0 - rhaid i'r isrwyd fod yn fwy nag eno1. Fel arall, ni fydd yn bosibl ffurfweddu porth IPv6 ar gyfer cleientiaid OpenVPN.
eno2 - rhaid i'r isrwyd fod yn fwy na thun0. Fel arall, ni fydd cleientiaid OpenVPN yn gallu cyrchu cyfeiriadau IPv6 lleol.
Er eglurder, dewisais gam subnet o 16, ond os dymunwch, gallwch hyd yn oed wneud cam “1”.
Yn unol â hynny, 64+16 = 80, a 80+16 = 96.

Er mwy fyth o eglurder:
Mae XXXX:XXXX:XXXX:XXXX:1:1:BBBB:BBBB yn gyfeiriadau y dylid eu neilltuo i wefannau neu wasanaethau penodol ar y rhyngwyneb eno1.
Mae XXXX:XXXX:XXXX:XXXX:1:2:BBBB:BBBB yn gyfeiriadau y dylid eu neilltuo i wefannau neu wasanaethau penodol ar y rhyngwyneb eno2.
Mae XXXX:XXXX:XXXX:XXXX:1:3:BBBB:BBBB yn gyfeiriadau y dylid eu neilltuo i gleientiaid OpenVPN neu eu defnyddio fel cyfeiriadau gwasanaeth OpenVPN.

I ffurfweddu'r rhwydwaith, dylai fod yn bosibl ailgychwyn y gweinydd.
Mae newidiadau IPv4 yn cael eu codi wrth eu gweithredu (gwnewch yn siŵr ei lapio yn y sgrin - fel arall bydd y gorchymyn hwn yn chwalu'r rhwydwaith ar y gweinydd yn unig):

/etc/init.d/networking restart

Ychwanegu at ddiwedd y ffeil “/etc/iproute2/rt_tables”:

100 eno1t
101 eno2t

Heb hyn, ni allwch ddefnyddio tablau arfer yn y ffeil “/etc/network/interfaces”.
Rhaid i'r niferoedd fod yn unigryw ac yn llai na 65535.

Gellir newid newidiadau IPv6 yn hawdd heb ailgychwyn, ond i wneud hyn mae angen i chi ddysgu o leiaf dri gorchymyn:

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

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

Dyma osodiadau "sysctl" fy gweinydd. Gadewch imi nodi rhywbeth pwysig.

net.ipv4.ip_forward = 1

Heb hyn, ni fydd OpenVPN yn gweithio o gwbl.

net.ipv6.ip_nonlocal_bind = 1

Bydd unrhyw un sy'n ceisio rhwymo IPv6 (er enghraifft nginx) yn syth ar ôl i'r rhyngwyneb ddod i ben yn derbyn gwall. Nad yw y cyfeiriad hwn ar gael.

Er mwyn osgoi sefyllfa o'r fath, gwneir gosodiad o'r fath.

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

Heb y gosodiadau IPv6 hyn, nid yw traffig o'r cleient OpenVPN yn mynd allan i'r byd.

Mae gosodiadau eraill naill ai ddim yn berthnasol neu dydw i ddim yn cofio beth ydyn nhw.
Ond rhag ofn, byddaf yn ei adael “fel y mae.”

Er mwyn i newidiadau i'r ffeil hon gael eu codi heb ailgychwyn y gweinydd, mae angen i chi redeg y gorchymyn:

sysctl -p

Mwy o fanylion am reolau “bwrdd”: habr.com/post/108690

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

Nid yw OpenVPN IPv4 yn gweithio heb iptables.

Mae fy iptables fel hyn ar gyfer 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 yw fy nghyfeiriad IPv4 statig o'r peiriant lleol.
10.8.0.0/24 - IPv4 rhwydwaith openvpn. Cyfeiriadau IPv4 ar gyfer cleientiaid openvpn.
Mae cysondeb y rheolau yn bwysig.

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

Mae hwn yn gyfyngiad fel mai dim ond fi all ddefnyddio OpenVPN o fy IP statig.

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

I anfon pecynnau IPv4 ymlaen rhwng cleientiaid OpenVPN a'r Rhyngrwyd, mae angen i chi gofrestru un o'r gorchmynion hyn.

Ar gyfer gwahanol achosion, nid yw un o'r opsiynau yn addas.
Mae'r ddau orchymyn yn addas ar gyfer fy achos i.
Ar ôl darllen y ddogfennaeth, dewisais yr opsiwn cyntaf oherwydd ei fod yn defnyddio llai o CPU.

Er mwyn i holl osodiadau iptables gael eu codi ar ôl ailgychwyn, mae angen i chi eu cadw yn rhywle.

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

Ni ddewiswyd enwau o'r fath ar hap. Fe'u defnyddir gan y pecyn "iptables-persistent".

apt-get install iptables-persistent

Gosod y prif becyn OpenVPN:

apt-get install openvpn easy-rsa

Gadewch i ni sefydlu templed ar gyfer tystysgrifau (amnewidiwch eich gwerthoedd):

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

Gadewch i ni olygu gosodiadau templed y dystysgrif:

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

Creu tystysgrif gweinydd:

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

Gadewch i ni baratoi'r gallu i greu'r ffeiliau "client-name.opvn" terfynol:

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

Gadewch i ni baratoi sgript a fydd yn uno pob ffeil yn un ffeil 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

Creu'r cleient OpenVPN cyntaf:

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

Anfonir y ffeil “~/client-configs/files/client-name.ovpn” i ddyfais y cleient.

Ar gyfer cleientiaid iOS bydd angen i chi wneud y tric canlynol:
Rhaid i gynnwys y tag "tls-auth" fod heb sylwadau.
A hefyd rhowch “key-direction 1” yn union cyn y tag “tls-auth”.

Gadewch i ni ffurfweddu cyfluniad gweinydd OpenVPN:

cd ~/openvpn-ca/keys
cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/server.conf
mcedit /etc/openvpn/server.conf

# Listen port
port 1194

# Protocol
proto tcp-server

# IP tunnel
dev tun0
tun-ipv6
push tun-ipv6

# Master certificate
ca ca.crt

# Server certificate
cert server.crt

# Server private key
key server.key

# Diffie-Hellman parameters
dh dh2048.pem

# Allow clients to communicate with each other
client-to-client

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

# Run client-specific script on connection and disconnection
script-security 2
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
client-disconnect "/usr/bin/sudo -u root /etc/openvpn/server-clientdisconnect.sh"

# Server mode and client subnets
server 10.8.0.0 255.255.255.0
server-ipv6 XXXX:XXXX:XXXX:XXXX:1:3::/80
topology subnet

# IPv6 routes
push "route-ipv6 XXXX:XXXX:XXXX:XXXX::/64"
push "route-ipv6 2000::/3"

# DNS (for Windows)
# These are OpenDNS
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

# Configure all clients to redirect their default network gateway through the VPN
push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway ipv6" #For iOS

# Don't need to re-read keys and re-create tun at restart
persist-key
persist-tun

# Ping every 10s. Timeout of 120s.
keepalive 10 120

# Enable compression
comp-lzo

# User and group
user vpn
group vpn

# Log a short status
status openvpn-status.log

# Logging verbosity
##verb 4

# Custom config
tls-auth ta.key 0
cipher DES-EDE3-CBC

Mae angen hyn er mwyn gosod cyfeiriad sefydlog ar gyfer pob cleient (ddim yn angenrheidiol, ond rwy'n ei ddefnyddio):

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

Y manylion mwyaf anodd ac allweddol.

Yn anffodus, nid yw OpenVPN yn gwybod eto sut i ffurfweddu porth IPv6 yn annibynnol ar gyfer cleientiaid.
Mae'n rhaid i chi “â llaw” anfon hwn ymlaen ar gyfer pob cleient.

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

Ffeil “/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

Ffeil “/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

Mae'r ddwy sgript yn defnyddio'r ffeil “/etc/openvpn/variables”:

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

Rwy'n ei chael hi'n anodd cofio pam ei fod wedi'i ysgrifennu fel hyn.

Nawr mae netmask = 112 yn edrych yn rhyfedd (dylai fod yn 96 iawn yno).
Ac mae'r rhagddodiad yn rhyfedd, nid yw'n cyfateb i'r rhwydwaith tun0.
Ond iawn, gadawaf hi fel y mae.

cipher DES-EDE3-CBC

Nid yw hyn at ddant pawb - dewisais y dull hwn o amgryptio'r cysylltiad.

Dysgwch fwy am sefydlu OpenVPN IPv4.

Dysgwch fwy am sefydlu OpenVPN IPv6.

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

Gosod y prif becyn:

apt-get install postfix

Wrth osod, dewiswch "safle rhyngrwyd".

Mae fy "/etc/postfix/main.cf" yn edrych fel hyn:

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

Gadewch i ni edrych ar fanylion y ffurfwedd hon.

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

Yn ôl trigolion Khabrovsk, mae’r bloc hwn yn cynnwys “gwybodaeth anghywir a thraethodau ymchwil anghywir.”Dim ond 8 mlynedd ar ôl dechrau fy ngyrfa y dechreuais ddeall sut mae SSL yn gweithio.

Felly, byddaf yn cymryd y rhyddid i ddisgrifio sut i ddefnyddio SSL (heb ateb y cwestiynau "Sut mae'n gweithio?" a "Pam mae'n gweithio?").

Sail amgryptio modern yw creu pâr allweddol (dau llinyn hir iawn o nodau).

Mae un “allwedd” yn breifat, a'r allwedd arall yn “cyhoeddus”. Rydym yn cadw'r allwedd breifat yn gyfrinachol iawn. Rydym yn dosbarthu'r allwedd gyhoeddus i bawb.

Gan ddefnyddio allwedd gyhoeddus, gallwch amgryptio llinyn o destun fel mai dim ond perchennog yr allwedd breifat all ei ddadgryptio.
Wel, dyna holl sail y dechnoleg.

Cam #1 - gwefannau https.
Wrth gyrchu gwefan, mae'r porwr yn dysgu gan weinydd y we mai https yw'r wefan ac felly'n gofyn am allwedd gyhoeddus.
Mae'r gweinydd gwe yn rhoi'r allwedd gyhoeddus. Mae'r porwr yn defnyddio'r allwedd gyhoeddus i amgryptio'r http-cais a'i anfon.
Dim ond y rhai sydd â'r allwedd breifat sy'n gallu darllen cynnwys http-cais, hynny yw, dim ond y gweinydd y gwneir y cais iddo.
Mae Http-request yn cynnwys o leiaf URI. Felly, os yw gwlad yn ceisio cyfyngu mynediad nid i'r wefan gyfan, ond i dudalen benodol, yna mae hyn yn amhosibl ei wneud ar gyfer gwefannau https.

Cam #2 - ymateb wedi'i amgryptio.
Mae'r gweinydd gwe yn darparu ateb y gellir ei ddarllen yn hawdd ar y ffordd.
Mae'r ateb yn hynod o syml - mae'r porwr yn lleol yn cynhyrchu'r un pâr allwedd preifat-cyhoeddus ar gyfer pob gwefan https.
Ac ynghyd â'r cais am allwedd gyhoeddus y wefan, mae'n anfon ei allwedd gyhoeddus leol.
Mae'r gweinydd gwe yn ei gofio ac, wrth anfon http-response, yn ei amgryptio ag allwedd gyhoeddus cleient penodol.
Nawr dim ond perchennog allwedd breifat porwr y cleient (hynny yw, y cleient ei hun) all ddadgryptio http-ymateb.

Cam Rhif 3 - sefydlu cysylltiad diogel trwy sianel gyhoeddus.
Mae yna wendid yn enghraifft Rhif 2 - nid oes dim yn atal y rhai sy'n dymuno'n dda rhag rhyng-gipio cais http a golygu gwybodaeth am yr allwedd gyhoeddus.
Felly, bydd y cyfryngwr yn gweld yn glir holl gynnwys negeseuon a anfonwyd ac a dderbyniwyd nes bod y sianel gyfathrebu yn newid.
Mae delio â hyn yn hynod o syml - anfonwch allwedd gyhoeddus y porwr fel neges wedi'i hamgryptio ag allwedd gyhoeddus y gweinydd gwe.
Yna mae'r gweinydd gwe yn anfon ymateb yn gyntaf fel “mae'ch allwedd gyhoeddus fel hyn” ac yn amgryptio'r neges hon gyda'r un allwedd gyhoeddus.
Mae’r porwr yn edrych ar yr ymateb – os derbynnir y neges “eich allwedd gyhoeddus fel hyn” – yna mae hyn yn warant 100% bod y sianel gyfathrebu hon yn ddiogel.
Pa mor ddiogel ydyw?
Mae creu sianel gyfathrebu mor ddiogel yn digwydd ar gyflymder o ping*2. Er enghraifft 20ms.
Rhaid i'r ymosodwr gael allwedd breifat un o'r pleidiau ymlaen llaw. Neu dewch o hyd i allwedd breifat mewn cwpl o filieiliadau.
Bydd hacio un allwedd breifat fodern yn cymryd degawdau ar uwchgyfrifiadur.

Cam #4 - cronfa ddata gyhoeddus o allweddi cyhoeddus.
Yn amlwg, yn y stori gyfan hon mae cyfle i ymosodwr eistedd ar y sianel gyfathrebu rhwng y cleient a'r gweinydd.
Gall y cleient esgus mai ef yw'r gweinydd, a gall y gweinydd esgus mai ef yw'r cleient. Ac efelychu pâr o allweddi i'r ddau gyfeiriad.
Yna bydd yr ymosodwr yn gweld yr holl draffig ac yn gallu “golygu” y traffig.
Er enghraifft, newidiwch y cyfeiriad lle i anfon arian neu gopïo'r cyfrinair o fancio ar-lein neu rwystro cynnwys “gwrthwynebadwy”.
Er mwyn brwydro yn erbyn ymosodwyr o'r fath, fe wnaethant lunio cronfa ddata gyhoeddus gydag allweddi cyhoeddus ar gyfer pob gwefan https.
Mae pob porwr yn “gwybod” am fodolaeth tua 200 o gronfeydd data o’r fath. Daw hwn wedi'i osod ymlaen llaw ym mhob porwr.
Ategir “Gwybodaeth” gan allwedd gyhoeddus o bob tystysgrif. Hynny yw, ni ellir ffugio'r cysylltiad â phob awdurdod ardystio penodol.

Nawr mae dealltwriaeth syml o sut i ddefnyddio SSL ar gyfer https.
Os ydych chi'n defnyddio'ch ymennydd, fe ddaw'n amlwg sut y gall y gwasanaethau arbennig hacio rhywbeth yn y strwythur hwn. Ond bydd yn costio ymdrechion gwrthun iddynt.
A sefydliadau llai na'r NSA neu CIA - mae bron yn amhosibl hacio'r lefel bresennol o amddiffyniad, hyd yn oed ar gyfer pobl bwysig.

Byddaf hefyd yn ychwanegu am gysylltiadau ssh. Nid oes allweddi cyhoeddus yno, felly beth allwch chi ei wneud? Mae'r mater yn cael ei ddatrys mewn dwy ffordd.
Opsiwn ssh-by-password:
Yn ystod y cysylltiad cyntaf, dylai'r cleient ssh rybuddio bod gennym allwedd gyhoeddus newydd o'r gweinydd ssh.
Ac yn ystod cysylltiadau pellach, os bydd y rhybudd “allwedd gyhoeddus newydd o'r gweinydd ssh” yn ymddangos, bydd yn golygu eu bod yn ceisio clustfeinio arnoch chi.
Neu cawsoch eich clustfeinio ar eich cysylltiad cyntaf, ond nawr rydych chi'n cyfathrebu â'r gweinydd heb gyfryngwyr.
Mewn gwirionedd, oherwydd y ffaith bod y ffaith bod tapio gwifrau yn cael ei ddatgelu'n hawdd, yn gyflym ac yn ddiymdrech, dim ond mewn achosion arbennig ar gyfer cleient penodol y defnyddir yr ymosodiad hwn.

Opsiwn ssh-by-key:
Rydyn ni'n cymryd gyriant fflach, yn ysgrifennu'r allwedd breifat ar gyfer y gweinydd ssh arno (mae yna dermau a llawer o arlliwiau pwysig ar gyfer hyn, ond rwy'n ysgrifennu rhaglen addysgol, nid cyfarwyddiadau defnyddio).
Rydyn ni'n gadael yr allwedd gyhoeddus ar y peiriant lle bydd y cleient ssh ac rydyn ni hefyd yn ei gadw'n gyfrinachol.
Rydyn ni'n dod â'r gyriant fflach i'r gweinydd, yn ei fewnosod, yn copïo'r allwedd breifat, ac yn llosgi'r gyriant fflach a gwasgaru'r lludw i'r gwynt (neu o leiaf ei fformatio â sero).
Dyna i gyd - ar ôl llawdriniaeth o'r fath bydd yn amhosibl hacio cysylltiad ssh o'r fath. Wrth gwrs, mewn 10 mlynedd bydd modd gweld traffig ar uwchgyfrifiadur - ond stori wahanol yw honno.

Ymddiheuraf am yr offtopic.

Felly nawr bod y ddamcaniaeth yn hysbys. Fe ddywedaf wrthych am y llif o greu tystysgrif SSL.

Gan ddefnyddio “openssl genrsa” rydym yn creu allwedd breifat a “bylchau” ar gyfer yr allwedd gyhoeddus.
Rydym yn anfon y “blychau” at gwmni trydydd parti, ac rydym yn talu tua $9 iddo am y dystysgrif symlaf.

Ar ôl ychydig oriau, rydym yn derbyn ein allwedd “cyhoeddus” a set o sawl allwedd gyhoeddus gan y cwmni trydydd parti hwn.

Mae pam y dylai cwmni trydydd parti dalu am gofrestru fy allwedd gyhoeddus yn gwestiwn ar wahân, ni fyddwn yn ei ystyried yma.

Nawr mae'n amlwg beth yw ystyr yr arysgrif:

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

Mae'r ffolder “/etc/ssl” yn cynnwys yr holl ffeiliau ar gyfer materion ssl.
domain1.com - enw parth.
2018 yw blwyddyn creu allweddol.
“allwedd” - dynodiad bod y ffeil yn allwedd breifat.

Ac ystyr y ffeil hon:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com - enw parth.
2018 yw blwyddyn creu allweddol.
cadwynog - dynodiad bod cadwyn o allweddi cyhoeddus (y cyntaf yw ein allwedd gyhoeddus a'r gweddill yw'r hyn a ddaeth gan y cwmni a gyhoeddodd yr allwedd gyhoeddus).
crt - dynodiad bod tystysgrif barod (allwedd gyhoeddus gydag esboniadau technegol).

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

Ni ddefnyddir y gosodiad hwn yn yr achos hwn, ond fe'i hysgrifennir fel enghraifft.

Oherwydd bydd gwall yn y paramedr hwn yn arwain at anfon sbam o'ch gweinydd (heb eich ewyllys).

Yna profwch i bawb nad ydych yn euog.

recipient_delimiter = +

Efallai na fydd llawer o bobl yn gwybod, ond mae hwn yn nod safonol ar gyfer graddio negeseuon e-bost, ac fe'i cefnogir gan y mwyafrif o weinyddion post modern.

Er enghraifft, os oes gennych flwch post "[e-bost wedi'i warchod]"ceisio anfon i"[e-bost wedi'i warchod]"- edrychwch beth ddaw ohono.

inet_protocols = ipv4

Gallai hyn fod yn ddryslyd.

Ond nid felly yn unig ydyw. Mae pob parth newydd yn ddiofyn yn IPv4 yn unig, yna rwy'n troi IPv6 ymlaen ar gyfer pob un ar wahân.

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

Yma rydym yn nodi bod yr holl bost sy'n dod i mewn yn mynd i colomendy.
Ac mae'r rheolau ar gyfer parth, blwch post, alias - edrychwch yn y gronfa ddata.

/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

Nawr mae postfix yn gwybod mai dim ond ar ôl awdurdodi colomendy y gellir derbyn post i'w anfon ymhellach.

Dwi wir ddim yn deall pam mae hyn yn cael ei ddyblygu yma. Rydym eisoes wedi nodi popeth sydd ei angen yn “virtual_transport”.

Ond mae'r system ôl-osod yn hen iawn - mae'n debyg ei fod yn adlais o'r hen ddyddiau.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Gellir ffurfweddu hwn yn wahanol ar gyfer pob gweinydd post.

Mae gennyf 3 gweinydd post ar gael i mi ac mae'r gosodiadau hyn yn wahanol iawn oherwydd gofynion defnydd gwahanol.

Mae angen i chi ei ffurfweddu'n ofalus - fel arall bydd sbam yn arllwys i chi, neu hyd yn oed yn waeth - bydd sbam yn arllwys oddi wrthych.

# SPF
policyd-spf_time_limit = 3600

Sefydlu ar gyfer rhai ategyn yn ymwneud â gwirio SPF llythyrau sy'n dod i mewn.

# 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

Y gosodiad yw bod yn rhaid i ni ddarparu llofnod DKIM gyda'r holl negeseuon e-bost sy'n mynd allan.

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

Mae hwn yn fanylyn allweddol wrth lwybro llythyrau wrth anfon llythyrau o sgriptiau PHP.

Ffeil “/etc/postfix/sdd_transport.pcre”:

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

Ar y chwith mae ymadroddion rheolaidd. Ar y dde mae label sy'n nodi'r llythyren.
Postfix yn unol â'r label - bydd yn cymryd i ystyriaeth ychydig yn fwy o linellau cyfluniad ar gyfer llythyren benodol.

Bydd sut yn union y bydd postfix yn cael ei ail-gyflunio ar gyfer llythyr penodol yn cael ei nodi yn “master.cf”.

Llinellau 4, 5, 6 yw'r prif rai. Ar ran pa barth yr ydym yn anfon y llythyr, rydym yn rhoi'r label hwn.
Ond nid yw'r maes “o” bob amser wedi'i nodi mewn sgriptiau PHP yn yr hen god. Yna daw'r enw defnyddiwr i'r adwy.

Mae'r erthygl eisoes yn helaeth - ni fyddwn am dynnu fy sylw trwy sefydlu nginx + fpm.

Yn fyr, ar gyfer pob safle rydym yn gosod ei berchennog linux-ddefnyddiwr ei hun. Ac yn unol â hynny eich fpm-pool.

Mae Fpm-pool yn defnyddio unrhyw fersiwn o php (mae'n wych pan allwch chi ddefnyddio gwahanol fersiynau o php ar yr un gweinydd a hyd yn oed php.ini gwahanol ar gyfer gwefannau cyfagos heb broblemau).

Felly, mae gan ddefnyddiwr linux penodol “www-domain2” wefan domain2.com. Mae gan y wefan hon god ar gyfer anfon e-byst heb nodi'r maes o.

Felly, hyd yn oed yn yr achos hwn, bydd y llythyrau'n cael eu hanfon yn gywir ac ni fyddant byth yn sbam.

Mae fy "/etc/postfix/master.cf" yn edrych fel hyn:

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

Ni ddarperir y ffeil yn llawn - mae eisoes yn fawr iawn.
Dim ond yr hyn a newidiwyd a nodais.

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}

Mae'r rhain yn osodiadau sy'n ymwneud â spamassasin, mwy am hynny yn nes ymlaen.

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

Rydym yn caniatáu ichi gysylltu â'r gweinydd post trwy borth 587.
I wneud hyn, rhaid i chi fewngofnodi.

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

Galluogi gwiriad SPF.

apt-get install postfix-policyd-spf-python

Gadewch i ni osod y pecyn ar gyfer gwiriadau SPF uchod.

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

A dyma'r peth mwyaf diddorol. Dyma'r gallu i anfon llythyrau ar gyfer parth penodol o gyfeiriad IPv4/IPv6 penodol.

Gwneir hyn er mwyn rDNS. rDNS yw'r broses o dderbyn llinyn yn ôl cyfeiriad IP.
Ac ar gyfer post, defnyddir y nodwedd hon i gadarnhau bod yr helo yn cyfateb yn union i rDNS y cyfeiriad yr anfonwyd yr e-bost ohono.

Os nad yw'r helo yn cyfateb i'r parth e-bost yr anfonwyd y llythyr ar ei ran, dyfernir pwyntiau sbam.

Nid yw Helo yn cyfateb i rDNS - dyfernir llawer o bwyntiau sbam.
Yn unol â hynny, rhaid i bob parth gael ei gyfeiriad IP ei hun.
Ar gyfer OVH - yn y consol mae'n bosibl nodi rDNS.
Ar gyfer tech.ru - mae'r mater yn cael ei ddatrys trwy gefnogaeth.
Ar gyfer AWS, mae'r mater yn cael ei ddatrys trwy gefnogaeth.
“inet_protocols” a “smtp_bind_address6” - rydym yn galluogi cefnogaeth IPv6.
Ar gyfer IPv6 mae angen i chi gofrestru rDNS hefyd.
“syslog_name” - ac mae hyn er hwylustod darllen logiau.

Prynu tystysgrifau Rwy'n argymell yma.

Sefydlu dolen postfix+dovecot yma.

Gosod SPF.

============ Colomendy ============

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

Sefydlu mysql, gosod y pecynnau eu hunain.

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

disable_plaintext_auth = yes
auth_mechanisms = plain login

Dim ond amgryptio yr awdurdodir.

Ffeil “/etc/dovecot/conf.d/10-mail.conf”

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

Yma rydym yn nodi lleoliad storio'r llythyrau.

Rwyf am iddynt gael eu storio mewn ffeiliau a'u grwpio fesul parth.

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

Dyma brif ffeil cyfluniad y colomendy.
Yma rydym yn analluogi cysylltiadau heb eu diogelu.
A galluogi cysylltiadau diogel.

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

Sefydlu ssl. Rydym yn nodi bod angen ssl.
A'r dystysgrif ei hun. A manylyn pwysig yw'r gyfarwyddeb “lleol”. Yn nodi pa dystysgrif SSL i'w defnyddio wrth gysylltu â pha IPv4 lleol.

Gyda llaw, nid yw IPv6 wedi'i ffurfweddu yma, byddaf yn cywiro'r hepgoriad hwn yn nes ymlaen.
XX.XX.XX.X5 (parth2) - dim tystysgrif. I gysylltu cleientiaid mae angen i chi nodi parth1.com.
XX.XX.XX.X2 (domain3) - mae tystysgrif, gallwch nodi domain1.com neu domain3.com i gysylltu cleientiaid.

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

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Bydd angen hyn ar gyfer spamassassin yn y dyfodol.

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

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Mae hwn yn ategyn gwrth-spam. Mae ei angen ar gyfer hyfforddiant spamassasin ar adeg trosglwyddo i/o'r ffolder “Spam”.

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

protocol pop3 {
}

Dim ond ffeil o'r fath sydd.

Ffeil “/etc/dovecot/conf.d/20-lmtp.conf”

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

Sefydlu lmtp.

Ffeil “/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
}

Lleoliadau hyfforddi Spamassasin ar adeg trosglwyddo i/o'r ffolder Spam.

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

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

Ffeil sy'n nodi beth i'w wneud â llythyrau sy'n dod i mewn.

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

require ["fileinto", "mailbox"];

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

Mae angen i chi lunio'r ffeil: “sievec default.sieve”.

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

Pennu ffeiliau sql i'w hawdurdodi.
Ac mae'r ffeil ei hun yn cael ei ddefnyddio fel dull awdurdodi.

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

Mae hyn yn cyfateb i osodiadau tebyg ar gyfer postfix.

Ffeil "/etc/dovecot/dovecot.conf"

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

Prif ffeil ffurfweddu.
Y peth pwysig yw ein bod yn nodi yma - ychwanegu protocolau.

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

apt-get install spamassassin spamc

Gadewch i ni osod y pecynnau.

adduser spamd --disabled-login

Gadewch i ni ychwanegu defnyddiwr y mae ei ran.

systemctl enable spamassassin.service

Rydym yn galluogi auto-lwytho gwasanaeth spammassassin ar lwytho.

Ffeil "/etc/default/spamassassin":

CRON=1

Trwy alluogi diweddaru rheolau yn awtomatig “yn ddiofyn”.

Ffeil “/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

Mae angen i chi greu cronfa ddata “sa” yn mysql gyda'r defnyddiwr “sa” gyda'r cyfrinair “cyfrinair” (yn lle rhywbeth digonol).

report_safe - bydd hwn yn anfon adroddiad o e-bost sbam yn lle llythyr.
gosodiadau dysgu peiriant spamassassin yw use_bayes.

Defnyddiwyd y gosodiadau spamassassin sy'n weddill yn gynharach yn yr erthygl.

Gosodiad cyffredinol "spamassassin".
Ynglŷn â symud e-byst Sbam newydd i ffolder “Sbam” IMAP.
Ynglŷn â chyfuniad syml o Dovecot + SpamAssassin.
Rwy'n argymell darllen theori dysgu spamassasin wrth symud llythyrau mewn ffolderi imap (ac nid wyf yn argymell ei ddefnyddio).

============ Apêl i'r gymuned ===========

Hoffwn hefyd daflu syniad i’r gymuned ynglŷn â sut i gynyddu lefel diogelwch llythyrau a anfonir ymlaen. Gan fy mod wedi ymgolli mor ddwfn yn y pwnc post.

Er mwyn i'r defnyddiwr allu creu pâr o allweddi ar ei gleient (outlook, thunderbird, porwr-plugin, ...). Cyhoeddus a phreifat. Cyhoeddus - anfon at DNS. Preifat - arbed ar y cleient. Byddai gweinyddwyr post yn gallu defnyddio allwedd gyhoeddus i'w hanfon at dderbynnydd penodol.

Ac i amddiffyn rhag sbam gyda llythyrau o'r fath (ie, ni fydd y gweinydd post yn gallu gweld y cynnwys) - bydd angen i chi gyflwyno 3 rheol:

  1. Llofnod DKIM go iawn gorfodol, SPF gorfodol, rDNS gorfodol.
  2. Rhwydwaith niwral ar bwnc hyfforddiant gwrth-spam + cronfa ddata ar ei gyfer ar ochr y cleient.
  3. Rhaid i'r algorithm amgryptio fod yn golygu bod yn rhaid i'r ochr anfon dreulio 100 gwaith yn fwy o bŵer CPU ar amgryptio na'r ochr sy'n derbyn.

Yn ogystal â llythyrau cyhoeddus, datblygu llythyr cynnig safonol “i ddechrau gohebiaeth ddiogel.” Mae un o'r defnyddwyr (blwch post) yn anfon llythyr gydag atodiad i flwch post arall. Mae'r llythyr yn cynnwys cynnig testun i gychwyn sianel gyfathrebu ddiogel ar gyfer gohebiaeth ac allwedd gyhoeddus perchennog y blwch post (gydag allwedd breifat ar ochr y cleient).

Gallwch hyd yn oed wneud cwpl o allweddi yn benodol ar gyfer pob gohebiaeth. Gall y defnyddiwr sy'n ei dderbyn dderbyn y cynnig hwn ac anfon ei allwedd gyhoeddus (sydd hefyd wedi'i gwneud yn benodol ar gyfer yr ohebiaeth hon). Nesaf, mae'r defnyddiwr cyntaf yn anfon llythyr rheoli gwasanaeth (wedi'i amgryptio ag allwedd gyhoeddus yr ail ddefnyddiwr) - ar ôl ei dderbyn gall yr ail ddefnyddiwr ystyried bod y sianel gyfathrebu a ffurfiwyd yn ddibynadwy. Nesaf, mae'r ail ddefnyddiwr yn anfon llythyr rheoli - ac yna gall y defnyddiwr cyntaf hefyd ystyried y sianel ffurfiedig yn ddiogel.

Er mwyn brwydro yn erbyn rhyng-gipio allweddi ar y ffordd, rhaid i'r protocol ddarparu ar gyfer y posibilrwydd o drosglwyddo o leiaf un allwedd gyhoeddus gan ddefnyddio gyriant fflach.

A'r peth pwysicaf yw ei fod i gyd yn gweithio (y cwestiwn yw "pwy fydd yn talu amdano?"):
Rhowch dystysgrifau post yn dechrau ar $10 am 3 blynedd. A fydd yn caniatáu i'r anfonwr nodi yn y dns bod “fy allweddi cyhoeddus drosodd.” A byddant yn rhoi cyfle i chi ddechrau cysylltiad diogel. Ar yr un pryd, mae derbyn cysylltiadau o'r fath yn rhad ac am ddim.
Mae gmail o'r diwedd yn rhoi gwerth ariannol ar ei ddefnyddwyr. Am $10 y 3 blynedd - yr hawl i greu sianeli gohebiaeth diogel.

============ Casgliad ============

I brofi'r erthygl gyfan, roeddwn i'n mynd i rentu gweinydd pwrpasol am fis a phrynu parth gyda thystysgrif SSL.

Ond datblygodd amgylchiadau bywyd felly llusgodd y mater hwn ymlaen am 2 fis.
Ac felly, pan gefais amser rhydd eto, penderfynais gyhoeddi’r erthygl fel y mae, yn hytrach na risg y byddai’r cyhoeddiad yn llusgo ymlaen am flwyddyn arall.

Os oes cryn dipyn o gwestiynau fel “ond nid yw hyn yn cael ei ddisgrifio'n ddigon manwl”, yna mae'n debyg y bydd cryfder i gymryd gweinydd pwrpasol gyda pharth newydd a thystysgrif SSL newydd a'i ddisgrifio'n fwy manwl fyth ac, y rhan fwyaf. yn bwysig, nodwch yr holl fanylion pwysig coll.

Hoffwn hefyd gael adborth ar syniadau am dystysgrifau post. Os ydych chi'n hoffi'r syniad, byddaf yn ceisio dod o hyd i'r cryfder i ysgrifennu drafft ar gyfer rfc.

Wrth gopïo rhannau helaeth o erthygl, darparwch ddolen i'r erthygl hon.
Wrth gyfieithu i unrhyw iaith arall, darparwch ddolen i'r erthygl hon.
Byddaf yn ceisio ei gyfieithu i'r Saesneg fy hun ac yn gadael croesgyfeiriadau.


Ffynhonnell: hab.com

Ychwanegu sylw