Debian AmavisD: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 17: | Zeile 17: | ||
apt-get --yes install libemail-address-perl libconvert-tnef-perl libdbd-pg-perl libdbd-mysql-perl | apt-get --yes install libemail-address-perl libconvert-tnef-perl libdbd-pg-perl libdbd-mysql-perl | ||
apt-get --yes install libunix-syslog-perl libnet-dns-perl libberkeleydb-perl | apt-get --yes install libunix-syslog-perl libnet-dns-perl libberkeleydb-perl | ||
apt-get --yes install libauthen-sasl-perl libmail- | apt-get --yes install libauthen-sasl-perl libmail-spf-perl libio-socket-ssl-perl libnet-ident-perl | ||
'''Pear PHP-Manager:''' | '''Pear PHP-Manager:''' | ||
Zeile 47: | Zeile 47: | ||
apt-get --yes install clamav clamav-daemon clamav-docs | apt-get --yes install clamav clamav-daemon clamav-docs | ||
apt-get --yes install spamassassin razor pyzor amavisd-new | apt-get --yes install spamassassin razor pyzor amavisd-new | ||
apt-get --yes install curl rsync | |||
==Konfiguration== | ==Konfiguration== | ||
Zeile 54: | Zeile 55: | ||
ENABLED=1 | ENABLED=1 | ||
'''Plugin Pyzor:''' | '''Plugin Pyzor:''' | ||
pyzor discover | pyzor discover | ||
Zeile 82: | Zeile 79: | ||
cdcc info | cdcc info | ||
Es sollten Antworten von den DCC-Servern erfolgen. Localhost (127.0.0.1) wird nicht antworten. Dies ist normal hier. | Es sollten Antworten von den DCC-Servern erfolgen. Localhost (127.0.0.1) wird nicht antworten. Dies ist normal hier. | ||
{{Hinweis| | |||
Falls die [[Debian_Iptables|→ Firewall]] installiert und aktiviert wurde, muß die Regel | |||
'''"$IPT -A udp_inbound -p UDP -m udp --destination-port 1024:65535 --source-port 6277 -j ACCEPT"''' | |||
im Bereich '''"udp_inbound chain"''' für DCC in /etc/init.d/iptables enthalten und aktiv sein (nicht auskommentiert).}} | |||
DCC regelmäßig updaten: | DCC regelmäßig updaten: | ||
Zeile 127: | Zeile 130: | ||
===ClamAV=== | ===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 clamav amavis | ||
adduser amavis clamav | 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 +s 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-freshclam restart | ||
/etc/init.d/clamav-daemon restart | /etc/init.d/clamav-daemon restart | ||
Zeile 152: | Zeile 170: | ||
Nun sind zahlreiche Einstellungen im File 50-user erforderlich: | Nun sind zahlreiche Einstellungen im File 50-user erforderlich: | ||
{{ | {{Achtung| | ||
Alle Einträge zwischen '''''use strict''''' und '''''1;''''' einfügen. Ansonsten wird Amavisd nicht korrekt funktionieren!}} | |||
vi 50-user | vi 50-user | ||
Zeile 185: | Zeile 203: | ||
$remove_existing_spam_headers = 1; | $remove_existing_spam_headers = 1; | ||
$remove_existing_x_scanned_headers = 1; | $remove_existing_x_scanned_headers = 1; | ||
# don't quarantine bad headers (no need since we pass them all): | # don't quarantine bad headers (no need since we pass them all): | ||
Zeile 219: | Zeile 233: | ||
Evtl. den Eintrag '''''@mynetworks''''' den Netzwerkgegebenheiten anpassen. | Evtl. den Eintrag '''''@mynetworks''''' den Netzwerkgegebenheiten anpassen. | ||
$inet_socket_port = [10024]; | $inet_socket_port = [10024]; | ||
$inet_socket_bind = 127.0.0.1; | $inet_socket_bind = 127.0.0.1; | ||
# disable quarantine subdirectories | # disable quarantine subdirectories | ||
$quarantine_subdir_levels = undef; | $quarantine_subdir_levels = undef; | ||
@keep_decoded_original_maps = (new_RE( | |||
qr'^MAIL$', # retain full original message for virus checking (can be slow) | |||
qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables | |||
qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, | |||
# qr'^Zip archive data', # don't trust Archive::Zip | |||
)); | |||
# we may need to add items to this | # we may need to add items to this | ||
Zeile 280: | Zeile 300: | ||
===Virustest=== | ===Virustest=== | ||
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. | 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-Testvirus==== | |||
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. | 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. | ||
Zeile 289: | Zeile 312: | ||
Den selben Vorgang für den EICAR Testvirus im .zip-File wiederholen. | Den selben Vorgang für den EICAR Testvirus im .zip-File wiederholen. | ||
====Sanesecurity Signaturen==== | |||
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 | |||
{{Hinweis| | |||
* 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. Der Postmaster erhält in diesem Fall eine Hinweismail, dass die Mails in Quarantäne gestellt wurden, und nicht dem eigentlichen Empfänger zugestellt wurden. | |||
* 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}} | |||
Zeile 304: | Zeile 341: | ||
tar xvf MailZu_0.8RC3.tar.gz | tar xvf MailZu_0.8RC3.tar.gz | ||
cd MailZu_0.8RC3/contrib/mysql | cd MailZu_0.8RC3/contrib/mysql | ||
wget ftp://download:download@schiele.homelinux.org/debian/ | wget ftp://download:download@schiele.homelinux.org/debian/amavis-sql-init.sql | ||
cd /usr/local/src | cd /usr/local/src | ||
mv MailZu_0.8RC3 /var/www/mailzu | mv MailZu_0.8RC3 /var/www/mailzu | ||
Zeile 311: | Zeile 348: | ||
===Datenbank einrichten=== | ===Datenbank einrichten=== | ||
Mailzu benötigt eine Datenbank, in die AmavisD später die in Quarantäne befindlichen Mails ablegen kann. | Mailzu benötigt eine Datenbank, in die AmavisD später die in Quarantäne befindlichen Mails ablegen kann. | ||
mysql - | Bearbeiten des SQL-Schemas, um das Passwort der Datenbank zu setzen: | ||
cd /var/www/mailzu/contrib/mysql/ | |||
''''' | vi amavis-sql-init.sql | ||
GRANT | Das Passwort '''''amavis_pwd''''' in Folgender Zeile anpassen: | ||
GRANT CREATE, DROP, ALTER, SELECT, INSERT, UPDATE, DELETE ON amavis.* TO amavis@localhost IDENTIFIED BY 'amavis_pwd'; | |||
mysql -u root -p | |||
Datenbank anlegen | |||
mysql -u root -p <amavis-sql-init.sql | |||
===Konfiguration von MailZu=== | ===Konfiguration von MailZu=== | ||
Zeile 327: | Zeile 365: | ||
Folgende Einstellungen vornehmen: | Folgende Einstellungen vornehmen: | ||
$conf['db']['dbUser'] = 'amavis'; | $conf['db']['dbUser'] = 'amavis'; | ||
$conf['db']['dbPass'] = ' | $conf['db']['dbPass'] = 'amavis_pwd'; | ||
$conf['db']['dbName'] = ' | $conf['db']['dbName'] = 'amavis'; | ||
$conf['db']['hostSpec'] = 'localhost:3306'; | $conf['db']['hostSpec'] = 'localhost:3306'; | ||
$conf['db']['binquar'] = true; | $conf['db']['binquar'] = true; | ||
Zeile 361: | Zeile 399: | ||
}; | }; | ||
Datenbank-Verbindung: | Datenbank-Verbindung: | ||
@lookup_sql_dsn = ( ['DBI:mysql:database= | @lookup_sql_dsn = ( ['DBI:mysql:database=amavis;host=127.0.0.1;port=3306', 'amavis', 'amavis_pwd']); | ||
@storage_sql_dsn = @lookup_sql_dsn | @storage_sql_dsn = @lookup_sql_dsn | ||
$banned_files_quarantine_method = 'sql:'; | $banned_files_quarantine_method = 'sql:'; | ||
$spam_quarantine_method = 'sql:'; | $spam_quarantine_method = 'sql:'; | ||
$virus_quarantine_method = 'sql:'; | $virus_quarantine_method = 'sql:'; | ||
$bad_header_quarantine_method = 'sql:'; | #$bad_header_quarantine_method = 'sql:'; | ||
$timestamp_fmt_mysql = 1; | $timestamp_fmt_mysql = 1; | ||
Zeile 380: | Zeile 418: | ||
Als User 'tux' einloggen. | Als User 'tux' einloggen. | ||
Die '''''Quarantine Summary''''' | Die '''''Quarantine Summary''''' zeigt die Anzahl in Quarantäne genommener Mails. Dies sollten mindestens die 4 Virusmails sein, die beim Funktionstest versendet wurden. | ||
Auf den Button '''''My Quarantine''''' klicken. | Auf den Button '''''My Quarantine''''' klicken. | ||
Es | Es erscheinen die Quarantäne befindlichen emails mit Angaben zum Betreff, usw. | ||
Durch anklicken der Checkbox vor | Durch anklicken der Checkbox vor einer Mail und anschließend des Buttons '''''Release''''' wird die mail ins Postfach des Benutzers 'tux' zugestellt. | ||
===Aufräumscripte=== | ===Aufräumscripte=== | ||
Zeile 391: | Zeile 429: | ||
vi /usr/sbin/amavis_clean | vi /usr/sbin/amavis_clean | ||
Folgende Zeilen einfügen. | Folgende Zeilen einfügen. | ||
* den Eintrag PWD=''''' | * den Eintrag PWD='''''amavis_pwd''''' entsprechend oben vergebenen Passwort bearbeiten | ||
* '''''DAYS'''''=20 evtl. anpassen. Nach '''''DAYS'''''-Tagen werden in Quarantäne befindliche Nachrichten gelöscht. | * '''''DAYS'''''=20 evtl. anpassen. Nach '''''DAYS'''''-Tagen werden in Quarantäne befindliche Nachrichten gelöscht. | ||
#!/bin/bash | #!/bin/bash | ||
DB= | DB=amavis | ||
USER=amavis | USER=amavis | ||
PWD=''''' | PWD='''''amavis_pwd''''' | ||
DAYS= | DAYS=14 | ||
echo "USE $DB;" >/etc/amavis_clean-msgs.sql | echo "USE $DB;" >/etc/amavis_clean-msgs.sql | ||
Zeile 406: | Zeile 444: | ||
chmod 750 /usr/sbin/amavis_clean | chmod 750 /usr/sbin/amavis_clean | ||
Cronjob, der täglich gestartet wird, anlegen: | Cronjob, der täglich gestartet wird, anlegen: | ||
vi /etc/cron. | vi /etc/cron.daily/amavis_clean | ||
Folgende Zeilen einfügen und den Eintrag PWD='''''mailzu_pwd''''' entsprechend oben vergebenen Passwort bearbeiten: | Folgende Zeilen einfügen und den Eintrag PWD='''''mailzu_pwd''''' entsprechend oben vergebenen Passwort bearbeiten: | ||
#!/bin/bash | #!/bin/bash | ||
USER=amavis | USER=amavis | ||
PWD=''''' | PWD='''''amavis_pwd''''' | ||
/usr/sbin/amavis_clean | /usr/sbin/amavis_clean | ||
Zeile 427: | Zeile 465: | ||
DELETE FROM msgrcpt WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE mail_id=msgrcpt.mail_id); | DELETE FROM msgrcpt WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE mail_id=msgrcpt.mail_id); | ||
DELETE FROM msgs WHERE mail_id IN (SELECT DISTINCT mail_id FROM msgrcpt WHERE rs='D'); | DELETE FROM msgs WHERE mail_id IN (SELECT DISTINCT mail_id FROM msgrcpt WHERE rs='D'); | ||
==Optional: Squirrelmail-Plugin== | |||
Mit Hilefe des Squirrelmail-Plugins ''amavisnewsql'' kann jeder User Policies (Verhalten) von AmavisD selbst einstellen. Dieses Plugin sollte analog oben beschriebenem [[Debian_AmavisD#Optional: MailZu Quarantäne Management|→ Mailzu]] eine Verwaltung der AmavisD-Quarantäne enthalten, die leider nicht funktioniert, sodass hier zwei Lösungen nötig sind: Zum Einstellen der Policies Squirrelmail+amavisnewsql und zum Ansehen, Löschen oder Zustellen von Quarantäne-Mails Mailzu. | |||
Voraussetzung: | |||
* [[Debian_AmavisD#Optional: MailZu Quarantäne Management|&Mailzu]] | |||
===Installation des Plugins=== | |||
cd /usr/local/src | |||
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Famavisnewsql-0.8.0-1.4.tar.gz | |||
tar xvf amavisnewsql-0.8.0-1.4.tar.gz | |||
cp amavisnewsql/config.php.dist amavisnewsql/config.php | |||
chown -R www-data:www-data amavisnewsql | |||
mv amavisnewsql /usr/share/squirrelmail/plugins/ | |||
===Konfiguration=== | |||
cd /usr/share/squirrelmail/plugins/amavisnewsql | |||
vi config.php | |||
Verbindung zur Amavis-SQL-Datenbank ('''''amavis_pwd''''' durch das im Kapitel Mailzu vergebene Amavis Passwort ersetzen): | |||
$CONFIG["dsn"] = 'mysql://amavis:'''''amavis_pwd'''''@localhost/amavis'; | |||
Setzen der Domain (domain.org an die tatsächliche Domain anpassen): | |||
$CONFIG["default_domain"] = "domain.org"; | |||
Web-Adresse von Squirrelmail setzen ('''''domain.org''''' durch die IP_Des_Server oder durch die reale Domain ersetzen, unter der Squirrelmail aus dem Internet erreichbar ist) | |||
$CONFIG["webmail_url"] = "http://'''''domain.org'''''/squirrelmail"; | |||
Emailadresse anpassen: | |||
$CONFIG["digest_from"] = '"Spam Assassin" <noreply@'''''domain.org'''''>'; | |||
Plugin amavisnewsql, wie in [[Debian_Squirrelmail#Menü Plugins (8):|→ Squirrelmail]] beschrieben, aktivieren. | |||
===Funktionstest=== | |||
* Squirrelmail im Webbrowser aufrufen: "http://IP_Des_Server/squirrelmail". | |||
* Mit User-Daten (z.B. Tux/Pux_PWD) einloggen. | |||
* Menüpunkt '''''Options''''' anwählen | |||
* Unterpunkt '''''SpamAssassin Configuration''''' anwählen | |||
**Im oberen Bereich können Email-Adressen zu White-und Blacklists hinzugefügt werden. Die Adressen der Whitelist werden immer akzeptiert und als Spamfrei gekennzeichnet. Mails von Absendern der Blacklist werden immer als Spam deklariert, selbst wenn die restlichen Kriterien nicht erfüllt wären. Hier je nach Belieben Mailadressen zu den beiden Listen hinzufügen. | |||
**Im unteren Bereich kann eine der vorgegebenen Spam-Policies gewählt werden, bzw. eine selbst definiert werden. Die beiden Werte bedeuten dabei: '''''Tag Level:''''' Mails mit einem Score höher als dieser Wert, werden als Spam deklariert (X-Spam-Flag=True); '''''Kill-Level''''': Liegt der Score über diesem Wert wird die Mail in Quarantäne genommen, bzw. sofort gelöscht. | |||
** In der Mitte wird das Verhalten eingestellt. Hier kann eingestellt werden, wie oft ein Quarantäne-Report verschickt werden soll (z.B. Daily), Wie lange Mails in der Quarantäne verbleiben sollen (z.B. 14 Tage) und ob Mails rejected oder in Quarantäne gestellt werden sollen. Hier sollte Quarantäne gewählt werden. |
Aktuelle Version vom 8. Oktober 2010, 08:57 Uhr
Einleitung
Hier wird ein Mailfilter eingerichtet, der vor Spam und Viren in emals schützen soll. AmavisD klinkt sich dazu in die Mailkette ein und scannt die Mails mit Hilfe von Spamassassin auf Spamverdacht und mittels ClamAV auf Virenverdacht. AmavisD kann erkannte Spam- und Virusmails auf unterschiedlichste Art und Weise behandeln. Es kann die Mails mit Headern und/oder Subject Tags kennzeichnen, Mails in Quarantäne nehmen bzw. komplett löschen.
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 libdbd-pg-perl libdbd-mysql-perl apt-get --yes install libunix-syslog-perl libnet-dns-perl libberkeleydb-perl apt-get --yes install libauthen-sasl-perl libmail-spf-perl libio-socket-ssl-perl libnet-ident-perl
Pear PHP-Manager:
pear channel-update pear.php.net pear upgrade pear pear install XML_RPC pear install Mail_Mime pear install Auth_SASL pear install Net_Socket pear install Net_Smtp pear install Net_IMAP pear install Log pear install DB pear install DB_Pager pear install Pager
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
AmavisD Spamassassin und ClamAV
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 amavisd-new apt-get --yes install curl rsync
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.
Hinweis: | |
Falls die → Firewall installiert und aktiviert wurde, muß die Regel "$IPT -A udp_inbound -p UDP -m udp --destination-port 1024:65535 --source-port 6277 -j ACCEPT" im Bereich "udp_inbound chain" für DCC in /etc/init.d/iptables enthalten und aktiv sein (nicht auskommentiert). |
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 +s 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
AmavisD
cd /etc/amavis/conf.d
Aktivieren von Entpacktools, die nicht frei (unfree) sind:
vi 01-debian
Folgende Einstellungen treffen:
$unrar = ['rar', 'unrar']; #disabled (non-free, no security support) #$unrar = undef; $lha = 'lha'; #disabled (non-free, no security support) #$lha = undef;
Aktivieren der Spam- und Virenchecks:
vi 15-content_filter_mode
Folgende Optionen aktivieren (#-Zeichen entfernen):
@bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Nun sind zahlreiche Einstellungen im File 50-user erforderlich:
Achtung: | |
Alle Einträge zwischen use strict und 1; einfügen. Ansonsten wird Amavisd nicht korrekt funktionieren! |
vi 50-user
$mydomain und $myhostname entsprechend der Domain und Hostname anpassen
# explicitly set $mydomain and $myhostname: $mydomain = 'example.com'; $myhostname = 'server.example.com'; @local_domains_acl = ( ".$mydomain" );
# when amavisd-new sends notifications, they appear to come from here: $mailfrom_notify_admin = "postmaster\@$mydomain"; $mailfrom_notify_recip = "postmaster\@$mydomain"; $mailfrom_notify_spamadmin = "postmaster\@$mydomain"; $hdrfrom_notify_sender = "amavisd-new <postmaster\@$mydomain>"; $notify_method = 'smtp:[127.0.0.1]:10025'; # where to submit notifications $max_servers = 6; # We discard (and quarantine) viruses, discard (and quarantine) spam (>= kill_level), # bounce (and quarantine) banned files and pass bad headers: $final_virus_destiny = D_DISCARD; $final_spam_destiny = D_DISCARD; $final_banned_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; #Local Tests only (no Internet based tests) $sa_local_tests_only = 0; #Handling of already existing Spam Headers $remove_existing_spam_headers = 1; $remove_existing_x_scanned_headers = 1; # don't quarantine bad headers (no need since we pass them all): $bad_header_quarantine_to = undef; # Spam gets the Subject line prepended with: $sa_spam_subject_tag = '***SPAM***';
Mittels $sa_spam_subject_tag kann festgelegt werden, in welcher Form das Subject einer Spam-Mail geändert werden soll. Standardmäßig wird dem eigentlichen Subject ein ***SPAM** vorangestellt. Falls das Subject nicht geändert weden soll, dann muss $sa_spam_subject_tag=undef; gesetzt werden
$sa_spam_subject_tag = '***SPAM*** '; # We tag all headers (for 'local' domains) with X-Spam info: $sa_tag_level_deflt = undef; # This is the system default spam tag level $sa_tag2_level_deflt = 6.31; # The default is to not quarantine any spam (outside of what users get in their Spam folder), # so set default kill_level high. Users can choose their own kill_level however. kill_level # will trigger quarantining. $sa_kill_level_deflt = 9999; $warnbannedrecip = 1; $defang_banned = 1; $defang_virus = 1; # We are going to create policy banks that will notify us of internally created spam # but also let banned files out (provided they are compressed). @mynetworks = qw( 127.0.0.0/8 192.168.0.0/16 );
Evtl. den Eintrag @mynetworks den Netzwerkgegebenheiten anpassen.
$inet_socket_port = [10024]; $inet_socket_bind = 127.0.0.1; # disable quarantine subdirectories $quarantine_subdir_levels = undef; @keep_decoded_original_maps = (new_RE( qr'^MAIL$', # retain full original message for virus checking (can be slow) qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, # qr'^Zip archive data', # don't trust Archive::Zip )); # we may need to add items to this @additional_perl_modules = qw( );
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
Funktionstest
Spamtest
Eine mail an einem lokalen User z.B. tux mit folgendem Inhalt (Betreff egal) senden:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Bitte den Text exakt so kopieren. Keine Zeichen hinzufügen oder weglassen. Dies ist eine standardisierte Testmessage für Spamfilter, die definitiv als SPAM erkannt werden muss.
Die Mail sollte mit dem Originalbetreff und, falls $sa_spam_subject_tag gesetzt wurde, mit vorgestelltem *****SPAM***** im Postfach von Benutzer tux ankommen. Der Mailheader sollte einen Hinweis auf den Spam-Level (>1000) geben.
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-Testvirus
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 an einen lokalen Mailuser -z.B. Tux - verfassen und den EICAR Testvirus (.txt) anhängen.
Es sollte eine Notification-Mail generiert werden, dass der EICAR-Testvirus entdeckt wurde, und die eigentliche Mail in Quarantäne genommen wurde.
Den selben Vorgang für den EICAR Testvirus im .zip-File wiederholen.
Sanesecurity Signaturen
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
Optional: MailZu Quarantäne Management
MailZu ist ein grafischer Quarantäne Manager, mit dessen Hilfe es möglich ist, in Quarantäne befindliche mails zu löschen oder zu releasen (zum Empfänger zustellen).
Voraussetzung:
Installation
cd /usr/local/src wget http://www.mailzu.net/download/MailZu_0.8RC3.tar.gz tar xvf MailZu_0.8RC3.tar.gz cd MailZu_0.8RC3/contrib/mysql wget ftp://download:download@schiele.homelinux.org/debian/amavis-sql-init.sql cd /usr/local/src mv MailZu_0.8RC3 /var/www/mailzu chown -R www-data:www-data /var/www/mailzu
Datenbank einrichten
Mailzu benötigt eine Datenbank, in die AmavisD später die in Quarantäne befindlichen Mails ablegen kann.
Bearbeiten des SQL-Schemas, um das Passwort der Datenbank zu setzen:
cd /var/www/mailzu/contrib/mysql/ vi amavis-sql-init.sql
Das Passwort amavis_pwd in Folgender Zeile anpassen:
GRANT CREATE, DROP, ALTER, SELECT, INSERT, UPDATE, DELETE ON amavis.* TO amavis@localhost IDENTIFIED BY 'amavis_pwd';
Datenbank anlegen
mysql -u root -p <amavis-sql-init.sql
Konfiguration von MailZu
cd /var/www/mailzu/config mv config.php.sample config.php vi config.php
Folgende Einstellungen vornehmen:
$conf['db']['dbUser'] = 'amavis'; $conf['db']['dbPass'] = 'amavis_pwd'; $conf['db']['dbName'] = 'amavis'; $conf['db']['hostSpec'] = 'localhost:3306'; $conf['db']['binquar'] = true; $conf['auth']['serverType'] = 'imap'; $conf['auth']['imap_hosts'] = array( 'localhost:143' ); $conf['auth']['imap_type'] = 'imaptls'; $conf['auth']['imap_domain_name'] = 'domain.org';
User eintragen, die Superuser Status haben sollen (in einfachen Anführungszeichen, durch Komma getrennt):
$conf['auth']['s_admins'] = array ('tux', 'user2');
User eintragen, die Admin Status haben sollen (in einfachen Anführungszeichen, durch Komma getrennt):
$conf['auth']['m_admins'] = array ('tux');
$conf['app']['adminEmail'] = array('postmaster@domain.org'); $conf['app']['searchOnly'] = 0; $conf['app']['timeFormat'] = 24; $conf['app']['use_log'] = 0; $conf['app']['allowBadHeaders'] = 1; $conf['app']['allowViruses'] = 1;
Konfiguration von AmavisD
Damit MailZu funktioniert, müssen auch einige Einstellungen an der AmavisD-Konfiguration angepasst werden:
vi /etc/amavis/conf.d/50-user
Folgenden Einstellungen vornehmen: Port 9998, über den MailZu die Kommunikation mit AmavisD aufnehmen kann in AmavisD freigeben:
$inet_socket_port = [10024, 9998]; $inet_socket_bind = undef;
Policy für MailZu-Verbindung (IP_des_Servers mit der realen IP des Servers ersetzen):
$interface_policy{'9998'} = 'AM.PDP'; $policy_bank{'AM.PDP'} = { protocol => 'AM.PDP', inet_acl => [qw( 127.0.0.1 127.0.1.1 [::1] IP_des_SERVERS )], };
Datenbank-Verbindung:
@lookup_sql_dsn = ( ['DBI:mysql:database=amavis;host=127.0.0.1;port=3306', 'amavis', 'amavis_pwd']); @storage_sql_dsn = @lookup_sql_dsn $banned_files_quarantine_method = 'sql:'; $spam_quarantine_method = 'sql:'; $virus_quarantine_method = 'sql:'; #$bad_header_quarantine_method = 'sql:'; $timestamp_fmt_mysql = 1;
Funktionstest
Amavisd neustarten:
/etc/init.d/amavis restart
Je eine Spam- und Virusmail wie in → Funktionstest beschrieben an den User 'tux' senden.
Webbrowser öffnen und Adresse: http://IP_des_Servers/mailzu
Als User 'tux' einloggen.
Die Quarantine Summary zeigt die Anzahl in Quarantäne genommener Mails. Dies sollten mindestens die 4 Virusmails sein, die beim Funktionstest versendet wurden.
Auf den Button My Quarantine klicken. Es erscheinen die Quarantäne befindlichen emails mit Angaben zum Betreff, usw.
Durch anklicken der Checkbox vor einer Mail und anschließend des Buttons Release wird die mail ins Postfach des Benutzers 'tux' zugestellt.
Aufräumscripte
Damit die SQL-Datenbank nicht endlos in die Größe wächst, werden hier zwei Scripts erstellt, die alte Nachrichten und in Quarantäne befindliche Nachrichten nach einer definierten Anzahl von Tagen löscht.
vi /usr/sbin/amavis_clean
Folgende Zeilen einfügen.
- den Eintrag PWD=amavis_pwd entsprechend oben vergebenen Passwort bearbeiten
- DAYS=20 evtl. anpassen. Nach DAYS-Tagen werden in Quarantäne befindliche Nachrichten gelöscht.
#!/bin/bash DB=amavis USER=amavis PWD=amavis_pwd DAYS=14 echo "USE $DB;" >/etc/amavis_clean-msgs.sql mysql -u$USER -p$PWD $DB -B -N -e "SELECT CONCAT('DELETE FROM msgs WHERE mail_id = ', CHAR(39), mail_id, CHAR(39), ' LIMIT 1;' ) FROM msgs WHERE time_iso < NOW() - INTERVAL $DAYS DAY;" >>/etc/amavis_clean-msgs.sql mysql -u$USER -p$PWD </etc/amavis_clean-msgs.sql rm -f /etc/amavis_clean-msgs.sql
Rechte anpassen:
chmod 750 /usr/sbin/amavis_clean
Cronjob, der täglich gestartet wird, anlegen:
vi /etc/cron.daily/amavis_clean
Folgende Zeilen einfügen und den Eintrag PWD=mailzu_pwd entsprechend oben vergebenen Passwort bearbeiten:
#!/bin/bash USER=amavis PWD=amavis_pwd /usr/sbin/amavis_clean /usr/bin/mysql -u$USER -p$PWD < /etc/amavis_clean.sql exit 0
Rechte anpassen:
chmod 750 /etc/cron.d/amavis_clean
SQL-File anlegen, das die Löschbefehle enthält:
vi /etc/amavis_clean.sql
Folgende Zeilen einfügen:
USE mailzu; DELETE FROM msgs WHERE time_iso < now() - INTERVAL 1 hour AND content IS NULL; DELETE FROM maddr WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE sid=id) AND NOT EXISTS (SELECT 1 FROM msgrcpt WHERE rid=id); DELETE FROM quarantine WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE mail_id=quarantine.mail_id); DELETE FROM msgrcpt WHERE NOT EXISTS (SELECT 1 FROM msgs WHERE mail_id=msgrcpt.mail_id); DELETE FROM msgs WHERE mail_id IN (SELECT DISTINCT mail_id FROM msgrcpt WHERE rs='D');
Optional: Squirrelmail-Plugin
Mit Hilefe des Squirrelmail-Plugins amavisnewsql kann jeder User Policies (Verhalten) von AmavisD selbst einstellen. Dieses Plugin sollte analog oben beschriebenem → Mailzu eine Verwaltung der AmavisD-Quarantäne enthalten, die leider nicht funktioniert, sodass hier zwei Lösungen nötig sind: Zum Einstellen der Policies Squirrelmail+amavisnewsql und zum Ansehen, Löschen oder Zustellen von Quarantäne-Mails Mailzu.
Voraussetzung:
Installation des Plugins
cd /usr/local/src wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Famavisnewsql-0.8.0-1.4.tar.gz tar xvf amavisnewsql-0.8.0-1.4.tar.gz cp amavisnewsql/config.php.dist amavisnewsql/config.php chown -R www-data:www-data amavisnewsql mv amavisnewsql /usr/share/squirrelmail/plugins/
Konfiguration
cd /usr/share/squirrelmail/plugins/amavisnewsql vi config.php
Verbindung zur Amavis-SQL-Datenbank (amavis_pwd durch das im Kapitel Mailzu vergebene Amavis Passwort ersetzen):
$CONFIG["dsn"] = 'mysql://amavis:amavis_pwd@localhost/amavis';
Setzen der Domain (domain.org an die tatsächliche Domain anpassen):
$CONFIG["default_domain"] = "domain.org";
Web-Adresse von Squirrelmail setzen (domain.org durch die IP_Des_Server oder durch die reale Domain ersetzen, unter der Squirrelmail aus dem Internet erreichbar ist)
$CONFIG["webmail_url"] = "http://domain.org/squirrelmail";
Emailadresse anpassen:
$CONFIG["digest_from"] = '"Spam Assassin" <noreply@domain.org>';
Plugin amavisnewsql, wie in → Squirrelmail beschrieben, aktivieren.
Funktionstest
- Squirrelmail im Webbrowser aufrufen: "http://IP_Des_Server/squirrelmail".
- Mit User-Daten (z.B. Tux/Pux_PWD) einloggen.
- Menüpunkt Options anwählen
- Unterpunkt SpamAssassin Configuration anwählen
- Im oberen Bereich können Email-Adressen zu White-und Blacklists hinzugefügt werden. Die Adressen der Whitelist werden immer akzeptiert und als Spamfrei gekennzeichnet. Mails von Absendern der Blacklist werden immer als Spam deklariert, selbst wenn die restlichen Kriterien nicht erfüllt wären. Hier je nach Belieben Mailadressen zu den beiden Listen hinzufügen.
- Im unteren Bereich kann eine der vorgegebenen Spam-Policies gewählt werden, bzw. eine selbst definiert werden. Die beiden Werte bedeuten dabei: Tag Level: Mails mit einem Score höher als dieser Wert, werden als Spam deklariert (X-Spam-Flag=True); Kill-Level: Liegt der Score über diesem Wert wird die Mail in Quarantäne genommen, bzw. sofort gelöscht.
- In der Mitte wird das Verhalten eingestellt. Hier kann eingestellt werden, wie oft ein Quarantäne-Report verschickt werden soll (z.B. Daily), Wie lange Mails in der Quarantäne verbleiben sollen (z.B. 14 Tage) und ob Mails rejected oder in Quarantäne gestellt werden sollen. Hier sollte Quarantäne gewählt werden.