Postfix installieren
Installation:# apt-get install postfix postfix-mysqlHauptkonfiguration:
# ---------------------------- main settings -------------------------
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
recipient_delimiter = +
readme_directory = no
# ---------------------------- TLS parameters ------------------------
smtpd_use_tls = yes
smtpd_tls_cert_file = /var/www/sxmail.de/ssl/sxmail.de.crt
smtpd_tls_key_file = /var/www/sxmail.de/ssl/sxmail.de.key
smtp_tls_CAfile = /var/www/sxmail.de/ssl/ca.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_security_level = may
# ---------------------------- host parameters -----------------------
myhostname = sxmail.de
myorigin = /etc/mailname
mydestination = mail.sxmail.de, mail.ico.to, localhost
relay_domains = $mydestination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
inet_interfaces = all
# ---------------------------- virtual domains -----------------------
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/forwardings.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/mailboxes.cf
virtual_mailbox_base = /var/mail
virtual_uid_maps = static:8
virtual_gid_maps = static:8
# ---------------------------- enable auth ---------------------------
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# ---------------------------- mail restrictins ----------------------
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_rhsbl_sender dsn.rfc-ignorant.org,
reject_unknown_sender_domain
smtpd_client_restrictions = check_policy_service inet:127.0.0.1:2000
message_size_limit = 104857600
smtpd_client_message_rate_limit = 100
# ---------------------------- other settings ------------------------
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
owner_request_special = no
Code: /etc/postfix/main.cf
Erklärung der Parameter:
| Einstellung | Beschreibung |
| smtpd_banner | Willkommenstext beim Verbinden mit dem Server |
| biff | biff ist ein Dienst, der lokale Benutzer über neue Mails informiert. Da wir keine Verknüpfung lokaler Benutzer mit den Mail-Accounts haben wird dieser Wert auf „no“ gesetzt. |
| append_dot_mydomain | Postfix könnte unvollständige Mailadressen durch den eigenen Hostname vervollständigen. Zum Schutz vor Spam wird dieser Parameter auf „no“ gesetzt. |
| recipient_delimiter | - |
| readme_directory | Bezeichnet den Ort, an dem die Readme-Dateien von Postfix liegen. |
| smtpd_tls_cert_file | Pfadangabe zum TLS Zertifikat. |
| smtpd_tls_key_file | Pfadangabe zum TLS Zertifikatschlüssel. |
| smtp_tls_CAfile | Pfadangabe zur Datei, welche die Zertifikate der Wurzel-CA beinhaltet. |
| smtpd_tls_session_cache_database | Name der Datei, welche den optionalen Server TLS Session Cache von Postfix darstellt. Existiert die angegebene Datei nicht, wird sie erzeugt. |
| smtp_tls_session_cache_database | Name der Datei, welche den optionalen Client TLS Session Cache von Postfix darstellt. Existiert die angegebene Datei nicht, wird sie erzeugt. |
| smtpd_tls_security_level |
Das SMTP Sicherheitslevel für den Postfix SMTP Server; Dieser Parameter wird ignoriert, falls smtpd_tls_wrappermode = yes gesetzt wurde. Es gibt folgende Sicherheitslevels:
|
| myhostname | Setzen des Hostnamens. Standardwert ist der FQDN des Servers. |
| alias_maps | Gibt die Alias-Datenbank an, die zur lokalen Auslieferung von Mails genutzt wird. Bei einem neuen System muss eventuell newaliases in der Shell ausgeführt werden. |
| alias_database | Gibt die Alias-Datenbank für die lokale Auslieferung von Mails an. Existiert als eigener Parameter, weil nicht alle in alias_maps spezifizierten Tabellen lokale Dateien sein müssen. |
| myorigin | Wird als Hostname verwendet, falls ein autorisierter Benutzer ohne Domain sendet oder empfängt. |
| mydestination | Der Server soll nur an diese Domain adressierte Mails annehmen. Es wird hierbei keine Empfängerdomain angegeben, da diese erst später als virtuelle Domain via Datenbank eingetragen wird. |
| relayhost | An welche Ziel-Domain (inklusive Subdomains) dieses System Mails übertragen wird. |
| mynetworks | Aus den hier angegebenen Netzwerken werden Mails ohne Authentifizierung angenommen. |
| mailbox_size_limit | Da die Postfächer von Dovecot verwaltet werden, soll Postfix hier keine Prüfung vornehmen. 0 steht hierbei für unbegrenzt. |
| inet_interfaces | Interfaces auf denen Postfix lauschen soll. „all“ steht dabei für alle Interfaces. |
| virtual_alias_maps | Angabe der Aliases von E-Mail-Adressen. |
| virtual_mailbox_domains | Dieser Parameter legt fest, für welche Domains der Server zuständig sein soll. |
| virtual_mailbox_maps | Zuordnung der E-Mail-Adressen zu den einzelnen Accounts. |
| virtual_mailbox_base | Gibt den Pfad als Präfix an unter dem die E-Mails abgespeichert werden sollen. Wird durch die Nutzung einer absoluten Pfadangabe in der Datenbank überflüssig. |
| virtual_uid_maps | Gibt den Systembenutzer an, der die Verwaltung der Postfächer übernehmen soll. |
| virtual_gid_maps | Gibt die Systemgruppe an, die die Verwaltung der Postfächer übernehmen soll. |
| smtpd_sasl_type | Hier wird die SASL-Erweiterung eingetragen, die zur Authentifizierung genutzt werden soll. In diesem Fall wird „dovecot“ eingetragen. |
| smtpd_sasl_path | Typischerweise gibt dieser Parameter den Pfad zu einer Konfigurationsdatei an, welche vom SASL-Plug-In genutzt wird. |
| smtpd_sasl_auth_enable | Aktiviert die SASL-Authentifizierung, welche standardmäßig deaktiviert ist. |
| broken_sasl_auth_clients | Gibt an, ob eine fehlerhafte SASL-Implementierung für alte Clients zusätzlich implementiert werden soll. Standardmäßig ist diese deaktiviert. |
| smtpd_sasl_authenticated_header | Legt fest, ob in die E-Mail-Header versendeter Mails eingetragen werden soll, dass der Nutzer sich authentifiziert hat und wie dieser heißt. Standardmäßig ist diese Einstellung deaktiviert. |
| smtpd_recipient_restrictions | Unvollständig – ToDo |
| smtpd_client_restrictions | Unvollständig – ToDo |
| virtual_transport | Legt das finale Ziel fest, das für die Auslieferung von Mails an die festgelegten Domains zuständig ist. Hier wird „dovecot“ gesetzt und somit die Zuständigkeit für den endgültigen Transport an Dovecot abgegben. |
| dovecot_destination_recipient_limit | Das Flag „D“ (in der master.cf unter dovecot) bei flags=DRhu erzwingt das Postfix nur ein Empfänger pro (Pipe-) Verbindung übergibt. Kommt eine Mail mit mehreren Empfänger (für die alle Dovecot zuständig ist) dann kommt diese Fehlermeldung und Mails werden nicht an alle Empfänger zugestellt. Wird diese Einstellung auf „1“ gesetzt, wird verhindert, dass mehrere Empfänger an Dovecot weitergereicht werden. |
| content_filter | Gibt einen Filter an, der anschlägt sobald eine E-Mail vollständig in der Mailwarteschlange aufgenommen wurde. Durchsucht werden kann die vollständige E-Mail. |
| receive_override_options |
Aktiviert oder deaktiviert Empfängeradressenprüfung, Inhaltsfilterung und Adress-Mapping. Es gibt folgende Einstellungen:
|
| smtpd_client_message_rate_limit | Maximale Anzahl der Nachrichtenanfragen, die pro Zeiteinheit von einem Client getätigt werden dürfen. Dient dem Schutz vor Missbrauch. |
| owner_request_special | Unvollständig – ToDo |
| message_size_limit | Definiert die maximale Größe einer E-Mail in Bytes an. Auch Header-Informationen gehen in die Größe ein. |
Installation:
# =======================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# =======================================================================
smtp inet n - - - - smtpd
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=check_policy_service,inet:127.0.0.1:2000,permit_sasl_authenticated,reject
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - - 1000? 1 tlsmgr
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
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - - - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5
# -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/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 -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}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet 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
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1
Code: /etc/postfix/master.cf
Anlegen der Datenbank:
# ToDo
Dovecot installieren
Installation:# apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-managesievedHauptkonfiguration:
# ---------------------------- Main settings -------------------------
base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s managesieve
disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = maildir:/var/mail/%d/%n/Maildir
first_valid_uid = 5
mail_uid = 8
mail_gid = 8
# ---------------------------- SSL settings --------------------------
ssl_cert_file = /var/www/sxmail.de/ssl/sxmail.de.crt
ssl_key_file = /var/www/sxmail.de/ssl/sxmail.de.key
ssl_ca_file = /var/www/sxmail.de/ssl/ca-bundle.crt
# ---------------------------- Logging settings ----------------------
log_timestamp = "%Y-%m-%d %H:%M:%S "
# ---------------------------- Login settings ------------------------
login_greeting = sxMail server ready...
# ---------------------------- IMAP settings -------------------------
protocol imap {
mail_executable = /etc/mail/imap/login.sh
mail_plugins = quota imap_quota
}
# ---------------------------- POP3 settings -------------------------
protocol pop3 {
#login_executable = /usr/lib/dovecot/pop3-login
mail_executable = /etc/mail/pop3/login.sh
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
}
# ---------------------------- LDA settings --------------------------
protocol lda {
postmaster_address = nelf@ico.to
mail_plugin_dir = /usr/lib/dovecot/modules/lda
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = sieve quota
}
# ---------------------------- Sieve settings ------------------------
protocol managesieve {
listen = localhost:2001
login_executable = /usr/lib/dovecot/managesieve-login
mail_executable = /usr/lib/dovecot/managesieve
}
# ---------------------------- Auth settings -------------------------
auth default {
mechanisms = plain login
userdb sql {
args = /etc/dovecot/mysql.conf
}
passdb sql {
args = /etc/dovecot/mysql.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
# ---------------------------- Plugin settings -----------------------
plugin {
quota = dict:user::file:/var/mail/%d/%n/.quotausage
sieve = /var/mail/%d/%n/.sieve
sieve_dir = /var/mail/%d/%n/sieve
}
Code: /etc/dovecot/dovecot.conf
MySQL-Konfiguration:
# ---------------------------- database type -------------------------
driver = mysql
# ---------------------------- main settings -------------------------
connect = host=127.0.0.1 dbname=dbname user=username password=password
default_pass_scheme = CRYPT
# ---------------------------- query settings ------------------------
password_query = SELECT `pass` AS 'password' FROM `mail_users` WHERE `email` = '%u' AND `disabled` = '0'
user_query = SELECT `email` AS 'user', `maildir` AS 'home', CONCAT('maildir:', `maildir`, '/Maildir') AS 'mail', '8' AS 'uid', '8' AS 'gid', CONCAT('*:storage=', `quota`, 'B') AS 'quota_rule', CONCAT(`maildir`, '/.sieve') AS 'sieve' FROM `mail_users` WHERE `email` = '%u' AND `disabled` = '0'
Code: /etc/dovecot/mysql.conf
Um das in der Konfiguration genutzte CA-Bundle zu nutzen muss es wie folgt geladen werden:
# wget http://www.startssl.com/certs/ca-bundle.crt
Wird ein anderer Anbieter genutzt, muss ein entsprechendes Zertifikat gesucht werden. Hierbei handelt es sich um StartSSL. Angeblich müssen die Zertifikate die in der Config angegeben werden noch mit folgendem Schritt erstellt werden (klappte hier auch ohne):
# cat domain.com.crt sub.class1.server.ca.pem > dovecot_crt.pem
Content Filter (Amavis) installieren
Installation:# apt-get install amavisd-newWichtig: Domain-Datei anlegen unter /etc/amavis/domains und zeilenweise die Domains auflisten.
chomp($mydomain = `head -n 1 /etc/mailname`);
@local_domains_maps = ( read_hash("/etc/amavis/domains") );
Code: /etc/amavis/conf.d/05-domain_id
# set admin $virus_admin = undef; $spam_admin = undef;Code:
/etc/amavis/conf.d/50-user
Spamfilter (Spamassassin)
Installation:# apt-get install spamassassinAktivierung in Amavis:
@bypass_spam_checks_maps = (\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);Code:
/etc/amavis/conf.d/15-content_filter_mode
Amavis Daemon neu starten:
# /etc/init.d/amavisd restart
Virenschutz (ClamAV) installieren
Installation:# apt-get install clamav-daemon
Benutzer ClamAV der Gruppe Amavis zuordnen:
# adduser clamav amavis
ClamAV neustarten:
# /etc/init.d/clamav-daemon restart
Aktivierung in Amavis:
@bypass_virus_checks_maps = (\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);Code:
/etc/amavis/conf.d/15-content_filter_mode
Amavis Daemon neu starten:
# /etc/init.d/amavisd restart
Spam lernen
Um den Spamfilter zu schulen muss der Benutzer zu amavis gewechselt werden:
# su amavis
Anschließend kann durch folgenden Befehl eine E-Mail als Spam gelernt werden:
# sa-learn --spam {file}
Um E-Mails zu vergessen oder zu whitelisten kann stattdessen der Parameter --ham oder --forget genutzt werden. Alternativ zum User-Switch kann der Befehl auch als Root ausgeführt werden (ungetestet):
# sa-learn --dbpath /var/lib/amavis/.spamassassin –-spam {file}