Postfix Konfiguration · 8 min read · Jan 12, 2026

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Squeeze) - 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 so 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-vermeidende 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-positiv 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 der # Anweisungen, die Sie in dieser Datei verwenden können # $pax='pax'; #------------ Ändern Sie nichts unterhalb 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 amavisd-new und ClamAV neu zu starten:

adduser clamav amavis  
 /etc/init.d/amavis restart  
 /etc/init.d/clamav-daemon restart  
 /etc/init.d/clamav-freshclam 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'

Fügen Sie danach 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 -o smtpd_bind_address=127.0.0.1 |

Dann starten Sie Postfix neu:

/etc/init.d/postfix restart

Führen Sie jetzt aus

netstat -tap

und Sie sollten sehen, dass Postfix (master) auf Port 25 (smtp) und 10025 hört, 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/Programmnamen  
 tcp      0      0  *:sunrpc                *:*                     LISTEN      605/portmap  
 tcp      0      0  *:ssh                   *:*                     LISTEN      1110/sshd  
 tcp      0      0  *:55384                 *:*                     LISTEN      617/rpc.statd  
 tcp      0      0  *:smtp                  *:*                     LISTEN      23615/master  
 tcp      0      0  localhost.localdo:10024 *:*                     LISTEN      22454/amavisd  (mast  
 tcp      0      0  localhost.localdo:10025 *:*                     LISTEN      23615/master  
 tcp      0      0  localhost.localdo:mysql   *:*                     LISTEN      3838/mysqld  
 tcp      0      52  server1.example.com:ssh 192.168.0.199:3809      ESTABLISHED 1136/0  
 tcp6     0      0  [::]:pop3               [::]:*                 LISTEN      19519/couriertcpd  
 tcp6     0      0  [::]:imap2              [::]:*                 LISTEN      19476/couriertcpd  
 tcp6     0      0  [::]:www                [::]:*                 LISTEN      4429/apache2  
 tcp6     0      0  [::]:ssh                [::]:*                 LISTEN      1110/sshd  
 tcp6     0      0  [::]:imaps              [::]:*                 LISTEN      19503/couriertcpd  
 tcp6     0      0  [::]:pop3s              [::]:*                 LISTEN      19536/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 Debian Squeeze-Repositories nicht verfügbar, also 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.138  
 ./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 sagen, 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 - DCC-Nachrichtenkontrollen durchführen. # # 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.

Starten Sie danach amavisd-new neu:

/etc/init.d/amavis restart

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

sa-update --no-gpg

(Nun werden wir einen Cron-Job erstellen. Standardmäßig öffnet der Befehl crontab -e den Nano-Editor auf Debian Squeeze. Wenn Sie an vi gewöhnt sind, möchten Sie dies möglicherweise ändern:

update-alternatives --config editor

Wählen Sie Ihren bevorzugten Editor:

root@server1:/tmp/dcc-dccproc-1.3.138# update-alternatives –config editor
Es gibt 3 Auswahlmöglichkeiten für den alternativen Editor (der /usr/bin/editor bereitstellt).

Auswahl Pfad Priorität Status

  • 0 /bin/nano 40 Automatikmodus
    1 /bin/nano 40 manuellem Modus
    2 /usr/bin/vim.nox 40 manuellem Modus
    3 /usr/bin/vim.tiny 10 manuellem Modus

Drücken Sie die Eingabetaste, um die aktuelle Auswahl[*] beizubehalten, oder geben Sie die Auswahlnummer ein: <– 2
update-alternatives: Verwendung von /usr/bin/vim.nox, um /usr/bin/editor (Editor) im manuellen Modus bereitzustellen.
root@server1:/tmp/dcc-dccproc-1.3.138#

)

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 |

11 Benachrichtigungen bei Überschreitung des Kontingents

Wenn Sie Benachrichtigungen über alle E-Mail-Konten erhalten möchten, die über dem Kontingent 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 "An: $_\n"} @POSTMASTERS; print "Von: $COADDR\n"; print "Betreff: Täglicher Kontingentsbericht.\n"; print "TÄGLICHER KONTINGENTBERICHT:\n\n"; print "----------------------------------------------\n"; print "| % NUTZUNG | KONTO NAME |\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); } #senden Sie eine Warnung an Personen über dem Kontingent if ($MAIL_WARNING) { foreach my $luser (keys (%lusers)) { next unless $lusers{$luser} >= $WARNPERCENT; # überspringen Sie diejenigen unter dem Kontingent open(MAIL, "| $MAILPROG"); select(MAIL); print "An: $luser\n"; map {print "BCC: $_\n"} @POSTMASTERS; print "Von: $SUADDR\n"; print "Betreff: WARNUNG: Ihr Postfach ist $lusers{$luser}% voll.\n"; print "Antwort-an: $SUADDR\n"; print "Ihr Postfach: $luser ist $lusers{$luser}% voll.\n\n"; print "Sobald Ihr E-Mail-Postfach Ihr monatliches Speicher-Kontingent ü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 "Kontakt <$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.