Debian + Postfix + Dovecot + Multidomain + SSL + IPv6 + OpenVPN + Multi-interfaces + SpamAssassin-learn + Bid

Ity lahatsoratra ity dia momba ny fomba fananganana mpizara mailaka maoderina.
Postfix + Dovecot. SPF + DKIM + rDNS. Miaraka amin'ny IPv6.
Miaraka amin'ny TSL encryption. Miaraka amin'ny fanohanana sehatra maro - ampahany amin'ny mari-pankasitrahana SSL tena izy.
Miaraka amin'ny fiarovana amin'ny antispam sy ny naoty antispam avo lenta avy amin'ireo mpizara mailaka hafa.
Manohana interface ara-batana maro.
Miaraka amin'ny OpenVPN, ny fifandraisana dia amin'ny alalan'ny IPv4, ary manome IPv6.

Raha tsy te hianatra ireo teknolojia rehetra ireo ianao, fa te hanangana mpizara toy izany, dia ho anao ity lahatsoratra ity.

Tsy miezaka manazava ny tsipiriany rehetra ilay lahatsoratra. Ny fanazavana dia mandeha amin'izay tsy namboarina ho manara-penitra na manan-danja amin'ny fomba fijerin'ny mpanjifa.

Efa nofinofiko hatry ny ela ny antony manosika hanangana mpizara mailaka. Mety ho toa adala izany, fa IMHO, tsara lavitra noho ny manonofy fiara vaovao avy amin'ny marika tianao indrindra.

Misy antony roa mahatonga ny fananganana IPv6. Ny manam-pahaizana momba ny IT dia mila mianatra teknolojia vaovao tsy tapaka mba hivelomana. Te-hanao ny anjara birikiko amin'ny ady amin'ny sivana aho.

Ny antony manosika ny fametrahana OpenVPN dia ny hahatonga ny IPv6 hiasa amin'ny milina eo an-toerana.
Ny antony manosika ny fametrahana fifandraisana ara-batana maromaro dia ny hoe ao amin'ny mpizara ahy dia manana interface iray aho "miadana nefa tsy voafetra" ary iray hafa "faingana nefa misy karama".

Ny antony manosika ny fametrahana ny fikajiana Bind dia ny ISP-ko dia manome mpizara DNS tsy miorina, ary tsy mahomby koa ny google indraindray. Mila mpizara DNS stable ho an'ny fampiasana manokana aho.

Motivation hanoratra lahatsoratra - Nanoratra drafitra aho 10 volana lasa izay, ary efa nijery azy indroa aho. Na dia ilain’ny mpanoratra tsy tapaka aza izany, dia betsaka ny mety ho ilain’ny hafa.

Tsy misy vahaolana manerantany ho an'ny mpizara mailaka. Saingy hiezaka hanoratra zavatra toy ny hoe "ataovy ity ary avy eo, rehefa mandeha araka ny tokony ho izy ny zava-drehetra, ario ny zavatra fanampiny."

Ny orinasa tech.ru dia manana mpizara Colocation. Azo atao ny mampitaha amin'ny OVH, Hetzner, AWS. Mba hamahana ity olana ity dia hahomby kokoa ny fiaraha-miasa amin'ny tech.ru.

Debian 9 dia napetraka amin'ny mpizara.

Ny mpizara dia manana interface 2 `eno1` sy `eno2`. Ny voalohany dia tsy voafetra, ary ny faharoa dia haingana.

Misy adiresy IP static 3, XX.XX.XX.X0 sy XX.XX.XX.X1 ary XX.XX.XX.X2 eo amin'ny interface `eno1` ary XX.XX.XX.X5 amin'ny interface `eno2` .

Misy XXXX:XXXX:XXXX:XXXX::/64 dobo iray misy adiresy IPv6 izay nomena ny interface `eno1` ary avy ao XXXX: XXXX: XXXX:XXXX: 1: 2:: / 96 dia nomena ny `eno2` noho ny fangatahako.

Misy sehatra 3 `domain1.com`, `domain2.com`, `domain3.com`. Misy taratasy fanamarinana SSL ho an'ny `domain1.com` sy `domain3.com`.

Manana kaonty Google aho izay tiako hampifandraisina amin'ny boaty mailaka[email voaaro]` (mandray mailaka sy mandefa mailaka mivantana avy amin'ny interface gmail).
Tsy maintsy misy boaty mailaka`[email voaaro]`, dika mitovy amin'ny mailaka izay tiako ho hita ao amin'ny gmail-ko. Ary zara raha afaka mandefa zavatra amin'ny anaran'ny `[email voaaro]` amin'ny alàlan'ny interface web.

Tsy maintsy misy boaty mailaka`[email voaaro]`, izay hampiasain'i Ivanov amin'ny iPhone-ny.

Ny mailaka nalefa dia tsy maintsy manaraka ny fepetra rehetra momba ny antispam maoderina.
Tsy maintsy misy ny ambaratonga avo indrindra amin'ny fanafenana omena ao amin'ny tambajotram-bahoaka.
Tokony hisy ny fanohanana IPv6 ho an'ny fandefasana sy fandraisana taratasy.
Tokony hisy SpamAssassin tsy hamafa mailaka mihitsy. Ary na hitsambikina na hitsambikina na halefa any amin'ny lahatahiry "Spam" IMAP.
Tsy maintsy amboarina ny fianarana mandeha ho azy SpamAssassin: raha mamindra taratasy any amin'ny lahatahiry Spam aho, dia hianatra avy amin'izany izany; raha mamindra taratasy avy amin'ny lahatahiry Spam aho dia hianatra avy amin'izany. Ny vokatry ny fanofanana SpamAssassin dia tokony hisy fiantraikany amin'ny fiafaran'ny taratasy ao amin'ny lahatahiry Spam.
Ny script PHP dia tsy maintsy afaka mandefa mailaka amin'ny anaran'ny sehatra rehetra amin'ny lohamilina iray.
Tokony hisy serivisy openvpn, afaka mampiasa IPv6 amin'ny mpanjifa tsy manana IPv6.

