Mail-Server mit sendmail
Auf dem Firewallrechner krypton, der auch unser Mailserver ist, läuft sendmail in der Version 8.12.4. als Dämon. D.h., wir nehmen Mails aus dem internen Netzwerk an, leiten sie entweder lokal weiter, oder stellen sie in die Warteschlange. Dazu vergeben wir den Nutzern die e-mail Adresse user@mail.laas.priv. Das ist wichtig, damit die lokalen Mails korrekt zugestellt werden. Andererseits sollen die Absenderadressen maskiert werden, wenn die Mails nach draußen gehen, da mail.laas.priv kein gültigen Nameservereintrag aufweist.
Die Konfiguration von sendmail ist kompliziert. Zuerst werden wir festlegen, von welchen Rechnern wir Mails akzeptieren. Das ist wichtig, um Spammern und Mißbrauch vorzubeugen. Im lokalen Netz kann man dies sicherlich vernachlässigen, aber nicht Internet. Wir editieren dazu die Datei /etc/mail/access. Das Netzwerk 127 bezeichnet den Mailserver selbst. Alle Mail von dort wird bedenkenlos akzeptiert. Aus dem internen Netz nehmen wir Mails ans und leiten sie an die entsprechende Stelle weiter.
127 OK 192.168.0 RELAY #cyberspammer.com 550 We don't accept mail from spammers
Die auskommentierte Zeile zeigt beispielhaft, wie man bestimmten Hosts oder Netzwerken verbieten, Mail über unseren Server zu verbreiten. Wird die Datei verändert, so ist das Kommando
makemap hash -f /etc/mail/access.db < /etc/mail/access
auszuführen. Damit wird die access-Datenbank neu erstellt.
Absenderadressen einstellen
Jetzt wollen wir festlegen, wie die Absenderadressen geändert werden, wenn die Mail das lokale Netzwerk verläßt. Dazu bearbeiten wir die Datei /etc/mail/genericstable. Das Format ist sehr einfach, links steht der Ntuzer, rechts (durch Tabs getrennt), die Ersetzung. Wenn also root eine Mail versendet, so erscheint als Absender laas@laas.de. Lokale Mail muß man an user@mail.laas.de adressieren.
# # map outgoing sender addresse from foo to bar@domain.com: # foo bar@domain.com # root laas@laas.de laas webmaster@laas.de mig webmaster@turtlebeach.de
Analog wie zur Access-Datenbank muss aus der Textdatei eine für sendmail lesbare Datenbank generiert werden.
makemap hash -f /etc/mail/genericstable.db < /etc/mail/genericstable
Hauptkonfiguration
Der Hauptteil der Konfiguration findet in /etc/mail/sendmail.cf statt. Mit dem Makroprozessor m4 kann man sich aus /etc/mail/laas.mc eine eigene Konfigurationsdatei erstellen lassen. Die Administrierung von sendmail ist mit den Makrodateien sehr viel einfacher. Ich gebe hier meine Makrodatei an, in der Hoffnung, dass sie ausreichend kommentiert ist.
dnl Mit dnl beginnt ein Kommentar bis zum Zeilenende und dnl wird nicht ausgewertet. dnl Einsetzen in `'-Paare Verhindert die Makro-Expansion. dnl define(`LIBDIR',`/usr/share/sendmail') include(LIBDIR/m4/cf.m4) VERSIONID(`linux for www.laas.priv')dnl OSTYPE(`linux')dnl dnl dnl Speichere einige Statistiken in dieses File (siehe dazu dnl man mailstats) dnl dnl define(`STATUS_FILE', /etc/mail/sendmail.st)dnl dnl dnl use this user id if we do not use some specific local user dnl (e.g. for delivering error messages) dnl define(`confDEF_USER_ID', `daemon:daemon')dnl dnl dnl verwende Procmail zum Zustellen der lokalen Mails: dnl define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl dnl dnl Emails werden in diesem Verzeichnis zwischengelagert, dnl bevor sie an den naechsten Host weitergegeben werden: dnl define(`QUEUE_DIR', `/var/spool/mqueue')dnl dnl dnl Fehlermeldungen werden auch an diese Adresse weitergeleitet: dnl define(`confCOPY_ERRORS_TO', `postmaster')dnl dnl dnl Versende Fehlermeldungen nicht im MIME-Format: dnl dnl define(`confMIME_FORMAT_ERRORS', `False')dnl dnl dnl Die Standardgroesse fuer UUCP sind 100kB. Das ist zu wenig. dnl define(`UUCP_MAILER_MAX', `2000000')dnl dnl dnl Der Standard Zustell-Modus (delivery-mode) dnl `i': interactive dnl `b': background (asynchonous) dnl `q': queue dnl `d': delay dnl siehe auch `man sendmail` fuer Details dnl define(`confDELIVERY_MODE', `b')dnl dnl dnl Wer mit Dial-on-Demand und einem Modem arbeitet, kann hier eine dnl Verzoegerung einstellen, die Sendmail warten soll, bis die Leitung dnl steht. dnl dnl define(`confDIAL_DELAY', `10s')dnl dnl dnl Nach welchem Zeitraum soll Sendmail eine Warnung versenden, dass dnl eine Mail noch nicht abgearbeitet werden konnte: dnl define(`confTO_QUEUEWARN', `8h')dnl dnl dnl Wann soll eine Mail als unzustellbar zurueckgeschickt werden? dnl define(`confTO_QUEUERETURN', `7d')dnl dnl dnl keine Ident-Abfragen durchfuehren dnl define(`confTO_IDENT', `0s')dnl dnl dnl Anzahl der Kindprozesse auf 5 begrenzen dnl Anzahl der Verbindungen auf 3 begrenzen dnl dnl define(`confMAX_DAEMON_CHILDREN', `5')dnl dnl define(`confCONNECTION_RATE_THROTTLE', `3')dnl dnl dnl Wir werden eingehende Mails ab einer Load von 2 empfangen, aber dnl nur in die Warteschlange stellen. Ab 10 werden die Mails abgelehnt. dnl define(`confQUEUE_LA', `2')dnl define(`confREFUSE_LA', `10')dnl dnl dnl Oft ist es sinnvoll das SMTP expn und verfy mit "noexpn" und "noverfy" dnl abzuschalten. Wer viele User hat kann noch "restrictrunq" und dnl "restrictmailq" aktivieren. dnl "authwarnings" warnt mit dem Header "X-Authentication-Warning" dnl wenn ein User z.B. "sendmail -bs" verwendet. Pine-User werden dies dnl vermutlich deaktivieren wollen. dnl "noreceipts" ignoriert alle "Return-Receipt-To:"-Header dnl define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn')dnl dnl dnl Erstelle das Verzeichnis /var/mqueue/.hoststat und Sendmail schreibt dnl Status-Infos ueber den Empfaenger-Rechner hinein. Das beschleunigt dnl oft die Mail-Auslieferung auf grossen Mailservern. dnl define(`confHOST_STATUS_DIRECTORY', `.hoststat')dnl dnl dnl Lasse zu, dass jene User den Sender-Header modifizieren. dnl fuer diese Absender wird die X-Authentication-Warning unterdrueckt dnl define(`confTRUSTED_USERS', `mdom wwwrun')dnl dnl dnl define(`confCT_FILE', `/etc/mail/sendmail.ct')dnl dnl FEATURE(`use_ct_file')dnl dnl dnl Definiere den Smarthost entweder hier, oder in /etc/mail/mailertable dnl ein Smarthost ist der Empfaenger-Host fuer alle EMails, die nach dnl draussen gehen dnl dnl define(`SMART_HOST', `smtp:smtprelay.t-online.de') dnl define(`SMART_HOST', `smtp:mail.puretec.de')dnl dnl define(`SMART_HOST', `smtp:mail.3-point.de')dnl define(`SMART_HOST', `mail.epost.de')dnl dnl dnl aktiviere diesen Eintrag, wenn Du eine Dial-up-Verbindung zum Internet dnl hast, dann werden alle Mails gespoolt, und erst mit "sendmail -q" dnl versandt. dnl define(`confCON_EXPENSIVE', `True')dnl define(`SMTP_MAILER_FLAGS',`e')dnl dnl dnl sendmail will give all hostnames to your DNS server and replace the dnl names with the FQDN ones. as nearly all email-programs use the full dnl hostname and you will probably also just use full hostnames as dnl destination addresses, you could disable this "feature". dnl this is also used for dial-on-demand connections where we don't want dnl to trigger a connection just for a DNS query. dnl dnl FEATURE(`nodns')dnl nodns ist seit Sendmail 8.7 deaktiviert. FEATURE(`nocanonify')dnl dnl dnl if you really have to disable DNS lookups and only want to use /etc/hosts, dnl you have to create the file /etc/service.switch with the two lines dnl "hosts files" and "aliases files" in it. dnl please configure a real DNS server and do not use this mis-feature. dnl you might instead also use /etc/mail/mailertable with IP addresses. dnl define(`confSERVICE_SWITCH_FILE', `/etc/mail/service.switch')dnl define(`confHOSTS_FILE', `/etc/hosts')dnl dnl dnl fuege die lokale Domain hinzu, wenn sie im Absender fehlt. dnl Beispiel: "From: michael" wird zu "From: michael@mail.laas.priv" dnl dnl FEATURE(`always_add_domain')dnl FEATURE(`accept_unresolvable_domains')dnl dnl dnl specify the sender email address for all outgoing mail from the local dnl machine. most people also want to use "masquerade_envelope" to also dnl change the envelope addresses. dnl use "allmasquerade" to also change the recipient addresse. don't use dnl this feature, if you don't have the full /etc/aliases and the full dnl /etc/passwd on your host. dnl MASQUERADE_AS(`laas.de')dnl FEATURE(`masquerade_envelope')dnl dnl FEATURE(`allmasquerade')dnl dnl dnl Diese Domains werden maskiert dnl GENERICS_DOMAIN(`mail.laas.de')dnl dnl dnl Verwende Procmail fuer die Zustellung von lokalen Mails dnl dnl FEATURE(`local_procmail')dnl dnl dnl Die Definitionsdatei fuer das Mail-Routing der ausgehenden Mails: dnl FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl dnl dnl Diese Dateien werden fuer das Umschreiben der Absender- dnl (genericstable, ausgehende Mails) und Empfaenger-Adressen dnl (virtusertable eingehende Mails) verwendet. dnl dnl FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl FEATURE(`genericstable', `hash -o /etc/mail/genericstable.db')dnl dnl dnl Drei Moeglichkeiten das Relaying zu regeln: dnl dnl FEATURE(`relay_based_on_MX')dnl dnl FEATURE(`relay_entire_domain')dnl FEATURE(`access_db', `hash -T /etc/mail/access.db')dnl dnl dnl in /etc/mail/local-host-names alle Namen des Rechners eintragen (FQDN) dnl FEATURE(`use_cw_file')dnl dnl dnl Aktivierung vom MSP (Message Submit Program) dnl FEATURE(`msp')dnl dnl dnl Liste von Verschluesselungsmechanismen, die mit SMTP_AUTH verwendet werden koennen dnl define(`confAUTH_MECHANISMS', `PLAIN')dnl dnl dnl maximale Anzahl von Bits, die zur Verschluesselung verwendet werden dnl define(`confAUTH_MAX_BITS', `1024')dnl dnl dnl diesen Mechanismen vertraut sendmail dnl TRUST_AUTH_MECH(`CRAM-MD5 DIGEST-MD5 LOGIN PLAIN')dnl dnl dnl Angabe, unter welchen Nutzer sendmail laufen soll dnl dnl define(`confRUN_AS_USER', `smmsp')dnl dnl dnl Nutzer, denen sendmail vetraut dnl dnl define(`confTRUSTED_USER', confRUN_AS_USER)dnl dnl dnl sendmail soll die Netzschnittstellen nicht probieren dnl dnl define(`confDONT_PROBE_INTERFACES', `True')dnl dnl dnl Datenbank, die die Authentifizierungsinformationen enthaelt, falls man mehrere Mailserver zur Authentifizierung benutzt dnl dnl FEATURE(`authinfo',`hash -T /etc/mail/authinfo.db') dnl dnl WICHTIG: die Regel authinfo in der erzeugten sendmail.cf entfernen dnl ansonsten geht SMPT_AUTH auswaerts nicht dnl dnl FEATURE(`no_default_msa')dnl turn off default entry for MSA dnl DAEMON_OPTIONS(`Name=MSA, M=E')dnl dnl dnl Angaben zu den Zertifikaten und den zugehoerigen Schluesseln dnl dnl define(`confCACERT_PATH', `/etc/mail/ca')dnl dnl define(`confCACERT', `/etc/mail/ca/cacert.pem')dnl dnl define(`confSERVER_CERT', `/etc/mail/server.crt')dnl dnl define(`confSERVER_KEY', `/etc/mail/server.key')dnl dnl define(`confCLIENT_CERT', `/etc/mail/server.crt')dnl dnl define(`confCLIENT_KEY', `/etc/mail/server.key')dnl dnl dnl Der AmaVis-Viren-Scanner benoetigt auf jeden Fall die naechsten Zeilen dnl vor den Definitionen der anderen Mailer!!! dnl dnl define(`LOCAL_MAILER_PATH', `/usr/sbin/amavis')dnl dnl define(`LOCAL_MAILER_ARGS', `amavis $f $u /usr/bin/procmail -Y -a $h -d $u')dnl dnl for security reasons on some systems procmail is not suid. dnl so we have to add the "o" flag and remove the "S"-flag dnl see BUGS for details on this issue dnl MODIFY_MAILER_FLAGS(`LOCAL', `-m')dnl dnl MODIFY_MAILER_FLAGS(`LOCAL', `+o')dnl dnl MODIFY_MAILER_FLAGS(`LOCAL', `-S')dnl dnl Ende Amavis Stuff dnl Mlocal, P=/usr/sbin/amavis, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, dnl T=DNS/RFC822/X-Unix, dnl A=amavis -f $u /usr/bin/procmail -Y -a $h -d $u dnl dnl Dies sind die verfuegbaren Mailer. Standardeinstellung ist nur SMTP. dnl In /etc/mail/mailertable werden die anderen Eintraege aktiviert. dnl MAILER(`local')dnl dnl MAILER(`procmail')dnl MAILER(`smtp')dnl dnl MAILER(`uucp')dnl dnl MAILER(`bsmtp')dnl dnl MAILER(`fido')dnl
Der Aufruf
m4 laas.mc > /etc/mail/sendmail.cf
produziert die Konfigurationsdatei, die der Mail Transfer Agent sendmail versteht. Nach einem Neustart sollte sendmail funktionieren.
Amavis Virenscanner
Viren haben in der letzten Zeit traurige Berühmtheit erlangt. Zum einen sind sie viel infektiöser geworden, zum anderen steigt der wirtschaftliche Schaden durch Datenverlust oder Ausfall von Systemen.
Viren verbreiten sich in letzter Zeit vermehrt über das Internet, und speziell über elektronische Nachrichten. Eine Ursache ist sicherlich, dass vermehrt Anhänge mit Dokumenten, Archiven etc. versendet werden. Um die Mails dahingehend zu überprüfen, verwende ich amavis, ein Interface zwischen den MTA's (z.B. sendmail) und diversen frei verfügbaren Virenscannern. Auf der Homepage sowie im Archiv findet man eine sehr gute Installationsanleitung.
Nach der Installation von amavis muß sendmail noch dazu überredet werden, den Virenscanner auch zu benutzen. Dies passiert durch die folgenden Zeilen in der mc-Datei, die dann erneut zur sendmail.cf umgewandelt werden muss.
dnl dnl Amavis define(`LOCAL_MAILER_PATH', `/usr/sbin/amavis')dnl define(`LOCAL_MAILER_ARGS', `amavis $f $u /usr/bin/procmail -Y -a $h -d $u')dnl dnl dnl wenn procmail nicht suid ist, diese Zeilen aktivieren dnl see BUGS for details on this issue dnl MODIFY_MAILER_FLAGS(`LOCAL', `-m')dnl dnl MODIFY_MAILER_FLAGS(`LOCAL', `+o')dnl dnl MODIFY_MAILER_FLAGS(`LOCAL', `-S')dnl dnl Ende Amavis Stuff
Im Beispiel befindet amavis sich in /usr/sbin und ruft danach /usr/bin/procmail auf. Die Pfade sind den eigenen Gegebenheiten abzupassen.
Spamschutz mit spamassassin
Spam, ungewollte Werbemails, sind nervig und verbrauchen Bandbreite, was besonders schmerzt, wenn man keine Flarate hat und für jede zusätzliche Minute bezahlen muss. Leider hilft es in den meisten Fällen nicht, dem Werbenden zu antworten und auf Einstellung der Werbung zu pochen. Der Spammer weiß dadurch, dass die Adresse benutzt wird und wird in der Regel fleißig weiter Mails schicken.
spamassassin ist ein intelligenter Filter mit enormen Einstellungsmöglichkeiten, White- und Blacklisten usw. Die Installation ist schnell erledigt, danach erstellt oder modifiziert man die Datei /etc/procmailrc. Diese Datei ist die globale Konfigurationsdatei für procmail. Die nächsten Zeilen sollten am Anfang stehen dieser Datei stehen.
:0fw:spam.lock
| spamc
:0e
{
EXITCODE=$?
}
Zu beachten ist, dass diese Lösung nur funktioniert, wenn der spamd-Dämon von spamassassin gestartet ist. Am einfachsten kann das in einem Startskript automatisch erfolgen.
Die Beispielkonfiguration findet man unter /usr/share/spammassassin, die man nach /etc/mail/spamassassin kopiert, wo spamassassin sie sucht. Dort finden sich auch die gesamten Regeln, die beliebig erweitert werden können. Spamassassin verliert keine Mails, sondern markiert sie einmal im Kopf jeder Mail sowie im Titel. Anhand dieser Merkmale kann man die Mails dann gesondert sortieren.
SMTP_AUTH
Einige Mailserver wie z.B. epost.de kann man als Relay benutzen, wenn man sich vorher authentifiziert. Dazu legt man zuerst die Datei /etc/mail/default-auth-info an, in der die Nutzerdaten wie folgt eingetragen werden.
Login Login Passwort Mailserver
Der Login muss wirklich zweimal angegeben werden. Im Falle von epost.de heißt der Mailserver mail.epost.de. In die laas.mc werden die folgenden Zeilen eingefügt.
dnl dnl Diese Mechanismen vertraut sendmail dnl TRUST_AUTH_MECH(`CRAM-MD5 DIGEST-MD5 LOGIN PLAIN')dnl dnl dnl Diese Mechanismen kann sendmail benutzen dnl define(`confAUTH_MECHANISMS', `PLAIN LOGIN CRAM-MD5 DIGEST-MD5')dnl dnl dnl Schluessellaenge dnl define(`confAUTH_MAX_BITS', `1024')dnl dnl dnl In dieser Datei stehen die Authentifizierungsinformationen dnl define(`confDEF_AUTH_INFO', `/etc/mail/default-auth-info')dnl dnl dnl Hier muss der Mailserver stehen, an dem man sich authentifizieren moechte dnl Eventuell ist diese Zeile schon vorhanden und muss abgeaendert werden dnl define(`SMART_HOST', `mail.epost.de')dnl
Leider reicht dies noch nicht. Sendmail hat in der Version 8.12.4. einen Fehler, der es normalerweise nicht erlaubt, sich erfolgreich an einem Mailserver zu authentifizieren. Nach einer Übersetzung der mc-Datei mit dem Makroprozessor m4 muss als Workaround noch direkt die sendmail.cf bearbeitet werden. Dazu sucht man sich die Regel authinfo und entfernt diese. Die Zeilen, die entfernt werden müssen, sollten in etwa so aussehen.
Sauthinfo
R$* $: $1 $| $>D <$&{server_name}> <>
R$* $| $* $: $1 $| $>A <$&{server_addr}> <>
R$* $| $* $: $1 $| <$(access AuthInfo: $: ? $)> <>
R$* $| $* $@ no no authinfo available
R$* $| <$*> <> $# $2
Danach hat die Authentifizierung bei mir anstandslos funktioniert.