Einrichten

Mailserver Einrichten
(Debian 5.0 Lenny, Ubuntu 12.04, Ubuntu 14.04)


Einrichten des Mail Servers mit Postfix/UWImapd/Fetchmail

Als erstes habe ich ein Debian 5.0 installiert. Bei Tasksel habe ich nur
"Standart-System" ausgewählt, so das ich keine grafische Oberfläche habe.
Im nächsten Schritt habe ich die fehlenden Programme mit aptitude nachinstalliert:

aptitude install fetchmail joe libsasl2-modules mc openssh-server postfix sasl2-bin uw-imapd amavist-new clamav-daemon smbfs spamassasin htop openvpn squid ntpdate ncftp sarg

Für diesen Mailserver nehmen wir folgendes an:
Es gibt 2 Nutzer, die eMails empfangen und senden möchten.
Die lokalen Namen sind:
lokalernutzer
lokalernutzer2

mit den Mail Adressen:
meine@meinedomain.de
nochne@meinedomain.de

Die eigene Domain heisst: meinedomain.de
Und der Mailserver im Internet, über dem verschickt und empfangen wird heisst:
irgendein.mail.de



Fetchmail ist für den Abruf der eMails aus dem Internet zuständig.
Im home Verzeichnis von root habe ich die .fetchmailrc angelegt und befüllt.
Eine Kopie der Datei kommt als fetchmailrc in das Verzeichnis /etc
Inhalt der Datei:
-->schnipp<--
server irgendein.mail.de
proto pop3 
user meine@meinedomain.de
pass passwort
to lokalernutzer
ssl 

user nochne@meinedomain.de
pass passwort2
to lokalernutzer2
ssl 
-->schnapp<--

wenn das nicht geht kann man auch das probieren:
mda "/usr/bin/procmail -d andre" 
statt to lokalnutzer

Als erstes wird der Server genannt, wo die Mail
abgerufen wird. Hier ist es: irgendein.mail.de
Danach das Protokoll, in diesem Fall pop3.
Auf dem System müssen lokale Nutzer eingerichtet sein, zu denen 
die eMail dann zugestellt wird.
in diesem Fall gehen die mails von meine@meinedomain.de
an den Benutzer lokalernutzer
Das Passwort "passwort" ist das, was beim pop3 Abruf 
benötigt wird.
ssl bedeutet, das die Verbindung verschlüsselt ist.
Manche Provider verlangen das.



Zum Abschluss muss man noch "newaliases" ausführen.
Danach kann man eMails empfangen und in die Postfächer sortieren.

Danach geht es an Postfix.
Während der Installation mit Aptitude wurde ich gefragt, wie ich es nutzen wollte. Ich habe mich für "Internet mit Smarthosts" entschieden. Als Smarthost habe ich meinen Mailserver, z.b. irgendein.mail.de eingetragen.

Die Datei main.cf muss folgenden Inhalt haben:
-->schnipp<--
# See /usr/share/postfix/main.cf.dist for a commented, more complete version 
# Debian specific:  Specifying a file name will cause the first 
# line of that file to be used as the name.  The Debian default 
# is /etc/mailname. 
#myorigin = /etc/mailname 
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) 
biff = no 
# appending .domain is the MUA's job. 
append_dot_mydomain = no 
# Uncomment the next line to generate "delayed mail" warnings 
#delay_warning_time = 4h 
readme_directory = no 
# TLS parameters 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem 
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key 
smtpd_use_tls=yes 
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for 
# information on enabling SSL in the smtp client. 
myhostname = meinedomain.de 
alias_maps = hash:/etc/aliases 
alias_database = hash:/etc/aliases 
myorigin = /etc/mailname 
mydestination = mailserver.meinedomain.de, localhost.meinedomain.de, localhost 
relayhost = irgendein.mail.de 
mynetworks = 192.1.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128 
mailbox_command = procmail -a "$EXTENSION" 
mailbox_size_limit = 0 
recipient_delimiter = + 
inet_interfaces = all 
content_filter=smtp-amavis:[127.0.0.1]:10024 
smtpd_sasl_auth_enable = yes 
smtpd_sasl_local_domain = 
smtpd_sasl_security_options = noanonymous 
broken_sasl_auth_clients = yes 
smtpd_sasl_password_maps = hash:/etc/postfix/sasl_passwd 
smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd 
smtp_sasl_security_options = noanonymous 
virtual_maps = hash:/etc/postfix/virtusertable 
smtp_sender_dependent_authentication = yes 
smtp_sender_dependent_relayhost_map = hash:/etc/postfix/sender_relay 
-->schnapp<--

