# Postfix + AMaViSd-new incl. DCC, Razor, Pyzor, Bayes

## holla die waldfee

Hallo zusammen,

hiermit würde ich gerne meine Erfahrungen im Bereich Mailserver, Spam- und Virenfilter mit euch teilen und evt. Fragen zu diesem Thema beantworten.

Dieser Thread wird mit der Zeit nach und nach ausgebaut.

Step by Step

 Postfix

```
emerge postfix

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] mail-mta/postfix-2.0.19

```

main.cf (gekürzt)

```
myhostname = myhost.domain.com

mydomain = domain.com

myorigin = $myhostname

# Alle Netze die über diesen Server versenden dürfen

mynetworks =  127.0.0.0/8

swap_bangpath = no

allow_percent_hack = no

# Nur wers braucht

#transport_maps = hash:/etc/postfix/transport

# Nur wers braucht

#relay_domains = domain.com

# Alle Mails werden an AMaViSd-new übergeben

content_filter = amavis:[127.0.0.1]:10024

# Um Spammer schon an der Haustür abzuweisen

smtpd_recipient_restrictions =

    permit_mynetworks,

    reject_unknown_sender_domain,

    reject_unauth_destination,

    reject_rbl_client relays.ordb.org,

    reject_rbl_client list.dsbl.org,

    reject_rbl_client bl.spamcop.net,

    reject_rbl_client dynablock.njabl.org,

    check_client_access hash:/etc/postfix/access,

    permit

```

master.cf(gekürzt)

```
smtp      inet  n       -       n       -       50      smtpd

localhost:10025 inet    n       -       n       -       20      smtpd -o content_filter=

pickup    fifo  n       -       y       60      1       pickup

cleanup   unix  n       -       y       -       0       cleanup

qmgr      fifo  n       -       y       300     1       qmgr

rewrite   unix  -       -       n       -       -       trivial-rewrite

bounce    unix  -       -       n       -       0       bounce

defer     unix  -       -       n       -       0       bounce

flush     unix  n       -       n       1000?   0       flush

proxymap  unix  -       -       n       -       -       proxymap

smtp      unix  -       -       n       -       -       smtp

relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq

error     unix  -       -       n       -       -       error

local     unix  -       n       n       -       -       local

virtual   unix  -       n       n       -       -       virtual

lmtp      unix  -       -       n       -       -       lmtp

amavis    unix  -       -       n       -       5       smtp

```

 Virenscanner

Ich persönlich halte nicht sehr viel von ClamAV, der beim emergen von AMaViSd-new installiert wird, da die Erkennungsraten noch nicht die gewünschte Qualität haben. Ich empfehle daher VLNX zu emergen. Dies ist der McAfee Virenscanner für Linux. Er liegt in einer Trail Version im Portage Tree.

```
emerge -p vlnx

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] app-antivirus/vlnx-416e

```

 AMaViSd-new

Bei Installation wird auch SpamAssassin durch die Abhängigkeiten installiert.

```
emerge amavisd-new

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] mail-filter/amavisd-new-20030616_p8

```

 SpamAssassin

Systemweite Konfigurationsdatei

```
cat /etc/mail/spamassassin/local.cf

skip_rbl_checks         0

bayes_auto_learn        1

use_bayes               1

bayes_path              /var/lib/amavis/.spamassassin/bayes

use_razor2              1

razor_config            /var/lib/amavis/.razor/razor-agent.conf

use_pyzor               1

pyzor_path              /usr/bin/pyzor

use_dcc                 1

dcc_path                /usr/bin/dccproc

dns_available           yes

```

Wichtig für eine Systemweite Nutzung von Razor und Bayes (z.b. auf einem Relay-Server in einer DMZ) sind die Parameter:

```
razor_config            /var/lib/amavis/.razor/razor-agent.conf

bayes_path              /var/lib/amavis/.spamassassin/bayes

```

