Sendmail mit Milter, AMaViS, Anti Spam, Cyrus IMAP auf Debian woody Basis

Stand: 9. Juni 2002 (marcus dot schopen at uni dash bielefeld dot de)


Debian woody bietet den EMail-Virenscanner AMAViS als Paket nur in Verbindung mit postfix als MTA an. Dieses "HOWTO" dient als Anleitung zur Integration von AMaViS in eine bestehende Debian Sendmail Installation, ohne Sendmail aus den Sourcen komplett neu bauen zu müssen. Die  Integration von Cyrus IMAP als local Mailer ist optional.

 

A) Vorüberlegung

Bei einer Neuinstallation der Debian woody von den 2.4er Kernel Boot-Floppys werden in "/etc/apt/sources.list" fälschlicherweise die Quellen der potato (derzeit stable) übernommen. Solange woody noch nicht stable ist, sind im file "/etc/apt/sources.list" alle "stable"-Einträge durch "woody" zu ersetzen. Danach ist "apt-get update" aufzurufen, um die passenden woody Paket Informationen herunterzuladen.

 

B) Sendmail Installation

Als MTA kommt Sendmail zum Einsatz. Ist Sendmail noch nicht installiert kann dies wie folgt nachgeholt werden:

I) Installation Sendmail

deedee:~# apt-get install sendmail

Die Aufforderung Sendmail zu konfigurieren, ist positiv zu beantworten. Sendmail kann nun an die eigenen Bedürfnisse angepasst werden. Wer bei einigen Punkten unsicher ist, kann die angebotenen default Einstellungen übernehmen.
Bricht die Konfiguration nach der Frage "Start sendmail now? (y/n)" mit einem Fehler ab, so ist "apt-get install sendmail" einfach ein zweites Mal aufzurufen.

II) Installation Sendmail Milter API

Zur späteren Integration von AMaViS in Sendmail benötigen wir Sendmail mit Milter Unterstützung:

deedee:~# apt-get install libmilter-dev

Wer Sendmail doch selbst vom Tar Ball bauen will findet ein entsprechendes HOWTO dazu hier (Unterpunkt A).

 

B) Tools

AMaViS setzt folgende Debain Pakete voraus, die mit "apt-get install paketname" zu installieren sind. Etwaige weitere Abhängigkeiten werden vom Paketmanager automatisch erkannt.

C) Virenscanner

AMaViS unterstützt eine Vielzahl von Scannern, die sogar parallel installiert werden können. Hier wird exemplarisch AntiVir von H+BEDV AntiVir für Server für Linux verwendet. Der Scanner ist für den privaten, nichtkommerziellen Gebrauch kostenlos. Sie können sich registrieren lassen und erhalten dann nach wenigen Minuten eine Lizenzdatei (hbedv.key) per eMail.

Von http://www.antivir.de unter Download "AntiVir für Server für Linux" (avlxsrv.tgz) herunterladen, auspacken und installieren:

tar -xvzf avlxsrv.tgz

cd antivir-2.0.2-server

./install
AntiVir fragt nun ein paar Dinge:
   Would you like to create a link in /usr/bin ? [y] y 
   Would you like to install the automatic internet updater? [n] n (wie man will, kann auch per cron gesteuert werden) 
   Would you like to configure AntiVir now? [y] y 
   Would you like email notification of viruses? [n] n (das erledigt AMaViS für uns) 
   Would you like AntiVir to log to a custom file? [n] n 
   Does this machine use an HTTP proxy server? [n] n (wahrscheinlich nicht) 
   Which syslog FACILITY should AntiVir use? [user] 
   Which syslog PRIORITY should AntiVir use? [notice]    

Die Lizendatei "hbedv.key" in das Verzeichnis "/usr/lib/AntiVir" kopieren, da der Scanner sonst nur im Demo Modus arbeitet.

Wer den Update Dämon nicht mitinstallieren will, kann neue Virensignaturen per Hand mit "antivir --update" holen oder entsprechende cronjobs einrichten.

 

D) AMaViS (Dämon Variante)

I) Sendmail-Source

AMaViS muss gegen die Sendmail Sourcen gebaut werden. Da Sendmail als Debian Paket installiert wurde, werden wir die Sendmail Sourcen für die Installation von AMaViS herunterladen und AMaViS dagegegen bauen. Danach können die Sendmail Sourcen wieder gelöscht werden.

