Exchange 2010 Installation vorbereiten…

Mit Exchange 2010 hat Microsoft in meinen Augen ein echt gutes Produkt entwickelt. Für die Installation wird zwingend ein Windows 2008 mit SP2 oder besser ein Windows 2008 R2 Server benötigt. Hier gehen nur die 64 Bit Versionen. Bevor es allerdings losgehen kann, müssen einige Vorraussetzungen erfüllt werden. Der Installer weist ein ja meistens auf die Probleme hin, jedoch können diese im Vorfeld schon gelöst werden. Ein typischer Fehler ist:

„Es können keine Daten aus der Metabase gelesen werden. Stellen Sie sicher, dass Microsoft Internet Information Services installiert ist“

Hier fehlen die Rollen um den Exchange zu installieren. Die wichtigsten um die Rollen Mailbox, Hub Transport und Client Access auf einem Windows 2008 R2 vorzubereiten sind:

Download und Installation des Microsoft Filterpacks

http://www.microsoft.com/downloads/details.aspx?FamilyId=60C92A37-719C-4077-B5C6-CAC34F4227CC&displaylang=en

Nun im Startmenü folgendes eintippen:

PowerShell

Bei der Fundstelle dann mit der rechten Maustaste anklicken und das  „Programm als Administrator ausführen“ auswählen.

Folgende Kommandos eingeben:

Import-Module ServerManager
Add-WindowsFeature NET-Framework,RSAT-ADDS,Web-Server,Web-Basic-Auth,Web-Windows-Auth,Web-Metabase,Web-Net-Ext,Web-Lgcy-Mgmt-Console,WAS-Process-Model,RSAT-Web-Server,Web-ISAPI-Ext,Web-Digest-Auth,Web-Dyn-Compression,NET-HTTP-Activation,RPC-Over-HTTP-Proxy –Restart

Jetzt startet der Server neu. Danach wieder in die Powershell wechseln wie oben und fohlendes eintippen:

Set-Service NetTcpPortSharing -StartupType Automatic

Dieser Vorgang dauert unter Umständen eine Weile, keine Sorge… Damit sollte die Überprüfung bei der Installation sauber durchlaufen.

 

Alternativ kann man auch per Servermanager folgende Rollen bzw. Features installieren:

 

.Net Framework 3.5
Die Installation muss über den Servermanager über “Features hinzufügen” ausgeführt werden. Mit dem .Net Framework 3.5 wird auch der Internet Information Server (IIS 7.0) installiert

Microsoft Office 2007 System-Konverter

Das Microsoft Filter Pack muss unter http://go.microsoft.com/fwlink/?LinkId=123380 heruntergeladen werden.

IIS 6-Verwaltungskompatibilität
Sofern nicht bereits vorhanden müssen folgende Rollendienste für den IIS installiert werden:
IIS 6-Metabasiskompatibilität
IIS 6-Verwaltungskonsole

Die Rollendienste können über den Servermanager durch Rechtsklick auf IIS und Auswahl von “Rollendienste hinzufügen” nachträglich installiert werden. Sollten diese Rollendienste nicht installiert sein, wird bei der Prüfung der Installationsvoraussetzungen für Exchange2010 die Fehlermeldung “Es können keine Daten aus der Metabase gelesen werden. Stellen Sie sicher, dass Microsoft Internet Information Services installiert ist” ausgegeben.

Nach der Installation
Für den Dienst Net.Tcp-Portfreigabedienst muss als Startart “Automatisch” eingestellt sein

 

Ich hoffe ich konnte euch helfen…

 

Statische Routen unter Ubuntu automatisieren

Hallo zusammen,

ich musste für einen Kunden ein VPN auf seinen Webserver einrichten und dies durch ein eigenes Gateway schleusen. Da der Server jedoch eine öffentliche IP mit eigenem Default Gateway hat, auf diesem jedoch nicht das VPN eingerichtet wurde. Musste nun ein weg zum VPN Router gefunden werden… Weiterlesen

Postfix BCC Maps

Durch die BCC Maps können unter Postfix einzelne Mailadressen oder auch ganze Domains archiviert werden bzw. als Kopie in ein anderes Postfach geschickt werden. Dies gilt für den ausgehenden wie den eingehenden Mailverkehr. Hier zeige ich die grundsätzliche Einrichtung unter Postfix.

Die postfix Maps erstellen…

