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.
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.
Als MTA kommt Sendmail zum Einsatz. Ist Sendmail noch nicht installiert kann dies wie folgt nachgeholt werden:
I) Installation Sendmail
deedee:~# apt-get install sendmailDie 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-devWer Sendmail doch selbst vom Tar Ball bauen will findet ein entsprechendes HOWTO dazu hier (Unterpunkt A).
AMaViS setzt folgende Debain Pakete voraus, die mit "apt-get install paketname" zu installieren sind. Etwaige weitere Abhängigkeiten werden vom Paketmanager automatisch erkannt.
- gcc
- libc6-dev
- make
- file
- dpkg-dev
- libmime-perl
- libunix-syslog-perl
- libconvert-tnef-perl
- libconvert-uulib-perl
- libcompress-zlib-perl
- libarchive-tar-perl
- libarchive-zip-perl
- lha
- unarj
- unrar
- zoo
- bzip2
- unzip
- desweiteren benötigen wir arc. Leider ist arc in der Debian woody nicht als Paket enthalten, so dass das Binary von einem anderen Linux Rechner kopiert und im Verzeichnis /usr/sbin abgelegt werden muss.
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 ./installAntiVir 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.
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.3Im Verzeichnis "/usr/src/sendmail-8.12.3/sendmail-8.12.3" gehen wir nacheinander in die Unterverzeichnisse
- libmilter
- libsm
- libsmutil
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 /libMit "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 amavisDen 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=amavisWichig 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: yesJetzt noch ein schnelles
make; make installund 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/amavisdEin "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/amavisdIV) 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
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')dnlNun 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.cfund 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 ;;
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 < ./eicarAMaViS sollte den Virus erkennen und eine Nachricht an den postmaster, den Absender und Empfänger schicken.
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/')dnlDanach muss die sendmail.cf wie oben beschrieben neu gebaut und Sendmail neu gestartet werden.
I) Installation
apt-get install cyrus-common cyrus-imapd cyrus-adminDie Datei /etc/imapd.conf edieren, die Zeile "admins" auskommentieren und dort den/die User zur Cyrus Administration eintragen, z.B.:
admins: cyrus schoppaWer 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.deedeeUm 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/')dnlMAILER(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/accessHilfreiche 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 restartMails 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!