Postfix Konfiguration · 8 min read · Jan 17, 2026

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Ubuntu 12.04 LTS) - Seite 3

9 Installieren Sie amavisd-new, SpamAssassin und ClamAV

Um amavisd-new, spamassassin und clamav zu installieren, führen Sie den folgenden Befehl aus:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

Danach müssen wir amavisd-new konfigurieren. Die Konfiguration ist in verschiedene Dateien aufgeteilt, die sich im Verzeichnis /etc/amavis/conf.d befinden. Schauen Sie sich jede von ihnen an, um sich mit der Konfiguration vertraut zu machen. Die meisten Einstellungen sind in Ordnung, jedoch müssen wir drei Dateien ändern:

Zuerst müssen wir ClamAV und SpamAssassin in /etc/amavis/conf.d/15-content_filter_mode aktivieren, indem wir die Zeilen @bypass_virus_checks_maps und @bypass_spam_checks_maps einkommentieren:

vi /etc/amavis/conf.d/15-content_filter_mode

Die Datei sollte folgendermaßen aussehen:

| use strict; # Sie können diese Datei ändern, um die SPAM-Prüfung durch spamassassin wieder zu aktivieren # und um die Antivirus-Prüfung wieder zu aktivieren. # # Standardmodus für die Antivirus-Prüfung # Bitte beachten Sie, dass die Antivirus-Prüfung standardmäßig DEAKTIVIERT ist. # Wenn Sie sie aktivieren möchten, kommentieren Sie bitte die folgenden Zeilen ein: @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # Standardmodus für die SPAM-Prüfung # Bitte beachten Sie, dass die Anti-Spam-Prüfung standardmäßig DEAKTIVIERT ist. # Wenn Sie sie aktivieren möchten, kommentieren Sie bitte die folgenden Zeilen ein: @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # sicherstellen, dass ein definierter Rückgabewert vorhanden ist |

Und dann sollten Sie sich die Spam-Einstellungen und die Aktionen für Spam-/Virus-E-Mails in /etc/amavis/conf.d/20-debian_defaults ansehen. Es ist nicht notwendig, etwas zu ändern, wenn die Standardeinstellungen für Sie in Ordnung sind. Die Datei enthält viele Erklärungen, sodass es nicht notwendig ist, die Einstellungen hier zu erklären:

vi /etc/amavis/conf.d/20-debian_defaults

| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # Quarantäneverzeichnis-Hashing aktivieren $log_recip_templ = undef; # deaktivieren Sie die Protokolleinträge auf Empfängerebene 0 $DO_SYSLOG = 1; # über syslogd protokollieren (bevorzugt) $syslog_ident = 'amavis'; # syslog-Identifikations-Tag, der allen Nachrichten vorangestellt wird $syslog_facility = 'mail'; $syslog_priority = 'debug'; # auf info umschalten, um Debug-Ausgaben usw. zu reduzieren $enable_db = 1; # Verwendung von BerkeleyDB/libdb aktivieren (SNMP und Nanny) $enable_global_cache = 1; # Verwendung des libdb-basierten Caches aktivieren, wenn $enable_db=1 $inet_socket_port = 10024; # Standard-Listening-Socket $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # Spam-Info-Header hinzufügen, wenn auf oder über diesem Niveau $sa_tag2_level_deflt = 6.31; # 'Spam erkannt'-Header auf diesem Niveau hinzufügen $sa_kill_level_deflt = 6.31; # löst Spam-abweisende Maßnahmen aus $sa_dsn_cutoff_level = 10; # Spam-Niveau, über dem kein DSN gesendet wird [...] $final_virus_destiny = D_DISCARD; # (Daten gehen nicht verloren, siehe Virusquarantäne) $final_banned_destiny = D_BOUNCE; # D_REJECT, wenn Front-End-MTA $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Falsch-positive anfällig (für Spam) [...] |

Schließlich bearbeiten Sie /etc/amavis/conf.d/50-user und fügen Sie die Zeile $pax=’pax’; in der Mitte hinzu:

vi /etc/amavis/conf.d/50-user

| use strict; # # Platzieren Sie hier Ihre Konfigurationsanweisungen. Sie überschreiben die in # früheren Dateien. # # Siehe /usr/share/doc/amavisd-new/ für Dokumentation und Beispiele von # den Anweisungen, die Sie in dieser Datei verwenden können # $pax='pax'; #------------ Ändern Sie nichts unter dieser Zeile ------------- 1; # sicherstellen, dass ein definierter Rückgabewert vorhanden ist |

Danach führen Sie diese Befehle aus, um den clamav-Benutzer zur amavis-Gruppe hinzuzufügen und um amavisd-new und ClamAV neu zu starten:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restart

Jetzt müssen wir Postfix konfigurieren, um eingehende E-Mails durch amavisd-new zu leiten:

postconf -e ‘content_filter = amavis:[127.0.0.1]:10024’
postconf -e ‘receive_override_options = no_address_mappings’

Danach fügen Sie die folgenden Zeilen zu /etc/postfix/master.cf hinzu:

