[Postfixbuch-users] Zu hohe Prozessorlast mit Amavis und Postfix unter Solaris 10

Patric Siegrist patric at sigisworld.ch
Mo Sep 4 15:14:36 CEST 2006


Hallo Liste,

Ich bin bei einem Kunden dabei, ein bestehendes Postfix Relay um
Antispam-Funktionalität zu erweitern.
Die bestehenden Relays sind zwei Sun SPARC Maschinen mit Solaris 10 auf
aktuellem Patchlevel.

In folgender Reihenfolge sollte das ganze funktionieren:

1. Postfix nimmt das Mail aufgrund der smtpd_recipient_restrictions
   in Kombination mit policyd-weight entweder an oder nicht
   -> smtpd auf Port 25
2. Antispam durch Amavis mit Spamassassin, Razor2, DCC
   -> amavisd auf Port 10023
3. Antivirenscan durch Trend Micro Appliance
   -> reinsert von amavisd auf Port 10024, Weitergabe an Trend Micro
      Appliance durch cntfilter der master.cf
4. Reinsert vom AV-Scanner in Postfix für finale Auslieferung an
   den Groupwise Server
   -> reinsert von Trend Micro auf Port 10025 des Postfix

Eigentlich funktioniert das ganze, nur hab ich das Problem, dass sich
nach ein paar Minuten mit der aktuellen Konfiguration die beiden AMAVIS
Prozesse auf 100% Prozessorlast aufschaukeln und Postfix die Mails in
der Queue behält nach dem diese vom Virenscanner zurück kommen und nicht
mehr respektive nur noch extrem verzögert an Groupwise ausliefert.
In der master.cf von Postfix sowie in der amavisd.conf ist Amavis auf
zwei Masterprozesse limitiert.

Sobald ich den content_filter in der main.cf von Postfix wieder entferne
und postfix reloade, werden die Mails wieder ausgeliefert.

Meine Frage ist nun, ob jemand von Euch einen Elementaren Fehler von mir
sieht, auf den sich die Performance-Probleme zurückführen lassen würden.
Ich habe schon etliche Stunden in den Listenarchiven und über Tante
Google gesucht, werde aber nicht wirklich schlau daraus. Meine Vermutung
desshalb, dass ich mal wieder vor lauter Bäumen den Wald nicht mehr
sehe.

Grundsätzlich nimmt das Relay im Schnitt etwa 400 Mails pro Stunde an,
es sind teilweise auch einige Mails drunter die etwas grösser sind,
wobei AMAVIS so eingestellt ist, dass er Content grösser als 512Kb nicht
prüft.

Postfix ist Release 2.3.2, alles andere wurde mit den aktuellsten
Versionen frisch kompiliert. Nachfolgend die relevanten Auszüge der
Konfigurationsdateien. Ich habe es auf Wunsch des Kunden etwas
anonymisiert (nur IP und Hostnamen).

#########################
#### Start Konfigs ######
#########################

############## postfix: master.cf  #####################

#---------------------------
# policyd-weight
#---------------------------
127.0.0.1:12525 inet    n       n       n       -       -       spawn
  user=polw argv=/usr/bin/perl /usr/local/libexec/postfix/policyd-weight


#---------------------------
# deliver to AMaViS
#---------------------------
amavis  unix  -  -  n  -  2  smtp
      -o smtp_data_done_timeout=1200
      -o disable_dns_lookups=yes

#-----------------------------------
# reinsert scanned mail from amavis
#-----------------------------------
10024     inet  n       -       y       -       -       smtpd
        -o cleanup_service_name=cleanup-nochecks
        -o content_filter=cntfilter:av2.clientdomain.ch:10024
        -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

#---------------------------
# deliver to trendmicro
#---------------------------
cntfilter unix  -       -       y       -       -       smtp
        -o smtp_data_done_timeout=1200
        -o disable_dns_lookups=yes
        -o fallback_relay=av2.clientdomain.ch:10024

#--------------------------------------
# reinsert scanned mail from trendmicro
#--------------------------------------
10025     inet  n       -       y       -       -       smtpd
        -o cleanup_service_name=cleanup-nochecks
        -o content_filter=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8,192.168.16.0/24
        -o myhostname=mx1.clientdomain.ch


############## postfix: main.cf  #####################

smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unauth_destination,
        reject_unauth_pipelining,
        check_helo_access dbm:/etc/postfix/helo_access,
        check_sender_access dbm:/etc/postfix/sender_access,
        check_recipient_access dbm:/etc/postfix/recipient_access,
        check_client_access dbm:/etc/postfix/client_exceptions,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unknown_sender_domain,
        check_policy_service inet:127.0.0.1:12525

smtpd_helo_required = yes
smtpd_delay_reject  = yes
strict_rfc821_envelopes = yes
127.0.0.1:12525_time_limit = 3600
max_idle = 600s
smtpd_policy_service_timeout = 240s
smtpd_policy_service_max_idle = 900s
smtpd_policy_service_max_ttl  = 900s
smtpd_hard_error_limit = 10
smtpd_soft_error_limit = 8
minimal_backoff_time = 330
queue_run_delay = 120

content_filter = amavis:[127.0.0.1]:10023


############## amavisd: amavisd.conf  #####################

#virenscanner von deaktiviert, scanning durch trend micro appliance
@bypass_virus_checks_maps = (1);

$daemon_user  = 'amavis';
$daemon_group = 'amavis';

$mydomain = ‘clientdomain.ch’;
$myhostname = ‘mail.clientdomain.ch’;

$inet_socket_port = 10023;

$remove_existing_x_scanned_headers = 1;
$sa_tag_level_deflt  = -1000;

$forward_method = 'smtp:[127.0.0.1]:10024';
$notify_method = $forward_method;

$final_spam_destiny = D_PASS;

#########################
#### Ende Konfigs #######
#########################


Falls Ihr noch postconf -n resp. Logauszüge etc. benötigt, kann ich das
leider erst am Mittwoch liefern, da ich erst dann wieder beim Kunden
bin.

Vielen Dank für Eure Hilfe und eine gute Woche weiterhin,

Gruss Patric



Mehr Informationen über die Mailingliste Postfixbuch-users