Voalohany dia mila manamboatra interface sy zotra ianao, anisan'izany ny IPv6.
Avy eo dia mila manamboatra OpenVPN ianao, izay hifandray amin'ny IPv4 ary hanome ny mpanjifa adiresy IPv6 tena izy. Ity mpanjifa ity dia hanana fahafahana miditra amin'ny serivisy IPv6 rehetra ao amin'ny server ary miditra amin'ny loharano IPv6 rehetra amin'ny Internet.
Avy eo dia mila manamboatra Postfix ianao handefasana taratasy + SPF + DKIM + rDNS ary zavatra kely mitovy amin'izany.
Avy eo dia mila manamboatra Dovecot ianao ary manamboatra Multidomain.
Avy eo dia mila manamboatra SpamAssassin ianao ary manamboatra fiofanana.
Farany, apetraho Bind.

============= Multi-interfaces =============

Raha te hanamboatra interface tsara ianao dia mila manoratra izany amin'ny "/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

Ireo fanovana ireo dia azo ampiharina amin'ny mpizara rehetra ao amin'ny tech.ru (miaraka amin'ny fandrindrana kely miaraka amin'ny fanohanana) ary hiasa avy hatrany araka ny tokony ho izy.

Raha manana traikefa amin'ny fametrahana zavatra mitovy amin'ny Hetzner, OVH ianao, dia hafa izany any. Sarotra kokoa.