vi /etc/postfix/master.cf

| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |

Dann starten Sie Postfix neu:

/etc/init.d/postfix restart

Jetzt führen Sie

netstat -tap

und Sie sollten sehen, dass Postfix (master) auf Port 25 (smtp) und 10025 lauscht und amavisd-new auf Port 10024:

root@server1:/etc/courier# netstat -tap
Aktive Internetverbindungen (Server und etabliert)
Proto Recv-Q Send-Q Lokale Adresse Fremde Adresse Zustand PID/Programmname
tcp 0 0 localhost.localdo:10025 : LISTEN 25911/master
tcp 0 0 localhost.localdo:mysql : LISTEN 3895/mysqld
tcp 0 0 :http : LISTEN 4845/apache2
tcp 0 0
:ssh : LISTEN 649/sshd
tcp 0 0 :smtp : LISTEN 25911/master
tcp 0 0 localhost.localdo:10024
: LISTEN 24534/amavisd (mast
tcp 0 52 server1.example.com:ssh 192.168.0.199:4745 ESTABLISHED 847/0
tcp6 0 0 [::]:pop3 [::]:
LISTEN 20989/couriertcpd
tcp6 0 0 [::]:imap2 [::]: LISTEN 20921/couriertcpd
tcp6 0 0 [::]:ssh [::]:
LISTEN 649/sshd
tcp6 0 0 [::]:smtp [::]: LISTEN 25911/master
tcp6 0 0 [::]:imaps [::]:
LISTEN 20958/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 21026/couriertcpd
root@server1:/etc/courier#


### 10 Installieren Sie Razor, Pyzor und DCC und konfigurieren Sie SpamAssassin

Razor, Pyzor und DCC sind Spamfilter, die ein kollaboratives Filternetzwerk verwenden. Um Razor und Pyzor zu installieren, führen Sie aus:

apt-get install razor pyzor


DCC ist in den Ubuntu 12.04-Repositories nicht verfügbar, daher installieren wir es wie folgt:

cd /tmp  
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z  
tar xzvf dcc-dccproc.tar.Z  
cd dcc-dccproc-1.3.142  
./configure --with-uid=amavis  
make  
make install  
chown -R amavis:amavis /var/dcc  
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

Jetzt müssen wir SpamAssassin mitteilen, dass es diese drei Programme verwenden soll. Bearbeiten Sie /etc/spamassassin/local.cf und fügen Sie die folgenden Zeilen hinzu:

vi /etc/spamassassin/local.cf



| ```
[...]  
#dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Dann müssen wir das DCC-Plugin in SpamAssassin aktivieren. Öffnen Sie /etc/spamassassin/v310.pre und kommentieren Sie die Zeile loadplugin Mail::SpamAssassin::Plugin::DCC ein:

vi /etc/spamassassin/v310.pre

| [...] # DCC - führen Sie DCC-Nachrichtentests durch. # # DCC ist hier deaktiviert, da es nicht Open Source ist. Siehe die DCC # Lizenz für weitere Details. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |

Sie können Ihre SpamAssassin-Konfiguration überprüfen, indem Sie ausführen:

spamassassin --lint

Es sollten keine Fehler angezeigt werden.

Jetzt gibt es einen kleinen Fehler im amavisd-new-Init-Skript. Öffnen Sie /etc/init.d/amavis…

vi /etc/init.d/amavis

… und kommentieren Sie die Zeile STOP=”–stop –quiet –pidfile $PIDFILE –name ${DAEMONNAME}” aus und fügen Sie stattdessen STOP=”–stop –quiet –pidfile $PIDFILE” hinzu:

| [...] set -e START="--start --quiet --pidfile $PIDFILE --name ${DAEMONNAME} --startas ${DAEMON}" #STOP="--stop --quiet --pidfile $PIDFILE --name ${DAEMONNAME}" STOP="--stop --quiet --pidfile $PIDFILE" PARAMS= check_noncompatible_upgrade() [...] |

Starten Sie amavisd-new danach neu:

/etc/init.d/amavis restart

Jetzt aktualisieren wir unsere SpamAssassin-Regelsätze wie folgt:

sa-update --no-gpg

Wir erstellen einen Cron-Job, damit die Regelsätze regelmäßig aktualisiert werden. Führen Sie aus:

crontab -e

um den Cron-Job-Editor zu öffnen. Erstellen Sie den folgenden Cron-Job:

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

Dies wird die Regelsätze jeden zweiten Tag um 4:23 Uhr aktualisieren.

11 Benachrichtigungen bei Quota-Überschreitung

Wenn Sie Benachrichtigungen über alle E-Mail-Konten erhalten möchten, die über dem Limit liegen, erstellen Sie die Datei /usr/local/sbin/quota_notify:

cd /usr/local/sbin/
vi quota_notify

| #!/usr/bin/perl -w # Autor <[email protected]> # # Dieses Skript geht davon aus, dass virtual_mailbox_base in der main.cf-Datei von postfix definiert ist. Dieses Verzeichnis wird angenommen, dass es Verzeichnisse enthält, die selbst die Maildirs Ihrer virtuellen Benutzer enthalten. # Zum Beispiel: # # -----------/ # | # | # home/vmail/domains/ # | | # | | # example.com/ foo.com/ # | # | # ----------------- # | | | # | | | # user1/ user2/ user3/ # | # | # maildirsize # use strict; my $POSTFIX_CF = "/etc/postfix/main.cf"; my $MAILPROG = "/usr/sbin/sendmail -t"; my $WARNPERCENT = 80; my @POSTMASTERS = ('[email protected]'); my $CONAME = 'Mein Unternehmen'; my $COADDR = '[email protected]'; my $SUADDR = '[email protected]'; my $MAIL_REPORT = 1; my $MAIL_WARNING = 1; #get virtual mailbox base from postfix config open(PCF, "< $POSTFIX_CF") or die $!; my $mboxBase; while () { next unless /virtual_mailbox_base\s*=\s*(.*)\s*/; $mboxBase = $1; } close(PCF); #nehmen Sie an, dass eine Ebene von Unterverzeichnissen für Domainnamen vorhanden ist my @domains; opendir(DIR, $mboxBase) or die $!; while (defined(my $name = readdir(DIR))) { next if $name =~ /^\.\.? ; # überspringen Sie '.' und '..' next unless (-d "$mboxBase/$name"); push(@domains, $name); } closedir(DIR); #durchlaufen Sie die Domains für Benutzername/maildirsize-Dateien my @users; chdir($mboxBase); foreach my $domain (@domains) { opendir(DIR, $domain) or die $!; while (defined(my $name = readdir(DIR))) { next if $name =~ /^\.\.? ; # überspringen Sie '.' und '..' next unless (-d "$domain/$name"); push(@users, {"$name\@$domain" => "$mboxBase/$domain/$name"}); } } closedir(DIR); #get user quotas and percent used my (%lusers, $report); foreach my $href (@users) { foreach my $user (keys %$href) { my $quotafile = "$href->{$user}/maildirsize"; next unless (-f $quotafile); open(QF, "< $quotafile") or die $!; my ($firstln, $quota, $used); while () { my $line = $_; if (! $firstln) { $firstln = 1; die "Fehler: beschädigte quotafile $quotafile" unless ($line =~ /^(\d+)S/); $quota = $1; last if (! $quota); next; } die "Fehler: beschädigte quotafile $quotafile" unless ($line =~ /\s*(-?\d+)/); $used += $1; } close(QF); next if (! $used); my $percent = int($used / $quota * 100); $lusers{$user} = $percent unless not $percent; } } #senden Sie einen Bericht an die Postmaster if ($MAIL_REPORT) { open(MAIL, "| $MAILPROG"); select(MAIL); map {print "To: $_\n"} @POSTMASTERS; print "From: $COADDR\n"; print "Subject: Täglicher Quota-Bericht.\n"; print "TÄGLICHER QUOTA-BERICHT:\n\n"; print "----------------------------------------------\n"; print "| % NUTZUNG | KONTONAME |\n"; print "----------------------------------------------\n"; foreach my $luser ( sort { $lusers{$b} <=> $lusers{$a} } keys %lusers ) { printf("| %3d | %32s |\n", $lusers{$luser}, $luser); print "---------------------------------------------\n"; } print "\n--\n"; print "$CONAME\n"; close(MAIL); } #E-Mail-Warnung an Personen über dem Limit senden if ($MAIL_WARNING) { foreach my $luser (keys (%lusers)) { next unless $lusers{$luser} >= $WARNPERCENT; # überspringen Sie diejenigen unter dem Limit open(MAIL, "| $MAILPROG"); select(MAIL); print "To: $luser\n"; map {print "BCC: $_\n"} @POSTMASTERS; print "From: $SUADDR\n"; print "Subject: WARNUNG: Ihr Postfach ist $lusers{$luser}% voll.\n"; print "Reply-to: $SUADDR\n"; print "Ihr Postfach: $luser ist $lusers{$luser}% voll.\n\n"; print "Sobald Ihr E-Mail-Postfach Ihr monatliches Speicherlimit überschreitet\n"; print "wird Ihre monatliche Abrechnung automatisch angepasst.\n"; print "Bitte ziehen Sie in Betracht, E-Mails zu löschen und Ihren Papierkorb zu leeren, um Platz zu schaffen.\n\n"; print "Kontaktieren Sie <$SUADDR> für weitere Unterstützung.\n\n"; print "Danke.\n\n"; print "--\n"; print "$CONAME\n"; close(MAIL); } } |

Stellen Sie sicher, dass Sie die Variablen oben anpassen (insbesondere die [email protected] E-Mail-Adresse).

Wir müssen die Datei ausführbar machen:

chmod 755 quota_notify 

Führen Sie aus

crontab -e

um einen Cron-Job für dieses Skript zu erstellen:

| 0 0 * * * /usr/local/sbin/quota_notify &> /dev/null |

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.