Als erstes müssen wir unsere Mapdateien erstellen. Ich verwende hier wieder meine Ubuntuumgebung daher müsst ihr eventuell die Pfade anpassen.

nano /etc/postfix/recipient_bcc

Die Datei hat folgendes ( sehr typisches postfix ) Format:

QUELLADRESSE ZIELADRESSE

Für einzelne Emailadressen:

mailadress@domain.de archiv@intern.domain.de
mailadress2@domain2.de kopie@domain.de

Für gesamte Domains:
@domain.de archiv@intern.domain.de
@domain.de @domain2.de

Die Datei speichern und dann müssen wir die postfix db erstellen. Dies machen wir mit dem Aufruf von postmap.

postmap /etc/postfix/recipient_bcc

Nun editieren wir noch die main.cf von Postfix um die Änderung bekannt zu geben.

nano /etc/postfix/main.cf

Dort tragen wir an das Ende der Datei folgendes ein:

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
sender_bcc_maps = hash:/etc/postfix/sender_bcc

Hier habe ich schon die sender_bcc_map mit eingetragen dessen Format das gleiche wie oben ist. Nur heißt hier die Datei einfach anders ^^

Nach einem restart von postfix wird die Konfiguration sofort übernommen…

/etc/init.d/postfix restart

Wenn ihr eine Kopie von wirklich jeder Mail die durch euer System wandert erstellen wollt, dann könnt ihr auch die Konfiganweisung always_bcc verwenden. Einfach in die main.cf eintragen und dahinter eine Mailaddi und schon wird alles an diese Mailadresse geschickt. Ohne das es jemand sieht. Bitte auf den Datenschutz achten!!!

Mehr zum Thema adressrewriting unter postfix könnt ihr hier lesen…

FTP unter Ubuntu Linux mounten

Wenn man mit häufig mit Webseiten arbeitet, muss man oft viele Dateien von und auf ein FTP Verzeichnis kopieren. Dies kann man wie üblich einfach mit einem FTP Programm erledigen, jedoch ist dies oftmals ehr nervig. Schöner wäre es doch das entfernte FTP Verzeichnis einfach in das Dateisystem einzubinden. Dies können wir unter Ubuntu sehr einfach machen.

Installation von curlftpfs

Zuerst müssen wir curlftpfs installieren. Dazu geben wir in einer shell als root folgendes ein:

apt-get install curlftpfs

Nun müssen wir fuse Fertig einrichten. Als erstes muss der Benutzer der curlftpfs verwenden soll unter /etc/fuse.conf eingetragen werden. Dies erledigt ein:

nano /etc/fuse.conf

Dort einfach den Benutzernamen eintragen. Nun müssen wir diese Datei für alle Lesbar machen.

sudo chmod a+r /etc/fuse.conf
 Wichtig ist es nun ein Verzeichnis anzulegen wo das FTP-Verzeichnis eingehangen werden soll. In unserem Beispiel unter /mnt/ftp.
mkdir /mnt/ftp

Nun können wir in einem Terminal die Verbindung testen oder auch bereits nutzen.

curlftpfs User:Passwort@ftp-server.de/pfad_auf_dem_server/ /mnt/ftp
Wir können nun auch die Verbindung in unsere /etc/fstab schreiben, so würde die Verbindung immer automatisch beim Systemstart wiederhergestellt werden.
curlftpfs#Benutzername:Password@ftp-server.de /mnt/ftp fuse auto,user,uid=1000,allow_other,disable_eprt 0 0
Wichtig ist hier alles in eine Zeile zu schreiben!!! Bitte keinen Zeilenumbruch.
Das ganze ist auch für Backups sehr praktisch.

CARP unter Ubuntu Linux

Allgemeines zu CARP

Durch das Common Address Redundancy Protocol (CARP) lässt sich die Verfügbarkeit von IP-Systemen deutlich erhöhen. Dies wird durch den Einsatz virtueller IP/MACAdressen auf verschiedenen Rechnern erreicht. Das Haupteinsatz von CARP ist zwar die Hochverfügbarkeit von Gateways, jedoch lassen sich auch andere Dienste wie Datenbanken oder Mailserver sehr einfach redundant auslegen. Heute zeige ich euch wie wir dies unter Ubuntu machen können…

Weiterlesen

IPSEC VPN zwischen pfSense 2.0 und AVM Routern

IPSEC stellt den Standard für sichere Verbindungen zwischen getrennten Netzwerken da. Hier wird gezeigt wie man eine Verbindung zwischen AVM Routern und pfSense herstellen kann. So das man Transparent auf die einzelnen Netzwerke zugreifen kann.