Sendmail Sourcen holen und auspacken:

deedee:~# cd /usr/src/
deedee:~# apt-get source sendmail
deedee:~# cd sendmail-8.12.3
deedee:~# tar -xvzf sendmail.8.12.3.tar.gz
deedee:~# cd sendmail-8.12.3

Im Verzeichnis "/usr/src/sendmail-8.12.3/sendmail-8.12.3" gehen wir nacheinander in die Unterverzeichnisse 

und geben dort "make" ein.

Die kompilierten Files libmilter.a, libsm.a und libsmutil.a unter obj.*/lib* kopieren wir nach /lib, so dass der Linker sie beim späteren Bau von AMaViS finden kann, also so:

deedee:~# cp obj.*/lib*/*.a /lib

Mit "ldconfig -v" vielleicht noch prüfen, ob /lib als Pfad vom Linker beachtet wird.

Die Sendmail Sourcen unter /usr/src können jetzt mit einem einfachen

deedee:~# rm -rf /usr/src/sendmail*

wieder gelöscht werden. Wer auf einem anderen Server einen Sendmail selber Version aus den Sourcen gebaut hat, kann die Dateien libmilter.a, libsm.a und libsmutil.a auch einfach von dort kopieren.

II) AMaViS Konfiguration

Zunächst richten wir uns einen User ein, unter dem der AMaViS Dämon später laufen soll. Aus Sicherheitsgründen sollte AMaViS nicht mit root Rechten laufen (siehe auch http://www.sendmail.com/partner/resources/development/milter_api/smfi_setconn.html ; Danke, Rainer):

adduser --no-create-home amavis

Den aktuellen AMaViS Source Tarball (derzeit amavisd-snapshot-20020300.tar.gz) von http://www.amavis.org holen, auspacken und konfigurieren:

./configure --enable-milter --with-warnrecip=yes --with-amavisuser=amavis

Wichig ist, dass AMaViS beim configure die Sendmail Milter API findet:

[snip]

checking for libmilter/mfapi.h... yes
checking for smfi_main in -lmilter... yes

[...]
** Configuration summary for amavisd snapshot-20020300 2002-03-00:

Install amavis daemon as: /usr/sbin/amavisd
Install amavis client as: /usr/sbin/amavis
Daemon config file: /etc/amavisd.conf
Path to socket: /var/amavis/amavisd.sock
Configured for use with: libmilter
Configuration type: sendmail/milter
Use virus scanner(s): H+BEDV AntiVir/X
Scanner runs as: root
Logging to syslog: yes
Run-time directory: /var/amavis
Warn sender: yes
Warn recipient(s): yes
Notify admin: yes

Jetzt noch ein schnelles

make; make install

und AMaViS ist fertig.

Anmerkung:

AMaViS ist manchmal bei der Unterscheidung zwischen lokalen und externen Mailadressen etwas verwirrt. Dies führt dazu, dass der Empfänger einer Mail keine Nachricht über einen Virenbefund erhält. In diesem Fall ist in "/etc/amavisd.conf" der Eintrag "$warn_offsite" auf "yes" zu setzen.

Desweiteren kann über den alias "viruasalert" in der /etc/aliases die Virenbenachrichtigung an weitere Administratoren veranlasst werden (Aufruf von newaliases nicht vergessen).

III) AMaViS starten

Als User "amavis" testweise AMaViS starten:
deedee:~# su - amavis
amavis@deedee:/$ /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock &
amavis@deedee:/$ /usr/sbin/amavisd

Ein "ps aux | grep amavis" sollte folgende Prozesse anzeigen:

amavis 5934 0.0 0.5 3448 448 pts/0 S 21:22 0:00 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock
amavis 5935 0.0 0.5 3448 448 pts/0 S 21:22 0:00 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock
amavis 5936 0.0 0.5 3448 448 pts/0 S 21:22 0:00 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock
amavis 5941 0.2 9.2 8404 7212 ? S 21:22 0:00 /usr/bin/perl -T /usr/sbin/amavisd

IV) init.d Startskript

Startsskript ausführbar als /etc/init.d/amavisd ablegen:

#! /bin/bash
#
# amavisd       Start the AMaViS daemon
# Marcus Schopen (schopen at medienlabor dot de)

