PART 1 – Installation SMTP mit PostgreSQL als Backend
- Postfix 2.3.8 (Debian)
- PostgreSQL 8.1.9 (Debian)
DB Schema: mailserver.sql.gz
1. Installation
aptitude install postfix postfix-pgsql postgresql-8.1 postgresql-plperl-8.1
2. Postfix – Anbindung Postfix an PostgreSQL mit virtuellen Domains
Setzten des Passworts für User PostgreSQL Admin ‘postgres’
# su postgres # psql -d template1 -U postgres
ALTER user postgres WITH password 'neuespasswort';
Anlegen eines Datenbankusers und einer Datenbank
# psql -h localhost -U postgres
CREATE ROLE mailserver WITH LOGIN PASSWORD 'userpasswort'; CREATE DATABASE mailserver OWNER mailserver;
Importieren des Datenbankschemas
# wget http://www.tuxj0b.de/files/mailserver.sql.gz # sed "s/postgres/mailserver/g" mailserver.sql > mailserver.sql.new # psql -h localhost -U postgres -d mailserver < mailserver.sql.new # psql -h localhost -U postgres -d mailserver
ALTER SCHEMA public OWNER TO mailserver; REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO mailserver; GRANT ALL ON SCHEMA public TO PUBLIC;
Editieren der main.cf von Postfix
# System # mail_name = Mailserver smtpd_banner = $myhostname ESMTP append_at_myorigin = yes append_dot_mydomain = yes biff = yes bounce_queue_lifetime = 5d maximal_queue_lifetime = 5d default_process_limit = 100 # 15 MB message_size_limit = 15728640 transport_maps = pgsql:/etc/postfix/transport_maps # Network # myhostname = mail.tuxj0b.de mydomain = localhost.localdomain mynetworks = 127.0.0.1/32 inet_interfaces = 192.168.15.100, 127.0.0.1 inet_protocols = ipv4 disable_dns_lookups = no # Lokal # myorigin = /etc/mailname mydestination = $mydomain, localhost local_recipient_maps = $alias_maps alias_maps = hash:/etc/aliases # Mailboxes # mail_spool_directory = /var/spool/mail mailbox_size_limit = 0 recipient_delimiter = + # Virtual # virtual_mailbox_domains = pgsql:/etc/postfix/virtual_mailbox_domains virtual_alias_maps = pgsql:/etc/postfix/virtual_alias_maps virtual_mailbox_base = /srv/mail/ virtual_mailbox_maps = pgsql:/etc/postfix/virtual_mailbox_maps virtual_uid_maps = pgsql:/etc/postfix/virtual_uid_maps virtual_gid_maps = pgsql:/etc/postfix/virtual_gid_maps # Restrictions # smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination permit
Editieren der virtual_mailbox_domains
# /etc/postfix/virtual_mailbox_domains
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT domain('%s');
Editieren der virtual_alias_maps
# /etc/postfix/virtual_alias_maps
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT address('%s');
Editieren der virtual_mailbox_maps
# /etc/postfix/virtual_mailbox_maps
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT system_home('%u','%d')
Editieren der virtual_uid_maps
# /etc/postfix/virtual_uid_maps
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT uid('%u','%d');
Editieren der virtual_gid_maps
# /etc/postfix/virtual_gid_maps
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT gid('%u','%d');
Editieren der transport_maps
# /etc/postfix/transport_maps
hosts = 127.0.0.1
user = mailserver
password = password
dbname = mailserver
query = SELECT transport('%d');
SSL von PostgreSQL abschalten, /etc/postgresql/8.1/main/postgresql.conf editieren
ssl = false
Postgre neustarten
/etc/init.d/postgresql-8.1 restart
Postfix neustarten
/etc/init.d/postfix restart
Ab jetzt sollte Postfix lauffähig sein und nach /srv/mail/ seine Mails zustellen.
Generell gibt es zwei Mailboxstorageformate, Mbox und Maildir. Mbox speichert die Mails in eine große Datei und Maildir erstellt pro Mail eine neue Datei.
Mbox hat den Vorteil, dass es sehr leicht zu sichern ist und Maildir hat den Vorteil, dass auch leicht zu sichern ist und wesentlich schneller als Mbox ist.
Meine Wahl ist definitiv Maildir. Das Format bestimmt man, indem man beim Homeverzeichnis des Users angbit ob es sich um eine Datei “tuxj0b.de/freach” oder Verzeichnis “tuxj0b.de/freach/” handelt.
Beachtet auch, dass ihr in der main.cf die Option inet_interfaces auf eure Umgebung anpasst, sonst startet Postfix nicht.
3. Datenbankstruktur
Die Datenbankstruktur sieht 3 Tabellen vor.
- Tabelle: users
In dieser Tabelle wird der Benutzeraccount angelegt. Der Benutzeraccount ist das Postfach indem die Mails auflaufen. Der Benutzeraccount gehört zu einer primären Domain und bekommt über die Tabelle “addresses” die E-Mailadressen per Alias auf seinen Benutzeraccount weitergeleitet.
Beispiel: domain_id 1 = tuxj0b.de / benutzername = freach => Loginname = freach@tuxj0b.de
name = Benutzername z.B. “freach”
pw_hashed = Das gehashte Passwort
system_uid = System User ID z.B. “20000″
system_gid = System Group ID z.B. “20000″
system_home = System Homeverzeichniss ausgehen von in der main.cf definierten Optionvirtual_mailbox_base z.B. “tuxj0b.de/freach/” (MailDir)
domain_id = Primarykey von Tabelle domains z.B. “1″
quota = Quota der Mailbox “0″ = unbegrenzt
- Tabelle: domains
Hier werden die für die Aliase und Benutzeraccounts benötigten Domains eingetragen.
name = Domain z.B. “tuxj0b.de”
transport = Mailtransport für die Domain ist immer “virtual:” (andere Transports sind bei dieser Konfig bisher noch nicht unterstützt)
- Tabelle: addresses
In dieser Tabelle werden die Aliase (Weiterleitungen) auf Benutzeraccounts, andere Aliase oder externe Adressen eingetragen.
name = E-Mailadresse von der weitergeleitet werden soll auf Benutzeraccounts, Alias oder externe Adresse z.B. info@tuxj0b.de
domain_id = Domain ID der Domain auf die weitergeleitet werden soll z.B. 1 (bei internen Accounts)
user_id = Falls die Adresse auf einen Benutzeraccount zeigt wird hier die User ID eingetragen z.B. 1 (bei internen Accounts)
relay = Feld für die Mailadresse, falls auf einen Alias oder eine externe E-Mail weitergeleitet werden soll z.B. “info@tuxj0b.de” oder “webmaster@heise.de”
4. Filesystemzugriffsrechte
Bedenkt bitte das der Pfad, in dem die Mails abgelegt werden vom konfigurierten User gelesen werden können muss.
Beispiel für die Zugriffsrechte:
virtual_mailbox_base = /srv/mail
system_home = tuxj0b.de/freach/
system_uid = 200000
system_gid = 200000
chmod -R 755 /srv/mail
chown 20000:20000 /srv/mail/tuxj0b.de/freach
chmod 770 /srv/mail/tuxj0b.de/freach
5. Beispiel
Da dies jetzt alles vielleicht noch nicht 100% verständlich war hier ein komplettes Beispiel.
Benutzeraccount: freach
Primärdomain: tuxj0b.de
E-Mailaddresse: freach@tuxj0b.de
Tabelle: domains
id = (automatisch erstellt) 1
name = tuxj0b.de
transport = virtual:
Tabelle: users
id = (automatisch erstellt) 1
name = freach
pw_hashed = passwort
system_uid = 20000
system_gid = 20000
system_home = freach/
domain_id = 1
Tabelle: addresses
id = (automatisch erstellt) 1
domain_id = 1
user_id = 1
SQL INSERTS:
INSERT INTO domains (name,transport) VALUES ('tuxj0b.de','virtual:');
INSERT INTO users (name, pw_hashed, system_uid, system_gid, system_home, domain_id, quota)
VALUES ('freach', 'passwort', 20000, 20000, 'tuxj0b.de/freach/', 1, 0);
INSERT INTO addresses (name, domain_id, user_id) VALUES ('freach@tuxj0b.de', 1, 1);
INSERT INTO addresses (name, relay) VALUES ('root@tuxj0b.de', 'freach@tuxj0b.de');
6. Erklärung
Die system_uid ist die User ID mit der im Linux-Filesystem die Mail angelegt wird, die system_gid entsprechend die Gruppe.
Die User/Gruppen mit den angegebenen IDs müssen nicht auf dem System angelegt sein!
Die Primärdomain (domain_id) in der Tabelle users ist zur Vervollständidung des Logins und repräsentiert keine E-Mailaddresse. Login im obigen Beispiel wäre freach@tuxj0b.de. Natürlich kann es eine E-Mailadresse geben, die genauso heißt und auch auf diesen Account zeigt. Jetzt fragt ihr euch warum so umständlich?
Ja ich sehe ein bei manueller Eingabe alles recht umständlich, aber wenn ihr z.B. ein Webfrontend mit PHP oder Rails schreibt werdet ihr verstehen, dass ich die Datenbank nach den Regeln der Normalisierung entworfen wurde und sämtliche Tabellen durch Fremdschlüssel in den Datensätzen in Verbindung stehen.
7. Test
Getestet werden kann der Mailserver mit Versand einer E-Mail über die Konsole.
# mail -s "Testmai" freach@tuxj0b.de
Dies ist eine Testmail.
.
Nun könnt ihr über die Logdatei prüfen ob die Mail zugestellt wurde. Sieht der Eintrag wie folgt aus, ist alles bestens.
Sep 16 15:45:50 mail postfix/pickup[4143]: 60DE93A7DD: uid=0 from=<root> Sep 16 15:45:50 mail postfix/cleanup[4158]: 60DE93A7DD: message-id=<20070916134550.60DE93A7DD@mail.tuxj0b.de> Sep 16 15:45:50 mail postfix/qmgr[4144]: 60DE93A7DD: from=<root@tuxj0b.de>, size=290, nrcpt=1 (queue active) Sep 16 15:45:50 mail postfix/virtual[4163]: 60DE93A7DD: to=<freach@tuxj0b.de>, relay=virtual, delay=0.09, delays=0.03/0/0/0.06, dsn=2.0.0, status=sent (delivered to maildir) Sep 16 15:45:50 mail postfix/qmgr[4144]: 60DE93A7DD: removed
Jetzt müsstet ihr in eurem Mailverzechnis des Users eine neue Mail vorfinden.
PART 2 – Installation Dovecot, Anbindung Dovecot an PostgreSQL, Authentifizierung Postfix über Dovecot
- Dovecot v.1.0.8. (Sources)
1. Installation Pakete & Kompilieren von Dovecot
# aptitude install autoconf automake1.9 autotools-dev binutils build-essential byacc comerr-dev cpp cpp-4.1 flex g++ g++-4.1 gcc gcc-4.1 gettext html2text libc6-dev libsasl2-dev libsasl2-modules libssl-dev libstdc++6-4.1-dev libtool linux-kernel-headers make zlib1g-dev curl postgresql-dev
Notify Methode inotify
# mkdir -p /usr/local/include/sys # cd /usr/local/include/sys # curl ftp://ftp.kernel.org/pub/linux/kernel/people/rml/inotify/headers/inotify.h -O # curl ftp://ftp.kernel.org/pub/linux/kernel/people/rml/inotify/headers/inotify-syscalls.h >> inotify.h
Herunterladen und entpacken des Dovecot Quellcodes
# cd /usr/src # wget http://dovecot.org/releases/1.0/dovecot-1.0.8.tar.gz # tar xzf dovecot-1.0.8.tar.gz # cd dovecot-1.0.8
Kompilieren des Quellcodes
# ./configure --prefix=/opt/dovecot --with-notify=inotify --with-pgsql --with-pop3d --with-sql-drivers --with-sql # make # make install
2. Konfiguration Dovecot
Dovecot Konfig ‘dovecot-sql.conf’ editieren
Bitte die Querys password_query und user_query jeweils in eine Zeile schreiben, musste aus Editierungsgründen Absätze machen.
# /opt/dovecot/etc/dovecot-sql.conf driver = pgsql connect = host=localhost dbname=mailserver user=mailserver password=passwort default_pass_scheme = CRAM-MD5 password_query = SELECT users.name || '@' || domains.name AS user, users.pw_hashed AS password FROM users INNER JOIN domains ON users.domain_id = domains.id WHERE users.name = '%n' AND domains.name = '%d' user_query = SELECT users.system_home AS home, users.system_uid AS uid, users.system_gid AS gid, 'maildir:storage=' || users.quota || ':ignore=Trash' AS quota FROM users INNER JOIN domains ON users.domain_id = domains.id WHERE users.name = '%n' AND domains.name = '%d'
Dovecot Konfig ‘dovecot.conf’ editieren
## /opt/dovecot/etc/dovecot.conf
## Dovecot configuration file
##
## Network
##
protocols = imap pop3
listen = *
shutdown_clients = yes
##
## Logging
##
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
##
## SSL settings
##
# Disable SSL/TLS support.
ssl_disable = yes
##
## Login processes
##
#login_dir = /var/run/dovecot/login
#login_chroot = yes
login_user = dovecot
login_greeting = Dovecot ready.
##
## Mailbox locations and namespaces
##
mail_location = maildir:/srv/mail/%d/%n
mail_extra_groups = mail
##
## Mail processes
##
dotlock_use_excl = yes
first_valid_uid = 10000
last_valid_uid = 0
first_valid_gid = 10000
last_valid_gid = 0
##
## Mailbox handling optimizations
##
mailbox_idle_check_interval = 30
##
## Maildir-specific settings
##
maildir_copy_with_hardlinks = yes
##
## IMAP specific settings
##
protocol imap {
login_executable = /opt/dovecot/libexec/dovecot/imap-login
mail_executable = /opt/dovecot/libexec/dovecot/imap
mail_plugins = quota imap_quota
mail_plugin_dir = /opt/dovecot/lib/dovecot/imap
login_greeting_capability = yes
imap_client_workarounds = outlook-idle
}
##
## POP3 specific settings
##
protocol pop3 {
login_executable = /opt/dovecot/libexec/dovecot/pop3-login
mail_executable = /opt/dovecot/libexec/dovecot/pop3
pop3_lock_session = no
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
mail_plugin_dir = /opt/dovecot/lib/dovecot/pop3
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
##
## Authentication processes
##
auth_executable = /opt/dovecot/libexec/dovecot/dovecot-auth
auth_cache_size = 0
auth_cache_ttl = 3600
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_username_format = %Lu
disable_plaintext_auth = yes
auth default {
user = root
mechanisms = cram-md5
passdb sql {
args = /opt/dovecot/etc/dovecot-sql.conf
}
userdb sql {
args = /opt/dovecot/etc/dovecot-sql.conf
}
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
##
## Plugin settings
##
plugin {
quota = maildir
}
Init Script für Dovecot einbinden: /etc/init.d/dovecot
#! /bin/bash
DAEMON=/opt/dovecot/sbin/dovecot
OPTIONS="-c /opt/dovecot/etc/dovecot.conf"
test -x $DAEMON || exit 0
set -e
base_dir=`$DAEMON -a|grep '^base_dir: '|sed 's/^base_dir: //'`
pidfile=$base_dir/master.pid
if test -f $pidfile; then
running=yes
else
running=no
fi
case "$1" in
start)
echo -n "Starting Dovecot"
$DAEMON $OPTIONS
echo "."
;;
stop)
if test $running = yes; then
echo "Stopping Dovecot"
kill `cat $pidfile`
echo "."
else
echo "Dovecot is already stopped."
fi
;;
reload)
if test $running = yes; then
echo -n "Reloading Dovecot configuration"
kill -HUP `cat $base_dir/master.pid`
echo "."
else
echo "Dovecot isn't running."
fi
;;
restart|force-reload)
echo -n "Restarting Dovecot"
if test $running = yes; then
kill `cat $base_dir/master.pid`
sleep 1
fi
$DAEMON $OPTIONS
echo "."
;;
*)
echo "Usage: /etc/init.d/dovecot {start|stop|reload|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Rechte für das Init-Script setzten
# chmod 755 /etc/init.d/dovecot
Dovecot Gruppe und User anlegen
# groupadd dovecot # useradd -c "Dovecot User" -d /opt/dovecot -g dovecot -s /bin/false dovecot
Rechte auf das Dovecot Verzeichnis setzten
# chown -R root:dovecot /opt/dovecot # chmod -R 750 /opt/dovecot
Dovecot starten
# /etc/init.d/dovecot start
3. Postfix SMTP Auth über Dovecot
Editieren der Postfix Konfigdatei ‘main.cf’ und anfügen der Authentifizierungsparameter
# Authentification # smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
Ändern des Blocks ‘Restrictions’ in der Postfix Konfigdatei ‘main.cf’
# Restrictions # smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination permit
Neustarten von Postfix
# /etc/init.d/postfix restart
4. Userpasswort auf Passwort HASH Methode CRAM-MD5 ändern
Zum generieren des CRAM-MD5 Passworts hilft das Tool dovecotpw. Dieses generiert aus einem Plaintext Passwort einen gehashten String.
# /opt/dovecot/sbin/dovecotpw -p plainpasswort -s CRAM-MD5
Den ausgegebenen String dann als Passwort für den jeweiligen Benutzer verwenden.
Update des Userpassworts in der PostgreSQL Tabelle ‘users’
# psql -h localhost -U mailserver -d mailserver
UPDATE users SET pw_hashed = 'gehashtespasswort' WHERE name='freach';
5. Test
Testen könnte man jetzt die fertige Konfigurations z.B. mit Thunderbird. Bedenkt, dass der Login mit name@domain.tld angegeben wird, also z.B. freach@tuxj0b.de. In den Accounteinstellungen muss der Punkt “Use secure authentication” aktiviert sein, da das Passwort von Thunderbird gehasht übertragen werden muss.
PART 3 – Antispam
Das Bekämpfen von Spam ist generell eine recht individuelle Angelegenheit. Man kann ein paar Universalmittel einsetzten, wird aber nur mit genauer Analyse des Spams und entsprechender Gegenmaßnahmen eine Trefferquote von über 95% erreichen können.
Um Spam sinvoll bekämpfen zu können setze ich stets auf mehrere Lösungen und versuche alle Bereiche an Filtermechanismen abzudecken.
Zum Einsatz kommt dabei:
- 1. Amavis – Schnittstelle für den Viren- und Spamscanner. Bietet “Black- & Whitelisting” u. MIME-Detection
- 2. Spamassassin – Spamscanner
- 3. ClamAV – Virenscanner
- 4. Razor – Wortanalyse
- 5. Pyzor – Wortanalyse
- 6. DCC – Checksummenprüfung
- 7. Postfix Restrictions
- 8. RBL – DNS basierende Blackliste
1. Installation der Pakete
aptitude install amavisd-new spamassassin clamav clamav-deamon razor pyzor dcc-client bzip2 lzop cabextract freeze lha pax dspam
2. Konfiguration Amavis
Deaktivieren der Domain ACLs in “/etc/amavis/conf.d/05-domain_id”.
Zeile 17: # @local_domains_acl = ( ".$mydomain" );
Einfügen der neuen Domain ACLs in “/etc/amavis/conf.d/50-user”
@local_domains_maps = ( read_hash("$MYHOME/local_domains") );
Bearbeiten der Quarantäne- und Spamassassin-Optionen in “/etc/amavis/conf.d/20-debian_defaults”.
Zeile 21: $QUARANTINEDIR = undef;
Zeile 35: $sa_tag_level_deflt = -100;
Zeile 36: $sa_tag2_level_deflt = 5.11;
Zeile 37: $sa_kill_level_deflt = 5.11;
Zeile 69: $final_spam_destiny = D_Pass;
Aktivieren des Viren- und Spamfilter in “/usr/share/amavis/conf.d/20-package”.
Zeile 8: # @bypass_virus_checks_maps = (1);
Zeile 15: # @bypass_spam_checks_maps = (1);
Hinzufügen von Amavis als Transport für Postfix in “/etc/postfix/master.cf”.
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - n - - 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
Hinzufügen vom konfigurieten Transport Amavis als Contenfilter in “/etc/postfix/main.cf”.
content_filter=smtp-amavis:[127.0.0.1]:10024
3. Konfiguration Razor
# su amavis # razor-admin -create
4. Konfiguration Spamassassin
Einbinden von Razor, Pyzor und DCC in Spamassassin, “/etc/mail/spamassassin/local.cf”.
use_razor2 1 use_dcc 1 use_pyzor 1
Aktivieren des DCC PLugins in “/etc/mail/spamassassin/v310.pre”.
Zeile 19:loadplugin Mail::SpamAssassin::Plugin::DCC
5. Einbinden der Postfix Restrictions
Über diese Regeln wird überprüft ob der Sender die in den SMTP-RFCs definierten Regeln einhält.
Erweitern der smtpd_recipient_restrictions in “/etc/postfix/main.cf”.
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_invalid_hostname reject_non_fqdn_sender reject_unknown_sender_domain reject_non_fqdn_recipient reject_unknown_recipient_domain permit
6. Einbinden der RBLs in Postfix
RBLs gibt es sehr viele daher kann man sich auch selber noch etwas umschauen ob man noch was brauchbares finden kann. Man sollte aber darauf achten nicht
zuviele Listen in Postfix einzubinden und die beste Liste immer zu erst, damit nicht zu viele DNS-Abfragen pro Mail gemacht werden müssen.
Ideal ist es die DNS-Zonen der RBL auf einen lokalen DNS-Server zu transferieren.
Erweitern der smtpd_recipient_restrictions in “/etc/postfix/main.cf”.
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
reject_unauth_destination
reject_invalid_hostname
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_rbl_client dialups.mail-abuse.org
reject_rbl_client dynablock.sorbs.net
reject_rbl_client dnsbl.ahbl.org
reject_rbl_client relays.mail-abuse.org
reject_rbl_client cbl.abuseat.org
reject_rbl_client list.dsbl.org
reject_rbl_client bl.spamcop.net
reject_rbl_client zen.spamhaus.org
permit
7. Aktivieren der Filter
Damit Amavis den Viren- und Spamscanner auf Mails anwendet muss die Empfänger-Domain in den ACLs unter “/var/lib/amavis/local_domains” eingetragen sein. Die Syntax lautet:
.tuxj0b.de .example.com
Wer alle konfigurierten Domains überprüfen möchte, kann folgendes PHP-Script für den Import nutzen, dazu müssen aber die Pakete php5-cli php5-pgsql installiert sein.
<?php
$db = new PDO('pgsql:host=localhost;dbname=database', 'user', 'passwort');
$fd = fopen ("/var/lib/amavis/local_domains", "w+");
$i = 0;
foreach($db->query('SELECT name from domains') as $row)
{
echo 'Syncing: ' . $row[$i] . "\n";
fputs($fd, '.' . $row[$i]);
$i++;
}
echo "Synced $i Domain(s).\n";
fputs($fd, "\n");
fclose($fd);
?>
8. Test
Wenn die Konfiguration abgeschlossen ist können alle Dienste neugestartet werden.
# /etc/init.d/clamav-daemon restart # /etc/init.d/amavis restart # /etc/init.d/postfix restart
Um die Funktion testen zu können, gibt es Teststring, die einen Viren- oder Spamfund auslösen.
Diese Strings werden in eine E-Mail eingefügt und über den geschützten Mailserver verschickt.
Teststring Virus:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Teststring Spam:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X