Weiterlesen

Malwarefilter mit Postfix einrichten

Postfix ist ein mächtiger Mailserver welcher von Haus aus viele Möglichkeiten der Spamabwehr bereitstellt. Leider werden zu viele davon einfach nicht oder nur teilweise genutzt. Wir richten heute einen Malwarefilter unter Postfix ein. Malware ist ein Schadprogramm welches auf einem Rechner eingeschleust wird um schädliche Funktionen auszuführen. Im eigentlichen Sinn ist Malware kein Virus wie sie oft dargestellt wird.

Wir richten heute einen Filter ein der bei der Annahme der Mail den Inhalt scannt und bei Malwarebefund die Weiterverarbeitung der Mail unterbindet. Um dies zu realisieren nutzen wir den sog. body_check. Durch die body_checks überprüft Postfix den Inhalt der Mail gegen bekannte Pattern bzw. Regexe. Wir laden unsere malwareliste automatisch runter und können so sehr schnell neue Bedrohungen erkennen.

Als erstes erstellen wir uns ein Script namens fetch_malware unter /usr/sbin/…

nano /usr/sbin/fetch_malware

Dort tragen wir folgendes ein:

/usr/bin/wget -O - http://www.malware.com.br/cgi/submit?action=list_postfix > /etc/postfix/malwarelist
/etc/init.d/postfix reload > /dev/null

Dieses Script machen wir nun ausführbar.

chmod +x /usr/sbin/fetch_malwarelist

Nun soll unsere Liste ja automatisch in regelmässigen Intervallen aktualisiert werden. Dafür tragen wir in unsere Crontab einen Job ein.

crontab -e
25 * * * * root /usr/sbin/fetch-malwarelist >/dev/null 2>&1

Damit wird die Liste jede Stunde zur 25ten Minute gedownloaded.

Nun muss Postfix noch beigebracht werden das er diese Daten auch verwenden soll. Dafür tragen wir nun in die main.cf folgendes ein:

 body_checks = regexp:/etc/postfix/malwarelist

Das wars dann auch schon. So habt ihr einen sehr effektiven Schutz vor Malware auf eurem Mailgateway installiert. Ihr könnt natürlich auch weitere Listen hinzufügen um euren Schutz noch zu erweitern. Jedoch muss beachtet werden das die body_checks von Postfix auch CPU Resourcen benötigen. Daher sollten nicht zu viele Listen oder Einträge verwendet werden. Ein heutiger PC hat aber genug Resourcen zum Filtern.

 

Plesk secondary DNS eventscript

Ich habe mir mal ein kleines Script gebastelt um mir die Einrichtung von Domains unter Plesk etwas zu vereinfachen. Ich betreibe mehrere Server in Rechenzentren und habe auch ein paar Pleskinstallationen am laufen. Ich selber finde Plesksysteme für die schnelle Verwaltung von Websitehostings nicht schlecht. Jedoch habe ich eigene DNS Server die ich für meine Dienste nutzen will. Diese laufen auch auf dem bekannten ISC Server Bind9…

Unter Plesk kann man zwar DNS Server angeben die als Slave anerkannt werden, jedoch werden diese nicht automatisch eingerichtet. Allerdings hat Plesk eine sehr nette Funktion, die Eventscripts. Dies sind Scripte die ich an verschiedene Aktionen von Plesk anhängen kann. Diesen Umstand nutzt mein DNS Script. Im Grunde ist es sehr einfach. Das Script wird bei jeglichen Aktionen die Domains bzw. DNS betreffen ausgeführt und fragt die Plesk Domains aus einer Datenbank ab und transferiert die Daten an einen zweiten Linux Server mit Bind.

Hier mal der Weg für die Installation:

cd /tmp
wget http://www.networkmonkey.de/scripts/dns_sync

Nun bearbeitet ihr das Script mit eurem Lieblingseditor ich nehme gerne nano für solche Aufgaben…