PATH=/bin:/usr/bin:/sbin:/usr/sbin

test -f $DAEMON || exit 0

case "$1" in
  start)

    echo -n 'Starting AMaViS: milter'
    rm -fr /var/amavis/amavis*.sock
    su amavis -c "nohup /usr/sbin/amavis-milter -p \
          local:/var/amavis/amavis-milter.sock >/dev/null 2>&1&"
    sleep 3
    echo '.'
    echo -n 'Starting AMaViS daemon: amavisd'
    start-stop-daemon --start --exec /usr/sbin/amavisd --chuid amavis
    ;;

  stop)
    echo -n 'Stopping AMaViS: milter'
    killall -q amavis-milter
    echo '.'
    sleep 3
    echo -n 'Stopping AMaViS daemon: amavisd '
    killall -q amavisd
    ;;

  *)
    echo "Usage: /etc/init.d/$NAME {start|stop}"
    exit 1
    ;;
esac

if [ $? == 0 ]; then
        echo .
        exit 0
else
        echo failed
        exit 1
fi

 

E) Sendmail konfigurieren

Nun müssen wir Sendmail noch mitteilen, dass alle Mails mit AMaViS gescannt werden sollen:

Hierzu mit einem Editor (z.B. vi) die Datei /etc/mail/sendmail.mc öffnen und folgende Zeilen in die Sektion "General defines" hinzufügen:

# AMaViS Milter
define(`_FFR_MILTER', `1')dnl
INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m')dnl

Nun die sendmail.cf mit m4 neu generieren (vielleicht vorher zur Sicherheit eine Kopie machen):

deedee:/etc/mail# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

und Sendmail neu starten

deedee:~# /etc/init.d/sendmail restart

Sendmail Startskript:

Die "start" und "stop" Optionen des sendmail Startskripts "/usr/share/sendmail/sendmail" in der Sektion "Handle being called via /etc/init.d/sendmail or directly" (ca. ab Zeile 803) so anpassen:

        #-----------------------------------------------------------------------
        # Debian required/optional targets:
        #-----------------------------------------------------------------------
        start)
                # Starting AMaViS
                if [ -f /etc/init.d/amavisd ]; then
                          /etc/init.d/amavisd start
                fi

                echo -n 'Starting Mail Transport Agent: Sendmail';
                start_sendmail;
                echo '.'
                ;;

        stop)
                echo -n 'Stopping Mail Transport Agent: Sendmail';
                stop_sendmail;
                echo '.'

                # Stopping AMaViS
                if [ -f /etc/init.d/amavisd ]; then
                        /etc/init.d/amavisd stop
                fi
                ;;

 

F) Test it

Wir laden uns von http://www.eicar.org das EICAR Standard anti-Virus Test file herunter und mailen es als normaler User an einen andern User, z.B.:

schoppa@deedee:~$ /usr/sbin/sendmail dexter@localhost < ./eicar

AMaViS sollte den Virus erkennen und eine Nachricht an den postmaster, den Absender und Empfänger schicken.

 

G) ANTI Spam Support für Sendmail

Seitdem MAPS kostenpflichtig geworden ist, stehen als kostenlose Spamblocker u.a. ORDB und DSBL zur Verfügung. Folgende Zeilen sind in der sendmail.mc hinzuzufügen. 

# Blackholes
FEATURE(dnsbl, `relays.ordb.org', `Mail from $&{client_addr} rejected by deedee Mailserver; see http://ordb.org/')dnl
FEATURE(dnsbl, `list.dsbl.org', `Mail from $&{client_addr} rejected by deedee Mailserver; see http://dsbl.org/')dnl

Danach muss die sendmail.cf wie oben beschrieben neu gebaut und Sendmail neu gestartet werden.

 

H) Cyrus IMAP

I) Installation

apt-get install cyrus-common cyrus-imapd cyrus-admin

Die Datei /etc/imapd.conf edieren, die Zeile "admins" auskommentieren und dort den/die User zur Cyrus Administration eintragen, z.B.:

admins: cyrus schoppa

Wer eine einen POP3 Dämon braucht muss noch das Paket "cyrus-pop3d" installieren..

II) Mailuser anlegen

Wir legen einen Cyrus Mailuser "schoppa" und "deedee" an:

deedee:~# cyradm -u schoppa localhost
localhost password: ****
localhost> createmailbox user.schoppa
localhost> createmailbox user.deedee