Erklärung der einzellnen Werte:
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem  -> Selbsterstelltes Zertifikat
smtpd_use_tls=yes -> Abruf im Netz benötigt TLS Verschlüsselung
myhostname = meinedomain.de -> Mein Domainname den ich nutze, z.b. nitschke-marl.de
alias_maps = hash:/etc/aliases -> hier wird die Nutzerliste gesucht
mydestination = mailserver.meinedomain.de, localhost.meinedomain.de, localhost -> nochmal meine Domain
relayhost = irgendein.mail.de -> Hier gehen die Mails hin
mynetworks = 192.1.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128 -> Mein Netzwerk aus dem Mails akzeptiert werden
smtpd_sasl_password_maps = hash:/etc/postfix/sasl_passwd -> Hier stehen die Kennwörter für den Versand zum Smarthost
virtual_maps = hash:/etc/postfix/virtusertable -> Zuordnung lokaler Nutzer zur eMail
smtp_sender_dependent_authentication = yes -> Smarthost im Internet benötigt Authentifizierung
smtp_sender_dependent_relayhost_map = hash:/etc/postfix/sender_relay -> Liste der Nutzer zu Smarthosts

In der sasl_passwd ist hinterlegt welche eMail Adresse sich beim
Smarthost im Internet mit welchem Kennwort anmeldet.
Hier muss also das Kennwort des nächsten Mailservers rein.
Die Datei sasl_passwd hat folgenden Inhalt:
-->schnipp<--
meine@meinedomain.de meine@meinedomain.de:smarthostkennwort
nochne@meinedomain.de nochne@meinedomain.de:smarthostkennwort
-->schnapp<--

Die Virtusertable ordnet nochmal die eMail dem internen Nutzer zu.
In der ersten Zeite kommt nochmal der Mailserver rein, über dem im Internet
die eMails versendet werden. Daneben steht meine Domain.
Die nächten Zeilen sidn die eMail Adresse und daneben der lokale Nutzer.
(vergleiche fetchmail.rc und aliases)
und virtusertable folgenden Inhalt:
-->schnipp<--
irgendein.mail.de meinedomain.de
meine@meinedomain.de lokalernutzer
nochne@meinedomain.de lokalernutzer2
-->schnapp<--

Die Datei /etc/postfix/sasl/smtpd.conf habe ich folgendes eingegeben:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
saslauthd_pathd: /var/run/saslauthd/mux
autotransition: true

Die saslauthd ist für den Authentifizierungsdämon zuständig.
Bei /etc/default/saslauthd habe ich folgendes geändert:
-->schnipp<--
MECHANISMS="shadow"
START=yes
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
-->schnapp<--

Folgende Befehle habe ich ausgeführt, weil Postfix ja in einer chroot Umgebung läuft:
mkdir -p /var/spool/postfix/var/run
ch /var/run
mv saslauthd /var/spool/postfix/var/run
ln -s /var/spool/postfix/var/run/saslauthd/saslauthd

adduser postfix sasl
/etc/init.d/postfix restart


Am Ende dieser Prozedur kann man folgendes machen:
eMails von Extern Empfangen,
sie werden in die richtigen Postfächer einsortiert und der Client kann sie sich anschauen.
Email intern verschicken.
Das Funktioniert.

Für externen Verwand muss noch die Datei
/etc/postfix/sender_relay
angelegt und mit Inhalt befüllt werden.
Hier steht die eMail Adresse und der dazu passende Smarthost im Internet drin.

-->schnipp<--
meine@meinedomain.de irgendein.mail.de 
nochne@meinedomain.de irgendein.mail.de
-->schnapp<--

Damit die Virenprüfung funktioniert muss man das Programm Amavisd-new sowie Spamassisin noch in Postfix einbinden.
Dazu muss die Datei main.cf  folgendes Aussehen haben:
-->schnipp<--
# See /usr/share/postfix/main.cf.dist for a commented, more complete version 