eno1 no anaran'ny karatra tambajotra #1 (miadana nefa tsy voafetra).
eno2 no anaran'ny carte de network #2 (faingana, fa misy karama).
tun0 no anaran'ny karatra tambajotra virtoaly avy amin'ny OpenVPN.
XX.XX.XX.X0 - IPv4 #1 amin'ny eno1.
XX.XX.XX.X1 - IPv4 #2 amin'ny eno1.
XX.XX.XX.X2 - IPv4 #3 amin'ny eno1.
XX.XX.XX.X5 - IPv4 #1 amin'ny eno2.
XX.XX.XX.1 - vavahady IPv4.
XXXX: XXXX: XXXX: XXXX::/64 - IPv6 ho an'ny mpizara manontolo.
XXXX: XXXX: XXXX: XXXX: 1: 2:: / 96 - IPv6 ho an'ny eno2, ny zavatra hafa rehetra avy any ivelany dia miditra amin'ny eno1.
XXXX: XXXX: XXXX: XXXX:: 1 — vavahady IPv6 (tsara ny manamarika fa azo atao amin'ny fomba hafa izany. Lazao ny switch IPv6).
dns-nameservers - 127.0.0.1 dia aseho (satria apetraka eo an-toerana ny bind) ary 213.248.1.6 (avy amin'ny tech.ru izany).

"table eno1t" sy "table eno2t" - ny dikan'ireo fitsipika ireo dia ny hoe ny fifamoivoizana miditra amin'ny eno1 -> dia miala amin'izany, ary ny fifamoivoizana miditra amin'ny eno2 -> dia miala amin'izany. Ary koa ny fifandraisana natomboky ny mpizara dia handeha amin'ny eno1.

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

Amin'ity baiko ity dia mamaritra fa ny fifamoivoizana tsy takatry ny saina izay tafiditra ao anatin'ny fitsipika misy marika "table eno1t" -> alefa any amin'ny interface eno1.

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

Amin'ity baiko ity dia mamaritra izahay fa ny fifamoivoizana rehetra natomboky ny mpizara dia tokony halefa any amin'ny interface eno1.

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

Amin'ity baiko ity dia mametraka ny fitsipika momba ny famarotana ny fifamoivoizana.

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

Ity sakana ity dia mamaritra IPv4 faharoa ho an'ny interface eno1.

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

Amin'ity baiko ity dia mametraka ny lalana avy amin'ny mpanjifa OpenVPN mankany amin'ny IPv4 eo an-toerana izahay afa-tsy XX.XX.XX.X0.
Mbola tsy azoko hoe nahoana io baiko io no ampy ho an'ny IPv4 rehetra.

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

Eto izahay dia mametraka ny adiresy ho an'ny interface. Ny mpizara dia hampiasa azy io ho adiresy "hivoaka". Tsy hampiasaina amin'ny fomba rehetra intsony.

Nahoana no sarotra be ny ":1:1::"? Ka ny OpenVPN dia miasa tsara ary ho an'izany ihany. Bebe kokoa momba izany aoriana.

Momba ny lohahevitra vavahady - izany no fomba fiasa ary tsara izany. Fa ny fomba marina dia ny manondro eto ny IPv6 ny switch izay mifandray amin'ny mpizara.

Na izany aza, noho ny antony sasany dia mijanona tsy miasa ny IPv6 raha manao izany aho. Ity angamba dia karazana olan'ny tech.ru.

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

Izany dia manampy adiresy IPv6 amin'ny interface. Raha mila adiresy zato ianao dia andalana zato amin'ity rakitra ity.

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

Nomarihako ny adiresy sy ny zana-tsipìka amin'ny fifandraisana rehetra mba hampahazava azy.
eno1 - tsy maintsy "/64" - satria ity no dobo filomanosanay manontolo.
tun0 - ny subnet dia tsy maintsy lehibe noho ny eno1. Raha tsy izany dia tsy ho azo atao ny manamboatra vavahady IPv6 ho an'ny mpanjifa OpenVPN.
eno2 - ny subnet dia tokony ho lehibe kokoa noho ny tun0. Raha tsy izany, ny mpanjifa OpenVPN dia tsy afaka miditra amin'ny adiresy IPv6 eo an-toerana.
Mba hanazavana dia nisafidy dingana subnet 16 aho, fa raha tianao dia azonao atao mihitsy aza ny manao dingana "1".
Araka izany, 64+16 = 80, ary 80+16 = 96.

Mba hazava kokoa kokoa:
XXXX: XXXX: XXXX: XXXX: 1: 1: YYYY: YYYY dia adiresy tokony homena toerana na serivisy manokana ao amin'ny interface eno1.
XXXX: XXXX: XXXX: XXXX: 1: 2: YYYY: YYYY dia adiresy tokony homena toerana na serivisy manokana ao amin'ny interface eno2.
XXXX: XXXX: XXXX: XXXX: 1: 3: YYYY: YYYY dia adiresy tokony omena ny mpanjifa OpenVPN na ampiasaina ho adiresy serivisy OpenVPN.

Mba hanamboarana ny tambajotra dia tokony ho azo atao ny mamerina ny mpizara.
Ny fanovana IPv4 dia alaina rehefa tanterahana (azo antoka fa apetaho eo amin'ny efijery izany - raha tsy izany dia hanimba ny tambajotra amin'ny server fotsiny ity baiko ity):

/etc/init.d/networking restart

Ampio amin'ny faran'ny rakitra "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

Raha tsy misy izany dia tsy afaka mampiasa tabilao mahazatra ianao ao amin'ny rakitra "/etc/network/interfaces".
Ny isa dia tsy maintsy miavaka ary latsaky ny 65535.

Ny fanovana IPv6 dia azo ovaina mora foana raha tsy misy rebooting, fa mba hanaovana izany dia mila mianatra baiko telo farafahakeliny ianao:

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

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

Ireto ny firafitry ny "sysctl" an'ny mpizara ahy. Mamelà ahy hanondro zava-dehibe.

net.ipv4.ip_forward = 1

Raha tsy misy izany dia tsy hiasa mihitsy ny OpenVPN.

net.ipv6.ip_nonlocal_bind = 1

Na iza na iza manandrana mamatotra IPv6 (ohatra nginx) avy hatrany aorian'ny fiafaran'ny interface dia hahazo hadisoana. Ny hoe tsy misy io adiresy io.

Mba hialana amin'ny toe-javatra toy izany dia natao ny fametrahana toy izany.

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

Raha tsy misy ireo fanovana IPv6 ireo dia tsy mivoaka eran'izao tontolo izao ny fifamoivoizana avy amin'ny mpanjifa OpenVPN.

Ny toe-javatra hafa dia na tsy misy dikany na tsy tadidiko ny anton'izany.
Fa sao sanatria dia avelako “toy ny misy” izany.

Mba hahazoana ny fanovana amin'ity rakitra ity dia alaina tsy misy rebooting ny mpizara dia mila mandefa ny baiko ianao:

sysctl -p

Tsipiriany bebe kokoa momba ny fitsipika "tabilao": habr.com/post/108690

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

OpenVPN IPv4 dia tsy mandeha raha tsy misy iptables.

Toy izao ny iptables ho an'ny 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 no adiresiko IPv4 static an'ny milina eo an-toerana.
10.8.0.0/24 - Tambajotra IPv4 openvpn. Adiresy IPv4 ho an'ny mpanjifa openvpn.
Zava-dehibe ny tsy fitovian'ny fitsipika.

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

Famerana ity ka izaho ihany no afaka mampiasa OpenVPN amin'ny IP static.

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

Mba handefasana fonosana IPv4 eo amin'ny mpanjifa OpenVPN sy ny Internet dia mila misoratra anarana ny iray amin'ireo baiko ireo ianao.

Ho an'ny tranga samihafa dia tsy mety ny iray amin'ireo safidy.
Samy mety amin'ny raharahako ireo baiko roa ireo.
Rehefa avy namaky ny antontan-taratasy aho dia nisafidy ny safidy voalohany satria mampiasa CPU kely kokoa.

Mba haka ny fikandrana iptables rehetra aorian'ny reboot dia mila mamonjy azy ireo any amin'ny toerana iray ianao.

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

Tsy tongatonga ho azy ny anarana toy izany. Izy ireo dia ampiasain'ny fonosana "iptables-persistent".

apt-get install iptables-persistent

Fametrahana ny fonosana OpenVPN lehibe:

apt-get install openvpn easy-rsa

Andao hanangana môdely ho an'ny mari-pankasitrahana (soloo ny soatoavinao):

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

Andao hanova ny firafitry ny môdely fanamarinana:

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

Mamorona taratasy fanamarinana mpizara:

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

Andao hanomana ny fahafahana mamorona ny rakitra farany "client-name.opvn":

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

Andao hanomana script izay hanambatra ny rakitra rehetra ho rakitra opvn tokana.

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

Mamorona mpanjifa OpenVPN voalohany:

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

Ny rakitra "~/client-configs/files/client-name.ovpn" dia alefa any amin'ny fitaovan'ny mpanjifa.

Ho an'ny mpanjifa iOS dia mila manao izao fika manaraka izao ianao:
Ny votoatin'ny marika "tls-auth" dia tsy maintsy tsy misy fanehoan-kevitra.
Ary asio "key-direction 1" eo alohan'ny marika "tls-auth".

Andao amboary ny config server 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

Ilaina izany mba hametrahana adiresy static ho an'ny mpanjifa tsirairay (tsy ilaina, fa mampiasa azy aho):

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

Ny antsipiriany sarotra sy manan-danja indrindra.

Indrisy anefa fa ny OpenVPN dia tsy mbola mahafantatra ny fomba fanamboarana tsy miankina vavahady IPv6 ho an'ny mpanjifa.
Tsy maintsy alefanao "manolotra" izany ho an'ny mpanjifa tsirairay.

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

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

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

Ireo script roa ireo dia mampiasa ny rakitra "/etc/openvpn/variables":

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

Sarotra ny mitadidy ny antony nanoratana azy toy izany eto.

Toa hafahafa izao ny netmask = 112 (tokony ho 96 eo izany).
Ary hafahafa ny prefix, tsy mifanaraka amin'ny tambajotra tun0.
Saingy tsy maninona, avelao aho amin'ny maha-izy azy.

cipher DES-EDE3-CBC

Tsy natao ho an'ny rehetra izany - nisafidy ity fomba fanafenana ny fifandraisana ity aho.

Mianara bebe kokoa momba ny fametrahana OpenVPN IPv4.

Mianara bebe kokoa momba ny fametrahana OpenVPN IPv6.

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

Fametrahana ny fonosana lehibe:

apt-get install postfix

Rehefa mametraka dia safidio ny "site internet".

Ny "/etc/postfix/main.cf" dia toa izao:

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

Andeha hojerentsika ny antsipirian'ity config ity.

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

Araka ny filazan'ny mponin'i Khabrovsk, ity sakana ity dia misy “fahalalana diso sy hevitra diso”.8 taona monja taorian'ny nanombohan'ny asako dia nanomboka nahatakatra ny fomba fiasan'ny SSL aho.

Noho izany, horaisiko ny fahalalahana mamaritra ny fomba fampiasana SSL (tsy mamaly ny fanontaniana hoe "Ahoana no miasa?" sy "Nahoana no miasa?").

Ny fototry ny encryption maoderina dia ny famoronana mpivady fanalahidy (tady roa lava be).

Ny "key" iray dia manokana, ny iray hafa dia "public". Tazoninay tsara ny fanalahidy manokana. Zarainay ho an'ny rehetra ny fanalahidin'ny daholobe.

Amin'ny fampiasana fanalahidin'ny daholobe, azonao atao ny manisy encryption andian-tsoratra ka ny tompon'ny fanalahidy manokana ihany no afaka mamadika azy.
Eny, izany no fototry ny teknolojia.

Dingana #1 - tranokala https.
Rehefa miditra amin'ny tranokala iray ny navigateur dia mianatra avy amin'ny mpizara tranonkala fa https ilay tranokala ary noho izany dia mangataka fanalahidin'ny daholobe.
Manome ny fanalahidin'ny daholobe ny mpizara tranonkala. Ny navigateur dia mampiasa ny fanalahidin'ny daholobe hanafenana ny fangatahana http sy handefasana azy.
Ny votoatin'ny http-fangatahana dia tsy afaka mamaky afa-tsy izay manana ny fanalahidy manokana, izany hoe ny mpizara izay nanaovana ny fangatahana ihany.
Ny fangatahana Http dia misy URI farafaharatsiny. Noho izany, raha mitady hamerana ny fidirana amin'ny tranokala iray manontolo ny firenena iray, fa amin'ny pejy manokana, dia tsy azo atao izany amin'ny tranokala https.

Dingana #2 - valin-kafatra miafina.
Ny mpizara tranonkala dia manome valiny azo vakiana mora foana eny an-dalana.
Tsotra dia tsotra ny vahaolana - ny navigateur eo an-toerana dia mamokatra mpivady fanalahidy manokana ho an'ny daholobe ho an'ny tranokala https tsirairay.
Ary miaraka amin'ny fangatahana ny fanalahidin'ny tranokala, dia mandefa ny fanalahidin'ny daholobe eo an-toerana izy.
Ny mpizara tranonkala dia mahatsiaro izany ary, rehefa mandefa http-valiny, dia encryption miaraka amin'ny fanalahidin'ny mpanjifa manokana.
Amin'izao fotoana izao, ny http-response dia tsy afaka mamadika afa-tsy ny tompon'ny fanalahidin'ny navigateur manokana an'ny mpanjifa (izany hoe ny mpanjifa mihitsy).

Dingana No. 3 - fametrahana fifandraisana azo antoka amin'ny alàlan'ny fantsom-bahoaka.
Misy vulnerability ao amin'ny ohatra No. 2 - tsy misy manakana ny olona tsara sitrapo amin'ny fisakanana http-fangatahana sy fanovana vaovao momba ny fanalahidin'ny daholobe.
Araka izany, ny mpanelanelana dia hahita mazava tsara ny votoatin'ny hafatra nalefa sy voaray mandra-piova ny fantsona fifandraisana.
Tena tsotra ny fiatrehana izany - alefaso fotsiny ny fanalahidin'ny mpitety tranonkala ho hafatra voarakotra amin'ny fanalahidin'ny mpizara tranonkala.
Ny mpizara tranonkala avy eo dia mandefa valiny toy ny hoe "toy izao ny fanalahidin'ny daholobe anao" ary mamadika ity hafatra ity miaraka amin'ny fanalahidin'ny daholobe mitovy.
Ny navigateur dia mijery ny valiny - raha voaray ilay hafatra hoe "toy izao ny fanalahidinao ho an'ny besinimaro" - dia antoka 100% izany fa azo antoka io fantsom-pifandraisana io.
Ahoana ny fiarovana azy?
Ny famoronana fantsona fifandraisana azo antoka toy izany dia mitranga amin'ny hafainganam-pandeha ping*2. Ohatra 20ms.
Ny mpanafika dia tsy maintsy manana ny fanalahidy manokana an'ny iray amin'ireo antoko mialoha. Na mitadiava fanalahidy manokana ao anatin'ny milisegondra roa.
Haharitra am-polony taona maro ny fijirihana ny fanalahidy manokana maoderina iray.

Dingana #4 - angon-drakitra ho an'ny daholobe momba ny fanalahidin'ny daholobe.
Mazava ho azy fa ao anatin'ity tantara iray manontolo ity dia misy fotoana ahafahan'ny mpanafika iray mipetraka eo amin'ny fantsom-pifandraisana eo amin'ny mpanjifa sy ny mpizara.
Ny mpanjifa dia afaka mody ho mpizara, ary ny mpizara dia afaka mody ho mpanjifa. Ary alaivo tahaka ny fanalahidy roa amin'ny lafiny roa.
Dia ho hitan'ny mpanafika ny fifamoivoizana rehetra ary ho afaka "hanova" ny fifamoivoizana.
Ohatra, ovay ny adiresy handefasana vola na kopia ny tenimiafina avy amin'ny banky an-tserasera na sakanana ny atiny "tsy azo atao".
Mba hiadiana amin'ny mpanafika toy izany dia namorona angon-drakitra ho an'ny daholobe misy fanalahidin'ny daholobe ho an'ny tranokala https tsirairay izy ireo.
Ny navigateur tsirairay dia "mahafantatra" momba ny fisian'ny angon-drakitra 200 eo ho eo. Ity dia efa napetraka mialoha amin'ny navigateur rehetra.
Ny "Fahalalana" dia tohanan'ny fanalahidin'ny daholobe avy amin'ny taratasy fanamarinana tsirairay. Izany hoe, tsy azo hosoka ny fifandraisana amin'ny fahefana fanamarinana manokana tsirairay.

Ankehitriny dia misy fahatakarana tsotra ny fomba fampiasana SSL ho an'ny https.
Raha mampiasa ny atidohanao ianao, dia hazava ny fomba ahafahan'ny serivisy manokana mijirika zavatra amin'ity rafitra ity. Saingy handany ezaka goavana izy ireo.
Ary ny fikambanana kely kokoa noho ny NSA na CIA - saika tsy azo atao ny mijirika ny fiarovana efa misy, na dia ho an'ny VIP aza.

Hanampy momba ny fifandraisana ssh ihany koa aho. Tsy misy fanalahidin'ny daholobe ao, ka inona no azonao atao? Ny olana dia voavaha amin'ny fomba roa.
Safidy ssh-by-password:
Nandritra ny fifandraisana voalohany dia tokony hampitandrina ny mpanjifa ssh fa manana fanalahidin'ny daholobe vaovao avy amin'ny mpizara ssh isika.
Ary mandritra ny fifandraisana fanampiny, raha miseho ny fampitandremana "fanalahidin'ny daholobe vaovao avy amin'ny mpizara ssh", dia midika izany fa miezaka ny mihaino anao izy ireo.
Na nohenoinao tamin'ny fifandraisanao voalohany ianao, fa izao no mifandray amin'ny mpizara tsy misy mpanelanelana.
Raha ny marina, noho ny zava-misy fa ny fisian'ny wiretapping dia mora, haingana ary tsy misy ezaka, ity fanafihana ity dia tsy ampiasaina afa-tsy amin'ny tranga manokana ho an'ny mpanjifa manokana.

Safidy ssh-by-key:
Maka flash drive izahay, soraty ny lakile manokana ho an'ny mpizara ssh eo aminy (misy ny fepetra sy ny nuances manan-danja maro amin'izany, fa manoratra programa fanabeazana aho, fa tsy torolàlana ampiasaina).
Avelanay eo amin'ny milina misy ny mpanjifa ssh ny fanalahidin'ny daholobe ary ataonay tsiambaratelo ihany koa izany.
Mitondra ny flash drive ho any amin'ny mpizara izahay, ampidiro ao, kopia ny lakile manokana, ary mandoro ny flash drive ary manaparitaka ny lavenona amin'ny rivotra (na farafaharatsiny amin'ny aotra).
Izay ihany - aorian'ny fandidiana toy izany dia tsy ho azo atao ny mijirika fifandraisana ssh toy izany. Mazava ho azy fa ao anatin'ny 10 taona dia ho azo atao ny mijery ny fifamoivoizana amin'ny supercomputer - saingy tantara hafa izany.

Miala tsiny aho amin'ny offtopic.

Ka izao no fantatra ny teoria. Holazaiko aminao ny fizotran'ny famoronana certificat SSL.

Amin'ny fampiasana ny "openssl genrsa" dia mamorona fanalahidy manokana sy "blank" ho an'ny fanalahidin'ny daholobe.
Mandefa "blank" any amin'ny orinasa hafa izahay, izay andoavanay $9 eo ho eo amin'ny taratasy fanamarinana tsotra indrindra.

Rehefa afaka adiny roa, dia mahazo ny fanalahidin'ny "ampahibemaso" sy ny andiana fanalahidin'ny daholobe maromaro avy amin'ity orinasan'ny antoko fahatelo ity izahay.

Fa maninona no tokony handoavam-bola ho an'ny fisoratana anarana ny fanalahidin'ny daholobe ny orinasa fahatelo, tsy hodinihintsika eto izany.

Mazava izao ny dikan'ny soratra:

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

Ny lahatahiry "/ etc / ssl" dia ahitana ny rakitra rehetra momba ny olana ssl.
domain1.com — anaran-tsehatra.
2018 no taonan'ny famoronana fototra.
"key" - fanondroana fa fanalahidy manokana ny rakitra.

Ary ny dikan'ity rakitra ity:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com — anaran-tsehatra.
2018 no taonan'ny famoronana fototra.
rojo - fanendrena fa misy rojo ny fanalahidin'ny daholobe (ny voalohany dia ny fanalahidin'ny daholobe ary ny ambiny dia avy amin'ny orinasa namoaka ny fanalahidin'ny daholobe).
crt - fanendrena fa misy taratasy fanamarinana efa vita (fanalahidy ho an'ny daholobe misy fanazavana ara-teknika).

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

Ity toe-javatra ity dia tsy ampiasaina amin'ity tranga ity, fa nosoratana ho ohatra.

Satria ny hadisoana amin'ity mari-pamantarana ity dia hitarika amin'ny fandefasana spam avy amin'ny servero (tsy misy sitrakao).

Dia porofoy amin’ny rehetra fa tsy meloka ianao.

recipient_delimiter = +

Mety tsy hain'ny olona maro izany, fa toetra manara-penitra ho an'ny mailaka laharana izy io, ary tohanan'ny ankamaroan'ny mpizara mailaka maoderina.

Ohatra, raha manana boaty mailaka ianao "[email voaaro]"andramo alefa any"[email voaaro]"- jereo izay ho avy.

inet_protocols = ipv4

Mety hampisavoritaka izany.

Saingy tsy izany ihany. Ny sehatra vaovao tsirairay dia IPv4 ihany amin'ny alàlan'ny default, avy eo velomiko misaraka ny IPv6 ho an'ny tsirairay.

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

Eto isika dia mamaritra fa ny mailaka miditra rehetra dia mankany amin'ny dovecot.
Ary ny fitsipika momba ny sehatra, mailbox, alias - jereo ny angon-drakitra.

/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

Fantatr'i postfix izao fa azo atao ny manaiky ny fandefasana mailaka raha tsy aorian'ny fahazoan-dàlana amin'ny dovecot.

Tena tsy azoko mihitsy hoe nahoana no adika eto. Efa nofaritanay avokoa izay ilaina amin'ny "transport_virtual".

Saingy efa antitra be ny rafitra postfix - mety ho fihemorana tamin'ny andro taloha izany.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Ity dia azo amboarina amin'ny fomba hafa ho an'ny mpizara mailaka tsirairay.

Manana mpizara mailaka 3 eo am-pelatanako aho ary samy hafa ireo toe-javatra ireo noho ny fepetra fampiasana samihafa.

Mila manamboatra azy tsara ianao - raha tsy izany dia hirotsaka aminao ny spam, na ratsy kokoa aza - hivoaka avy aminao ny spam.

# SPF
policyd-spf_time_limit = 3600

Mametraka plugin sasany mifandraika amin'ny fanamarinana ny SPF amin'ny taratasy miditra.

# 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

Ny toe-javatra dia ny tsy maintsy manome sonia DKIM miaraka amin'ny mailaka mivoaka rehetra.

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

Ity dia antsipiriany manan-danja amin'ny fandefasana taratasy rehefa mandefa taratasy avy amin'ny script PHP.

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

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

Eo amin'ny ankavia dia misy fomba fiteny mahazatra. Eo ankavanana dia misy etikety izay manamarika ny litera.
Postfix mifanaraka amin'ny mari-pamantarana - dia handray andalana vitsivitsy fanampiny ho an'ny taratasy manokana.

Haseho ao amin'ny "master.cf" ny fomba hamerenana ny postfix ho an'ny taratasy manokana.

Andalana 4, 5, 6 no tena lehibe. Amin'ny anaran'ny sehatra andefasanay ny taratasy, dia nametraka ity marika ity izahay.
Saingy ny saha "avy" dia tsy aseho amin'ny script PHP ao amin'ny code taloha. Avy eo dia tonga ny solon'anarana.

Efa be dia be ny lahatsoratra - tsy te ho variana amin'ny fametrahana nginx+fpm aho.

Raha fohifohy, ho an'ny tranokala tsirairay dia mametraka ny tompony mpampiasa linux azy manokana izahay. Ary mifanaraka amin'izany ny fpm-dobonao.

Fpm-pool dia mampiasa ny dikan-teny php rehetra (tsara raha amin'ny lohamilina iray ihany ianao dia afaka mampiasa dikan-teny samihafa amin'ny php ary na dia php.ini hafa aza ho an'ny tranokala mifanila tsy misy olana).

Noho izany, misy mpampiasa linux manokana "www-domain2" manana tranokala domain2.com. Ity tranokala ity dia manana kaody handefasana mailaka tsy misy famaritana ny saha avy.

Noho izany, na dia amin'ity tranga ity aza, ny taratasy dia halefa tsara ary tsy hiafara amin'ny spam mihitsy.

Ny "/etc/postfix/master.cf" dia toa izao:

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

Ny rakitra dia tsy omena feno - efa tena lehibe.
Ny zavatra niova ihany no voamariko.

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}

Ireo dia toe-javatra mifandraika amin'ny spamassasin, bebe kokoa momba izany any aoriana.

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

Avelanay ianao hifandray amin'ny mpizara mailaka amin'ny alàlan'ny seranana 587.
Mba hanaovana izany dia tsy maintsy miditra ianao.

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

Alefaso ny fanamarinana SPF.

apt-get install postfix-policyd-spf-python

Andao hametraka ny fonosana ho an'ny fanamarinana SPF etsy ambony.

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

Ary ity no zavatra mahaliana indrindra. Izany dia ny fahafahana mandefa taratasy ho an'ny sehatra manokana avy amin'ny adiresy IPv4/IPv6 manokana.

Izany dia natao noho ny rDNS. rDNS dia ny dingan'ny fandraisana tady amin'ny adiresy IP.
Ary ho an'ny mailaka, ity endri-javatra ity dia ampiasaina hanamafisana fa ny helo dia mifanaraka tsara amin'ny rDNS amin'ny adiresy nandefasana ny mailaka.

Raha tsy mifanandrify amin'ny sehatra mailaka amin'ny anaran'izay nandefasana ny taratasy ny helo, dia omena teboka spam.

Helo tsy mifanandrify amin'ny rDNS - be dia be ny teboka spam omena.
Noho izany, ny sehatra tsirairay dia tsy maintsy manana ny adiresy IP-ny.
Ho an'ny OVH - ao amin'ny console dia azo atao ny mamaritra rDNS.
Ho an'ny tech.ru - voavaha amin'ny fanohanana ny olana.
Ho an'ny AWS, voavaha amin'ny alàlan'ny fanohanana ny olana.
"inet_protocols" sy "smtp_bind_address6" - mamela ny fanohanana IPv6 izahay.
Ho an'ny IPv6 dia mila misoratra anarana rDNS ihany koa ianao.
"syslog_name" - ary izany dia natao ho fanamorana ny famakiana ny log.

Mividiana taratasy fanamarinana Manoro hevitra eto aho.

Mametraka rohy postfix+dovecot eto.

Fametrahana SPF.

============= Dovecot =============

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

Mametraka mysql, mametraka ny fonosana.

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

disable_plaintext_auth = yes
auth_mechanisms = plain login

Ny fanomezan-dàlana dia atao encryption ihany.

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

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

Eto isika dia manondro ny toerana fitahirizana ireo litera.

Tiako ho voatahiry anaty rakitra izy ireo ary atambatra amin'ny sehatra.

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

Ity no dovecot fichier configuration lehibe.
Eto izahay dia manafoana ny fifandraisana tsy azo antoka.
Ary avelao ny fifandraisana azo antoka.

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

Fametrahana ssl. Asehonay fa ilaina ny ssl.
Ary ny certificat mihitsy. Ary ny antsipiriany manan-danja dia ny torolàlana "toerana". Manondro izay certificat SSL ampiasaina rehefa mifandray amin'ny IPv4 eo an-toerana.

Raha ny tokony ho izy, IPv6 dia tsy voarindra eto, hanitsy izany tsy fahampiana izany aho any aoriana.
XX.XX.XX.X5 (domain2) - tsy misy taratasy fanamarinana. Mba hampifandraisana ny mpanjifa dia mila mamaritra domain1.com ianao.
XX.XX.XX.X2 (domain3) - misy taratasy fanamarinana, azonao atao ny mamaritra domain1.com na domain3.com hampifandray ny mpanjifa.

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

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Ilaina izany amin'ny mpamono spam amin'ny ho avy.

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

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Ity dia plugin antispam. Ilaina amin'ny fanofanana spamassasin amin'ny fotoana famindrana mankany/avy amin'ny lahatahiry "Spam".

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

protocol pop3 {
}

Misy ihany ny rakitra toy izany.

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

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

Fametrahana lmtp.

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

Toerana fanofanana Spamassasin amin'ny fotoana famindrana mankany/avy amin'ny lahatahiry Spam.

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

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

Dosie mamaritra ny tokony hatao amin'ny taratasy miditra.

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

require ["fileinto", "mailbox"];

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

Mila manangona ny rakitra ianao: "sievec default.sieve".

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

Famaritana ny rakitra sql ho an'ny fanomezan-dàlana.
Ary ny rakitra mihitsy no ampiasaina ho fomba fanomezan-dàlana.

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

Izany dia mifanaraka amin'ny toe-javatra mitovy amin'ny postfix.

File "/etc/dovecot/dovecot.conf"

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

Fichier configuration lehibe.
Ny zava-dehibe dia ny manondro eto - ampio protocols.

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

apt-get install spamassassin spamc

Andao hametraka ny fonosana.

adduser spamd --disabled-login

Andao hanampy mpampiasa iray amin'ny anaran'iza.

systemctl enable spamassassin.service

Avelantsika ny serivisy spammassassin fametahana mandeha ho azy rehefa alefa.

File "/etc/default/spamassassin":

CRON=1

Amin'ny alàlan'ny fampandehanana ny fanavaozana mandeha ho azy ny fitsipika "amin'ny alàlan'ny default".

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

Mila mamorona tahiry "sa" ao amin'ny mysql ianao miaraka amin'ny mpampiasa "sa" miaraka amin'ny tenimiafina "password" (soloina zavatra sahaza).

report_safe - ity dia handefa tatitra momba ny mailaka spam fa tsy taratasy.
use_bayes dia sehatra fianarana milina spammassassin.

Ny firafitry ny spammassassin sisa dia nampiasaina teo aloha tao amin'ny lahatsoratra.

Toerana ankapobeny "spamassassin".
Momba ny famindrana mailaka Spam vaovao mankany amin'ny lahatahiry "Spam" IMAP.
Momba ny fitambaran'ny Dovecot + SpamAssassin tsotra.
Manoro hevitra aho hamaky ny teoria fianarana spamassasin rehefa mamindra litera ao amin'ny lahatahiry imap (ary tsy manoro hevitra aho ny hampiasa izany).

============= Miantso ny fiarahamonina =============

Te hanipy hevitra ao amin'ny fiaraha-monina ihany koa aho momba ny fomba hampitomboana ny haavon'ny fiarovana ny taratasy alefa. Satria tena liana amin'ny lohahevitra momba ny mailaka aho.

Mba hahafahan'ny mpampiasa mamorona fanalahidy roa amin'ny mpanjifany (outlook, thunderbird, browser-plugin, ...). Ampahibemaso sy tsy miankina. Public - alefaso any amin'ny DNS. Private - tehirizo amin'ny mpanjifa. Ny mpizara mailaka dia afaka mampiasa fanalahidin'ny daholobe handefasana amin'ny mpandray manokana.

Ary mba hiarovana amin'ny spam amin'ny taratasy toy izany (eny, ny mpizara mailaka dia tsy afaka mijery ny atiny) - mila mampiditra fitsipika 3 ianao:

  1. Fanaovana sonia DKIM tena izy, SPF tsy maintsy atao, rDNS tsy maintsy atao.
  2. Tambajotra neural momba ny fanofanana antispam + angona momba izany eo amin'ny lafiny mpanjifa.
  3. Ny algorithm encryption dia tsy maintsy ho toy izany ka tsy maintsy mandany 100 heny ny herin'ny CPU amin'ny encryption noho ny lafiny mpandray.

Ho fanampin'ny taratasy ho an'ny daholobe, manamboara taratasy fanolorana manara-penitra "hanombohana fifampiraharahana azo antoka." Ny iray amin'ireo mpampiasa (mailbox) dia mandefa taratasy miaraka amin'ny attaché amin'ny boaty mailaka hafa. Ny taratasy dia misy tolo-kevitra amin'ny lahatsoratra hanombohana fantsom-pifandraisana azo antoka ho an'ny fifandraisana sy ny fanalahidin'ny daholobe an'ny tompon'ny boaty mailaka (miaraka amin'ny fanalahidy manokana eo amin'ny lafiny mpanjifa).

Azonao atao mihitsy aza ny manao fanalahidy roa manokana ho an'ny taratasy tsirairay. Ny mpampiasa mpandray dia afaka manaiky ity tolotra ity ary mandefa ny fanalahidiny ho an'ny daholobe (natao manokana ho an'ity taratasim-pifandraisana ity ihany koa). Manaraka, ny mpampiasa voalohany dia mandefa taratasy fanaraha-maso ny serivisy (nafenina miaraka amin'ny fanalahidin'ny daholobe an'ny mpampiasa faharoa) - rehefa nahazo izay azon'ny mpampiasa faharoa heverina ho azo itokisana ny fantsom-pifandraisana niforona. Manaraka, mandefa taratasy fanaraha-maso ny mpampiasa faharoa - ary avy eo ny mpampiasa voalohany dia afaka mihevitra ny fantsona voaforona ho azo antoka ihany koa.

Mba hiadiana amin'ny fisakanana fanalahidy eny an-dalana, ny protocol dia tsy maintsy manome ny fahafahana mandefa fanalahidin'ny daholobe iray farafahakeliny amin'ny fampiasana flash drive.

Ary ny zava-dehibe indrindra dia ny miasa rehetra (ny fanontaniana dia hoe "iza no handoa izany?"):
Ampidiro ny taratasy fanamarinana paositra manomboka amin'ny $10 mandritra ny 3 taona. Izay mamela ny mpandefa hanondro ao amin'ny dns fa "eo ny fanalahidin'ny daholobe." Ary hanome anao fahafahana hanomboka fifandraisana azo antoka izy ireo. Mandritra izany fotoana izany, ny fanekena ny fifandraisana toy izany dia maimaim-poana.
gmail dia manome vola ny mpampiasa azy. Ho an'ny $10 isaky ny 3 taona - ny zo hamorona fantsom-pifandraisana azo antoka.

============= Fehiny =============

Mba hitsapana ny lahatsoratra manontolo dia hanofa mpizara voatokana mandritra ny iray volana aho ary hividy sehatra misy taratasy fanamarinana SSL.

Saingy ny toe-javatra iainana dia nivoatra ka nitohy nandritra ny 2 volana ity olana ity.
Ary noho izany, rehefa nanana fotoana malalaka indray aho, dia nanapa-kevitra ny hamoaka ilay lahatsoratra amin'ny maha-izy azy, fa tsy hitera-doza ny famoahana azy mandritra ny taona hafa.

Raha misy fanontaniana be dia be toy ny "saingy tsy voafaritra amin'ny antsipiriany ampy izany", dia mety hisy hery haka mpizara voatokana miaraka amin'ny sehatra vaovao sy fanamarinana SSL vaovao ary mamaritra izany amin'ny antsipiriany bebe kokoa ary, ny ankamaroany. ny zava-dehibe, fantaro ireo tsipiriany manan-danja rehetra tsy hita.

Te-hahazo valiny momba ny hevitra momba ny taratasy fanamarinana paositra ihany koa aho. Raha tianao ilay hevitra dia hiezaka aho hitady ny hery hanoratana drafitra ho an'ny rfc.

Rehefa mandika ampahany betsaka amin'ny lahatsoratra iray dia omeo rohy mankany amin'ity lahatsoratra ity.
Rehefa mandika amin'ny fiteny hafa dia omeo rohy mankany amin'ity lahatsoratra ity.
Hiezaka ny handika izany amin'ny teny anglisy ny tenako ary hamela references.


Source: www.habr.com

Add a comment