Debian Squeeze levelezés Postfix, Courier, SSL

Levelező szervert fogunk konfigurálni, postfix-al, courier-el, ssl-el.

A levelezés egy kicsit összetett probléma ezért kezdjük egy szép (na jó lehet nem szép, de talán érthető) ábrával:

A postfix kezeli a szerverre bejövő és kimenő leveleket. A bejövő leveleket átadja az amavisd-new-nak, hogy ellenőrizze őket egy kicsit át. Az amavis előbb elküldi vírusellenőrzésre a clamav-nak, majd a spamassasin-nak, hogy megvizsgálja, hogy spam-ot tartalmaz-e a levél. Értelemszerűen az amavis karanténba rakja a nem megfelelő leveleket, a többit visszaadja a postfixnak. A postfix pedig a megfelelő felhasználó maildir mappájába fogja belerakni. A felhasználó pedig a courier szolgáltatáson keresztül tudja elérni a maildirből a leveleit. Levelet küldeni pedig a postfixen keresztül küldi ki. Röviden ennyi a levelezés, gyakorlatilag viszont kicsit bonyolultabb, de nem akartam nagyon bonyolult ábrát rajzolni így is eléggé zsúfolt :) Azt még hozzáteszem, hogy mi belső hálón nem használunk titkosítás, viszont kívülről csakis ssl-es kulcsal lehet a levelezéshez hozzáférni. Kezdjünk hozzá :)

Tegyük fel a postfix-et(mi ugye ldap-ból fogunk authentikálni):

apt-get install postfix postfix-ldap postfix-pcre
Többféle lehetőségből lehet választani a telepítés elején. Ne konfiguráljon, rendes levelező szerver legyen, levéltovábbító legyen vagy helyi lokális belső levelező szerver legyen. A kérdésekre értelemszerűen kell válaszolni, de utólag módosítható úgyis minden a config fájlokban.

Először állítsuk be a /etc/postfix/sasl/smtpd.conf fájlt, a következő tartalommal:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

A dynamicmaps.cf fájlban a következő sorok találhatóak:

#type location of .so file open function (mkmap func)
#==== ================================ ============= ============
tcp /usr/lib/postfix/dict_tcp.so dict_tcp_open
pcre /usr/lib/postfix/dict_pcre.so dict_pcre_open
ldap /usr/lib/postfix/dict_ldap.so dict_ldap_open
sdbm /usr/lib/postfix/dict_sdbm.so dict_sdbm_open mkmap_sdbm_open

A main.cf tartalma:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# Cimek felderitesenek megakadalyozasa
disable_vrfy_command = yes

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Ha nem tudja tovabbitani, mennyi ido utan kuldjon a feladonak ertesitest
# delay_warning_time = 4h

# Gep teljes neve
myhostname = mail.ceg.hu

# Kuldott e-maileknel ez a domain cim fog latszodni (@ utani resz)
myorigin = /etc/mailname

# Alias helye. Megvaltoztatasa utan ki kell adni a newaliases parancsot!
alias_maps = hash:/etc/aliases,
ldap:/etc/postfix/files/ldap-aliases.cf

alias_database = hash:/etc/aliases

# Mely gepnevekhez tartozo leveleket dolgozzon fel
# gepek osszes domain nevet meg kell adni!
mydestination = mail.ceg.hu, mx.ceg.hu, ceg.hu, szerverneve, mail, localhost #stb.

# Relay gep megadasa
relayhost =

# Melyik interfeszekre figyeljen
inet_interfaces = all

# A mynetworks parameterrel megadott cimek konkret IP-t jelentenek
mynetworks_style = host

# Ezekrol a cimekrol lehet e-mailt kuldeni (x.x.x.x/32 y.y.y.y/8 z.z.z.z/12)
mynetworks = 127.0.0.0/8 10.1.0.0/16 10.0.0.0/16 10.0.0.2/32


# Milyen esemenyrol kapjon a postmaster ertesitest
# software : szoftverhiba miatt nem tudja a levelet tovabbitani
# resource : eroforras problemek miatt nem tudja a levelet tovabbitani
# protocol : protokolhiba, vagy nem futtathato parancs
# policy : policy megsertese miatt visszadobott levelek
# delay : keson tovabbitot level
# bounce : kezbesithetetlen level
notify_classes = resource, software

# Level max merete (byte)
# 8MB
message_size_limit = 8000000

local_destination_concurrency_limit=1
mailbox_size_limit = 0
recipient_delimiter = +

# Egyszerre hany kuldo klienst fogad (csak postfix 2.2 -tol)
smtpd_client_connection_count_limit = 200

# Csak akkor fogadja el, ha szabvanyos
strict_rfc821_envelopes = yes

# Csak akkor fogadja a levelet ha kuld az SMTPD kliens HELO/EHLO uzenetet (egyeb programok kizarasa)
smtpd_helo_required = yes
smtpd_helo_restrictions =
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_client_restrictions =