# Debian specific:  Specifying a file name will cause the first 
# line of that file to be used as the name.  The Debian default 
# is /etc/mailname. 
#myorigin = /etc/mailname 
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) 
biff = no 
# appending .domain is the MUA's job. 
append_dot_mydomain = no 
# Uncomment the next line to generate "delayed mail" warnings 
#delay_warning_time = 4h 
readme_directory = no 
# TLS parameters 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem 
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key 
smtpd_use_tls=yes 
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for 
# information on enabling SSL in the smtp client. 
myhostname = meinedomain.de
alias_maps = hash:/etc/aliases 
alias_database = hash:/etc/aliases 
myorigin = /etc/mailname 
mydestination = mailserver.meinedomain.de, localhost.meinedomain.de, localhost 
relayhost = irgendein.mail.de
mynetworks = 192.1.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128 
mailbox_command = procmail -a "$EXTENSION" 
mailbox_size_limit = 0 
recipient_delimiter = + 
inet_interfaces = all 
content_filter=smtp-amavis:[127.0.0.1]:10024 
smtpd_sasl_auth_enable = yes 
smtpd_sasl_local_domain = 
smtpd_sasl_security_options = noanonymous 
broken_sasl_auth_clients = yes 
smtpd_sasl_password_maps = hash:/etc/postfix/sasl_passwd 
smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd 
smtp_sasl_security_options = noanonymous 
virtual_maps = hash:/etc/postfix/virtusertable 
smtp_sender_dependent_authentication = yes 
-->schnapp<--

Erklärung:
content_filter=smtp-amavis:[127.0.0.1]:10024 -> übergibt die Mails zur Virenprüfung an das locale amavis

Im Verzeichnis
/etc/amavis/conf.d müssen noch zwei Dateien bearbeitet werden.

Die /etc/postfix/master.cf muss folgenden Inhalt haben:
-->schnipp<--
# 
# Postfix master process configuration file.  For details on the format 
# of the file, see the master(5) manual page (command: "man 5 master"). 
# 

# Do not forget to execute "postfix reload" after editing this file. 
# 
# ========================================================================== 
# service type  private unpriv  chroot  wakeup  maxproc command + args 
#               (yes)   (yes)   (yes)   (never) (100) 
# ========================================================================== 
smtp      inet  n       -       -       -       -       smtpd 
#submission inet n       -       -       -       -       smtpd 
#  -o smtpd_tls_security_level=encrypt 
#  -o smtpd_sasl_auth_enable=yes 
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject 
#  -o milter_macro_daemon_name=ORIGINATING 
#smtps     inet  n       -       -       -       -       smtpd 
#  -o smtpd_tls_wrappermode=yes 
#  -o smtpd_sasl_auth_enable=yes 
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject 
#  -o milter_macro_daemon_name=ORIGINATING 
#628      inet  n       -       -       -       -       qmqpd 
pickup    fifo  n       -       -       60      1       pickup 
        -o content_filter= 
        -o receive_override_options=no_header_body_checks 
cleanup   unix  n       -       -       -       0       cleanup 
qmgr      fifo  n       -       n       300     1       qmgr 
#qmgr     fifo  n       -       -       300     1       oqmgr 
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. See the Postfix MAILDROP_README file for details. 
# Also specify in main.cf: maildrop_destination_recipient_limit=1 
# 
maildrop  unix  -       n       n       -       -       pipe 
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} 
# 
# See the Postfix UUCP_README file for configuration details. 
# 
uucp      unix  -       n       n       -       -       pipe 
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) 
# 
# Other external delivery methods. 
# 
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} 

smtp-amavis     unix    -       -       -       -       2       smtp 
        -o smtp_data_done_timeout=1200 
        -o smtp_send_xforward_command=yes 
        -o disable_dns_lookups=yes 
        -o max_use=20 

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_delay_reject=no 
        -o smtpd_client_restrictions=permit_mynetworks,reject 
        -o smtpd_helo_restrictions= 
        -o smtpd_sender_restrictions= 
        -o smtpd_recipient_restrictions=permit_mynetworks,reject 
        -o smtpd_data_restrictions=reject_unauth_pipelining 
        -o smtpd_end_of_data_restrictions= 
        -o mynetworks=127.0.0.0/8 
        -o smtpd_error_sleep_time=0 
        -o smtpd_soft_error_limit=1001 
        -o smtpd_hard_error_limit=1000 
        -o smtpd_client_connection_count_limit=0 
        -o smtpd_client_connection_rate_limit=0 
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks 
-->schnapp<--