nano dns_sync
# Server IP from Master DNS Server of the Domain
MASTER_DNS_SERVER=“1.1.1.1;“
# Masterserver config dir
MASTER_DNS_CONFIG_DIR=“/var/named/run-root/etc/“
# Which Server should notify allow?
NOTIFY_DNS_SERVER=“first_ip_here; second_ip_here;“
# Servernames of the secondary DNS Servers for SSH connect
DNS_SLAVE_SERVERS=(ns1.yourdomain.de x.x.x.x)
# Store for secondary domain data
SLAVE_DNS_DATA_DIR=“/etc/bind/slave/“
# Configdir for secondary slave server
SLAVE_DNS_CONFIG_DIR=“/etc/bind/“
# User that can edit SLAVE_DNS_CONFIG an get shell access throug SSH
SLAVE_DNS_SSH_USER=“dnsadmin“
# Configfile of secondary DNS Server
SLAVE_DNS_BIND_CONFIG=“named.conf“

Die Variablen sollten sich selbst erklären. Die Datei danach speichern und in an einen Ort kopieren wo es ausgeführt werden kann… z.B.

mv /tmp/dns_sync /usr/sbin/dns_sync

Nun brauchen wir einen SSH key für unseren ssh Benutzer… Diesen erstellen wir uns kopieren ihn gleich auf den Server wo er benötigt wird. Bitte beim kopieren des ganzen darauf achten, die gleichen Daten wie im Script angegeben zu verwenden… Auch muss dieser Schlüssel auf alle Server die unter DNS_SLAVE_SERVERS angegeben sind. Beim erstellen des Keys darauf achten KEIN Passwort einzugeben und einfach Enter drücken!!!

ssh-keygen
ssh-copy-id user@servername

Wichtig ist das der Benutzer auf dem SlaveServer auch schreibrechte in dem Bind directory hat und das Programm rndc ausführen darf. Am besten fügt man den SSH Benutzer der Gruppe bind hinzu. Zumindest unter Debian und Ubuntu klappt das ohne Probleme. Jetzt können wir das Script testen in dem wir es einfach ausführen. Es sollte keine Passwortabfrage erscheinen und die Daten sollten kopiert werden. Nun sollte auch auf dem Slaveservern eine neue Datei im Bindkonfigverzeichniss erscheinen welche den Hostnamen eures Masterservers hat mit der Endung .slave. Diese Konfig sollte nun durch die named.conf am ende eingebunden werden!!! Wenn dies geklappt hat läuft alles einwandfrei. Und wir können die Events hinzufügen.

Die Eventkonfiguration könnt ihr hier finden.

Plesk 10

Tools und Einstellungen -> Ereignissmanager

Plesk 9.5

Start -> Eventmanager

Dort fügt ihr ein neues Event hinzu. Ich habe für jeden Domainevent ein Ereignis erstellt. Unter Plesk 10 heissen die Domainevents übrigens StandardDomain. Als Priorität könnt ihr geringste einstellen und als Benutzer solltet ihr root angeben. Dies ist der Benutzer unter welchem das Script ausgeführt wird. Dieses könnt ihr natürlich auch anpassen. Als Befehlt gebt ihr nur den Pfad zu dem Script an ohne irgendwelche Parameter und schon wird das Script jedes mal bei eines dieser Events ausgelöst.

Ich hoffe dieses Script macht euch das leben auch etwas einfacher wie mir ^^

 

IPSEC VPN pfSense 2.0 -> Draytek 2910i

Heute zeige ich euch wie man ein VPN zwischen einer pfSense Firewall und einem Draytekrouter, bei mir der 2910i, herstellen kann. Ich konnte es auch erfolgreich durch einen Speedport 723 Router durchleiten um meine VDSL Verbindung dafür zu nutzen.

Zum Aufbau des ganzen. Ich habe auf der einen Seite einen redundanten pfSense Cluster mit festen IP Adressen. Der Cluster wird durch CARP gebildet und ist damit auch ausfallsicher. Auf der anderen Seite habe ich mehrere VDSl Anschlüsse mit Speedports als Modem bzw. Router. Diese haben nur dynamische IP’s und benötigen für dieses Setup zwingend einen Dyndns-Account… Ein anderer Anbieter geht selbstverständlich auch, jedoch arbeite ich nur mit dyndns.

pfSense Seite…

Als erstes konfigurieren wir mal die pfSense. Damit alles sauber läuft müssen wir unter

System -> Advanced -> Miscellaneous: IP Security:  Prefer older IPsec SAs

einen Hacken setzen…

Phase1 auf pfSense Seite…