Da dies das Homeverzeichnis des Users Amavis ist, welcher später SpamAssassin ausführt. Ansonsten werden die verwendeten Daten unter /var/run/amavis/ angelegt. Da findet sie SpamAssassin natürlich später nicht. (thx to Rootshell. Ich hab mir das einfach mal aus einem Thread von dir geklaut)

Razor

```
emerge razor

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild     R] mail-filter/razor-2.36-r1

```

Um Razor zu benutzen muss man sich registrieren lassen und auf diese Konfigurationsdaten muss SpamAssassin später zugreifen können.

Um uns einiges an arbeit zu ersparen ändern wir kurz die Datei /etc/passwd.

```
amavis:x:1001:408:added by portage for amavisd-new:/var/lib/amavis:/bin/false

in

amavis:x:1001:408:added by portage for amavisd-new:/var/lib/amavis:/bin/sh

```

Danach wechseln wir den User zu Amavis

```
su - amavis
```

Durch den Befehl

```
razor-admin -create
```

wird im Homeverzeichnis von Amavis ein Ordner .razor angelegt, indem sich die nötigen Konfigurationsdateien befinden. Nun können auch die Änderungen an der Datei: /etc/passwd rückgängig gemacht werden.

Eine Verbindung zum Razor Server wird über TCP Port 7 und TCP Port 2703 hergestellt. Gegebenenfalls muss die Firewall auf diesen Ports für ausgehenden Verkehr geöffnet werden. 

DCC

DCC muss man zuerst freischalten, da es im Portage Tree "masked" ist.

```
echo "mail-filter/dcc ~x86" >> /etc/portage/package.keywords
```

löst dieses Problem jedoch sehr einfach.

Da DCC aus irgendwelchen Gründen in Abhängigkeit mit Procmail steht, was ich nicht ganz verstehe, emergen wir es ohne Dependencies.

```
emerge -O dcc

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] mail-filter/dcc-1.2.28

```

Die SpamAssassin Konfig ist anzupassen. (s.o.)

Eine Verbindung zu den DCC Servern wird über UDP Port 6277 hergestellt. Gegebenenfalls muss die Firewall auf dieser Ports für ausgehenden Verkehr geöffnet werden.

Pyzor

Von allen Sachen war Pyzor wirklich am einfachsten zu integrieren. Einfach emergen und die SpamAssassin Konfiguration anpassen (s.o.)

Eine Verbindung zu den Pyzor Servern wird über UDP Port 24441 hergestellt. Gegebenenfalls muss die Firewall auf dieser Ports für ausgehenden Verkehr geöffnet werden.

```
emerge pyzor

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] dev-python/pyzor-0.4.0-r1

```

Bayes

Ja Bayes also.

Das wichtigste ist hierbei die SpamAssassin Konfig wie oben anzupassen und zu schauen ob der User Amavis Schreibrechte auf dem Ordner /var/lib/amavis/.spamassassin und dessen Inhalt hat.

Wer Bayes auf  autolearn 1 stehen hat wird sich vielleicht wundern, warum der Filter nicht arbeitet. Es liegt daran, dass Bayes erst ab 200 Ham und 200 Spam Mails in seiner Datenbank anfängt zu arbeiten.

Das Problem lässt sich ändern, indem man sich als User Amavis anmeldet und manuel Spam und Ham hinzufügt.

```
sa-learn --spam Mail/Mailbox/File/Whatever

sa-learn --ham Mail/Mailbox/File/Whatever
```

 Man kann auch auch die mindestzahl von Mails in der Datenbank herabsetzen. (siehe man Mail::SpamAssassin::Conf)

Mit dem Befehl 

```
sa-learn --dump magic
```

 könnt ihr unter jedem User sehen, wieviele Mails in euerer Datenbank sind.

Hinweise, Fehler bitte per PM

Fragen in den Thread

Den Rest gibts morgen!

Gruß Holla

----------

## onkelfusspilz

Hi holla die waldfee,