Die Datei 15-content_filter_mode
mussfolgendes Aussehen haben:
-->schnipp<--
use strict; 
# You can modify this file to re-enable SPAM checking through spamassassin 
# and to re-enable antivirus checking. 
# 
# Default antivirus checking mode 
# Uncomment the two lines below to enable it back 
# 
#@bypass_virus_checks_maps = ( 
#   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); 
# 
# Default SPAM checking mode 
# Uncomment the two lines below to enable it back 
# 
@bypass_spam_checks_maps = ( 
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 
1;  # ensure a defined return 
-->schnapp<--

Und die Datei 20-debian_defaults folgenden Inhalt:

-->schnipp<--
use strict; 

# ADMINISTRATORS: 
# Debian suggests that any changes you need to do that should never 
# be "updated" by the Debian package should be made in another file, 
# overriding the settings in this file. 
# 
# The package will *not* overwrite your settings, but by keeping 
# them separate, you will make the task of merging changes on these 
# configuration files much simpler... 

#   see /usr/share/doc/amavisd-new/examples/amavisd.conf-default for 
#       a list of all variables with their defaults; 
#   see /usr/share/doc/amavisd-new/examples/amavisd.conf-sample for 
#       a traditional-style commented file  
#   [note: the above files were not converted to Debian settings!] 
# 
#   for more details see documentation in /usr/share/doc/amavisd-new 
#   and at http://www.ijs.si/software/amavisd/amavisd-new-docs.html 

$QUARANTINEDIR = "/var/spool/mail/spam"; 
$quarantine_subdir_levels = 1; # enable quarantine dir hashing 

$log_recip_templ = undef;    # disable by-recipient level-0 log entries 
$DO_SYSLOG = 1;              # log via syslogd (preferred) 
$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages 
$syslog_facility = 'mail'; 
$syslog_priority = 'debug';  # switch to info to drop debug output, etc 

$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny) 
$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1 

$inet_socket_port = 10024;   # default listening socket 

$sa_spam_subject_tag = '***SPAM*** '; 
$sa_tag_level_deflt  = 5.0;  # add spam info headers if at, or above that level 
$sa_tag2_level_deflt = 8.31; # add 'spam detected' headers at that level 
$sa_kill_level_deflt = 8.31; # triggers spam evasive actions 
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent 

$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger 
$sa_local_tests_only = 0;    # only tests which do not require internet access? 

# Quota limits to avoid bombs (like 42.zip) 

$MAXLEVELS = 14; 
$MAXFILES = 1500; 
$MIN_EXPANSION_QUOTA =      100*1024;  # bytes 
$MAX_EXPANSION_QUOTA = 300*1024*1024;  # bytes 

# You should: 
#   Use D_DISCARD to discard data (viruses) 
#   Use D_BOUNCE to generate local bounces by amavisd-new 
#   Use D_REJECT to generate local or remote bounces by the calling MTA 
#   Use D_PASS to deliver the message 
# 
# Whatever you do, *NEVER* use D_REJECT if you have other MTAs *forwarding* 
# mail to your account.  Use D_BOUNCE instead, otherwise you are delegating 
# the bounce work to your friendly forwarders, which might not like it at all. 
# 
# On dual-MTA setups, one can often D_REJECT, as this just makes your own 
# MTA generate the bounce message.  Test it first. 
# 
# Bouncing viruses is stupid, always discard them after you are sure the AV 
# is working correctly.  Bouncing real SPAM is also useless, if you cannot 
# D_REJECT it (and don't D_REJECT mail coming from your forwarders!). 

$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine) 
$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA 
$final_spam_destiny       = D_DISCARD; 
#$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam) 

#$virus_admin = "spam\@meinedomain.de"; # due to D_DISCARD default 
#$spam_admin = "spam\@meinedomain.de"; 


$spam_quarantine_to = "spam\@meinedomain.de"; 
$virus_quarantine_to = "spam\@meinedomain.de"; 

# Set to empty ("") to add no header 
$X_HEADER_LINE = "Debian $myproduct_name at $mydomain"; 

# REMAINING IMPORTANT VARIABLES ARE LISTED HERE BECAUSE OF LONGER ASSIGNMENTS 

# 
# DO NOT SEND VIRUS NOTIFICATIONS TO OUTSIDE OF YOUR DOMAIN. EVER. 
# 
# These days, almost all viruses fake the envelope sender and mail headers. 
# Therefore, "virus notifications" became nothing but undesired, aggravating 
# SPAM.  This holds true even inside one's domain.  We disable them all by 
# default, except for the EICAR test pattern. 
# 

@viruses_that_fake_sender_maps = (new_RE( 
  [qr'\bEICAR\b'i => 0],            # av test pattern name 
  [qr/.*/ => 1],  # true for everything else 
)); 

