Debian Maia
Einleitung
Voraussetzungen:
Installation
Es sind zahlreiche Pakete erforderlich:
Debian Paketmanager:
apt-get --yes install libgd2-xpm php5-imap php5-ldap php5-mcrypt php5-gd apt-get --yes install libcrypt-blowfish-perl libossp-uuid-perl libio-zlib-perl apt-get --yes install libarchive-tar-perl libarchive-zip-perl libtemplate-perl apt-get --yes install libemail-address-perl libconvert-tnef-perl libnet-ldap-perl apt-get --yes install libunix-syslog-perl libnet-dns-perl libberkeleydb-perl apt-get --yes install imagemagick smarty apt-get --yes install unrar-free nomarch lzop cabextract bzip2 p7zip-full rar lha zoo ripole apt-get --yes install clamav clamav-daemon clamav-docs apt-get --yes install spamassassin razor pyzor apt-get --yes install curl rsync
Pear PHP-Manager:
pear channel-discover htmlpurifier.org pear channel-update pear.php.net pear upgrade pear pear install XML_RPC pear install Mail_Mime pear install DB_Pager pear install Auth_SASL pear install Net_Socket pear install Net_Smtp pear install Net_IMAP pear install Net_POP3 pear install Log pear install DB pear install Pager pear install --alldeps Image_Color pear install -f Image_Canvas pear install -f Numbers_Words pear install Numbers_Roman pear install -f Image_Graph-0.7.2 pear install hp/HTMLPurifier
- Das Paket NET_IMAP enthält einen Bug, der relativ einfach gefixt werden kann:
(Details zum Bug und Lösung siehe auch http://www.maiamailguard.com/maia/ticket/266):
vi /usr/share/php/Net/IMAPProtocol.php
Die Zeilen 700 bis 702 folgendermaßen abändern:
#return $args; // not for now return $this->_genericImapResponseParser($args,$cmdid);
Perl-Module (MCPAN):
perl -MCPAN -e shell install Net::Server install Mail::SPF::Query install Convert::UUlib install Crypt::CBC install MIME::Parser install DBD::Pg exit
Maia und AmvisD
cd /usr/local/src svn checkout https://www.maiamailguard.com/svn/branches/1.0
(Die Abfrage mit temporär t beantworten)
mv 1.0 maia cd maia mkdir /var/amavisd mkdir /var/amavisd/maia mkdir /var/amavisd/db mkdir /var/amavisd/tmp cp scripts /var/amavisd/maia/ cp maia.conf.dist /etc/maia.conf cp templates /var/amavisd/maia/ cp php/config.php.dist php/config.php cp php /var/www/ mv /var/www/php /var/www/maia cp amavisd-maia /usr/sbin cp amavisd.conf.dist /etc/amavisd.conf cd /root addgroup amavis adduser www-data amavis useradd -g amavis -d /var/amavisd amavis chown -R amavis. /var/amavisd chown -R www-data. /var/www/maia chown root. /usr/sbin/amavisd-maia chown amavis.amavis /etc/maia.conf chmod 640 /var/amavisd/maia/templates/*.tpl chmod 750 /var/amavisd/maia/scripts/*.pl chmod 640 /etc/maia.conf chmod 755 /usr/sbin/amavisd-maia ln -s /usr/sbin/amavisd-maia /usr/sbin/amavisd ln -s /usr/share/php/smarty/libs /usr/share/php/Smarty cd /etc/init.d wget ftp://download:download@schiele.homelinux.org/debian/amavisd-init mv amavisd_init amavisd chmod 755 amavisd update-rc.d amavisd defaults
Default-File anlegen:
vi /etc/default/amavisd
Folgenden Inhalt einfügen:
# /etc/default/amavisd # # Change to one to enable amavis ENABLED=1 PIDFILE="/var/run/amavis/amavisd.pid" # Set nice level of spamd #NICE="--nicelevel 15"
SQL-Datenbank anlegen
Maia benötigt eine MySQL-Datenbank. Diese wird im folgenden angelegt und mit Inhalt befüllt. maia_db_pwd mit einem Passwort für die maia Datenbank ersetzen.
cd /usr/src/maia mysql -u root -p mysql
mysql_root_pwd eingeben
CREATE DATABASE maia; use maia; GRANT CREATE, DROP, ALTER, SELECT, INSERT,UPDATE, DELETE ON maia.* TO amavis@localhost IDENTIFIED BY 'maia_db_pwd'; exit mysql -u root -p maia < maia-mysql.sql
mysql_root_pwd eingeben
Spamassassin-Regeln in die DB
Die Spamassassin-Regeln müssen in die Maia Datenbank eingelesen werden:
/var/amavisd/maia/scripts/load-sa-rules.pl --debug
Konfiguration
Spamassassin
vi /etc/default/spamassassin
Spamassassin aktivieren:
ENABLED=1
Plugin Pyzor:
pyzor discover su amavis -c 'pyzor discover' su amavis -c 'pyzor ping'
Pyzor ping sollte ein Ok liefern: public.pyzor.org:24441 (200, 'OK')
Plugin Razor:
razor-admin -create razor-admin -register cp -r /root/.razor /var/lib/amavis chown -R amavis:amavis /var/lib/amavis
Plugin DCC:
cd /usr/local/src wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z tar xzvf dcc-dccproc.tar.Z cd dcc-dccproc-[tab][enter] ./configure --with-uid=amavis make make install ln -s /var/dcc/libexec/cron-dccd /usr/bin/cron-dccd chown -R amavis:amavis /var/dcc
Testen von DCC:
cdcc info
Es sollten Antworten von den DCC-Servern erfolgen. Localhost (127.0.0.1) wird nicht antworten. Dies ist normal hier.
DCC regelmäßig updaten:
vi /etc/cron.daily/amavisd-new
Folgenden Befehl anhängen:
test -e /usr/bin/cron-dccd && exec /usr/bin/cron-dccd
Aktivieren der Plugins und Bayes-Filter:
vi /etc/spamassassin/local.cf
Kommentarzeichen (#) von folgenden Einträgen entfernen:
lock_method flock use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status
Folgende Zeilen ans Ende anfügen:
bayes_path /var/lib/amavis/.spamassassin/bayes auto_whitelist_path /var/lib/amavis/.spamassassin/auto-whitelist whitelist_from spambin@example.com bayes_auto_learn_threshold_nonspam -0.5 #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf razor_timeout 8 #dcc use_dcc 1
DCC-Plugin aktivieren:
vi /etc/spamassassin/v310.pre
DCC Plugin aktivieren (#-Zeichen entfernen):
loadplugin Mail::SpamAssassin::Plugin::DCC
Spamassassin Regeln updaten:
sa-update
ClamAV
ClamAV ist ein Open Source Antivirentool, das sich in idealerweise in Zusammenarbeit mit AmavisD auf einem Mialserver zur Virenabwehr einsetzen läßt. Zusammen mit dem ClamAV-Daemon wird der freshclam-Daemon gestartet, der im Hintergrund ständig die aktuellsten Virensignaturen herünterlädt.
amavis- und clamav- User den jeweiligen Benutzergruppen hinzufügen, damit diese auf gewisse Files gemeinsamen Zugriff erhalten:
adduser clamav amavis adduser amavis clamav
Für den Einsatz von ClamAV auf einem Mailserver empfiehlt sich, die zusätzlichen Phishing, Spam und Mailware Signatures von http://www.sanesecurity.net einzubinden. Dazu steht auf der Homepage ein Script bereit, das diese Signaturen downloaded und ClamAV zur Verfügung stellt.
cd /usr/sbin wget http://www.retrosnub.co.uk/sanesecurity/script/fetch-sanesecurity-sigs chmod +x fetch-sanesecurity-sigs
Beim ersten Start des Update Scripts legt dieses nötige Verzeichnisse an und lädt einen GPG-Key herunter, der für die Updates nötig ist, um deren Integrität zu verifizieren.
fetch-sanesecurity-sigs
Wenn die Signaturen erfolgreich und fehlerfrei heruntergeladen werden konnten, empfiehlt es sich einen Cronjob anzulegen, der sich um die regelmäßigen Updates der Sanesecurity Signaturen kümmert:
vi /etc/cron.d/sanesecurity_updater
Folgende Zeilen einfügen, damit der Updater alle zwei Stunden aufgerufen wird:
22 */2 * * * root /usr/sbin/fetch-sanesecurity-sigs > /dev/null
ClamAV neustarten:
/etc/init.d/clamav-freshclam restart /etc/init.d/clamav-daemon restart
Maia und AmavisD
vi /etc/maia.conf
In der folgenden Zeile password durch das oben vergebene Passwort maia_db_pwd ersetzen:
$password = "password";
vi /var/www/maia/config.php
In der folgenden Zeile password durch das oben vergebene Passwort maia_db_pwd ersetzen:
$maia_sql_dsn = "mysql://amavis:password@tcp(localhost:3306)/maia";
Anpassen der Policy-Level. Die Standardeistellung von medium und high haben relativ niedrige Score-Score Werte zur Erkennung von Spam. Dadurch könnten versehentlich Ham-Mails als Spam deklariert werden.
Bedeutung der einzelnen Einträge:
Parameter | amavisd-new equivalent | value |
---|---|---|
Pass viruses through? | virus_lover | 'Y' or 'N' |
Pass spam through? | spam_lover | 'Y' or 'N' |
Pass banned files through? | banned_files_lover | 'Y' or 'N' |
Pass mail with invalid headers through? | bad_header_lover | 'Y' or 'N' |
Disable virus scanning? | bypass_virus_checks | 'Y' or 'N' |
Disable spam checking? | bypass_spam_checks | 'Y' or 'N' |
Disable banned files checking? | bypass_banned_checks | 'Y' or 'N' |
Disable invalid header checking? | bypass_header_checks | 'Y' or 'N' |
Discard viruses? | discard_viruses | 'Y' or 'N' |
Discard spam? | discard_spam | 'Y' or 'N' |
Discard banned files? | discard_banned_files | 'Y' or 'N' |
Discard invalid mail headers? | discard_bad_headers | 'Y' or 'N' |
Add a prefix to spam subjects? | spam_modifies_subj | 'Y' or 'N' |
Add spam score headers when score is >= | spam_tag_level | -999.9 to 999.9 |
Consider mail spam when score is >= | spam_tag2_level | -999.9 to 999.9 |
Quarantine or discard spam when score is >= | spam_kill_level | -999.9 to 999.9 |
Das Array $protection besteht aus einer Kennung der Policy gefolgt von => und dann einem Array mit Einträgen gemäß obiger Tabelle.
$protection = array( 'off' => array ('Y','Y','Y','Y','Y','Y','Y','Y','N','N','N','N','N','999','999','999'), 'low' => array ('N','Y','Y','Y','N','Y','Y','Y','N','N','N','N','N','999','999','999'), 'medium' => array ('N','N','Y','Y','N','N','Y','Y','N','N','N','N','Y','-999','6.31','999'), 'high' => array ('N','N','N','N','N','N','N','N','N','N','N','N','Y','-999','5','15') );
Mit folgender Einstellung erfolgt die Authentifizierung gegen den Cyrus-Imap-Server:
$auth_method = "imap";
vi /etc/amavisd.conf
Domain ändern:
$mydomain = 'domain.org'; # a convenient default for other settings
Nach $mydomain folgenden Eintrag einfügen:
@local_domains_acl=( ".$mydomain" );
Folgende Einstellungen anpassen:
$DO_SYSLOG = 1; $sa_dsn_cutoff_level = 25; @lookup_sql_dsn = ( ['DBI:mysql:maia:localhost', 'amavis', 'maia_db_pwd'] ); $unrar = ['rar', 'unrar'];
Hostname anpassen:
$myhostname = 'debian.domain.org'; # must be a fully-qualified domain name!
Kommentarzeichen vor der Zeile 'qr'^MAIL$',' entfernen:
@keep_decoded_original_maps = (new_RE( qr'^MAIL$', # retain full original message for virus checking (can be slow)
Socket für Clam_AV anpasen:
['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
Wartungsscripte
Maia bringt eine ganze Reihe von Skripten mit, die die Datenbanken pflegen und Übersichtsmails versenden. Damti Maia korrekt funktioniert, müssen diese regelmäßig via Cron ausgeführt werden.
vi /etc/cron.d/maia
Folgende Zeilen enfügen:
0 * * * * amavis /var/amavisd/maia/scripts/stats-snapshot.pl > /dev/null 5 * * * * amavis /var/amavisd/maia/scripts/process-quarantine.pl > /dev/null 20 5 * * * amavis /var/amavisd/maia/scripts/expire-quarantine-cache.pl > /dev/null 15 8 * * * amavis /var/amavisd/maia/scripts/send-quarantine-reminders.pl > /dev/null */3 * * * * amavis /var/amavisd/maia/scripts/send-quarantine-digests.pl > /dev/null
Postfix
An den Postfix Konfigurationsfiles müssen Änderungen durchgeführt werden, um den Spamfilter in die Mail-Transportkette einzuschleifen:
vi /etc/master.cf
Folgende Zeilen ans Ende anfügen:
lmtp-amavis unix - - n - 2 lmtp -o lmtp_data_done_timeout=1200 -o lmtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 127.0.0.1:10025 inet n - y - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
vi /etc/postfix/main.cf
Folgende Option einfügen:
content_filter=lmtp-amavis:[127.0.0.1]:10024
Starten der Services
/etc/init.d/spamassassin start /etc/init.d/amavisd start /etc/init.d/postfix restart
Webbasierte Einrichtung
Konfigurations- und Datenbank Test
Im Webbrowser 'http://192.168.0.28/maia/admin/configtest.php' eingeben. Maia sollte nun eine Auflistung ausgeben, die sämtliche Abhängigkeiten und Berechtigunen abprüft. Es sollten keine Probleme berichtet werden, außer solchen, die mit skipped bezeichnet sind.
Super-User und Einstellungen
Für Konfigurationsarbeiten an Maia ist ein Super-User nötig. Webbrowser öffnen und Adresse: http://IP_DES_SERVERS/maia/login.php?super=register eingeben. Einloggen mit den Userdaten:
User: tux@domain.org Pwd: tux_mail_pwd
Nun ist 'tux' der Superuser (Admin) von Maia Mailguard.
Einstellungen vornehmen:
- Auf der 'Welcome' Seite Protection Level (Current protection level)wählen: Medium
- Zur Seite 'Admin' wechseln
- Unterpunkt 'Languages' selektieren
- Unter 'Install new Language' Deutsch auswählen
- Button Install Language
- Link [Return to the Administration Menu] anklicken um ins Admin Menü zurückzukehren
- Unterpunkt 'System Configuration' wählen
- Administrator's contact e-mail address: postmaster@domain.org
- Expiry period for quarantined mail (days): z.B: 14 (Hinweis: Nicht bearbeitete Mails in Quarantäne werden nach dieser Anzahl Tagen endgültig gelöscht.)
- Maia login URL for e-mail reminders: [?] http://IP_Des_Servers/maia
- Enable graphical charts? [?] yes
- Button Update Settings anklicken
- Unterpunkt 'Languages' selektieren
- Zur Seite 'Settings' wechseln, umd die User-Einstellungen vorzunehmen
- Send quarantine reminder e-mail? yes (um Hinweise über Mails, die in Quarantäne gesetzt wurden zu erhalten)
- Display graphic charts?: yes
- Display Language: deutsch
- Button Update Miscelleanous Settings
Ausloggen mit Exit
Funktionstest
Der Funktionstest umfaßt mehrere Schritte. Es wird geprüft, normale Mails nachwievor ankommen, ob SPAM korrekt erkannt wird, und ob Viren in Quarantäne genommen werden. Weiterhin werden die Sanesecurity Signaturen korrekt funktioneren. Zum Schluß wird verifiziert, ob die Maia-Quarantäne und die Freigabe von Mails korrekt funktioneren.
Clean Mail
Eine Nachricht mit beliebigem Betreff - Z.B. Test Clean - und beliebigem Inhalt - Z.b. Testmail Clean- an einen gültigen Mailuser - z.B. 'tux' - senden. => Die Mail muß ganz normal im Postfach des Benutzers abgelegt werden.
SPAM
Eine Nachricht mit Betreff 'Test GTUBE' an einen gültigen Mailuser - z.B. 'tux' - mit und folgendem Inhalt senden:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
=> Die Mail wird nicht zugestellt, da Sie einen sehr hohen Spam-Score (>1000) aufweist.
Virustest
Mit Hilfe des EICAR-Virus wird die Funktionalität von ClamAV und dessen 'eingebauter' Signaturen verifiziert. Die korrekte Funktion der Sanesecurity Signaturen wird im zweiten Schritt mit drei weiteren Testmails verifiziert.
EICAR Test-Virus
Der EICAR-Testvirus wurde geschaffen, um Anti-Virentools einem Funktionscheck unterziehen zu können. Es gibt verschiedene "Erscheinungsformen" des EICAR Testvirus: als .txt-Files oder .Zip-Files. Das EICAR-Testvirus als .txt und .zip File von http://www.eicar.org/anti_virus_test_file.htm downloaden und Lokal auf dem PC speichern.
Eine Testmail mit Betreff 'Test EICAR' an einen lokalen Mailuser -z.B. Tux - verfassen und den EICAR Testvirus (.txt) anhängen. => Die Mail wird nicht zugestellt, da diese in Quarantäne gestellt wurde Den selben Vorgang für den EICAR Testvirus im .zip-File wiederholen.
Sanesecurity
Mit Hilfe von drei Mails wird die korrekte Funktionalität der Sanesecurity Signaturen verifiziert:
- Test1: Eine HTML-Testmail an einen lokalen User versenden - z.B. Tux - mit Betreff - z.B. Test1 - und folgendem Text:
body_rrg63uhj2ucyeccrux7d83a4qd5ua5vnlgwjp6b6fmpzpobzjabftehuhraxfbyzzzzz
- Test2: Eine Testmail an einen lokalen User versenden - z.B. Tux - mit folgendem Subject (Betreff):
rrg63Uhj2UCyECcruX7D83A4qd5UA5vnlgwJp6b6fmPZpObZJAbftehuhRAXFby
- Test3: Eine Text-Testmail (kein HTML) an einen lokalen User versenden - z.B. Tux - mit Betreff - z.B. Test3 - und folgendem Text:
body_rrg63Uhj2UCyECcruX7D83A4qd5UA5vnlgwJp6b6fmPZ0ajdjkwjnSSDfsdfsdfnwerd
- Die Zeichenfolgen müssen exakt eingehalten werden (kein Zeichen mehr eingeben, auch keine Leerzeichen). Ansonsten werden sie nicht zuverlässig erkannt.
- Alle drei Testmails müssen als Virus identifiziert werden und in Quarantäne landen (keine Zustellung).
- Falls dies nicht der Fall sein sollte, prüfen, ob die Vorgaben exakt eingehalten wurden: Test1: HTML-Mail , Test2: SUBJECT exakt nach Vorgabe, Test3: Text-Mail
Check der Quarantäne
Webbrowser öffnen und Adresse: http://IP_DES_SERVERS/maia eingeben. Einloggen mit den Userdaten:
User: tux@domain.org Pwd: tux_mail_pwd
Auf der Willkommensseite wird die Statistik der Quarantäne angezeigt:
- 1 Ham-Mail (Test Clean)
- 1 Spam-Mail (Test GTUBE)
- 4 Virus-Mails (EICAR+3 Sanesecurity Mails)
Die Mails in Quarantäne ansehen:
- Auf das Briefsymbol im neben 'Ham-Mails'
- Auf den Betreff 'Test Clean' klicken
- Ein neues Fenster erscheint mit den Details der Mail.
- Fenster wieder schließen
- [Zurück zur Willkommen-Seite] anklicken
- Die selben Schritte für die Spam- und Virusmails wiederholen
Zustellen einer Mail aus der Quarantäne ins Postfach des Benutzers
- Die Mail 'Test Sanesecurity 1' in der Virus Quarantäne, wie oben beschrieben, in einem neuen Fenster öffnen
- Das Briefsymbol anklicken, um die Mail ins Postfach des Nutzers zustellen zu lassen
- Die Mail mit Betreff 'Sanesecurity 1' muß mit Origianl-Uhrzeit im Postfach des Nutzers abgelegt werden
Selektives Löschen einer Mail in Quarantäne
- Die Mail 'Test Sanesecurity 1' in der Virus Quarantäne, wie oben beschrieben, in einem neuen Fenster öffnen
- Auf 'Lösche diese Mail' klicken, um die Mail zu löschen
- Das Fenster wird geschlossen und die Mail wurde aus der Quarantäne entfernt
Löschen der kompletten Quarantäne
- Virus Quarantäne öffnen (siehe oben)
- Alle Mails in Quarantäne sollten mit 'Löschen' markiert sein. Falls nicht, markieren.
- Button 'Bestätige den Status dieser Mails' anklicken
- Alle Virusmails wurden aus der Quarantäne entfernt
- Die selben Schritte für die Spma-Quarantäne wiederholen