danke erstmal für Dein Howto. Ich habe kein anderes Howto gefunden, welches die Konfig von amavisd-new für einen lokalen Mailserver beschreibt, ein anderer sehr ausführlicher Beitrag hier im Forum beschreibt die Konfig nur für einen Filter der an einen Exchange-Mailer weiterleitet.

Ich habe mich daher an Deine Anleitung gehalten, habe aber nun ein Problem. Ich weiss Dein Howto ist noch nicht fertig, aber vielleicht kannst Du mir dennoch helfen. Ausserdem vielleicht motiviert Dich eine Nachfrage Dein bisher wirklich übersichtliches Howto fertigzustellen:

Ich habe Postfix laufen und kann Mails empfangen + senden.

Ich habe den Eintrag in der master.cf vorgenommen und in der main.cf "content_filter = amavis:[127.0.0.1]:10024" angegeben. Seitdem bekomme ich folgende Meldung von postfix:

 *Quote:*   

> Oct 17 20:39:30 donnervogel64 amavis[12136]: (12136-01) mail_via_smtp: 450 4.4.1 Can't connect to 127.0.0.1 port10025, Verbindungsaufbau abgelehnt at /usr/sbin/amavisd line 3635, <GEN3> line 23., id=12136-01
> 
> Oct 17 20:39:30 donnervogel64 amavis[12136]: (12136-01) Blocked CLEAN, <root@donnervogel64.local> -> <root@localhost.local>, Message-ID: <0_12300_1098038369_1@donnervogel64>, Hits: -
> 
> Oct 17 20:39:30 donnervogel64 postfix/smtp[12356]: 8B8BC237BBB: to=<root@localhost.local>, orig_to=<root@localhost>, relay=127.0.0.1[127.0.0.1], delay=1, status=deferred (host 127.0.0.1[127.0.0.1] said: 450 4.4.1 Can't connect to 127.0.0.1 port 10025, Verbindungsaufbau abgelehnt at /usr/sbin/amavisd line 3635, <GEN3> line 23., id=12136-01 (in reply to end of DATA command))

 

"nmap localhost" zeigt mir, daß auf dem Port 10024 garnichts läuft. Ich habe das doch richtig verstanden, daß Postfix die Mails über TCP 10024 an amavisd-new weiterleiten soll, oder?

Von amavis laufen bei mir 5 Prozesse, 1*master, 1*ch1-avail und 3* virgin child, aber wie gesagt kein Port offen, ich habe bereits in der /etc/amavisd.conf geschaut, aber nichts gefunden wsa mich hier weiter bringt.

Über einen Tip würde ich mich freuen, danke!

onkelfusspilz

----------

## ts77

du musst schon alles durchgehen.

dir fehlt der folgende eintrag (aus obigem Howto) in der master.cf

```

localhost:10025 inet    n       -       n       -       20      smtpd -o content_filter= 

```

postfix muss die mails auf 10025 wieder von amavisd-new entgegen nehmen, nachdem die mails dort gecheckt wurden.

----------

## onkelfusspilz

Hi ts77,

Du hast natürlich Recht. Ich habe das übersehen, weil die unterste Zeile mit einem Absatz versehen war und die anderen Zeilen (bis eben die die ich vergessen habe) bereits in meiner master.cf standen. *schäm*

Auf jeden Fall klappt es nun. Meine Mails werden nun mit einem "X-Virus-Scanned: by amavisd-new at myhostname" im Header zugestellt.

Angenommen amavisd findet nun einen Virus in einem Dateianhang einer Mail, wie verfährt amavisd nun? Wird die Mail einfach gelöscht? Oder wird der Anhang entfernt? Oder wird garnicht unternommen und lediglich der X-Virus-Scanned Eintrag im Header modifiziert, so dass ich mit procmail die mail dann weiter bearbeiten muss?

Kann man amavisd auch beibringen eine mail zu "säubern"? Damit meine ich z.B. einen Viruskopf aus einer ausfürhbaren Datei zu entfernen, sodass die Mail dann "gesäubert" zugestellt werden kann?

Was ist an dieser Stelle das übliche bzw. sinnvolle Vorgehen? Gibt es irgendwo "Test-Viren", mit denen ich die Funktionalität überprüfen kann? Ich hoffe das sind nicht zu viele Fragen, mit dem Verweis auf eine Doku kann ich auch leben.

Vielen Dank!

onkelfusspilz

----------

## ts77

 *Quote:*   

> 
> 
> Ich hoffe das sind nicht zu viele Fragen, mit dem Verweis auf eine Doku kann ich auch leben. 
> 
> 

 

Dann verweise ich einfach mal darauf  :Wink: .

Nein mal im Ernst. Ich weiß nicht wie es bei gentoo aussieht (mein Server mit dem Mailsystem läuft nicht unter gentoo) aber die Konfigurationsdatei von amavisd-new ist recht gut dokumentiert. Liegt normalerweise unter /etc/amavis... irgendwas.

Dort kann man auch einstellen, was er mit Virenmails machen kann.

Eines kann ich Dir schon sagen: Viren entfernen kann er nicht. Entweder löschen mit Benachrichtigung an Admin/User (einstellbar) oder durchlassen.

Testviren (Eicar z.B.) ist im Download-Archiv von amavisd-new vorhanden, weiß wiederum nicht ob die bei der Gentoo-Installation irgendwo abgelegt werden. Ansonsten Download von der Webseite http://www.ijs.si/software/amavisd/ .

gruß,

thomas

----------

## Haldir

hmm ersetz mal in der master.conf

die line mit localhost:10025 mit:

bzw lösch einfach die Zeile und pack die letzte zeile dazu, 

Seine config scheint theoretisch ziemlich unsicher zu sein, 

postfix auf port 10025 müßte da mehr oder weniger als offenes mail relay wirken, zwar nicht 100% sicher aber trotzdem.

127.0.0.1:10025 inet n  -       n       -       -  smtpd

    -o content_filter=

    -o local_recipient_maps=

    -o smtpd_helo_restrictions=

    -o smtpd_client_restrictions=

    -o smtpd_sender_restrictions=

    -o smtpd_recipient_restrictions=permit_mynetworks,reject

    -o mynetworks=127.0.0.0/8

----------

## holla die waldfee

unsicher, wieso?

sehe keinen unterschied zu deiner fassung, nur das du mehr optionen auf dem 2ten smtpd entfernst.

gruß

holla

----------

## ts77

Haldir, hmm, wie kommst denn auf 127.0.0.1 von einem entfernten Rechner, welcher ja so ein offenes Relay sei?  :Wink: 

----------

## Haldir

Wie gesagt, theoretisch und mehr oder weniger, hier gehts nur um die Vollständigkeit und da sollten die entsprechenden Zugangsberechtigungen sitzen.

Es gibt auch paranoide die tunneln das ganze sogar aufm localhost (alles scho gesehen inner config  :Wink: )

----------

## stiwi

Hi,

ich habe amavisd-new nun am Laufen, aber nun macht mein procmail nicht mehr mit  :Sad: 

Wenn die Option "content_filter = amavis:[127.0.0.1]:10024" in der main.cf von Postfix gesetzt ist wird die Umgebungsvariable ${HOME} für den mailbox_command (in diesem Falle procmail) nicht mehr gesetzt. Das hat zur Folge, daß diese leer ist und alle mails bei mir nach //.maildir/new geschrieben werden sollen was natürlich scheitert.

Jemand eine Idee woran das liegen kann? Oder muss ich procmail von amavis aus aufrufen und es geht nicht mehr wie gewohnt über "mailbox_command"?

----------

## toskala

ein paar ergänzungen dazu:

der amavis wird nicht mehr nach /var/lib/amavis installiert sondern nach /var/amavis.

den amavisd sollte man starten und in den default runlevel stecken, sonst wirds nix mit dem filtern.

die spannende frage die ich mir nun grade stelle ist, wie bekomme ich aber amavisd dazu die mails nicht zu löschen die spam darstellen, sondern sie nur zu markieren und trotzdem zuzustellen?

cheerios,

toskala

----------

## el*Loco

 *holla die waldfee wrote:*   

> 
> 
> ```
> # Um Spammer schon an der Haustür abzuweisen
> 
> ...

 

Spamcop.net hat eine sehr seltsame Politik was Sperrungen und Entsperrungen angeht, damit sperrst du dir auch regelmäßig gmx, web.de etc. aus - würde ich weglassen.

 *Quote:*   

> [*] Virenscanner
> 
> Ich persönlich halte nicht sehr viel von ClamAV, der beim emergen von AMaViSd-new installiert wird, da die Erkennungsraten noch nicht die gewünschte Qualität haben. Ich empfehle daher VLNX zu emergen. Dies ist der McAfee Virenscanner für Linux. Er liegt in einer Trail Version im Portage Tree.

 

Halte ich für Quatsch. Clamav hat seit der 0.80 ganz erhebliche Schritte gemacht - die Scanqualität, -geschwindigkeit und vor allem die Updaterate sind für den Einsatzzweck Mailviren hervorragend. Dass der ein oder andere DOS Bootsektor Diskettenvirus nicht erkannt wird kann ich verschmerzen. Von mir die Empfehlung: Clamav!

----------

## moped-tobias

Hallo,

eventuell wäre AntiVir auch eine weitere Alternative. Für den Privatgebrauch ist dieser frei erhältlich.

https://bugs.gentoo.org/show_bug.cgi?id=24240

Dazu ist allerdings eine Registrieung nötig um den Demo Modus zu deaktivieren:

http://free-av.de/unixreg_form_de.htm

----------

## toskala

so, nun hab ich das tool endlich so wie es soll. es markiert spam und viren mails als eben solche, stellt sie aber dennoch zu.

zuerst hatte ich das problem, dass bei einem 

```
tail -f /var/log/messages
```

stets ein

```

ANTI-SPAM code NOT loaded
```

zu finden war.

das erledigt sich allerdings erst wenn man in der amavisd.conf die zeile "@bypass_spam_checks_maps" auskommentiert.

```

/etc/amavisd.conf

#@bypass_spam_checks_maps = (1);
```

sonst wird die spam engine nicht geladen.

soderle. da ich nur wollte, dass der spam markiert wird, muss noch die final_spam_destination geändert werden, ebenfalls in der amavisd.conf

```
/etc/amavisd.conf

$final_spam_destiny       = D_PASS;
```

das hat zur folge, dass spam zugestellt wird, jedoch mit zusätzlichen header informationen ausgestattet wird. die  header lauten dann:

```
X-Spam-Status

X-Spam-Level

X-Spam-Flag
```

darauf kann man dann ja fein filtern und sie nur verschieben.

so, was den antiviren kram angeht wollte ich das selbe haben, ich wollte, dass die mails gescanned werden aber markiert werden falls sie einen virus beinhalten, diese mail jedoch trotzdem zugestellt wird.

zuerst muss man dafür in der amavisd.conf folgendes einstellen:

```
/etc/amavisd.conf

$final_virus_destiny      = D_PASS;

```

damit das allerdings funktioniert, muss noch ein valider virusalert empfänger eingetragen werden, ebenfalls in der amavisd.conf

```
/etc/amavisd.conf

$virus_admin = 'beliebige@mailadresse.com';
```

und finally, damit das alles auch mit mehr als 1 domain funktioniert noch in der amavisd.conf

```
/etc/amavisd.conf

 @local_domains_maps = ( [".$mydomain", "domain.org", "domain.com"]);
```

so. dann amavisd-new restarten und alles sollte gehen.

beim restart ruhig das messages logfile beobachten.

cheerios,

toskala[/code]

----------

