Дебиан + Постфик + Довецот + Мултидомаин + ССЛ + ИПв6 + ОпенВПН + Мулти-интерфацес + СпамАссассин-леарн + Бинд

Овај чланак говори о томе како да подесите модеран сервер за пошту.
Постфик + Довецот. СПФ + ДКИМ + рДНС. Са ИПв6.
Са ТСЛ енкрипцијом. Уз подршку за више домена - део са правим ССЛ сертификатом.
Са заштитом од безвредне поште и високом оценом против безвредне поште са других сервера поште.
Подржава више физичких интерфејса.
Са ОпенВПН-ом, веза са којим је преко ИПв4, а који обезбеђује ИПв6.

Ако не желите да научите све ове технологије, али желите да поставите такав сервер, онда је овај чланак за вас.

Чланак не покушава да објасни сваки детаљ. Објашњење се односи на оно што није конфигурисано као стандард или је важно са становишта потрошача.

Мотивација за постављање маил сервера је мој дугогодишњи сан. Ово можда звучи глупо, али ИМХО, много је боље него сањати о новом аутомобилу вашег омиљеног бренда.

Постоје две мотивације за постављање ИПв6. ИТ специјалиста мора стално да учи нове технологије да би преживео. Желео бих да дам свој скромни допринос борби против цензуре.

Мотивација за постављање ОпенВПН-а је само да ИПв6 ради на локалној машини.
Мотивација за подешавање неколико физичких интерфејса је то што на мом серверу имам један интерфејс „споро али неограничен“ и други „брз али са тарифом“.

Мотивација за подешавање Бинд подешавања је то што мој ИСП пружа нестабилан ДНС сервер, а Гоогле такође понекад не успе. Желим стабилан ДНС сервер за личну употребу.

Мотивација да напишем чланак - Написао сам нацрт пре 10 месеци и већ сам га два пута погледао. Чак и ако је аутору редовно потребна, постоји велика вероватноћа да ће и другима требати.

Не постоји универзално решење за сервер поште. Али покушаћу да напишем нешто попут „уради ово и онда, када све функционише како треба, избаци додатне ствари.“

Компанија тецх.ру има сервер за колокацију. Могуће је упоредити са ОВХ, Хетзнер, АВС. Да би се решио овај проблем, сарадња са тецх.ру ће бити много ефикаснија.

Дебиан 9 је инсталиран на серверу.

Сервер има 2 интерфејса `ено1` и `ено2`. Први је неограничен, а други је брз, респективно.

Постоје 3 статичне ИП адресе, КСКС.КСКС.КСКС.Кс0 и КСКС.КСКС.КСКС.Кс1 и КСКС.КСКС.КСКС.Кс2 на `ено1` интерфејсу и КСКС.КСКС.КСКС.Кс5 на `ено2` интерфејсу .

Доступно КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС::/64 скуп ИПв6 адреса које су додељене интерфејсу `ено1` и са њега КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС:1:2::/96 је додељено `ено2` на мој захтев.

Постоје 3 домена `домаин1.цом`, `домаин2.цом`, `домаин3.цом`. Постоји ССЛ сертификат за `домаин1.цом` и `домаин3.цом`.

