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

Artikulu hau posta zerbitzari moderno bat nola konfiguratu buruzkoa da.
Postfix + Usoa. SPF + DKIM + rDNS. IPv6rekin.
TSL enkriptatzearekin. Domeinu anitzentzako laguntzarekin - benetako SSL ziurtagiri batekin.
Spam-aren aurkako babesarekin eta beste posta-zerbitzari batzuen spam-aren aurkako balorazio altuarekin.
Hainbat interfaze fisiko onartzen ditu.
OpenVPNrekin, zeinaren konexioa IPv4 bidezkoa da eta IPv6 eskaintzen duena.

Teknologia hauek guztiak ikasi nahi ez badituzu, baina halako zerbitzari bat konfiguratu nahi baduzu, artikulu hau zuretzat da.

Artikuluak ez du xehetasun guztiak azaltzeko ahaleginik egiten. Azalpena estandar gisa konfiguratuta ez dagoenari edo kontsumitzailearen ikuspuntutik garrantzitsua denari dagokio.

Posta zerbitzari bat konfiguratzeko motibazioa aspaldiko ametsa izan da. Hau ergelkeria dirudi, baina nire ustez, askoz hobea da zure marka gogokoeneko auto berri batekin amets egitea baino.

IPv6 konfiguratzeko bi motibazio daude. IT espezialista batek teknologia berriak etengabe ikasi behar ditu bizirik irauteko. Nire ekarpen xumea egin nahiko nuke zentsuraren aurkako borrokari.

OpenVPN konfiguratzeko motibazioa IPv6 tokiko makinan funtzionatzea besterik ez da.
Hainbat interfaze fisiko ezartzeko motibazioa nire zerbitzarian interfaze bat "motela baina mugagabea" eta beste bat "azkar baina tarifa batekin" daukadala da.

Bind ezarpenak konfiguratzeko motibazioa nire ISPak DNS zerbitzari ezegonkorra eskaintzen duela da, eta Google-k ere batzuetan huts egiten du. DNS zerbitzari egonkor bat nahi dut erabilera pertsonalerako.

Artikulu bat idazteko motibazioa - Duela 10 hilabete zirriborro bat idatzi nuen, eta dagoeneko bi aldiz begiratu dut. Egileak aldizka behar badu ere, besteek ere behar izateko probabilitate handia dago.

Ez dago posta zerbitzari baterako irtenbide unibertsala. Baina saiatuko naiz honelako zerbait idazten: "egin hau eta gero, dena behar den moduan funtzionatzen duenean, bota ezazu aparteko gauzak".

Tech.ru konpainiak Kolokazio zerbitzari bat du. OVH, Hetzner, AWSekin alderatu daiteke. Arazo hau konpontzeko, tech.ru-rekin lankidetza askoz eraginkorragoa izango da.

Debian 9 zerbitzarian instalatuta dago.

Zerbitzariak `eno2` eta `eno1` 2 interfaze ditu. Lehenengoa mugagabea da, eta bigarrena azkarra, hurrenez hurren.

3 IP helbide estatiko daude, XX.XX.XX.X0 eta XX.XX.XX.X1 eta XX.XX.XX.X2 `eno1` interfazean eta XX.XX.XX.X5 `eno2` interfazean .

Eskuragarri XXXX:XXXX:XXXX:XXXX::/64 `eno6` interfazeari esleitutako IPv1 helbide multzo bat eta bertatik XXXX:XXXX:XXXX:XXXX:1:2::/96 esleitu zen `eno2`-ri nire eskariz.

`domeinua3.com`, `domeinua1.com`, `domeinua2.com` 3 domeinu daude. SSL ziurtagiri bat dago `domain1.com` eta `domain3.com`.

Google kontu bat daukat nire postontziarekin lotu nahi dudana[posta elektroniko bidez babestua]` (posta jaso eta mezuak zuzenean gmail interfazetik bidaltzea).
Postontzi bat egon behar du[posta elektroniko bidez babestua]`, nire gmail-en ikusi nahi dudan mezu elektronikoaren kopia bat. Eta arraroa da `-ren izenean zerbait bidali ahal izatea[posta elektroniko bidez babestua]` web interfazearen bidez.