Um die Mail mit einem IMAP Client (Netscape etc.) abholen zu können, müssen mit "adduser" noch identische Systemuser angelegt werden.

III) Sendmail

Sendmail muss nun mitgeteilt werden, dass der Deliver Mechanismus nun von Cyrus übernommen werden soll. Wir stellen uns eine neue sendmail.mc zusammen und generieren daraus wieder eine sendmail.cf

sendmail.mc für Cyrus IMAP:

# This file is used to configure sendmail for use with Debian systems and Cyrus IMAP
# Marcus 03.06.2002

divert(0)
define(`_USE_ETC_MAIL_')dnl
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`@(#)sendmail.mc, 8.7 (Linux) 3/5/96')
OSTYPE(`debian')dnl
DOMAIN(`debian-mta')dnl

# define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')

define(`confLOCAL_MAILER', `cyrus')

# FEATURE(`nocanonify')

FEATURE(`masquerade_envelope')dnl
FEATURE(`always_add_domain')

# FEATURE(redirect)dnl
# RELAY_DOMAIN(`my-domain.com')dnl
# RELAY_DOMAIN(`my-otherdomain.com')dnl

Cwdeedee.Domain.TLD

FEATURE(`use_cw_file')dnl
FEATURE(`use_ct_file')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable')dnl
FEATURE(`mailertable')dnl
FEATURE(`genericstable', `hash -o /etc/mail/genericstable')dnl
#FEATURE(`access_db')dnl
define(`smrsh')dnl
define(`confMAILER_NAME', `root')dnl

define(`CYRUS_MAILER_FLAGS', `A5@/:|')dnl
define(`CYRUS_MAILER_PATH', `/usr/sbin/cyrdeliver')dnl
define(`CYRUS_MAILER_ARGS', `cyrdeliver -e -q -m $h -- $u ')dnl
define(`CYRUS_MAILER_USER', `cyrus:mail')dnl
define(`CYRUS_BB_MAILER_FLAGS', `')dnl
define(`CYRUS_BB_MAILER_ARGS', `cyrdeliver -e -q -m $u ')dnl

# AMaViS Milter
define(`_FFR_MILTER', `1')dnl
INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m')dnl

# Blackholes
FEATURE(dnsbl, `relays.ordb.org', `Mail from $&{client_addr} rejected by deedee Mailserver; see http://ordb.org/')dnl
FEATURE(dnsbl, `list.dsbl.org', `Mail from $&{client_addr} rejected by deedee Mailserver; see http://dsbl.org/')dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(cyrus)dnl

# Cwmy-domain.com my-otherdomain.com
MASQUERADE_AS(`deedee.Domain.TLD')dnl

## Custom configurations below (will be preserved)

LOCAL_RULE_0
# R$=I $: $#cyrus $: $1
# R$=I < @ $=w . > $: $#cyrus $: $1
# R$=I < @ $=R . > $: $#cyrus $: $1
Rbb + $+ < @ $=w . > $#cyrusbb $: $1

# LOCAL_CONFIG
# FI /etc/mail/imap_users %[^\#]

# end of mc file
######################################################################

Anmerkungen:
In den Zeilen "Cw" und "MASQUERADE_AS" ist "deedee.Domain.TLD" entsprechend zu ersetzen.

Wer den Zugriff auf den SMTP auf bestimmte Domains oder IPs beschränken möchte, kommentiert die Zeile "FEATURE(`access_db')dnl" aus und generiert die access.db neu:

makemap hash /etc/mail/access.db < /etc/mail/access

Hilfreiche Hinweise bei etwaige Startschwierigkeiten von Sendmail findet man auch in "/var/log/mail.log". Infos zum kontrollierten SMTP Relaying und den einzelnen Features gibt es direkt auf der Sendmail Homepage unter http://www.sendmail.org/tips/relaying.html

Zum Schluß generieren wir uns aus der obigen Cyrus sendmail.mc eine neue sendmail.cf und starten Sendmail neu:

deedee:~# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
deedee:~# /etc/init.d/sendmail restart

Mails an lokale User sollten nun im Verzeichnis "/var/spool/cyrus/mail/user/username" abgelegt werden.


Änderungen und freundliche Kritik an: marcus dot schopen at uni dash bielefeld dot de

Have fun!