@keep_decoded_original_maps = (new_RE( 
# qr'^MAIL$',   # retain full original message for virus checking (can be slow) 
  qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables 
  qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, 
# qr'^Zip archive data',     # don't trust Archive::Zip 
)); 


# for $banned_namepath_re, a new-style of banned table, see amavisd.conf-sample 
$banned_filename_re = new_RE( 
# qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components 

  # block certain double extensions anywhere in the base name 
  qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i, 

  qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?'i, # Windows Class ID CLSID, strict 

  qr'^application/x-msdownload$'i,                  # block these MIME types 
  qr'^application/x-msdos-program$'i, 
  qr'^application/hta$'i, 

# qr'^application/x-msmetafile$'i,      # Windows Metafile MIME type 
# qr'^\.wmf$',                          # Windows Metafile file(1) type 

# qr'^message/partial$'i, qr'^message/external-body$'i, # rfc2046 MIME types 

# [ qr'^\.(Z|gz|bz2)$'           => 0 ],  # allow any in Unix-compressed 
# [ qr'^\.(rpm|cpio|tar)$'       => 0 ],  # allow any in Unix-type archives 
# [ qr'^\.(zip|rar|arc|arj|zoo)$'=> 0 ],  # allow any within such archives 

  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i, # banned extension - basic 
# qr'.\.(ade|adp|app|bas|bat|chm|cmd|com|cpl|crt|emf|exe|fxp|grp|hlp|hta| 
#        inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdw|mdt|mdz|msc|msi|msp|mst| 
#        ops|pcd|pif|prg|reg|scr|sct|shb|shs|vb|vbe|vbs| 
#        wmf|wsc|wsf|wsh)$'ix,  # banned ext - long 

# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i,  # banned extension - WinZip vulnerab. 

  qr'^\.(exe-ms)$',                       # banned file(1) types 
# qr'^\.(exe|lha|tnef|cab|dll)$',         # banned file(1) types 
); 
# See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631 
# and http://www.cknow.com/vtutor/vtextensions.htm 


# ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING 

@score_sender_maps = ({ # a by-recipient hash lookup table, 
                        # results from all matching recipient tables are summed 

# ## per-recipient personal tables  (NOTE: positive: black, negative: white) 
# 'user1@example.com'  => [{'bla-mobile.press@example.com' => 10.0}], 
# 'user3@example.com'  => [{'.ebay.com'                 => -3.0}], 
# 'user4@example.com'  => [{'cleargreen@cleargreen.com' => -7.0, 
#                           '.cleargreen.com'           => -5.0}], 

  ## site-wide opinions about senders (the '.' matches any recipient) 
  '.' => [  # the _first_ matching sender determines the score boost 

   new_RE(  # regexp-type lookup table, just happens to be all soft-blacklist 
    [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 5.0], 
    [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 5.0], 
    [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 5.0], 
    [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 5.0], 
    [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 5.0], 
    [qr'^(your_friend|greatoffers)@'i                                => 5.0], 
    [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 5.0], 
   ), 

#  read_hash("/var/amavis/sender_scores_sitewide"), 

   { # a hash-type lookup table (associative array) 
     'nobody@cert.org'                        => -3.0, 
     'cert-advisory@us-cert.gov'              => -3.0, 
     'owner-alert@iss.net'                    => -3.0, 
     'slashdot@slashdot.org'                  => -3.0, 
     'securityfocus.com'                      => -3.0, 
     'ntbugtraq@listserv.ntbugtraq.com'       => -3.0, 
     'security-alerts@linuxsecurity.com'      => -3.0, 
     'mailman-announce-admin@python.org'      => -3.0, 
     'amavis-user-admin@lists.sourceforge.net'=> -3.0, 
     'amavis-user-bounces@lists.sourceforge.net' => -3.0, 
     'spamassassin.apache.org'                => -3.0, 
     'notification-return@lists.sophos.com'   => -3.0, 
     'owner-postfix-users@postfix.org'        => -3.0, 
     'owner-postfix-announce@postfix.org'     => -3.0, 
     'owner-sendmail-announce@lists.sendmail.org'   => -3.0, 
     'sendmail-announce-request@lists.sendmail.org' => -3.0, 
     'donotreply@sendmail.org'                => -3.0, 
     'ca+envelope@sendmail.org'               => -3.0, 
     'noreply@freshmeat.net'                  => -3.0, 
     'owner-technews@postel.acm.org'          => -3.0, 
     'ietf-123-owner@loki.ietf.org'           => -3.0, 
     'cvs-commits-list-admin@gnome.org'       => -3.0, 
     'rt-users-admin@lists.fsck.com'          => -3.0, 
     'clp-request@comp.nus.edu.sg'            => -3.0, 
     'surveys-errors@lists.nua.ie'            => -3.0, 
     'emailnews@genomeweb.com'                => -5.0, 
     'yahoo-dev-null@yahoo-inc.com'           => -3.0, 
     'returns.groups.yahoo.com'               => -3.0, 
     'clusternews@linuxnetworx.com'           => -3.0, 
     lc('lvs-users-admin@LinuxVirtualServer.org')    => -3.0, 
     lc('owner-textbreakingnews@CNNIMAIL12.CNN.COM') => -5.0, 

     # soft-blacklisting (positive score) 
     'sender@example.net'                     =>  3.0, 
     '.example.net'                           =>  1.0, 

   }, 
  ],  # end of site-wide tables 
}); 