Postontzi bat egon behar du[posta elektroniko bidez babestua]`, Ivanovek bere iPhonetik erabiliko duena.

Bidalitako mezu elektronikoek spam-aren aurkako baldintza moderno guztiak bete behar dituzte.
Sare publikoetan ematen den enkriptazio-maila gorena egon behar da.
IPv6 euskarria izan beharko luke gutunak bidaltzeko eta jasotzeko.
Mezu elektronikoak inoiz ezabatuko ez dituen SpamAssassin bat egon beharko litzateke. Eta errebotatu egingo du edo saltatu edo IMAP "Spam" karpetara bidaliko du.
SpamAssassin-en ikaskuntza automatikoa konfiguratu behar da: gutun bat Spam karpetara eramaten badut, honetatik ikasiko du; Spam karpetatik gutun bat mugitzen badut, honetatik ikasiko du. SpamAssassin prestakuntzaren emaitzek eragin beharko lukete gutuna Spam karpetan amaitzen den ala ez.
PHP scriptek zerbitzari jakin bateko edozein domeinuren izenean mezuak bidaltzeko gai izan behar dute.
Openvpn zerbitzu bat egon beharko litzateke, IPv6 ez duen bezero batean IPv6 erabiltzeko aukerarekin.

Lehenik eta behin interfazeak eta bideratzea konfiguratu behar dituzu, IPv6 barne.
Ondoren, OpenVPN konfiguratu beharko duzu, IPv4 bidez konektatuko dena eta bezeroari IPv6 helbide estatiko-reala emango dio. Bezero honek zerbitzariko IPv6 zerbitzu guztietarako sarbidea izango du eta Interneteko edozein IPv6 baliabideetarako sarbidea izango du.
Ondoren, Postfix konfiguratu beharko duzu gutunak + SPF + DKIM + rDNS eta antzeko beste gauza batzuk bidaltzeko.
Ondoren, Dovecot konfiguratu eta Multidomain konfiguratu beharko duzu.
Ondoren, SpamAssassin konfiguratu eta prestakuntza konfiguratu beharko duzu.
Azkenik, instalatu Bind.

============= Interfaze anitzak ==============

Interfazeak konfiguratzeko, hau idatzi behar duzu "/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

Ezarpen hauek tech.ru-ko edozein zerbitzaritan aplika daitezke (laguntzarekin koordinazio apur batekin) eta berehala funtzionatuko du behar bezala.

Hetzner, OVH-ren antzeko gauzak konfiguratzen esperientzia baduzu, ezberdina da. Zailagoa.

eno1 sare-txartelaren #1 izena da (motela baina mugagabea).
eno2 sare-txartelaren #2 izena da (bizkorra, baina tarifa batekin).
tun0 OpenVPN-ren sare birtualaren txartelaren izena da.
XX.XX.XX.X0 - IPv4 #1 eno1-en.
XX.XX.XX.X1 - IPv4 #2 eno1-en.
XX.XX.XX.X2 - IPv4 #3 eno1-en.
XX.XX.XX.X5 - IPv4 #1 eno2-en.
XX.XX.XX.1 - IPv4 atebidea.
XXXX:XXXX:XXXX:XXXX::/64 - IPv6 zerbitzari osorako.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - IPv6 eno2-rako, kanpoko guztia eno1-era sartzen da.
XXXX:XXXX:XXXX:XXXX::1 — IPv6 atebidea (azpimarratzekoa da hori ezberdin egin daitekeela/behar dela. Zehaztu IPv6 etengailua).
dns-nameservers - 127.0.0.1 adierazten da (lotura lokalean instalatuta dagoelako) eta 213.248.1.6 (hau tech.ru-koa da).

“taula eno1t” eta “taula eno2t” - ibilbide-arau hauen esanahia eno1 ->tik sartzen den trafikoa bertatik irtengo litzateke eta eno2tik sartzen den trafikoa -> bertatik irtengo litzateke. Eta zerbitzariak hasitako konexioak ere eno1etik pasatuko lirateke.

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

Komando honekin zehazten dugu "table eno1t" -> markatutako edozein arauren menpe dagoen edozein trafiko ulertezina eno1 interfazera bidaliko dela.

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

Komando honekin zerbitzariak hasitako edozein trafiko eno1 interfazera zuzendu behar dela zehazten dugu.

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

Komando honekin trafikoa markatzeko arauak ezartzen ditugu.

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

Bloke honek bigarren IPv4 bat zehazten du eno1 interfazerako.

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

Komando honekin OpenVPN bezeroetatik IPv4 lokalerako ibilbidea ezartzen dugu XX.XX.XX.X0 izan ezik.
Oraindik ez dut ulertzen zergatik den nahikoa komando hau IPv4 guztietarako.

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

Hemen ezartzen dugu interfazearen beraren helbidea. Zerbitzariak "irteerako" helbide gisa erabiliko du. Ez da berriro inola ere erabiliko.

Zergatik da hain konplikatua ":1:1::"? Beraz, OpenVPN-k behar bezala funtziona dezan eta horretarako bakarrik. Honi buruz gehiago.

Atebidearen gaiari dagokionez, horrela funtzionatzen du eta ondo dago. Baina modu zuzena zerbitzaria konektatuta dagoen switch-aren IPv6 hemen adieraztea da.

Hala ere, arrazoiren batengatik IPv6-k funtzionatzeari uzten dio hau egiten badut. Hau ziurrenik tech.ru arazoren bat da.

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

Hau interfazeari IPv6 helbidea gehitzen ari da. Ehun helbide behar badituzu, fitxategi honetan ehun lerro esan nahi du.

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

Interfaze guztien helbideak eta azpisareak adierazi ditut argi uzteko.
eno1 - izan behar du "/64"- hau baita gure helbide multzo osoa.
tun0 - azpisareak eno1 baino handiagoa izan behar du. Bestela, ezin izango da IPv6 atebiderik konfiguratu OpenVPN bezeroentzat.
eno2 - azpisareak tun0 baino handiagoa izan behar du. Bestela, OpenVPN bezeroek ezin izango dituzte tokiko IPv6 helbideetara sartu.
Argitasunerako, 16 azpisareko urratsa aukeratu nuen, baina nahi baduzu, "1" urratsa ere egin dezakezu.
Horren arabera, 64+16 = 80, eta 80+16 = 96.

Are argitasun handiagoa lortzeko:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY eno1 interfazeko gune edo zerbitzu jakin batzuei esleitu behar zaizkien helbideak dira.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY eno2 interfazeko gune edo zerbitzu jakin batzuei esleitu behar zaizkien helbideak dira.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY OpenVPN bezeroei esleitu edo OpenVPN zerbitzu-helbide gisa erabili behar diren helbideak dira.

Sarea konfiguratzeko, zerbitzaria berrabiaraztea posible izan beharko litzateke.
IPv4-ren aldaketak exekutatzen direnean jasotzen dira (ziurtatu pantailan bildu duzula; bestela komando honek zerbitzariko sarea huts egingo du):

/etc/init.d/networking restart

Gehitu fitxategiaren amaieran "/etc/iproute2/rt_tables":

100 eno1t
101 eno2t

Hau gabe, ezin dituzu taula pertsonalizatuak erabili "/etc/network/interfaces" fitxategian.
Zenbakiek bakarrak eta 65535 baino txikiagoak izan behar dute.

IPv6 aldaketak erraz alda daitezke berrabiarazi gabe, baina horretarako gutxienez hiru komando ikasi behar dituzu:

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

"/etc/sysctl.conf" ezarpena

# 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

Hauek dira nire zerbitzariaren "sysctl" ezarpenak. Utzidazu zerbait garrantzitsua adierazi.

net.ipv4.ip_forward = 1

Hau gabe, OpenVPNk ez du batere funtzionatuko.

net.ipv6.ip_nonlocal_bind = 1

Interfazea piztu eta berehala IPv6 (adibidez, nginx) lotzen saiatzen den edonork errore bat jasoko du. Helbide hau ez dagoela erabilgarri.

Egoera hori saihesteko, ezarpen hori egiten da.

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

IPv6 ezarpen hauek gabe, OpenVPN bezeroaren trafikoa ez da mundura ateratzen.

Beste ezarpen batzuk ez dira garrantzitsuak edo ez ditut gogoan zertarako diren.
Baina badaezpada, "dagoen bezala" uzten dut.

Fitxategi honen aldaketak zerbitzaria berrabiarazi gabe jaso ahal izateko, komandoa exekutatu behar duzu:

sysctl -p

"Mahai" arauei buruzko xehetasun gehiago: habr.com/post/108690

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

OpenVPN IPv4-k ez du funtzionatzen iptables gabe.

Nire iptables VPNrako honelakoak dira:

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 tokiko makinaren nire IPv4 helbide estatikoa da.
10.8.0.0/24 - IPv4 openvpn sarea. Openvpn bezeroentzako IPv4 helbideak.
Arauen koherentzia garrantzitsua da.

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

Hau muga bat da, nik bakarrik OpenVPN nire IP estatikotik erabili ahal izateko.

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

OpenVPN bezeroen eta Interneten artean IPv4 paketeak birbidaltzeko, komando hauetako bat erregistratu behar duzu.

Kasu ezberdinetarako, aukeretako bat ez da egokia.
Bi komandoak egokiak dira nire kasurako.
Dokumentazioa irakurri ondoren, lehen aukera aukeratu dut CPU gutxiago erabiltzen duelako.

Berrabiarazi ondoren iptables ezarpen guztiak jaso ahal izateko, nonbait gorde behar dituzu.

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

Horrelako izenak ez ziren kasualitatez aukeratu. "iptables-persistent" paketeak erabiltzen ditu.

apt-get install iptables-persistent

OpenVPN pakete nagusia instalatzen:

apt-get install openvpn easy-rsa

Konfigura dezagun ziurtagirietarako txantiloia (ordezkatu zure balioak):

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

Editatu ditzagun ziurtagiri-txantiloiaren ezarpenak:

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

Sortu zerbitzariaren ziurtagiria:

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

Presta dezagun azken "client-name.opvn" fitxategiak sortzeko gaitasuna:

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

Presta dezagun fitxategi guztiak opvn fitxategi bakar batean batuko dituen script bat.

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

OpenVPN lehen bezeroa sortzea:

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

"~/client-configs/files/client-name.ovpn" fitxategia bezeroaren gailura bidaltzen da.

iOS bezeroentzat honako trikimailu hau egin beharko duzu:
"tls-auth" etiketaren edukiak iruzkinik gabe egon behar du.
Eta jarri "gako-direkzio 1" ere "tls-auth" etiketaren aurretik.

Konfigura dezagun OpenVPN zerbitzariaren konfigurazioa:

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

Hau beharrezkoa da bezero bakoitzarentzat helbide estatiko bat ezartzeko (ez da beharrezkoa, baina erabiltzen dut):

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

Detailerik zailena eta gakoena.

Zoritxarrez, OpenVPN-k ez daki oraindik bezeroentzako IPv6 atebide bat modu independentean konfiguratu.
Bezero bakoitzari "eskuz" birbidali behar diozu.

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

"/etc/openvpn/server-clientconnect.sh" fitxategia:

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

"/etc/openvpn/server-clientdisconnect.sh" fitxategia:

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

Bi scriptek "/etc/openvpn/variables" fitxategia erabiltzen dute:

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

Zaila egiten zait gogoratzea zergatik den horrela idatzita.

Orain sare-maskara = 112 itxura arraroa da (96 izan beharko luke bertan).
Eta aurrizkia bitxia da, ez dator bat tun0 sarearekin.
Baina ados, dagoen bezala utziko dut.

cipher DES-EDE3-CBC

Hau ez da guztientzako - konexioa enkriptatzeko metodo hau aukeratu nuen.

Lortu informazio gehiago OpenVPN IPv4 konfiguratzeari buruz.

Lortu informazio gehiago OpenVPN IPv6 konfiguratzeari buruz.

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

Pakete nagusia instalatzea:

apt-get install postfix

Instalatzen duzunean, hautatu "Internet gunea".

Nire "/etc/postfix/main.cf" honelakoa da:

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

Ikus ditzagun konfigurazio honen xehetasunak.

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

Khabrovskeko bizilagunen arabera, bloke honek "informazio okerrak eta tesi okerrak" ditu.Nire karrera hasi eta 8 urtera bakarrik hasi nintzen SSL nola funtzionatzen duen ulertzen.

Horregatik, SSL nola erabili deskribatzeko askatasuna hartuko dut («Nola funtzionatzen du?» eta «Zergatik funtzionatzen du?» galderei erantzun gabe).

Zifratze modernoaren oinarria gako-pare bat sortzea da (bi karaktere-kate oso luze).

"Gako" bat pribatua da, bestea "publikoa". Oso kontu handiz gordetzen dugu gako pribatua sekretuan. Gako publikoa guztion artean banatzen dugu.

Gako publiko bat erabiliz, testu-kate bat enkriptatu dezakezu, gako pribatuaren jabeak soilik deszifratu ahal izateko.
Beno, hori da teknologiaren oinarri osoa.

1. urratsa - https guneak.
Gune batera sartzean, nabigatzaileak web zerbitzaritik jakiten du gunea https dela eta, beraz, gako publikoa eskatzen du.
Web zerbitzariak gako publikoa ematen du. Arakatzaileak gako publikoa erabiltzen du http-eskaera enkriptatzeko eta bidaltzeko.
http-eskaera baten edukia gako pribatua dutenek bakarrik irakur dezakete, hau da, eskaera egiten zaion zerbitzariak bakarrik.
Http-eskaerak gutxienez URI bat dauka. Hori dela eta, herrialde bat webgune osora ez, orrialde zehatz batera sarbidea mugatzen saiatzen ari bada, ezinezkoa da https guneetarako.

2. urratsa - erantzun zifratua.
Web zerbitzariak errepidean erraz irakur daitekeen erantzuna ematen du.
Irtenbidea oso erraza da: arakatzaileak lokalean gako pribatu-publiko pare bera sortzen du https gune bakoitzeko.
Eta gunearen gako publikoaren eskaerarekin batera, bertako gako publikoa bidaltzen du.
Web zerbitzariak gogoratzen du eta, http-erantzuna bidaltzean, bezero zehatz baten gako publikoarekin zifratzen du.
Orain http-erantzuna bezeroaren arakatzailearen gako pribatuaren jabeak soilik deszifratu dezake (hau da, bezeroak berak).

3. urratsa - kanal publiko baten bidez konexio segurua ezartzea.
2. adibidean ahultasun bat dago; ezerk ez die eragozten onginahiei http-eskaera bat atzematea eta gako publikoari buruzko informazioa editatzea.
Horrela, bitartekariak argi eta garbi ikusiko du bidalitako eta jasotako mezuen eduki guztia komunikazio-kanala aldatu arte.
Honi aurre egitea oso erraza da: bidali arakatzailearen gako publikoa web zerbitzariaren gako publikoarekin enkriptatutako mezu gisa.
Ondoren, web zerbitzariak lehenengo erantzun bat bidaltzen du "zure gako publikoa honelakoa da" eta mezu hau gako publiko berarekin enkriptatzen du.
Arakatzaileak erantzunari begiratzen dio - "zure gako publikoa honelakoa da" mezua jasotzen bada - komunikazio kanal hau segurua dela % 100eko bermea da.
Zenbateraino da segurua?
Halako komunikazio kanal seguru baten sorrera bera ping*2 abiaduran gertatzen da. Adibidez 20 ms.
Erasotzaileak aldeetako baten gako pribatua izan behar du aldez aurretik. Edo aurkitu gako pribatu bat milisegundo pare batean.
Gako pribatu moderno bat pirateatzea hamarkada batzuk beharko dira superordenagailu batean.

4. urratsa - gako publikoen datu-base publikoa.
Jakina, istorio honetan erasotzaile bat bezeroaren eta zerbitzariaren arteko komunikazio kanalean esertzeko aukera dago.
Bezeroak zerbitzaria dela itxuratu dezake, eta zerbitzariak bezeroa dela. Eta imitatu tekla pare bat bi noranzkoetan.
Orduan erasotzaileak trafiko guztia ikusiko du eta trafikoa "editatu" ahal izango du.
Adibidez, aldatu dirua bidaltzeko helbidea edo kopiatu pasahitza lineako bankutik edo blokeatu eduki "gaitzesgarria".
Erasotzaile horiei aurre egiteko, https gune bakoitzeko gako publikoekin datu-base publiko bat sortu zuten.
Arakatzaile bakoitzak horrelako 200 datu-base inguru daudela "daki". Arakatzaile guztietan aldez aurretik instalatuta dator.
"Ezagutza" ziurtagiri bakoitzeko gako publiko batek babesten du. Hau da, ziurtapen-agintaritza zehatz bakoitzaren konexioa ezin da faltsutu.

Orain https-rako SSL nola erabili ulertzeko erraza da.
Zure garuna erabiltzen baduzu, argi geratuko da zerbitzu bereziek egitura honetan zerbait pirateatu dezaketen. Baina ahalegin izugarriak kostatuko zaizkie.
Eta NSA edo CIA baino txikiagoak diren erakundeak - ia ezinezkoa da dagoen babes-maila hackeatzea, baita VIPentzat ere.

Ssh konexioei buruz ere gehituko dut. Ez dago gako publikorik, beraz, zer egin dezakezu? Arazoa bi modutan konpontzen da.
ssh-by-password aukera:
Lehen konexioan, ssh bezeroak ssh zerbitzaritik gako publiko berri bat dugula ohartarazi beharko luke.
Eta konexio gehiagotan, "ssh zerbitzariaren gako publiko berria" abisua agertzen bada, zure entzutean saiatzen ari direla esan nahi du.
Edo zure lehen konexioa entzun zenuen, baina orain bitartekaririk gabe komunikatzen zara zerbitzariarekin.
Izan ere, entzuketak egitea erraz, azkar eta ahaleginik gabe agerian uzten denez, eraso hau bezero zehatz baterako kasu berezietan bakarrik erabiltzen da.

ssh-by-key aukera:
Flash drive bat hartzen dugu, bertan ssh zerbitzariaren gako pribatua idazten dugu (baldintzak eta ñabardura garrantzitsu asko daude horretarako, baina hezkuntza programa bat idazten ari naiz, ez erabiltzeko argibideak).
Gako publikoa ssh bezeroa egongo den makinan uzten dugu eta sekretuan gordetzen dugu ere.
Diskoa zerbitzarira eramaten dugu, sartu, gako pribatua kopiatu eta pendrivea erre eta errautsak haizera botatzen ditugu (edo, gutxienez, zeroekin formateatzen dugu).
Hori da guztia - eragiketa baten ondoren ezinezkoa izango da ssh konexio bat hackeatzea. Jakina, 10 urte barru trafikoa superordenagailu batean ikusteko aukera izango da, baina hori beste istorio bat da.

Barkatu offtopicagatik.

Beraz, orain teoria ezagututa. SSL ziurtagiri bat sortzeko fluxuari buruz esango dizut.

“openssl genrsa” erabiliz gako pribatu bat eta gako publikorako “hutsuneak” sortzen ditugu.
"Hutsuneak" hirugarren enpresa bati bidaltzen dizkiogu, eta hari gutxi gorabehera $ 9 ordaintzen dizkiogu ziurtagiririk errazenagatik.

Pare bat ordu igaro ondoren, hirugarren enpresa honen gure gako "publikoa" eta hainbat gako publikoren multzoa jasotzen ditugu.

Zergatik ordaindu behar duen hirugarren enpresa batek nire gako publikoaren erregistroa aparteko galdera da, ez dugu kontuan hartuko hemen.

Orain argi dago inskripzioaren esanahia zein den:

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

"/etc/ssl" karpetak ssl arazoetarako fitxategi guztiak ditu.
domain1.com — domeinu-izena.
2018a gakoen sorreraren urtea da.
"gakoa" - fitxategia gako pribatua dela adierazten du.

Eta fitxategi honen esanahia:

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com — domeinu-izena.
2018a gakoen sorreraren urtea da.
kateatuta - gako publikoen kate bat dagoela adierazten duen izendapena (lehena gure gako publikoa da eta gainerakoak gako publikoa eman duen enpresatik etorritakoak dira).
crt - prest egindako ziurtagiri bat dagoela dioen izendapena (gako publikoa azalpen teknikoekin).

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

Ezarpen hau ez da kasu honetan erabiltzen, baina adibide gisa idatzita dago.

Parametro honetan errore batek zure zerbitzaritik spam bidaltzea ekarriko duelako (zure borondaterik gabe).

Orduan frogatu guztiei ez zarela errudun.

recipient_delimiter = +

Jende askok ez daki, baina posta elektronikoak sailkatzeko karaktere estandarra da eta posta zerbitzari moderno gehienek onartzen dute.

Adibidez, postontzi bat baduzu "[posta elektroniko bidez babestua]"saiatu helbide honetara bidaltzen"[posta elektroniko bidez babestua]"- Begira zer ateratzen den.

inet_protocols = ipv4

Hau nahasia izan daiteke.

Baina ez da horrela bakarrik. Domeinu berri bakoitza lehenespenez IPv4 baino ez da, gero IPv6 aktibatzen dut bakoitzari bereizita.

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

Hemen zehazten dugu sarrerako mezu guztiak usocot-era doazela.
Eta domeinu, postontzi, alias arauak - begiratu datu-basean.

/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

Orain Postfix-ek badaki posta gehiago bidaltzeko onar daitekeela usocot-ekin baimendu ondoren soilik.

Benetan ez dut ulertzen zergatik hau bikoiztuta dagoen hemen. Dagoeneko zehaztu dugu “garraio_birtualean” behar den guztia.

Baina postfix sistema oso zaharra da, ziurrenik antzinako atzerakada bat da.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

Hau modu ezberdinean konfigura daiteke posta zerbitzari bakoitzeko.

3 posta zerbitzari ditut eskura eta ezarpen hauek oso desberdinak dira erabilera-eskakizun desberdinengatik.

Arretaz konfiguratu behar duzu - bestela spam-a isuriko zaizu, edo are okerrago - spam-a zuregandik isuriko da.

# SPF
policyd-spf_time_limit = 3600

Sarrerako letren SPF egiaztatzearekin lotutako plugin batzuen konfigurazioa.

# 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

Ezarpena da DKIM sinadura bat eman behar dugula irteerako mezu elektroniko guztiekin.

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

Hau da gutunen bideraketaren funtsezko xehetasuna PHP scriptetatik gutunak bidaltzean.

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

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

Ezkerrean adierazpen erregularrak daude. Eskuinean letra markatzen duen etiketa dago.
Postfix etiketaren arabera - letra zehatz baterako konfigurazio-lerro batzuk gehiago hartuko ditu kontuan.

Letra zehatz baterako postfixa nola birkonfiguratuko den adieraziko da "master.cf"-n.

4, 5, 6 lerroak dira nagusiak. Gutuna zein domeinuren izenean bidaltzen ari garen, etiketa hau jartzen dugu.
Baina "tik" eremua ez da beti PHP scriptetan adierazten kode zaharrean. Ondoren, erabiltzaile-izena erreskatatzera dator.

Artikulua zabala da dagoeneko - ez nuke nahasi nahi nginx+fpm konfiguratuz.

Laburbilduz, gune bakoitzerako bere linux-erabiltzailearen jabea ezarri dugu. Eta horren arabera zure fpm-pool.

Fpm-pool-ek php-ren edozein bertsio erabiltzen du (oso ona da zerbitzari berean php-ren bertsio desberdinak eta baita php.ini desberdinak ere arazorik gabe aldameneko guneetarako).

Beraz, "www-domain2" linux-erabiltzaile zehatz batek domain2.com webgune bat du. Gune honek mezu elektronikoak bidaltzeko kode bat du, den eremua zehaztu gabe.

Beraz, kasu honetan ere, gutunak behar bezala bidaliko dira eta ez dira inoiz spam-etan amaituko.

Nire "/etc/postfix/master.cf" honelakoa da:

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

Fitxategia ez da osorik ematen; dagoeneko oso handia da.
Aldatutakoa bakarrik ohartu nintzen.

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}

Hauek spamassasinarekin lotutako ezarpenak dira, geroago gehiago.

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 atakaren bidez posta zerbitzariarekin konektatzeko aukera ematen dizugu.
Horretarako, saioa hasi behar duzu.

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

Gaitu SPF egiaztapena.

apt-get install postfix-policyd-spf-python

Instala dezagun goiko SPF egiaztapenetarako paketea.

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

Eta hau da interesgarriena. Hau domeinu jakin baterako gutunak bidaltzeko aukera da IPv4/IPv6 helbide zehatz batetik.

Hau rDNSren mesedetan egiten da. rDNS IP helbidearen bidez kate bat jasotzeko prozesua da.
Eta postarako, eginbide hau erabiltzen da heloa zehatz-mehatz bat datorrela mezu elektronikoa bidali den helbidearen rDNSarekin.

Heloa ez badator bat gutuna bidalitakoaren izenean posta elektronikoko domeinuarekin, spam puntuak ematen dira.

Helo ez dator bat rDNS - spam puntu asko ematen dira.
Horren arabera, domeinu bakoitzak bere IP helbidea izan behar du.
OVHrentzat - kontsolan rDNS zehaztea posible da.
Tech.ru-rentzat - arazoa laguntzaren bidez konpontzen da.
AWSrentzat, arazoa laguntzaren bidez konpontzen da.
"inet_protocols" eta "smtp_bind_address6" - IPv6 euskarria gaitu dugu.
IPv6rako ere rDNS erregistratu behar duzu.
"syslog_name" - eta hau erregistroak erraz irakurtzeko da.

Erosi ziurtagiriak Hemen gomendatzen dut.

Postfix+dovecot esteka konfiguratzen hemen.

SPF ezarpena.

============= Usoa =============

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

Mysql konfiguratzen, paketeak beraiek instalatzen.

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

disable_plaintext_auth = yes
auth_mechanisms = plain login

Baimena zifratuta dago soilik.

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

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

Hemen letrak gordetzeko kokapena adierazten dugu.

Fitxategietan gorde eta domeinuka taldekatuta egotea nahi dut.

"/etc/dovecot/conf.d/10-master.conf" fitxategia

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

Hau usocot konfigurazio fitxategi nagusia da.
Hemen segurtasunik gabeko konexioak desgaitzen ditugu.
Eta gaitu konexio seguruak.

"/etc/dovecot/conf.d/10-ssl.conf" fitxategia

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
}

Ssl konfiguratzen. Ssl beharrezkoa dela adierazten dugu.
Eta ziurtagiria bera. Eta xehetasun garrantzitsu bat “tokiko” zuzentaraua da. Zein SSL ziurtagiri erabili behar den zein IPv4 lokalera konektatzean.

Bide batez, IPv6 ez dago hemen konfiguratuta, geroago zuzenduko dut hutsune hau.
XX.XX.XX.X5 (domeinua2) - ziurtagiririk ez. Bezeroak konektatzeko domain1.com zehaztu behar duzu.
XX.XX.XX.X2 (domeinua3) - ziurtagiri bat dago, domain1.com edo domain3.com zehaztu dezakezu bezeroak konektatzeko.

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

protocol lda {
  mail_plugins = $mail_plugins sieve
}

Hau spamassassin-erako beharrezkoa izango da etorkizunean.

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

protocol imap {
  mail_plugins = $mail_plugins antispam
}

Hau spamaren aurkako plugina da. "Spam" karpetara transferitzeko unean spamassin entrenatzeko behar da.

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

protocol pop3 {
}

Halako fitxategi bat besterik ez dago.

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

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

Lmtp konfiguratzea.

"/etc/dovecot/conf.d/90-antispam.conf" fitxategia

plugin {
  antispam_backend = pipe
  antispam_trash = Trash;trash
  antispam_spam = Junk;Spam;SPAM
  antispam_pipe_program_spam_arg = --spam
  antispam_pipe_program_notspam_arg = --ham
  antispam_pipe_program = /usr/bin/sa-learn
  antispam_pipe_program_args = --username=%Lu
}

Spamassasin entrenamendu-ezarpenak Spam karpetara transferitzeko unean.

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

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

Sarrerako letrekin zer egin zehazten duen fitxategia.

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

require ["fileinto", "mailbox"];

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

Fitxategia konpilatu behar duzu: “sievec default.sieve”.

"/etc/dovecot/conf.d/auth-sql.conf.ext" fitxategia

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

Baimenerako sql fitxategiak zehaztea.
Eta fitxategia bera baimentzeko metodo gisa erabiltzen da.

"/etc/dovecot/dovecot-sql.conf.ext" fitxategia

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

Postfixaren antzeko ezarpenei dagokie.

"/etc/dovecot/dovecot.conf" fitxategia

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

Konfigurazio fitxategi nagusia.
Garrantzitsua da hemen adierazten dugula - gehitu protokoloak.

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

apt-get install spamassassin spamc

Instala ditzagun paketeak.

adduser spamd --disabled-login

Gehitu dezagun erabiltzaile bat noren izenean.

systemctl enable spamassassin.service

Kargatzean spamassassin zerbitzua automatikoki kargatzeko gaitzen dugu.

"/etc/default/spamassassin" fitxategia:

CRON=1

Arauen eguneratze automatikoa gaituta "lehenespenez".

"/etc/spamassassin/local.cf" fitxategia:

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

Mysql-en "sa" datu-base bat sortu behar duzu "sa" erabiltzailearekin "pasahitza" pasahitzarekin (ordeztu zerbait egoki batekin).

report_safe - honek spam mezu elektronikoaren txostena bidaliko du gutun baten ordez.
use_bayes spamassassin ikaskuntza automatikoaren ezarpenak dira.

Gainerako spamassassin ezarpenak artikuluan lehenago erabili ziren.

Ezarpen orokorra "spamassassin".
Spam mezu berriak IMAP "Spam" karpetara eramateari buruz.
Dovecot + SpamAssassin-en konbinazio sinple bati buruz.
Imap karpetetan letrak mugitzean spamassasin ikaskuntzaren teoria irakurtzea gomendatzen dut (eta ez dut erabiltzea gomendatzen).

============= Komunitateari dei egin ==============

Bidaltzen diren gutunen segurtasun-maila handitzeko ideia bat ere bota nahi nuke komunitateari. Mailaren gaian oso murgilduta nagoenez.

Erabiltzaileak bere bezeroan gako pare bat sor dezan (outlook, thunderbird, nabigatzaile-plugin, ...). Publikoa eta pribatua. Publikoa - bidali DNSra. Pribatua - aurreztu bezeroan. Posta-zerbitzariek gako publiko bat erabili ahal izango lukete hartzaile jakin bati bidaltzeko.

Eta horrelako gutunekin spam-aren aurka babesteko (bai, posta zerbitzariak ezingo du edukia ikusi) - 3 arau sartu beharko dituzu:

  1. Derrigorrezko benetako DKIM sinadura, derrigorrezko SPF, derrigorrezko rDNS.
  2. Spam-aren aurkako prestakuntza gaiari buruzko neurona-sare bat + bezeroaren aldetik horretarako datu-base bat.
  3. Zifratze-algoritmoak halakoa izan behar du igorlearen aldeak 100 aldiz PUZaren potentzia gehiago gastatu behar duen enkriptazioan hartzaileak baino.

Gutun publikoez gain, gara ezazu proposamen-gutun estandar bat "korrespondentzia segurua hasteko". Erabiltzaileetako batek (postontzia) eranskin batekin gutun bat bidaltzen du beste postontzi batera. Gutunak korrespondentziarako komunikazio-kanal seguru bat abiarazteko testu-proposamen bat eta postontziaren jabearen gako publikoa (bezeroaren aldean gako pribatu batekin).

Korrespondentzia bakoitzerako gako pare bat ere egin ditzakezu. Erabiltzaile hartzaileak eskaintza hau onartu eta bere gako publikoa bidal dezake (korespondentzia honetarako berariaz egina ere). Ondoren, lehen erabiltzaileak zerbitzuaren kontrol-gutun bat bidaltzen du (bigarren erabiltzailearen gako publikoarekin enkriptatutakoa) - hori jaso ondoren, bigarren erabiltzaileak eratutako komunikazio-kanala fidagarritzat jo dezake. Ondoren, bigarren erabiltzaileak kontrol gutun bat bidaltzen du, eta, ondoren, lehenengo erabiltzaileak eratutako kanala segurutzat har dezake.

Errepidean giltzak atzemateari aurre egiteko, protokoloak flash drive baten bidez gutxienez gako publiko bat transmititzeko aukera aurreikusi behar du.

Eta garrantzitsuena denak funtzionatzen duela da (galdera da "nork ordainduko du?"):
Sartu posta-ziurtagiriak 10 $-tik aurrera 3 urtez. Horrek aukera emango dio igorleak dn-an "nire gako publikoak hor daudela" adierazteko. Eta konexio seguru bat hasteko aukera emango dizute. Aldi berean, horrelako konexioak onartzea doakoa da.
gmail bere erabiltzaileak dirua irabazten ari da azkenean. 10 $ 3 urte bakoitzeko - korrespondentzia-kanal seguruak sortzeko eskubidea.

============== Ondorioa ==============

Artikulu osoa probatzeko, hilabete baterako zerbitzari dedikatu bat alokatu eta SSL ziurtagiria duen domeinu bat erosiko nuen.

Baina bizitzako zirkunstantziak garatu ziren, beraz, arazo hau 2 hilabetez luzatu zen.
Eta hala, berriz ere denbora librea izan nuenean, artikulua den bezala argitaratzea erabaki nuen, argitalpena beste urtebetez luzatzeko arriskuan jarri beharrean.

Galdera asko badaude "baina hau ez da nahikoa zehatz-mehatz deskribatzen" bada, ziurrenik domeinu berri batekin eta SSL ziurtagiri berri batekin zerbitzari dedikatu bat hartu eta are xehetasun gehiagorekin deskribatzeko indarra izango da eta, gehienetan. garrantzitsua dena, identifikatu falta diren xehetasun garrantzitsu guztiak.

Posta-ziurtagiriei buruzko ideiei buruzko iritzia ere jaso nahiko nuke. Ideia gustatzen bazaizu, rfc-rako zirriborro bat idazteko indarra bilatzen saiatuko naiz.

Artikulu baten zati handiak kopiatzen dituzunean, eman artikulu honetarako esteka.
Beste edozein hizkuntzatara itzultzean, eman artikulu honetarako esteka.
Ni ingelesera itzultzen saiatuko naiz eta erreferentzia gurutzatuak uzten.


Iturria: www.habr.com

Gehitu iruzkin berria