# Hibauzenetet kuld vissza a feladonak, ha a levele el lett utasitva
smtpd_recipient_restrictions = warn_if_reject

smtpd_recipient_restrictions = reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_hostname,
reject_unauth_destination,
# reject_non_fqnd_recipient,
reject_unknown_recipient_domain,
check_sender_access hash:/etc/postfix/files/sender_access,
check_client_access regexp:/etc/postfix/files/ip_access_checks,
# check_policy_service inet:127.0.0.1:60000,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client blackholes.mail-abuse.org,
reject_rbl_client dialups.mail-abuse.org,
# reject_rbl_client relays.ordb.org,
# reject_rbl_client opm.blitzed.org,
reject_rbl_client dsn.rfc-ignorant.org

smtpd_data_restrictions = reject_unauth_pipelining,
permit

# Level fejlec ellenorzese
header_checks = regexp:/etc/postfix/files/header-checks

# Amavisd-new konfiguralasa
content_filter = smtp-amavis:[127.0.0.1]:10024

# Beallitas a Courier maildrop-hoz
#mailbox_command = /usr/bin/maildrop

# SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd

#smtpd_sasl_security_options = noanonymus
#smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

# tls/ssl
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_dh1024_param_file = /etc/postfix/ssl/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/ssl/dh_512.pem


#debug_peer_list= 0.0.0.0/0 # ha nagyon részletes logot szeretnénk a mail.log-ba, akkor ezt állítsuk be!
home_mailbox = Maildir/
readme_directory = no
smtpd_tls_auth_only = no
#smtp_sasl_password_maps = /etc/postfix

Ami nem volt kommentben kifejtve, de érdekes pl: reject_rbl_client paraméterek. Ezek az rbl fekete listák, olyan fekete listák amiken spammelő mail szerverek címei találhatóak. Ezeket felhasználva alapból kiszűrhetjük őket. De vigyázni kell velük, nem az a legjobb ha minél többet rakunk be belőlük, mert sajnos van, hogy tévedésből kerül fel egy egy mail szerver. Mi mindig felülvizsgáljuk őket, hogy melyiket érdemes használni és melyiket már nem. Pl volt, hogy kitiltottuk a gmailt, mert felkerült az egyikre, amire azért mégis szükség van, így hát azt az rbl-t ki kellett vennünk egy időre :) Lekerülni elég nehéz egy ilyenről, szóval jobb, nem felkerülni rájuk. Ellenőrizni, hogy felkerült-e a mail szerverünk-e egy ilyen listára érdemes időnként. Ezeken az oldalakon lehet: mxtoolbox.com vagy whatismyipaddress.com/blacklist-check

A feladókat szűrni lehet a: check_sender_access hash:/etc/postfix/files/sender_access paraméterrel. A sender_access fájlban meglehet adni email címeket és domaineket is lehet elfogadnin és vagy eldobni, valahogy így:

teszt.hu REJECT
teszt.com OK
pelda@teszt.de REJECT

Egy .db kiterjesztésű adatbázisban tárolja az adatokat amibe a sender_access fájlból kerülhetnek be az információk. Frissíteni így lehet: postmap /etc/postfix/files/sender_access

Lehet tiltani ip-ket domain-eket. A dinamikus adsl-ről érkező mail szervereket nem szeressük, mert azok sokszor spammelők ezért őket szépen ki is tiltjuk a check_client_access regexp:/etc/postfix/files/ip_access_checks segítségével:

/quovadis\.adsl\.datanet\.hu/ OK
/^(.+\.)*(dsl|adsl|dial|dhcp)(\..+)+$/ REJECT
/(.+\.)+pool\.(t-online|invitel)\.hu$/ REJECT
/.*\.hu$/ OK

A fejlécben szereplő adatok szűrése a header_checks = regexp:/etc/postfix/files/header-checks paraméterrel történik. A fájl tartalma:
/^Subject: Make money fast/ REJECT
/^Subject:.*SPAM/ REJECT

Az ldap elérési információk a következő fájlból olvashatók ki, hogy a postfix tudja, hol találhatja meg az információkat a helyi felhasználókról: ldap:/etc/postfix/files/ldap-aliases.cf A fájl tartalma:

version = 3
server_host = localhost
search_base = dc=ceg,dc=hu

Itt még az alias_maps =-nál még említsük meg, hogy az email címek átirányítását vagy alias nevek meghatározását az /etc/aliases fájlban történik. A fájlban ilyen tartalom lehetséges:

jozsi: pisti
geza: jakab, feri
gabor:gabor@gmail.com

A példában pisti megkapja jozsi felhasználó leveleit. Jakab és feri is megkapja geza leveleit, amíg gabor levelei át lettek irányítva a gmail-es címére. Ha átírtuk az aliases fájl tartalmát ne felejetsük el kiadni a newaliases parancsot, hogy frissüljön az adatbázis.

Mi a maildir formátumot szeretjük, ahol egy levél egy fájl: home_mailbox = Maildir/

