Aufbau eines Mail-Servers auf Sendmail-Basis mit Spam- und Viren-Filter unter DebianDieses Dokument befasst sich mit mit dem Aufbau eines Mail-Servers mit Spam- und Viren-Filterung. Die verwendete Linux-Distribution ist GNU/Debian, als Mail-Transport-Agent wird Sendmail verwendet. Große Teile dieses Dokumentes dürften auf anderen Systemen analog funktionieren. Dieses Dokument ist urheberrechtlich geschützt. Copyright (c) 2004 - 2012 Dirk Prösdorf VorbemerkungDie für den Aufbau des Mailservers verwendete Linux-Distribution "GNU/Debian" zeichnet sich sicherlich durch ihre Stabilität aus, hat aber auch den Nachteil, dass einige Software-Pakete doch etwas überaltert sind. Gerade bei der Spam- und Virenerkennung helfen einem aber zwei Jahre "ausgereifte" Versionen nicht weiter. Deshalb sollte für diese Aufgaben Backports verwendet werden. System vorbereitenBeim Scannen der Mails werden Mailanhänge temporär unter /tmp gespeichert und infizierte Mails unter /var/spool gespeichert. Damit bei einem größerem Virenaufkommen nicht das gesamte System wegen einer vollen Festplattenpartition zum Stillstand kommt, sollte für beide Bereiche eine eigene Partion angelegt werden. Hierbei dürften jeweils 1 GB pro Partion bei heutigen Festplattengrößen durchaus sinnvoll sein, wobei bei Verwendung von LVM die Größe relativ flexibel auch später noch den eigenen Gegebenheiten angepasst werden kann. Sendmail installierenBei der Sendmail-Installation mittels apt-get install sendmail müssen einige Fragen zur lokalen Konfiguration beantwortet werden. Da die lokalen Gegebenheiten durchaus unterschiedlich sein können, kann hier nicht weiter auf diese Fragen eingegangen werden. (Evtl. erfolgt dies in einer späteren Version dieses Dokumentes.) Spam filternSpamAssassin lässt sich über unterschiedliche Wege in einen Mailserver einbinden. Für kleinere Umgebungen reicht es durchaus, SpamAssassin direkt bei der Mailzustellung über Procmail aufzurufen. Hier soll aber der Weg über die Mail-Filter-Api "Milter" von Sendmail und die Dämon-Version von SpamAssassin ("spamd") beschrieben werden. SpamAssassin installierenZuerst muss mittels apt-get install spamassassin spamc die aktuellen Backports von SpamAssassin und des Clients von "spamd" installiert werden. Alternativ kann auch von http://www.spamassassin.org/ der Source verwendet werden. Aus Sicherheitsgründen sollte die Überprüfung der Mails nicht mit Root-Rechten statt finden. Deshalb sollte für Spamassassin ein eigener Account (ohne Loginmöglichkeit) angelegt werden. Als nächstes müssen einige Einstellungen in der vom Init-Script eingelesenen Datei # Change to one to enable spamd Die Option Weitergehende Informationen über die Startoptionen ist man 8 spamd zu entnehmen. Da die Charakteristik von Spam einer ständigen Anpassung an die Spamerfilter unterliegt und somit die Spamfilter auch immer wieder angepasst werden müssen, sollte "SpamAssassin" regelmäßig auf die aktuelle Version aktualisiert werden. SpamAssassin Milter Plugin installierenMittels apt-get install spamass-milter wird der aktuelle Backports von spamass-milter installiert. Alternativ kann auch der Source von http://savannah.nongnu.org/projects/spamass-milt/ verwendet werden. OPTIONS="-b postmaster@localhost -i 10.0.0.0/24 -- -U /var/run/spamd.sock" Wenn eine als Spam erkannte Mail nicht an den Empfänger zugestellt werden soll, sondern an einen Admin weiter geleitet werden soll, dann muss OPTIONS um den Parameter Weitere Einstellungsmöglichkeiten wären z.B. die Option Razor und/oder Pyzor integrierenSpamAssassin bietet die Möglichkeit, mittels weiterer einzubindender Programme, Mails (bzw. der Signatur des Mailinhalts) gegen zentrale Datenbanken zu prüfen. Mittels apt-get install razor wird das Programm Razor installiert. Als User 'spamd' muss noch einmal razor-admin -create aufgerufen werden, damit die Konfigurationsdateien erstellt werden. Nun wird Razor automatisch von SpamAssassin verwendet, kann aber auch dort deaktiviert werden. Analog verläuft die Einbindung von Pyzor in SpamAssassin. Der Aufruf von apt-get install pyzor installiert Pyzor. Als User 'spamd' muss dann noch pyzor discover aufgerufen werden. SpamAssassin verwendet auch Pyzor sofort. Bayes-Filter aktivierenBeim einem Bayes'schen-Filter handelt es sich um einen lernenden Filter, der aufgrund der Einteilung der bisher empfangenen Mails in "Spam" und "Ham" statistisch die Wahrscheinlichkeit berechnet, ob es sich bei neuer Mail um erwünschte oder unerwünschte Mail handelt. bayes_path /home/spamd/bayes Hierdurch werden nun die beiden Datenbanken "bayes_seen" und "bayes_toks" im Verzeichnis /home/spamd/ abgelegt. Dieses Verzeichnis ist insoweit hierfür sinnvoll, als dass SpamAssassin (wie oben angelegt) ja als User "spamd" ausgeführt wird und somit ein Verzeichnis benötigt, wo dieser User Schreibrechte hat. Test und Integration des Spam-FiltersNun sollte die SpamAssassin-Installation mittels spamc -U /var/run/spamd.sock < /usr/share/doc/spamassassin/examples/sample-spam.txt getestet werden. Alternativ ist eine Testmail auch hier zu bekommen. Im Ergebnis sieht man auch, ob die evtl. Einbindung von Razor und/oder Pyzor funktioniert hat. Für die Einbindung in "sendmail" muss in der Datei INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/sendmail/spamass.sock, F=T, T=S:6m;R:6m;E:15m')dnl Hierbei wird dem Namen des Mailfilters "spamassassin" die drei Werte "S", "F" und "T" übergeben. Mittels des Aufrufes von make im Verzeichnis Viren filternEs gibt unterschiedliche Virenscanner für Linux und ebenso unterschiedliche Möglichkeiten diese in einen Mailserver einzubinden. Dieser Text beschreibt die Einbindung der Scan-Engine von "F-Prot" mittels "AMaViS - A Mail Virus Scanner". Virenscanner F-Prot installierenMittels apt-get install f-prot-installer wird unter GNU/Debian ein Script installiert, dass dann die eigentlich Installation von "F-Prot" übernimmt. Hierbei werden einige weitere benötigte Programm-Pakete (libhtml-tree-perl libwww-perl unzip wget) mit installiert. Ein Aufruf von f-prot -verno testet ob "F-Prot" erfolgreich installiert wurde. Mittels einer "eicar Anti-Virus Test-Datei", die unter http://www.eicar.org/anti_virus_test_file.htm zu finden ist, kann auch die Funktionsfähigkeit des Viren-Scanners überprüft werden. AMaViS installierenDamit Mails mit Attachments und diese wiederum mit unterschiedlich gepackten Dateien von AMaViS überprüft werden können, müssen diverse Programme installiert werden. Mittels apt-get install amavis-ng-milter-helper wird das Milter-Paket von AMaViS installiert. Dabei werden zusätzlich über Abhängigkeiten die Pakete amavis-ng, libconfig-inifiles-perl, libfile-mmagic-perl, libio-stringy-perl, libmailtools-perl, libmime-perl, libtimedate-perl und perl-suid mit installiert. In der Konfigurationsdatei [global] AMaViS soll über das Milter-Interface angesprochen werden und den Virenscanner "F-Prot" verwenden. ;; Extractor modules. Die Voreinstellung sieht hier nur die Verwendung von Entpackern vor, die unter einer Open-Source Lizenz stehen. Hier sollte die zweite Einstellung verwendet werden, die auch mit "LHA" oder "RAR" gepackte Archive scannt. ;; Who should be notified? Hier wird festgelegt, wer über Mails, die einen Virus beinhalten, informiert wird. In Zeiten, wo aktuelle Würmer wahllos Absender und Empfänger einer Mail aus dem Adressbuch zusammen bauen und somit die Absender- und Empfänger-Angaben einer Mail keine Aussagekraft haben, ist es unverantwortlich, automatische Mitteilungen an im Zweifelsfall unbeteiligte Dritte zu senden. Deshalb sollte diese Mitteilung alleine an den Administrator gehen (dessen E-Mail Adresse wird weiter unten eingegeben wird). [MIME] Beim Extrahieren einer Mail kann es zu Fehlern kommen. Hier wird angeben, was dann mit der Mail geschehen soll. Wenn [paths] Wichtig ist hier, dass die angegebenen Verzeichnisse auch auf den separaten Partitionen liegen, wie sie unter Punkt System vorbereiten eingerichtet wurden. [Logging] "AMaViS" bietet zwei unterschiedliche Logging Möglichkeiten. Zum einen über über "syslog" und zum anderen über ein eigenes Logfile. So werden in obigen Beispiel alle Fehler-Meldungen an das Mail-Subsystem von "syslog" gesendet und alle Meldungen (Debug-Level) an das Logfile. Weitere Infos zum Logging sind man 3 syslog zu entnehmen. [Notify] Hier wird nun festgelegt, welches die E-Mail-Adresse des Admin ist, der die Virenmeldungen erhalten soll. Außerdem kann hier eine Absende-Adresse für diese Mails angegeben werden. Selbstverständlich kann "localhost" auch durch einen Fully Qualified Domain Name (FQDN) ersetzt werden, wobei "sendmail" entsprechend konfiguriert "localhost" beim versenden auch durch diesen ersetzt. In den nächsten Abschnitten werden die Einstellungen für die unterschiedlichen Mailprogramme vorgenommen. Hier ist nur den Abschnitt über "Milter" relevant. Die Anderen bleiben auskommentiert und die Vorgaben für "Milter" können einfach durch auskommentieren übernommen werden. [external] Da oben die Konfiguration der [security] Die Security-Einstellungen können auch ohne Änderung übernommen werden, wobei aber die Werte für "maxlevels" und "maxfiles" auch etwas großzügig ausgefallen sind. Bei diesen Werten und dem Wert von "maxspace" geht es um den Schutz des Virenscanners vor Archiven wie "42.zip", einer "Entpackungsbombe (decompression bomb) die gepackt nur 42 KB groß ist und vollständig entpackt 256 TB. Die übrigen Einstellungen beziehen sich auf den Aufruf des verwendeten Viren-Scanners. Hier ist nur noch die Einstellung von "F-Prot" zu aktivieren. Abschließend muss nun nur noch mittels /etc/init.d/amavis-ng start "AMaViS" gestartet werden. Es lohnt sich dann auch mal einen Blick in das oben definierte Logfile Integration des Viren-FiltersFür die Einbindung in "sendmail" muss in der Datei INPUT_MAIL_FILTER(`amavis', `S=local:/var/run/amavis-ng/socket.milter, F=T, T=S:6m;R:6m;E:15m')dnl Bezüglich der Parameter gilt hier das Gleiche wie oben unter Test und Integration des Spam-Filters beschrieben. Da "AMaViS" beim Senden einer Virus-Warnung einen leeren Sender-Envelope verwendet, erscheint in jeder Mail (und den Logfiles) der Hinweis "X-Authentication-Warning: mail.example.org: amavis set sender to <> using -f". Um dies zu vermeiden sollte "amavis" als "Trusted User" in "Sendmail" registriert werden. FEATURE(`use_ct_file')dnl Anschließend muss in der Datei Abschließend muss noch im Verzeichnis Nun sollte mittels einer Test-Mail, die eine "eicar Anti-Virus Test-Datei" beinhaltet, noch einmal das gesamte System geprüft werden. Update des Viren-FiltersFür das Update der Virensignaturen hat sich das folgende kleine Shell-Script bewährt, dass per Cronjob stündlich ausgeführt wird: #!/bin/sh Der entsprechende Cron-Eintrag könnte wie folgt aussehen: 0 * * * * /root/bin/f-prot-update.sh |