1;  # ensure a defined return 
(END) 
-->schnapp<--

In der Datei habe ich das so eingestellt, das eMails die als Virus verdächtigt
werden an die Adressse spam@meinedomain.de
gesendet werden. Damit ist sichergestellt das keine Viren in das lokale Netz kommen können.
Ein Quarantäneordner für Spam habe ich hier auf "spam" festgelegt, das heisst es muss einen Nutzer spam geben.
Der Eintrag sieht so aus:
$QUARANTINEDIR = "/var/spool/mail/spam"; 



Wichtig: Damit alle Daten erkannt werden müssen die Einstellungen wir folgt aktiviert werden:

postmap /etc/postfix/virtusertable
postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/sender_relay
postmap /etc/aliases
newaliases

und danach Postfix neu starten:
/etc/init.d/postfix reload
/etc/init.d/postfix restart



Update zu Debian 6.0 Squeeze

Bei der Installation eines Mailservers auf Squeeze kommen einige
Besonderheiten dazu.

Damit die Virenprüfung mit Amavisd korrekt läuft muss in der Datei
amavis.conf
folgender Eintrag erfolgen:
$pid_file = '$MYHOME/amavisd.pid;
Hier zeigt man dem System wo die PID Datei liegen soll.
Ohne diesen Eintrag hagelt es Fehlermeldungen in der Log Datei
und die eMails werden nicht zugestellt, weil sie nicht durch
die Virenprüfung laufen.

Damit man die .forward Datei im Heimatverzeichnis
der Benutzer nutzen kann müssen folgende Rechte gesetzt sein:
chown root.nobody .forward
chmod 764 .forward

Bei dem Client, z.b. Thunderbird muss beim SMTP eingestellt sein,
das der Server TLS benötigt, aber kein Benutzername oder Kennwort
(war bei Debian 5 nötig)!


Wenn in der mail.info massenhaft Fehlermeldungen in Zusammenhang mit Postdrop
stehen, passt hier eine Berechtigung nicht.
Abhilfe:
chmod -R 777 /var/spool/postfix

Kopie aller Mails an eine Adresse
Wenn man eine Kopie aller eMails die das System durchläuft auf
eine Adresse bekommen möchte, muss man folgenden eintrag in die main.cf setzten:
always_bcc = meineemailadressse
Damit die eMails aber nicht doppelt ankommen, weil sie noch auf Viren geprüft werden,
sollte man die main.cf um diesen Wert ergänzen:
enable_original_recipient = No

eMail mit Umlauten wird nicht zu jeder Domain zugestellt
Eine eMail mit Umlauten im Text wurde nicht zu allen Zieldomains zugestellt.
Fehlermeldungen wurden aber in der mail.info auch nicht verzeichnet.
Lösung ist das die Zieldomain einen zu alten Exchange Server nutzt und
dieser die Mime Verschlüsselung nicht korrekt erkennt.
Folgender Eintrag in der main.cf löste das Problem:
smtp_discard_ehlo_keywords = 8bitmime
smtpd_discard_ehlo_keywords = 8bitmime


eMails kommen nicht überall an ... sender_canonincal_maps
Bei dem eingerichteten Mailserver kommen nicht alle eMails überall an.
Es zeigt sich das manche Empfänger den Header genau prüfen um Spam-Emails
zu erkennen. Wenn da ein falscher Absender steht, führt das zu Problemen.
In der main.cf von Postfix habe ich diese Zeile hinzugefügt:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Die Datei sender_canonical hat diesen Aufbau:
user user@domain.de

