Sendmail in seiner aktuellen
Version 8.11.x ist ein sehr umfangreicher MTA der nahezu all seine
Schwächen aus der 8.9er Zeiten abgelegt hat. Leider liefern ihn viele
Distributionen ohne die möglichen Features aus oder bauen ihn so um, dass er
nicht mehr der allgemeinen Doskumentation im Web entspricht.
Obwohl ich Debian GNU/Linux
verwende, installiere ich sendmail auf Mailservern von Hand. Damit bekomme
ich folgende Features:
- TLS - SSL-Verschlüsselung
- Authentication - angemeldete Benutzer dürfen Relayen
- Virus Scanner
- Einbindung der diversen Relay Block Lists
- Universelles Filter auf Headers und Content
Folgend ein kurzes Kochbuch, mit dem ich sendmail installiere:
Pakete
Vorab installiere ich einige Pakete, die für den späteren Compilierlauf
nötig sind. Auf nicht Debian Systemen müssen diese meist von Hand
installiert werden - das dauert oftmals länger als die Installation einer
Debian ;-)
apt-get install libsasl-bin libsasl-modules libsasl-dev libsasl7 \
sfio1999 sfio-dev libldap2 libldap2-dev libssl0.9.6 libssl09-dev \
libdb2 libdb2-dev libdb2-util \
lha unarj rar unrar zoo
ACHTUNG: Diese Pakete sind erst auf Debian Woody vorhanden - ältere
Installationen müssen updated werden oder cyrus-sasl, sfio-1999
und allenfalls openssl von Hand installiert werden.
vi /usr/lib/sasl/Sendmail.conf
cd /usr/include
ln -s sfio/sfio.h
ln -s sfio/sfio_t.h
ln -s sfio/ast_common.h .
Leider fehlt Debian der arc - ich habe kurzerhand ein eigenes
Paket gebaut.
dpkg -i arc_5.21-1_i386.deb
Perl
Für die libmilter und AMaViS brauchen wir Perl mit speziellen Modulen. Ich
möchte klar von Debian's Perl unabhängig sein und installieren mein
eigenes:
cd /usr/src
wget http://www.cpan.org/src/stable.tar.gz
tar xvfz stable.tar.gz
cd perl-5.6.1
sh Configure -ds -e -Dprefix=/opt -Dusethreads
make
make install
(cd /opt/bin; mv perl perl-thread)
(cd /opt/bin; mv perl5.6.1 perl5.6.1-thread)
cd /usr/src
rm -Rf perl-5.6.1
tar xvfz stable.tar.gz
cd perl-5.6.1
./configure.gnu --prefix=/opt
make
make install
make suidperl
cp suidperl /opt/bin
chmod u+s /opt/bin/suidperl
cd /usr/local/bin
ln -s /opt/bin/perl .
ln -s /opt/bin/suidperl .
ln -s /opt/bin/perl-thread .
cd /opt/bin
vi cpan
Uninstall sendmail
Der allenfalls bestehende sendmail muss deinstalliert werden. Um Debian zu
befriedigen, muss ein Dummy Paket installiert werden:
cd /usr/src
vi mta.ctl
equivs-build mta.ctl
dpkg -P --force-depends sendmail
rm /etc/mail/*
dpkg -i /usr/src/mta-dummy_1.0_all.deb
sendmail
Nun kommt der eigentliche sendmail:
cd /usr/src
wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.11.6.tar.gz
tar xvfz sendmail.8.11.6.tar.gz
ln -s sendmail-8.11.6/ sendmail
cd sendmail/devtools/Site
vi site.config.m4
cd ../..
./Build
cd libmilter
./Build
cd ../..
Falls die Compilation abbricht, so fehlen meist librarys oder deren -dev
Paket. Dieses muss dann nachinstalliert und mit make ein neuer
Versuch im sendmail-Verzeichnis gestartet werden.
Nun können wir den sendmail installieren:
cd /usr/src/sendmail
make install
mkdir /var/spool/mqueue
mkdir /var/spool/mqueue/df
mkdir /var/spool/mqueue/qf
mkdir /var/spool/mqueue/xf
mkdir -p /usr/adm/sm.bin
cd /usr/adm/sm.bin
ln -s /usr/bin/procmail .
ln -s /usr/bin/vacation .
ln -s /usr/bin/wmf .
cd
vi /etc/init.d/sendmail
update-rc.d sendmail defaults
cd /etc
rm aliases
ln -sf mail/aliases .
ln -s /usr/sbin/sendmail /usr/lib/sendmail
ln -s /usr/sbin/sendmail /usr/bin/sendmail
Auf meinem Fido Gateway gebe ich sendmail einen
zusätzlichen Mailer:
cp /usr/share/sendmail.cf/mailer/ftn.m4 /usr/src/sendmail/cf/mailer
Sendmail::Milter
Sendmail::Milter
ist ein Perlmodul das einem in jedem Schritt innerhalb des sendmails
erlaubt, eine Perlroutine einzuklinken. Ich verwende ihn, um universelles
Filtern über die Headers oder den Body einer Mail zu machen.
cd /usr/src
tar xvfz Sendmail-Milter-0.17.tar.gz
cd Sendmail-Milter-0.17
/opt/bin/perl-thread Makefile.PL ../sendmail ../sendmail/obj.*
make
Leider weiss Sendmail::Milter nichts von der libsfio, mit der wir
sendmail gelinkt haben. Daher werfen wir das letzte Kommando aus dem
Makelauf nochmals von Hand an, und fügen -lsfio hinzu:
LD_RUN_PATH="/usr/src/Sendmail-Milter-0.17/../sendmail/obj.*/libmilter\
:/usr/src/Sendmail-Milter-0.17/../sendmail/obj.*/libsmutil:/lib" \
cc -shared -L/usr/local/lib Milter.o intpools.o callbacks.o -o \
blib/arch/auto/Sendmail/Milter/Milter.so \
-L/usr/src/Sendmail-Milter-0.17/../sendmail/obj.*/libmilter \
-L/usr/src/Sendmail-Milter-0.17/../sendmail/obj.*/libsmutil \
-lmilter -lsmutil -lpthread -lnsl -lsfio
^^^^^^
make test
make install
uvscan
uvscan ist ein Bestandteil des kommerziellen Virenscanners von NAI - besser bekannt unter dem alten Namen
McAfee. Wir installieren ab CD-ROM:
mount /cdrom
mkdir mcafee
cd mcafee
tar xvfz /cdrom/Netshld/Unix/Linux/vlnx412l.tar.Z
./install-uvscan
Which directory do you want to install into? [/usr/local/uvscan] /opt/uvscan
/opt/uvscan doesn't exist. Create it? [y]/n
Do you want a link to uvscan placed in /usr/local/bin [y]/n n
Do you want a link to liblnxfv.so placed in /usr/local/lib [y]/n n
Do you want a link to uvscan.1 placed in /usr/local/man/man1 [y]/n n
Installation completed.
Do you want to perform a scan of all filesystems y/[n] n
uvscan benötigt eine shared library, die wir nicht automatisch im ldpath
haben und verbeisst sich des öftern an grossen Zips. Ich habe deshalb einen
Wrapper um uvscan geschrieben:
vi /opt/bin/uvscan
chmod a+x uvscan
Der Scanner kann nun gestestet werden:
uvscan EICAR.COM
uvscan 42.zip
AMaViS
AmAViS ist ein Wrapper zwischen MTA und
Virenscanner. Er packt decodiert UUCODE und Mime, packt diverse Archive aus
und startet den Scanner über die Files. Die Doku auf der Webseite ist leider
ziemlich alt - das Programm sieht grundlegend anders aus als in der Doku
beschrieben...
cpan
install Bundle::libnet
install MD5
install Unix::Syslog
install Convert::UUlib
install Convert::TNEF
install Compress::Zlib
install Archive::Tar
install N/NE/NEDKONZ/Archive-Zip-0.11.tar.gz
install G/GB/GBARR/MailTools-1.15.tar.gz
cd /usr/src
wget http://www.amavis.org/dist/perl/amavis-perl-11.tar.gz
tar xvfz amavis-perl-11.tar.gz
cd amavis-perl-11
vi amavis/amavis-milter.c <- Change #define AMAVIS_PERL_PATH to
"/opt/amavis/sbin/amavis"
LDFLAGS="-L /usr/src/sendmail/obj.*/libsmutil \
-L/usr/src/sendmail/obj.*/libmilter" LIBS=-lsfio
./configure \
--prefix=/opt/amavis --with-perl=/opt/bin/perl \
--with-sendmail-source=/usr/src/sendmail --enable-milter --enable-syslog \
--with-maxlevel=2 --enable-credits \
--with-runtime-dir=/opt/amavis/var/amavis \
--with-logdir=/opt/amavis/var/log \
--with-virusdir=/opt/amavis/var/virusmails
make
make install
configure muss folgenden Output zeigen:
Install amavis as: /opt/amavis/sbin/amavis
Configured for use with: sendmail/libmilter
Use virus scanner(s): McAfee Virusscan
Scanner runs as: root
Logging to syslog: yes
Quarantine directory: /opt/amavis/var/virusmails
Max. recursion depth: 2
Add X-Virus-Scanned header: yes
Display AMaViS credits: yes
Warn sender: yes
Reports sent to: virusalert
Reports sent by: postmaster
Ich hatte lange Probleme mit dem check der libmilter - muss muss für den
configure-Script erreichbar sein.
Sigfile und Engine-Update
Die auf der AMaViS Wesite angeboteten Updatescripts funktionieren
entweder nur teilweise bzw. gar nicht :-( Mein eigenes checkt über die
"richtigen" Weg, ob die Searchengine und das Signaturfile verändert wurde
und schickt den Output an den virusalert:
cd /opt/amavis
mkdir bin tmp
cd bin
vi update.pl
./update.pl
crontab -e
#
# Update NAI Scanner
10 7 * * * /opt/amavis/bin/update.pl 2>&1 | mail -s "NAI Update" virusalert
myfilter.pl
myfilter.pl ist ein eigenes Script das den Mailheader und Body nach
beliebigen Regular expressions scannt und dann entscheidet, ob der sendmail
die Mail annehmen, temporär oder fix rejecten oder einfach fortwerfen soll.
Ich verwende es, um einem Spammer das Leben schwer zu machen:
cd /etc/mail
vi myfilter.pl
vi myfilter.conf
mkdir /var/lib/myfilter
mkdir /var/lib/myfilter/DISCARD
mkdir /var/lib/myfilter/REJECT
mkdir /var/lib/myfilter/TEMPFAIL
Konfiguration
Nun geht's an's Eingemachte - die Konfiguration des sendmails. Ich zeige
hier eine generische Konfiguration, die sich problemlos erweitern lassen
sollte.
/etc/mail/Makefile
/etc/mail/README -> /usr/src/sendmail/cf/README
/etc/mail/access
/etc/mail/aliases
/etc/mail/domaintable
/etc/mail/genericstable
/etc/mail/local-host-names
/etc/mail/mailertable
/etc/mail/sendmail.mc
/etc/mail/trusted-users
/etc/mail/virtusertable
Ein make in /etc/mail erstellt alle nötigen Files neu. ACHTUNG:
ein allfällig laufender sendmail muss mit killall -HUP sendmail neu
gestartet werden, wenn an local-host-names oder sendmail.mc etwas geändert
wurde.
Relaytest
MAPS bietet einen hübschen Service, mit dem man die Relayfestigkeit
seines Servers testen kann. Dazu muss vom Mailserver her folgender Befehl
eingegeben werden:
telnet relay-test.mail-abuse.org
|