Van még itt pár dolog amit itt beállítunk, de majd csak később fogjuk konfigurálni pl: sasl authentikációt használunk az ldap és a postfix között és SSL-es titkosítást is később fogjuk tárgyalni. Voltak még itt beállítások amik nálunk kivannak kommentelve, de benne hagytam őket, hátha szüksége lesz valakinek rájuk, nekünk jelenleg nincs.

A master.cf fájlban a postfix folyamatait lehet konfigurálni, mi így állítottuk be:

# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - - - - smtpd
#submission inet n - - - - smtpd
# -o smtpd_etrn_restrictions=reject
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

# only used by postfix-tls
tlsmgr unix - - n 300 1 tlsmgr
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
submission inet n - y - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

# Amavisd-new -hez kell
smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
# -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
# -o relay_recipient_maps=
# -o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
scache unix - - - - 1 scache
discard unix - - - - - discard
retry unix - - - - - error

Tegyük fel a couriert is:
apt-get install courier-authdaemon courier-imap courier-imap-ssl courier-ldap
courier-pop courier-pop-ssl courier-ssl sasl2-bin courier-authlib-ldap

Kérdésekre tessék válaszolni, a webadminisztrációs felületes dologra nekünk nincs szükségünk. Hagyhatjuk, hogy generáljon kulcsokat mi úgyis csinálunk majd újakat.

Alapvetően nem nagyon kell konfigurálni a couriert, de azért nézzünk bele.

Imapd:
ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=20
PIDFILE=/var/run/courier/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"

IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_ACL=1

IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"

IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_MAILBOX_SANITY_CHECK=0
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/etc/courier/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
MAILDIRPATH=Maildir

pop3d:
PIDFILE=/var/run/courier/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH=""
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=YES
MAILDIRPATH=Maildir

Írjuk át helyesen a *.cnf kiterjesztésű fájlok tartalmát. Én most csak az egyiket írom ide példának, a fájl többi részét nem kell módosítani sem.
[ req_dn ]
C=HU
ST=Megye
L=Varos
O=Courier Mail Server
OU=Automatically-generated POP3 SSL key
CN=localhost
emailAddress=postmaster@ceg.chu

Generáljuk le a kulcsokat a következő két paranccsal, majd másoljuk a helyükre a létrejött *.pem kiterjesztésű fájlokat /etc/courier mappába:

mkimapdcert
mkpop3dcert

Ha már ennyire belejöttünk az ssl kulcsot generálásába, akkor a postix-nek is csináljuk meg a kulcsait. Azt kell tudni, hogy mi magunk írjuk alá a tanúsítványunkat(mármint a szerverünk). Akinek telik rá vehet komoly hitelesítés szolgáltatóktól tanúsítványt.

Csináljuk meg a mappát ha még nincs:
mkdir /etc/postfix/ssl

Ugorjunk a mappánkba és adjuk ki a következő parancsot:

cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

Állítsuk be a jogosultságot és adjuk ki a következő parancsokat:

chmod 600 smtpd.key

openssl req -new -key smtpd.key -out smtpd.csr

openssl x509 -req -days 365 -in smtpd.csr -signkey smtpd.key -out smtpd.crt

openssl rsa -in smtpd.key -out smtpd.key.unencrypted

mv -f smtpd.key.unencrypted smtpd.key

openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 365

Létre jött így sok szép fájlunk, ebből az smtpd.crt -t kell majd beimportálnunk a levelező kliensünkbe, ha ssl-en keresztül szeretnénk elérni a leveleinket. Lehetőleg a többi hitelesítő kulcsot pedig ne adjuk oda senkinek se.

Még kimaradta dh_512.pem és dh_1024.pem. Ezeket egyszerűen generáljuk le és másoljuk a helyükre:

openssl gendh -out /etc/postfix/dh_512.pem -2 512
openssl gendh -out /etc/postfix/dh_1024.pem -2 1024

Állítsuk be a sasl-os authentikációt. Az /etc/default/saslauthd fájlban a következő soroknak kell szerepelniük:

START=yes
NAME="saslauthd"
OPTIONS="-c -m /var/run/saslauthd"

Adjuk ki a következő fontos parancsot különben nem fog menni az authentikáció:

adduser postfix sasl

Majd indítsuk újra: /etc/init.d/saslauthd restart

Tesztelni így lehet:
testsaslauthd -u felhasználóinév -p jelszó
Jobb esetben így fog válaszolni:
0. OK "Succes."

A levelezésünk még közel se működőképes és még nem is túl biztonságos, mert pl nincs még se vírus se spam szűrés és még hiányzik pár dolog. Amik a következő fejezetben kerülnek tárgyalásra.

postfix.org
postfix wiki.hup.hu
courier-imap
postfix linuxviág
levelezés mithrandir
parszab.hu
postfix szit.hu
postfix ubuntu
postfix.org tls
imap-pop3-ssl
SSL generálás

2013.03.04.