Beispiel:

andre andre@nitschke-marl.de



Dovecot statt uw-imapd
Weil es stetig Probleme gab im Zusammenspiel von uw-imapd und iPhones,
z.b. sind gelöschte eMails wieder aufgetaucht oder auch die mbox Datei
wurde beschädigt, habe ich mich entschlossen auf dovecot zu setzten.
Da der Bug bekannt ist, aber mit einer Lösung wohl nicht mehr gerechnet
werden kann (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557103)
habe ich Dovecot auf dem Debian Mailserver installiert.

Zur Installation nutze ich aptitude, welches gleich die nicht mehr benötigten
Pakete von uwmap-d entfernt hat.

Zum Login auf dem Mailserver wurde wie unter uw-imapd auch die Nutzernamen und Kennwörter
benutzt die auf dem Debian System hinterlegt sind.
In der Grundeinstellung wurden aber keine Verzeichnisstruktur angezeigt.
Der Grund ist dieser:
dovecot speichert die Mails in ~/mail/ und uwimapd nur in ~/
somit habe ich folgende Zeilen eingetragen in die /etc/dovecot/dovecot.conf:

mail_location = mbox:~/mail/:INBOX=/var/mail/%u
mail_full_filesystem_access = yes


ich hätte auch mbox:~/ eingeben können und dann hätt er sofort alle Mails von
dem alten uwimapd übernommen, aber auch alle anderen Dateien angezeigt. So
habe ich alle Verzeichnisse und Dateien mit Mails in das Verzeichnis "mail" verschoben
und der nutzer sieht nur seine eMails und mehr nicht.


Fetchmail an POP mit unbekannten SSL
Nachdem sich die Fehlermeldungen in der Log Datei häuften,
das fetchmail den SSL Schlüssel nicht kennt, habe ich diesen
per Hand hinzugefügt.
Die Fehler sahen so aus:
Jan 20 01:57:35 server2 fetchmail[27210]: Warnung: Die Verbindung ist unsicher, mache trotzdem weiter. (Nehmen Sie lieber --sslcertck!)
Jan 20 01:57:35 server2 fetchmail[27210]: Fehler bei Server-Zertifikat-Überprüfung: self signed certificate

Zunächst hab ich mir die Fingerprints anzeigen lassen mit:
fetchmail -v -f /etc/.fetchmailrc

Dort habe ich mir die zu dem Mailserver passenden Fingerprints
abgeschrieben und in der .fetchmailrc eingetragen nach diesem Muster:
options ssl sslfingerprint "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"

Anschliesend hab ich fetchmail neu gestartet und die Fehler waren verschwunden.



Header Analysieren und nach Keywords umleiten
Um eMails vor dem Empfang aber auch vor dem Empfang umzuleiten kann man
den Header nach Schlüsselwörtern durchsuchen und danach dann eine Regel
abarbeiten lassen. Die Schlüsselwörter können auch eMail Adressen oder Teile davon
sein, so das diese Methode auch zum Abfangen oder als Urlaubsvertretung brauchbar ist.

Die main.cf habe ich um folgende Zeile erganzt:
header_checks = regexp:/etc/postfix/header_checks

In der Datei header_checks kann ich nun nach Ausdrücken suchen lassen,
und dafür eine Weiterleitungsregel hinterlegen.:
/^(To|From|Cc|Reply-To):.*DASISTDASSUCHWORT*/ REDIRECT andre@nitschke-marl.de

Diese Zeile sucht in dem Empfänger oder Absender-Feld das Suchwort und leitet bei Bedarf
an die hinterlegte Adresse weiter.
. in der Domain verhindert Empfang
Wenn in der Logdatei eine falsche eMail Auftauch und ein . im Domainname
ist folgende Datei zu prüfen:
/etc/mailname


Postfix Port 587 für Submission nutzt.


Das Problem ist, das der Port 25 (den ich bisher genutzt habe) nur für die Kommunikation der Server untereinander vorgesehen ist. \\Grade in anderne Ländern wird durch die Provider der Port 25 gesperrt, so das man hier keine Mail an den eigenen Server ausliefern kann. Hierfür ist dann Port 587 vorgesehen.

Um die submission Funktion zu nutzen muss man die Datei

/etc/postfix/main.cf

bearbeiten. Hier werden 4 Zeilen auskommentiert.

submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restriction=permit_sasl_authenticated,reject