Als nächstes gehen wir zu VPN -> IPSEC und setzen einen Hacken bei enable IPSec. Nun fügen wir einen neuen phase 1 Eintrag hinzu. Als Interface setzen wir das WAN Interface ein. Bei einem CARP Setup jedoch das CARP Interface. 😉 Bei Remote Gateway tragen wir den DYNDNS Namen unseres Routers ein. Als Beschreibung solltet ihr einen aussagekräftigen Namen wählen um ihn später in den Logs besser lokalisieren zu können.

Konfiguration der ersten Phase ( IKE )

Jetzt kommen wir zur Phase1. Diese lässt sich mit einem Draytek nur im Aggressive Modus herstellen. Es ist mir trotz fester IP’s nicht gelungen den Mainmode ( welcher etwas sicherer ist ) zum laufen zu bekommen. Als Auth method setzen wir Mutual PSK ein. Da wir die Verbindung mit einem PresharedKey absichern wollen. Wie bereits erwähnt ist der Negotiation Mode auf agressive zu belassen. Als Identifier nutze ich die My IP address. Als Peer identifier klappte am besten der User distinguished name welcher auf dem Draytek Local ID heisst.Hier trägt man am besten auf beiden Seiten eine eindeutige Emailadresse ein. Damit wird die Verbindung später bestimmt.  Der Preshared Key ist das Passwort womit die Verbindung verschlüsselt wird. Der Key sollte nicht zu kurz und auch etwas komplexer sein. Die Policy Generation und das Proposal Checking lassen wir auf default. Den Encryption algorithm stellen wir auf   3DES da hier die Performance zwischen den Routern noch ok ist. Bei AES kann der Draytek etwas einknicken. Der HASH algorithm ist bei uns auf SHA1 gestellt. Dies lief am besten. Die DH key Group stellen wir auf 1, also 768 bit wenn wir auf dem Draytek den IKE phase 1 proposal auf DES_MD5_G1 auswählen. Stellen wir diesen auf DES_MD5_G2 so müssen wir die DH key Group auf 2 stellen!!! Die Lifetime lassen wir auf 28800 und sollte nur geändert werden wenn ihr wisst was ihr da macht.

Phase 1 proposal

Phase 1 proposal

Jetzt kommen wir zu den Advanced Options der phase1. NAT Travensal sollte eingeschaltet werden wenn ihr hinter einem Router mit Firewall den Draytek aufstellt. Solltet ihr ihn direkt mit dem Netz verbinden so kann man dies austellen. DEAD PEER Detection schalte ich stets ein. Jedoch kann dies bei überlasteten Routern dazu führen das die Verbindung ohne Grund unterbrochen wird, da der PFSENSE Router glaubt den anderen Router nicht zu erreichen. Daher sollte man die retries nicht unter 5 stellen!!! Und den delay nicht zu niedrig.

Phase1 advanced

Phase 2 auf pfSense Seite…

Jetzt kommen wir zur Phase2, womit wir die Tunnel einrichten. Man kann mehrere Tunnel aufbauen lassen. Dies kann man z.B. machen wenn man mehrere Subnetze auf beiden Seiten miteinander Verbinden möchte.

Als Mode nehmen wir tunnel damit wir unsere beiden Netzwerke direkt miteinander verbinden. Local Network steht für das Netzwerk des pfSense Routers. Solltet ihr vlans oder mehrere Netzwerkkarten mit unterschiedlichen Subnetzen einsetzen so muss hier das Netzwerk ausgewählt werden mit welchem die Gegenseite interagieren darf. Das Remote Network stellt das entfernte auf den Drayteks eingerichtete Netzwerk da. Bitte achtet hier darauf das auch die selbe Subnetmaske wie auf dem Draytek eingestellt ist, da sonst keine Verbindung zustande kommt!!!

Phase2 proposal…

Hier müssen wir nun die Verschlüsselungen für die Phase2 einrichten. Unter Protocol nehmen wir ESP da hier die Daten auch verschlüsselt werden. Bei AH passiert dies nicht. Bei Encryption algorithm wählen wir 3DES aus. Den Hash lassen wir so wie er ist und bei PFS Key Group wählen wir wieder 1 für einen 768 Schlüssel. Die Lifetime kann auf 3600 gelassen werden.

Bei den Advanced Einstellungen, kann man eine IP des Remotenetzwerkes angeben. Damit wird der Tunnel getestet und bei nicht erreichen neu initialisiert. Ich pinge immer die IP Adresse des Draytekrouters an. Sprich die vom internen Netz dort.

