Debian AmavisD
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 libnet-ldap-perl apt-get --yes install libunix-syslog-perl libnet-dns-perl libberkeleydb-perl apt-get --yes install libauthen-sasl-perl libmail-dkim-perl libio-socket-ssl-perl libnet-ident-perl apt-get --yes install imagemagick apt-listchanges
Pear PHP-Manager:
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
- Das Paket NET_IMAP enthält einen Bug, der relativ einfach gefixt werden kann:
(Details zum Bug und Lösung siehe auch http://pear.php.net/bugs/bug.php?id=3438):
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 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
Konfiguration
Spamassassin
vi /etc/default/spamassassin
Spamassassin aktivieren:
ENABLED=1
Plugin DKIM:
vi /etc/spamassassin/v312.pre
DKIM Plugin aktivieren (#-Zeichen entfernen):
loadplugin Mail::SpamAssassin::Plugin::DKIM
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.
vi /etc/spamassassin/v310.pre
DCC Plugin aktivieren (#-Zeichen entfernen):
loadplugin Mail::SpamAssassin::Plugin::DCC
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
Spamassassin Regeln updaten:
sa-update
ClamAV
adduser clamav amavis adduser amavis clamav /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:
- 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_banned_destiny = D_BOUNCE; $final_spam_destiny = D_DISCARD; $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; # disable DKIM - for now $enable_dkim_verification = 0; # enable DKIM signatures verification $enable_dkim_signing = 0; # load DKIM signing code, keys defined by dkim_key # 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; # 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
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.