Anschliessend muss Postfix noch neu gestartet werden

/etc/init.d/postfix restart

Falls der Mailserver hinter einer Firewall steht muss man noch darauf achten,
das man dort eine Portweiterleitung für den Port 587 einrichtet.

Die Clients können nun entsprechend angepasst werden, wobei hier 587 als Port und das Protokoll STARTTLS auszuwählen ist.


Wenn es Probleme beim Verstand gibt und der Mailserver per SMTP nicht annehmen möchte
kann man den Relayhost noch auf den Port 587 erzwingen:
relayhost = [h1753170.stratoserver.net]:587


Zertifikatsfehler bei Outlook

Das Problem des Zertifikatsfehlers bei Outlook hat mich lange befasst,
bis ich eine Lösung hatte.
Der Fehler kam immer beim Start von Outlook und betraf bisher alle Postfix Versionen
mit denen ich zu tun hatte.
Diese Lösung habe ich unter Ubuntu 16.04 getestet. Andere Versionen sollten ähnlich sein.

Als erstes habe ich die ssl-cert-snakeoil.pem Datei von Ubuntu Server aus
/etc/ssl/certs
kopiert und auf den Windows PC übertragten.
Hier habe ich diese dann in ubuntuserver.crt umbenannt und mittels Internet-Explorer
unter die Vertrauenswürdigen Zertifikate importiert.
(Werkzeuge -> Optionen -> Inhalt -> Zertifikate)
Bei Outlook habe ich das Zertifikat dann auch beim Start automatisch
importieren lassen.

Dovecot und Postfix sind etwas tricky, da Dovecot andere Zertifikate verwendet wie Postfix. Ich habe
daher folgende Datei bearbeitet:
/etc/dovecot/conf.d/10-ssl.conf

und mit folgenden Zeilen ergänzt (bzw. geändert wenn diese schon bestehen):

ssl_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

Ein Neustart von Dovecot und schon funktioniert es.
Wichtig ist hier, das man den Mailserver nicht mit IP sondern mit den hostnamen anspricht,
damit Outlook hier keinen Fehler ausgibt.



DKIM fuer Postfix einrichten

Die grundlegende Installation ist schnell gemacht:
apt-get install opendkim opendkim-tools

Die erste Konfigurationsdatei die wir bearbeiten ist
/etc/opendkim.conf

Hier werden folgende Zeiten an der Datei angehängt:
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost

Als nächstes wird die Datei
/etc/default/opendkim

Hier wird folgende Zeile eingefügt, bzw. angepasst:
SOCKET="inet:12301@localhost"

In der Datei
/etc/postfix/main.cf

Müssen folgende Zeilen eingefügt werden:
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Anschliessend muessen noch folgende Verzeichnisse erstellt werden:
mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Nun erstellen wir eine Datei
/etc/opendkim/TrustedHosts
mit folgendem Inhalt:

127.0.0.1
localhost
192.168.178.1/24
*.nitschke-marl.de

Und folgende Datei
/etc/opendkim/KeyTable
mit diesem Inhalt:

mail._domainkey.nitschke-marl.de nitschke-marl.de:mail:/etc/opendkim/keys/nitschke-mail.de/mail.private

Sowie folgende Datei
/etc/opendkim/SigningTable
mit diesem Inhalt:

*@example.com mail._domainkey.nitschke-marl.de

Anschliessend werden die neuen keys generiert

cd /etc/opendkim/keys
mkdir nitschke-marl.de
opendkim-genkey -s mail -d nitschke-marl.de

Anschliessend folgende Textdatei
/etc/opendkim/keys/mail.txt
Den String für die Zonefile herauskopieren

Beispiel:
mail._domainkey IN TXT "v=DKIM1; k=rsa; \\p=XIGffA04CSqGatb3EQEBAWUgG4GTADVB5QKxgQC3N3lnvv"XgOCAAoqn+awTpE+iPPcKOOpo8REbcFeCQQV10Hxo4PhCoAASa2VHOjD444efKXhQjM7iKFRTuBatE7OQWERT1CJpNuIdASDFGSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for nitschke-marl.de
Zum Abschluss fehlt nur noch
service postfix restart
service opendkim restart


Versand ohne plain text über Postfix

Folgende Einstellung habe ich an der main.cf ergänst:
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# optional zur Fehlersuche
smtp_tls_loglevel = 1




This page may have a more recent version on pmwiki.org: PmWiki:Einrichten, and a talk page: PmWiki:Einrichten-Talk.