Damit ist das Setup auf der pfSense Seite fertig und nun können wir uns um den Draytek kümmern. Wichtig ist das hier die selben Daten wie auf der pfSense Seite eingegeben werden.

Draytek Seite…

Auf der Draytek Seite gehen wir

VPN and Remote Access -> LAN to LAN 

und erstellen dort eine neue Verbindung. Der Pfofile Name sollte wie immer aussagekräftig sein. Der Hacken bei Enable this Profile muss gesetzt werden. Wird halt gerne übersehen. Die Verbindung soll durch den Draytek initiiert werden, da hier ja die dynamische IP ist. Dadurch wird es leichter. Daher setzten wir bei Call Direction den hacken bei Dial Out. Always on ist zu empfehlen wenn man ständig auf diesen Tunnel zugreifen will. Dann muss man den Wert auf -1 setzen. So wird der Tunnel immer aufrecht gehalten. Bei Enable Ping to keep alive kann man eine IP des internen Netzes der Gegenseite einrichten welche in abständen von ca. 30 Sekunden angepingt wird. Wird der Ping 3 mal nicht beantwortet so baut der Draytek den Tunnel neu auf. Ich trage hier gerne eine Server IP ein von der Gegenseite ein.

Nun kommen wir zu den Dialout Settings.

Bei Type nehmen wir einen IPSEC Tunnel und die anderen Hacken entfernen wir. Bei Dial Number tragen wir die WAN IP des pfSense Routers ein. DNS Namen sind auch möglich, haben aber bei uns des öfteren zu Problemen geführt. Vorallem dürfen diese nicht zu lang sein. Bei Preshared Key muss der selbe Key wie oben bzw. auf der pfSense Seite eingegeben werden. Bei IPSEC Security Method wählt man High ESP und 3DES with Authentification. 

Die meisten Fehler passieren bei der Einstellung welche wir jetzt vornehmen. Wir klicken bei IPSEC Security Method auf advanced und geben damit die Phase 1 Daten an. IKE Phase 1 mode stellen wir auf aggressive. Die Proposal bleibt bei DES_MD5_G1, da wir ja auf dem pfSense System ein DH Group von 1 angegeben haben. Der IKE PHase2 proposal wird auf 3DES_SHA1 / 3DES_MD5 belassen. Die lifetimes können so gelassen werden. Das Perfect Forwarding Secret  lassen wir ausgeschaltet. Und bei Local ID müssen wir den Peer Identifier der pfSense eingeben. Damit wird dann dieser Tunnel identifiziert.

Dann müsst ihr auf der Draytekseite unten in den TCP/IP Netzwerkeinstellungen die Daten für das Remote Network mit der Subnetmask angeben. Und eure Locale IP mit der richtigen Subnetmask. Hier kann man auch angeben das der komplette Netzwerkverkehr, also auch Internetverndungen usw. über diesen Tunnel geschickt werden soll.

Wichtig ist jetzt das der Draytek auch im dyndns registriert wird. Bitte achtet darauf, da sonst kein Tunnel aufgebaut wird. Es muss der selbe DynDnS Name verwendet werden  den ihr auf der pfSense Seite benutzt habt.

Sind alle Daten richtig eingetragen sollte jetzt der Tunnel aufgebaut werden. Ich werde in den nächsten Tagen noch einen Eintrag mit den meisten Fehlermeldungen machen und wie man sie beheben kann. Bis dahin viel Erfolg…

Mailgraph und Postscreen

Moin,

ich habe heute meinen Spamfilter mit Postscreen ausgestattet, was ich sehr empfehlen kann, und habe mich gewundert das mein Mailgraph mir so geringe Werte anzeigte. Kurz geschaut und meine Mailgraph Version kannte die regexe für Postscreen noch nicht. Daher muss man so in Zeile 636 nach:

elsif($prog eq 'cleanup') {
  if($text =~ /^[0-9A-Z]+: (?:reject|discard): /) {
    event($time, 'rejected');
  }
}

folgendes einfügen:

 elsif($prog eq 'postscreen') {
   if($text =~ /NOQUEUE: reject:/) {
     event($time, 'spam');
   }
   elsif($text =~ /DISCONNECT/) {
     event($time, 'spam');
   }
 }

Mit diesen Zeilen werden die Mail die Postscreen rejectet oder die Verbindung nicht zulässt als SPAM erkannt. Tauscht man

'spam'

durch

'rejected'

so werden die Mails als reject unter Mailgraph angezeigt. Jeder so wie er es lieber mag 😉