Имам Гоогле налог са којим бих желео да повежем своје поштанско сандуче[емаил заштићен]` (примање поште и слање поште директно из гмаил интерфејса).
Мора постојати поштанско сандуче`[емаил заштићен]`, копија е-поште коју желим да видим у свом гмаил-у. И ретко се може послати нешто у име `[емаил заштићен]` преко веб интерфејса.

Мора постојати поштанско сандуче`[емаил заштићен]`, који ће Иванов користити са свог иПхоне-а.

Послате е-поруке морају бити у складу са свим савременим захтевима за заштиту од нежељене поште.
У јавним мрежама мора постојати највиши ниво енкрипције.
Требало би да постоји ИПв6 подршка и за слање и за примање писама.
Требало би да постоји СпамАссассин који никада неће избрисати е-пошту. И то ће или одскочити, прескочити или послати у ИМАП фасциклу „Нежељена пошта“.
СпамАссассин аутоматско учење мора бити конфигурисано: ако преместим писмо у фолдер Спам, оно ће научити из овога; ако преместим писмо из фасцикле Спам, научиће из овога. Резултати обуке за СпамАссассин би требало да утичу на то да ли ће писмо завршити у фасцикли Спам.
ПХП скрипте морају бити у могућности да шаљу пошту у име било ког домена на датом серверу.
Требало би да постоји опенвпн услуга, са могућношћу коришћења ИПв6 на клијенту који нема ИПв6.

Прво морате да конфигуришете интерфејсе и рутирање, укључујући ИПв6.
Затим ћете морати да конфигуришете ОпенВПН, који ће се повезати преко ИПв4 и обезбедити клијенту статички реалну ИПв6 адресу. Овај клијент ће имати приступ свим ИПв6 услугама на серверу и приступ свим ИПв6 ресурсима на Интернету.
Затим ћете морати да конфигуришете Постфик да шаље писма + СПФ + ДКИМ + рДНС и друге сличне ситнице.
Затим ћете морати да конфигуришете Довецот и конфигуришете Мултидомаин.
Затим ћете морати да конфигуришете СпамАссассин и конфигуришете обуку.
На крају, инсталирајте Бинд.

============= Мулти-интерфејси ==============

Да бисте конфигурисали интерфејсе, ово морате да напишете у „/етц/нетворк/интерфацес“.

# 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

Ова подешавања се могу применити на било ком серверу у тецх.ру (уз мало координације са подршком) и одмах ће радити како треба.

Ако имате искуства са постављањем сличних ствари за Хетзнер, ОВХ, тамо је другачије. Теже.

ено1 је назив мрежне картице #1 (спора али неограничена).
ено2 је назив мрежне картице #2 (брза, али са тарифом).
тун0 је назив виртуелне мрежне картице из ОпенВПН-а.
КСКС.КСКС.КСКС.Кс0 - ИПв4 #1 на ено1.
КСКС.КСКС.КСКС.Кс1 - ИПв4 #2 на ено1.
КСКС.КСКС.КСКС.Кс2 - ИПв4 #3 на ено1.
КСКС.КСКС.КСКС.Кс5 - ИПв4 #1 на ено2.
КСКС.КСКС.КСКС.1 – ИПв4 мрежни пролаз.
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС::/64 - ИПв6 за цео сервер.
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС:1:2::/96 - ИПв6 за ено2, све остало споља иде у ено1.
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС::1 — ИПв6 мрежни пролаз (вреди напоменути да ово може/треба да се уради другачије. Наведите ИПв6 прекидач).
днс-намесерверс - 127.0.0.1 је назначено (јер је бинд инсталиран локално) и 213.248.1.6 (ово је са тецх.ру).

„табела ено1т” и „табела ено2т” - значење ових правила руте је да би саобраћај који улази кроз ено1 -> излазио кроз њу, а саобраћај који улази кроз ено2 -> би излазио кроз њу. Такође, везе које је покренуо сервер би пролазиле кроз ено1.

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

Овом командом наводимо да се сваки неразумљив саобраћај који потпада под било које правило означено са „табела ено1т” -> шаље на ено1 интерфејс.

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

Овом командом наводимо да сваки саобраћај који иницира сервер треба да буде усмерен на ено1 интерфејс.

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

Овом командом постављамо правила за обележавање саобраћаја.

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

Овај блок специфицира други ИПв4 за ено1 интерфејс.

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

Овом командом постављамо руту од ОпенВПН клијената до локалног ИПв4 осим КСКС.КСКС.КСКС.Кс0.
Још увек не разумем зашто је ова команда довољна за све ИПв4.

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

Овде постављамо адресу за сам интерфејс. Сервер ће је користити као „одлазну“ адресу. Неће се поново користити ни на који начин.

Зашто је ":1:1::" тако компликовано? Тако да ОпенВПН ради исправно и само за ово. Више о овоме касније.

На тему гатеваи-а - тако то функционише и то је у реду. Али исправан начин је да се овде наведе ИПв6 прекидача на који је сервер повезан.

Међутим, из неког разлога ИПв6 престаје да ради ако ово урадим. Ово је вероватно нека врста проблема са тецх.ру.

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

Ово је додавање ИПв6 адресе интерфејсу. Ако вам треба сто адреса, то значи сто редова у овој датотеци.

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

Забележио сам адресе и подмреже свих интерфејса да би било јасно.
ено1 - мора бити "/64“ – јер је ово цео наш скуп адреса.
тун0 - подмрежа мора бити већа од ено1. У супротном, неће бити могуће конфигурисати ИПв6 гатеваи за ОпенВПН клијенте.
ено2 - подмрежа мора бити већа од тун0. У супротном, ОпенВПН клијенти неће моћи да приступе локалним ИПв6 адресама.
Ради јасноће, изабрао сам корак подмреже од 16, али ако желите, можете чак и да урадите корак „1“.
Према томе, 64+16 = 80, а 80+16 = 96.

За још већу јасноћу:
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС:1:1:ИИИИ:ИИИИ су адресе које треба да буду додељене одређеним сајтовима или услугама на ено1 интерфејсу.
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС:1:2:ИИИИ:ИИИИ су адресе које треба да буду додељене одређеним сајтовима или услугама на ено2 интерфејсу.
КСКСКСКС:КСКСКСКС:КСКСКСКС:КСКСКСКС:1:3:ИИИИ:ИИИИ су адресе које треба доделити ОпенВПН клијентима или користити као адресе ОпенВПН услуга.

Да бисте конфигурисали мрежу, требало би да постоји могућност поновног покретања сервера.
ИПв4 промене се преузимају када се изврше (обавезно је умотајте у екран - иначе ће ова команда једноставно срушити мрежу на серверу):

/etc/init.d/networking restart

Додајте на крај датотеке „/етц/ипроуте2/рт_таблес“:

100 eno1t
101 eno2t

Без овога не можете користити прилагођене табеле у датотеци „/етц/нетворк/интерфацес“.
Бројеви морају бити јединствени и мањи од 65535.

ИПв6 промене се могу лако променити без поновног покретања, али да бисте то урадили морате научити најмање три команде:

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

Подешавање „/етц/сисцтл.цонф“

# 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

Ово су "сисцтл" подешавања мог сервера. Дозволите ми да истакнем нешто важно.

net.ipv4.ip_forward = 1

Без овога, ОпенВПН уопште неће радити.

net.ipv6.ip_nonlocal_bind = 1

Свако ко покуша да повеже ИПв6 (на пример нгинк) одмах након покретања интерфејса добиће грешку. Да ова адреса није доступна.

Да би се избегла таква ситуација, врши се таква поставка.

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

Без ових ИПв6 подешавања, саобраћај са ОпенВПН клијента не излази у свет.

Остала подешавања или нису релевантна или се не сећам чему служе.
Али за сваки случај, остављам то „како јесте“.

Да би промене ове датотеке биле покупљене без поновног покретања сервера, потребно је да покренете команду:

sysctl -p

Више детаља о правилима „табела“: хабр.цом/пост/108690

============= ОпенВПН ==============

ОпенВПН ИПв4 не ради без иптаблес-а.

Моји иптаблес су овако за ВПН:

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

ИИ.ИИ.ИИ.ИИ је моја статичка ИПв4 адреса локалне машине.
10.8.0.0/24 - ИПв4 опенвпн мрежа. ИПв4 адресе за опенвпн клијенте.
Важна је доследност правила.

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

Ово је ограничење тако да само ја могу да користим ОпенВПН са своје статичке ИП адресе.

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

Да бисте проследили ИПв4 пакете између ОпенВПН клијената и Интернета, потребно је да региструјете једну од ових команди.

За различите случајеве, једна од опција није погодна.
Обе команде су погодне за мој случај.
Након што сам прочитао документацију, изабрао сам прву опцију јер користи мање ЦПУ-а.

Да би се сва подешавања иптаблеса покупила након поновног покретања, морате их негде сачувати.

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

Таква имена нису случајно изабрана. Користи их пакет "иптаблес-персистент".

apt-get install iptables-persistent

Инсталирање главног ОпенВПН пакета:

apt-get install openvpn easy-rsa

Хајде да поставимо шаблон за сертификате (замените своје вредности):

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

Уредимо подешавања шаблона сертификата:

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

Направите сертификат сервера:

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

Хајде да припремимо могућност креирања коначних датотека „цлиент-наме.опвн“:

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

Хајде да припремимо скрипту која ће спојити све датотеке у једну опвн датотеку.

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

Креирање првог ОпенВПН клијента:

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

Датотека „~/цлиент-цонфигс/филес/цлиент-наме.овпн“ се шаље на уређај клијента.

За иОС клијенте мораћете да урадите следећи трик:
Садржај ознаке "тлс-аутх" мора бити без коментара.
Такође ставите „кеи-дирецтион 1“ непосредно испред ознаке „тлс-аутх“.

Хајде да конфигуришемо конфигурацију ОпенВПН сервера:

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

Ово је потребно да би се подесила статичка адреса за сваког клијента (није неопходно, али ја је користим):

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

Најтежи и кључни детаљ.

Нажалост, ОпенВПН још увек не зна како да самостално конфигурише ИПв6 гатеваи за клијенте.
Ово морате „ручно“ проследити за сваког клијента.

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

Датотека “/етц/опенвпн/сервер-цлиентцоннецт.сх”:

#!/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

Датотека “/етц/опенвпн/сервер-цлиентдисцоннецт.сх”:

#!/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

Обе скрипте користе датотеку „/етц/опенвпн/вариаблес“:

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

Тешко ми је да се сетим зашто је овако написано.

Сада нетмаск = 112 изгледа чудно (требало би да буде 96 управо тамо).
И префикс је чудан, не одговара мрежи тун0.
Али добро, оставићу то како јесте.

cipher DES-EDE3-CBC

Ово није за свакога - изабрао сам овај метод шифровања везе.

Сазнајте више о подешавању ОпенВПН ИПв4.

Сазнајте више о подешавању ОпенВПН ИПв6.

============== Постфикс ==============

Инсталирање главног пакета:

apt-get install postfix

Када инсталирате, изаберите „Интернет сајт“.

Мој "/етц/постфик/маин.цф" изгледа овако:

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

Хајде да погледамо детаље ове конфигурације.

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

Према речима становника Хабровска, овај блок садржи „дезинформације и нетачне тезе“.Само 8 година након почетка моје каријере почео сам да схватам како ССЛ функционише.

Стога, узећу себи слободу да опишем како се користи ССЛ (без одговора на питања „Како то функционише?“ и „Зашто функционише?“).

Основа модерног шифровања је креирање пара кључева (два веома дуга низа знакова).

Један „кључ“ је приватан, други кључ је „јавни“. Приватни кључ чувамо веома пажљиво у тајности. Свима дистрибуирамо јавни кључ.

Користећи јавни кључ, можете да шифрујете низ текста тако да само власник приватног кључа може да га дешифрује.
Па, то је цела основа технологије.

Корак 1 - хттпс сајтови.
Када приступа сајту, претраживач сазнаје од веб сервера да је сајт хттпс и стога захтева јавни кључ.
Веб сервер даје јавни кључ. Прегледач користи јавни кључ да шифрује хттп-захтев и пошаље га.
Садржај хттп-захтева могу да читају само они који имају приватни кључ, односно само сервер коме је захтев упућен.
Хттп-захтев садржи најмање УРИ. Стога, ако држава покушава да ограничи приступ не целом сајту, већ одређеној страници, то је немогуће учинити за хттпс сајтове.

Корак #2 - шифровани одговор.
Веб сервер пружа одговор који се лако може прочитати на путу.
Решење је изузетно једноставно - претраживач локално генерише исти пар приватних и јавних кључева за сваку хттпс локацију.
И заједно са захтевом за јавни кључ сајта, он шаље свој локални јавни кључ.
Веб сервер га памти и, када шаље хттп-одговор, шифрује га јавним кључем одређеног клијента.
Сада хттп-одговор може да дешифрује само власник приватног кључа клијентовог претраживача (то јест, сам клијент).

Корак број 3 - успостављање безбедне везе путем јавног канала.
У примеру бр. 2 постоји рањивост - ништа не спречава добронамернике да пресретну хттп-захтев и измене информације о јавном кључу.
Тако ће посредник јасно видети сав садржај послатих и примљених порука док се не промени канал комуникације.
Суочавање са овим је изузетно једноставно - само пошаљите јавни кључ претраживача као поруку шифровану јавним кључем веб сервера.
Веб сервер затим прво шаље одговор попут „ваш јавни кључ је овакав“ и шифрује ову поруку истим јавним кључем.
Прегледач гледа на одговор - ако је примљена порука "ваш јавни кључ је овакав" - онда је то 100% гаранција да је овај комуникациони канал безбедан.
Колико је безбедно?
Само стварање таквог безбедног комуникационог канала дешава се брзином пинга*2. На пример 20мс.
Нападач мора унапред имати приватни кључ једне од страна. Или пронађите приватни кључ за неколико милисекунди.
Хаковање једног модерног приватног кључа ће трајати деценијама на суперкомпјутеру.

Корак #4 - јавна база података јавних кључева.
Очигледно, у целој овој причи постоји прилика да нападач седне на комуникациони канал између клијента и сервера.
Клијент може да се претвара да је сервер, а сервер може да се претвара да је клијент. И опонашајте пар тастера у оба смера.
Тада ће нападач видети сав саобраћај и моћи ће да „уреди“ саобраћај.
На пример, промените адресу на коју желите да пошаљете новац или копирајте лозинку из онлајн банкарства или блокирајте „неприкладан“ садржај.
За борбу против таквих нападача, осмислили су јавну базу података са јавним кључевима за сваку хттпс локацију.
Сваки претраживач „зна” за постојање око 200 таквих база података. Ово је унапред инсталирано у сваком претраживачу.
„Знање“ је подржано јавним кључем из сваког сертификата. Односно, веза са сваким одређеним ауторитетом за сертификацију не може се лажирати.

Сада постоји једноставно разумевање како да користите ССЛ за хттпс.
Ако користите свој мозак, постаће јасно како специјалне службе могу да хакују нешто у овој структури. Али то ће их коштати монструозних напора.
А организације мање од НСА или ЦИА - готово је немогуће хаковати постојећи ниво заштите, чак и за ВИП особе.

Такође ћу додати о ссх везама. Тамо нема јавних кључева, па шта можете да урадите? Питање се решава на два начина.
Опција ссх-би-пассворд:
Приликом првог повезивања, ссх клијент треба да упозори да имамо нови јавни кључ са ссх сервера.
А током даљих конекција, ако се појави упозорење „нови јавни кључ са ссх сервера“, то ће значити да покушавају да вас прислушкују.
Или сте прислушкивали вашу прву везу, али сада комуницирате са сервером без посредника.
Наиме, због чињенице да се чињеница прислушкивања лако, брзо и без напора открива, овај напад се користи само у посебним случајевима за одређеног клијента.

Опција ссх-по-кључ:
Узимамо флеш диск, на њему напишемо приватни кључ за ссх сервер (за ово постоје услови и пуно важних нијанси, али ја пишем образовни програм, а не упутства за употребу).
Остављамо јавни кључ на машини на којој ће бити ссх клијент и такође га чувамо у тајности.
Доносимо флеш диск на сервер, убацујемо га, копирамо приватни кључ и спаљујемо флеш диск и разбацујемо пепео у ветар (или га бар форматирамо нулама).
То је све - након такве операције биће немогуће хаковати такву ссх везу. Наравно, за 10 година биће могуће видети саобраћај на суперкомпјутеру - али то је друга прича.

Извињавам се на офтопику.

Дакле, сада када је теорија позната. Рећи ћу вам о току креирања ССЛ сертификата.

Користећи „опенссл генрса“ креирамо приватни кључ и „празне“ за јавни кључ.
Шаљемо „празне“ компанију треће стране, којој плаћамо отприлике 9 долара за најједноставнији сертификат.

Након неколико сати, добијамо наш „јавни“ кључ и сет од неколико јавних кључева од ове компаније треће стране.

Зашто би трећа компанија требало да плати регистрацију мог јавног кључа је посебно питање, нећемо га разматрати овде.

Сада је јасно шта значи натпис:

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

Фасцикла „/етц/ссл“ садржи све датотеке за ссл проблеме.
домаин1.цом — име домена.
2018 је година кључног стварања.
„кључ“ - ознака да је датотека приватни кључ.

И значење ове датотеке:

смтпд_тлс_церт_филе=/етц/ссл/домаин1.цом.2018.цхаинед.црт
домаин1.цом — име домена.
2018 је година кључног стварања.
ланчани - ознака да постоји ланац јавних кључева (први је наш јавни кључ, а остали су оно што је дошло од компаније која је издала јавни кључ).
црт - ознака да постоји готов сертификат (јавни кључ са техничким објашњењима).

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

Ово подешавање се у овом случају не користи, већ је написано као пример.

Јер грешка у овом параметру ће довести до слања нежељене поште са вашег сервера (без ваше воље).

Онда докажи свима да ниси крив.

recipient_delimiter = +

Многи људи можда не знају, али ово је стандардни знак за рангирање е-поште и подржава га већина модерних сервера поште.

На пример, ако имате поштанско сандуче "[емаил заштићен]"покушај послати на "[емаил заштићен]"- погледајте шта је од тога.

inet_protocols = ipv4

Ово би могло бити збуњујуће.

Али није само тако. Сваки нови домен је подразумевано само ИПв4, онда укључујем ИПв6 за сваки посебно.

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

Овде наводимо да сва долазна пошта иде у голубарник.
А правила за домен, поштанско сандуче, алиас - погледајте у бази података.

/етц/постфик/мискл-виртуал-маилбок-домаинс.цф

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

/етц/постфик/мискл-виртуал-маилбок-мапс.цф

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

/етц/постфик/мискл-виртуал-алиас-мапс.цф

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

Сада постфик зна да се пошта може прихватити за даље слање само након ауторизације са довецот-ом.

Заиста не разумем зашто се ово овде дуплира. Већ смо навели све што је потребно у „виртуал_транспорт“.

Али постфикс систем је веома стар - вероватно је повратак из старих дана.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Ово се може другачије конфигурисати за сваки сервер поште.

На располагању имам 3 сервера за пошту и ова подешавања су веома различита због различитих захтева за коришћење.

Морате га пажљиво конфигурисати - иначе ће нежељена пошта сипати у вас, или још горе - спам ће излити из вас.

# 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

Ово је кључни детаљ у усмеравању писама приликом слања писама из ПХП скрипти.

Фајл “/етц/постфик/сдд_транспорт.пцре”:

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

На левој страни су регуларни изрази. На десној страни је етикета која означава слово.
Постфикс у складу са ознаком - узеће у обзир још неколико конфигурационих линија за одређено слово.

Како ће тачно постфикс бити реконфигурисан за одређено слово биће назначено у „мастер.цф“.

Линије 4, 5, 6 су главне. У име ког домена шаљемо писмо, стављамо ову ознаку.
Али поље „од“ није увек назначено у ПХП скриптама у старом коду. Тада корисничко име долази у помоћ.

Чланак је већ опширан - не бих желео да ме ометају подешавањем нгинк+фпм.

Укратко, за сваку локацију постављамо сопственог власника линук-а. И сходно томе ваш фпм-поол.

Фпм-поол користи било коју верзију пхп-а (одлично је када на истом серверу можете без проблема да користите различите верзије пхп-а, па чак и различите пхп.ини за суседне сајтове).

Дакле, одређени линук корисник „ввв-домаин2” има веб локацију домаин2.цом. Овај сајт има код за слање е-поште без навођења поља од.

Дакле, чак и у овом случају, писма ће бити послата исправно и никада неће завршити у нежељеној пошти.

Мој "/етц/постфик/мастер.цф" изгледа овако:

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

Датотека није обезбеђена у потпуности - већ је веома велика.
Приметио сам само оно што је промењено.

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}

Ово су подешавања везана за спамассасин, више о томе касније.

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

Дозвољавамо вам да се повежете са сервером поште преко порта 587.
Да бисте то урадили, морате се пријавити.

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

Омогућите СПФ проверу.

apt-get install postfix-policyd-spf-python

Хајде да инсталирамо пакет за СПФ провере изнад.

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

А ово је најзанимљивије. Ово је могућност слања писама за одређени домен са одређене ИПв4/ИПв6 адресе.

Ово се ради ради рДНС-а. рДНС је процес примања стринга по ИП адреси.
А за пошту, ова функција се користи да потврди да хело тачно одговара рДНС-у адресе са које је порука послата.

Ако се хело не подудара са доменом е-поште у чије је име послато писмо, додељују се спам бодови.

Хело не одговара рДНС-у - додељује се много нежељених поена.
Сходно томе, сваки домен мора имати своју ИП адресу.
За ОВХ - у конзоли је могуће навести рДНС.
За тецх.ру - проблем се решава кроз подршку.
За АВС, проблем се решава кроз подршку.
„инет_протоцолс“ и „смтп_бинд_аддресс6“ - омогућавамо подршку за ИПв6.
За ИПв6 такође морате да региструјете рДНС.
“сислог_наме” - а ово је за лакше читање дневника.

Купите сертификате препоручујем овде.

Подешавање везе постфик+довецот овде.

Подешавање СПФ.

============= Голубњак ==============

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

Подешавање мискл-а, инсталирање самих пакета.

Фајл "/етц/довецот/цонф.д/10-аутх.цонф"

disable_plaintext_auth = yes
auth_mechanisms = plain login

Ауторизација је само шифрована.

Фајл “/етц/довецот/цонф.д/10-маил.цонф”

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

Овде означавамо локацију за складиштење слова.

Желим да се чувају у датотекама и групишу по домену.

Фајл "/етц/довецот/цонф.д/10-мастер.цонф"

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 {
  }
}

Ово је главна конфигурациона датотека голубарника.
Овде онемогућавамо небезбедне везе.
И омогућите сигурне везе.

Фајл "/етц/довецот/цонф.д/10-ссл.цонф"

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
}

Подешавање ссл. Назначавамо да је ссл потребан.
И сам сертификат. А важан детаљ је „локална“ директива. Означава који ССЛ сертификат треба користити приликом повезивања на који локални ИПв4.

Иначе, ИПв6 овде није конфигурисан, касније ћу исправити овај пропуст.
КСКС.КСКС.КСКС.Кс5 (домен2) - без сертификата. Да бисте повезали клијенте, потребно је да наведете домен1.цом.
КСКС.КСКС.КСКС.Кс2 (домен3) - постоји сертификат, можете одредити домаин1.цом или домаин3.цом за повезивање клијената.

Фајл "/етц/довецот/цонф.д/15-лда.цонф"

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Ово ће бити потребно за спамасасин у будућности.

Фајл "/етц/довецот/цонф.д/20-имап.цонф"

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Ово је додатак за антиспам. Потребно за обуку спамассасина у тренутку преноса у/из фасцикле „Спам”.

Фајл "/етц/довецот/цонф.д/20-поп3.цонф"

protocol pop3 {
}

Постоји управо такав фајл.

Фајл “/етц/довецот/цонф.д/20-лмтп.цонф”

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

Подешавање лмтп-а.

Фајл "/етц/довецот/цонф.д/90-антиспам.цонф"

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
}

Спамассасин подешавања обуке у време преноса у/из фасцикле Спам.

Фајл "/етц/довецот/цонф.д/90-сиеве.цонф"

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

Датотека која одређује шта да се ради са долазним словима.

Фајл "/вар/либ/довецот/сиеве/дефаулт.сиеве"

require ["fileinto", "mailbox"];

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

Морате да компајлирате датотеку: “сиевец дефаулт.сиеве”.

Фајл "/етц/довецот/цонф.д/аутх-скл.цонф.ект"

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Одређивање скл датотека за ауторизацију.
И сама датотека се користи као метод ауторизације.

Фајл "/етц/довецот/довецот-скл.цонф.ект"

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';

Ово одговара сличним подешавањима за постфикс.

Фајл "/етц/довецот/довецот.цонф"

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

Главна конфигурациона датотека.
Важно је да овде назначимо - додајте протоколе.

============= СпамАссассин ==============

apt-get install spamassassin spamc

Хајде да инсталирамо пакете.

adduser spamd --disabled-login

Хајде да додамо корисника у чије име.

systemctl enable spamassassin.service

Омогућавамо аутоматско учитавање услуге спамассассин по учитавању.

Фајл "/етц/дефаулт/спамассассин":

CRON=1

Омогућавањем аутоматског ажурирања правила „подразумевано“.

Фајл “/етц/спамассассин/лоцал.цф”:

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

Потребно је да направите базу података „са“ у мискл-у са корисником „са“ са лозинком „пассворд“ (замените нечим адекватним).

репорт_сафе - ово ће послати извештај о нежељеној е-пошти уместо писма.
усе_баиес су спамассассин подешавања машинског учења.

Преостала подешавања спамассасина су коришћена раније у чланку.

Општа поставка "спамассассин".
О премештању нових нежељених порука е-поште у ИМАП фасциклу „Нежељена пошта“..
О једноставној комбинацији Довецот + СпамАссассин.
Препоручујем да прочитате теорију учења спамассасина када премештате слова у имап фасцикле (и не препоручујем да је користите).

============= Апел заједници =============

Такође бих желео да бацим идеју у заједницу о томе како повећати ниво безбедности прослеђених писама. Пошто сам тако дубоко удубљен у тему поште.

Тако да корисник може да креира пар кључева на свом клијенту (оутлоок, тхундербирд, бровсер-плугин, ...). Јавно и приватно. Јавно - пошаљи на ДНС. Приватно - уштедите на клијенту. Маил сервери би могли да користе јавни кључ за слање одређеном примаоцу.

А да бисте се заштитили од нежељене поште са таквим писмима (да, сервер поште неће моћи да види садржај) - мораћете да уведете 3 правила:

  1. Обавезно прави ДКИМ потпис, обавезан СПФ, обавезан рДНС.
  2. Неуронска мрежа на тему обуке антиспам + база података за њу на страни клијента.
  3. Алгоритам шифровања мора бити такав да страна која шаље мора потрошити 100 пута више снаге ЦПУ-а на шифровање од стране која прима.

Поред јавних писама, израдите стандардно писмо предлога „за почетак безбедне кореспонденције“. Један од корисника (поштанско сандуче) шаље писмо са прилогом у друго поштанско сандуче. Писмо садржи текстуални предлог за покретање безбедног канала комуникације за преписку и јавни кључ власника поштанског сандучета (са приватним кључем на страни клијента).

Можете чак направити неколико кључева посебно за сваку преписку. Корисник прималац може прихватити ову понуду и послати свој јавни кључ (такође направљен посебно за ову преписку). Затим, први корисник шаље контролно писмо услуге (шифровано јавним кључем другог корисника) – по пријему којег други корисник може сматрати формирани комуникациони канал поузданим. Затим, други корисник шаље контролно писмо - и тада први корисник такође може сматрати формирани канал сигурним.

За борбу против пресретања кључева на путу, протокол мора да обезбеди могућност преноса најмање једног јавног кључа помоћу флеш диска.

И најважније је да све функционише (питање је „ко ће то платити?“):
Унесите поштанске сертификате од 10 УСД за 3 године. Што ће омогућити пошиљаоцу да назначи у днс-у да су „моји јавни кључеви тамо“. И они ће вам дати прилику да започнете сигурну везу. Истовремено, прихватање таквих веза је бесплатно.
гмаил коначно монетизује своје кориснике. За 10 долара на 3 године - право на креирање сигурних канала кореспонденције.

============== Закључак =============

Да бих тестирао цео чланак, хтео сам да изнајмим наменски сервер на месец дана и купим домен са ССЛ сертификатом.

Али животне околности су се развиле тако да се ово питање отегло 2 месеца.
И тако, када сам поново имао слободног времена, одлучио сам да објавим чланак какав јесте, уместо да ризикујем да се објављивање одужи још годину дана.

Ако има доста питања попут „али ово није описано довољно детаљно“, онда ће вероватно бити снаге да узмете наменски сервер са новим доменом и новим ССЛ сертификатом и опишете га још детаљније и, већина што је најважније, идентификовати све важне детаље који недостају.

Такође бих желео да добијем повратне информације о идејама о поштанским сертификатима. Ако вам се свиђа идеја, покушаћу да нађем снаге да напишем нацрт за рфц.

Када копирате велике делове чланка, наведите везу до овог чланка.
Када преводите на било који други језик, наведите везу до овог чланка.
Покушаћу сам да га преведем на енглески и оставим унакрсне референце.


Извор: ввв.хабр.цом

Додај коментар