Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Samstag
14
Juni 2014
Klaus Moser
Klaus Moser

Ubuntu 14.04 - Mailserver - Sieve Plugin

Da der Mailserver jetzt ja steht, versuche ich mal ein paar von diesen praktischen Plugins einzubauen. Als erstes nehme ich mir mal sieve vor.

Sieve

Mit der Dovecot Erweiterung Sieve ist es möglich Mails bereits auf dem Webserver in Verzeichnisse sortieren zu lassen. Sieve ist eine Sprache zur Filterung von Mails. RFC 3028.

Folgendes installiert die Erweiterung:

apt-get install dovecot-sieve dovecot-managesieved

Für Sieve muss Dovecots LDA oder Dovecots LMTP verwendet werden.

LDA

Die Variante Sieve im LDA zu benutzen habe ich nicht getestet, sollte aber in etwa so funktionieren:

Postfix muss mitgeteilt bekommen dass man den Dovecot LDA verwenden möchte. Dazu trägt man folgendes in die /etc/postfix/main.cf ein:

mailbox_command = /usr/lib/dovecot/deliver 

In der Datei /etc/dovecot/conf.d/15-lda.conf muss die Zeile für die mail_plugins einkommentiert und sieve hinzugefügt werden:

protocol lda {
  # Space separated list of plugins to load
  #(default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

LMTP

In der Datei /etc/dovecot/conf.d/20-lmtp.conf muss die Zeile für die mail_plugins einkommentiert und sieve hinzugefügt werden:

protocol lmtp {
  postmaster_address = postmaster@meinedomain.de
  mail_plugins = $mail_plugins sieve
}

Alle Plugins sind übrigens unter /usr/lib/dovecot/modules zu finden.

Sieve Konfiguration

Die Konfiguration von Sieve erfolgt in der Datei /etc/dovecot/conf.d/90-sieve.conf:

plugin {

  # Benutzerspezifische Konfiguration
  sieve = /var/vmail/%d/%n/dovecot.sieve

  # Benutzerspezifische Konfigurationen
  sieve_dir = /var/vmail/%d/%n/

  #sieve_default  = /var/vmail/%d/default.sieve
  #sieve_global_dir = /var/vmail/%d/conf.d/sieve
}

Dateien in den Ordnern sieve_dir und sieve_global_dir müssen die Dateiendung .sieve haben, da sie sonst nicht erkannt werden. Der Parameter sieve_global_path ist übringes deprecated. Das Script unter sieve_default wird nur dann ausgeführt wenn kein benutzerspezifisches Script gefunden wird.

Sieve Scripts

Ein paar Beispielscripts sind z.B. im Dovecot Wiki zu finden. Im Prinzip sieht der Aufbau der Datei so aus, dass am Anfang die nötigen Plugins referenziert werden und dann eine if/elsif/else Konstruktion folgt.

require ["fileinto", "envelope"];

# Mail von einem Bestimmten Absender
if envelope :is "from" "someone@domain.de" {

  # In der Ordner "Someone" auf Ebene der INBOX verschieben
  fileinto "Someone";
}
elsif  envelope :is "from" "other@domain.de"  {

  # In einen Unterordner von INBOX
  fileinto "INBOX.Test";
} elsif ... {
  [...]
} else {
  keep;
}

Nach dem Ändern eines Scripts muss Dovecot übringens nicht neu gestartet werden (wäre auch ziemlich sinnfrei).

Sieve Remote Management

Der Port für das Remote Management der Sieve Regeln muss in der Datei /etc/dovecot/conf.d/20-managesieve.conf festgelegt werden. Standard ist 4190.

service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}

Zum Schluss noch Dovecot und ggf. Postfix neu starten

sudo service dovecot restart
sudo service postfix restart 

Thunderbird Add-On

Für Thunderbird gibt es ein Add-On mit dessen Hilfe man die Regeln auf dem Server bearbeiten kann. Das Add-On heißt "Sieve".

Allerdings muss man das Nightly Build verwenden, da das offizielle Add-On nicht funktioniert. Das Plugin gibt es hier: https://github.com/thsmi/sieve/blob/master/nightly/README.md

Hat man dieses Installiert steht ein neuer Reiter in den Kontoeinstellungen zur Verfügung auf dem man erst mal einstellen muss, dass derMailserver Sieve unterstützt.

Hat man das gemacht kann man über "Neu" Sieve Scripts anlegen. Das Editieren ist ein Traum da man einen Code Editor mit Syntax Highlightning und Syntaxprüfung zur Verfügung hat.

Thunderbird Add-On Sieve
Sonntag
08
Juni 2014
Klaus Moser
Klaus Moser

Ubuntu 14.04 - Mailserver - Fetchmail

Fetchmail dient dazu entfernte Postfächer auf Mails zu prüfen und diese abzuholen und an ein lokales Postfach weiterzugeben.

Installiert wird fetchmail mit

sudo apt-get install fetchmail

Es gibt eine globale Konfigurationsdatei /etc/fetchmailrc und benutzerspezifische Dateien unter ~/.fetchmailrc.

Da ich ja virtuelle Benutzer habe, kann ich nur die globale Konfigurationsdatei verwenden. Zunächst werden ein paar generelle Einstellungen getätigt:

sudo nano /etc/fetchmailrc

In die Datei kommt folgender Inhalt:

# Name des administrativen Empfängers
set postmaster "postmaster@meinedomain.de"

# Direkte Fehlermeldungen an den Sender (default)
set bouncemail

# Keine Bounces an spam-blocked mail (default)
set no spambounce

# Errorlogging über syslog(3)
set syslog set properties ""

# Alle 300 Sekunden (5 min) ausführen
set daemon 300

set properties ""

Mails abholen

Um nun Mails von dem Benutzer account@provider.de mit dem Passwort geheim von einem externen Provider mit dem Mailserver pop.provider.de über eine verschlüsselte Verbindung über den IMAPS-Port abzuholen und den lokalen Postfächern zuzuweisen benötigt man eine solche Konfiguration:

poll pop.provider.de with proto POP3/IMAP
  user 'account@provider.de there' with password 'geheim'
  is 'me@meinedomain.de' here
  keep ssl
Option Funktion
poll Entfernter Mailserver von dem E-Mails abgeholt werden sollen
user Benutzername des E-Mail Kontos auf dem entfernten Server
password Passwort des E-Mail Kontos auf dem entfernten Server
is xxx here Lokales Postfach in das die Mails zugestellt werden sollen
ssl Verwende SSL-verschlüsselte Verbindung um die Mail abzuholen (Port 993)
sslcertck Prüfung der Zertifikats mittels lokal vorliegender, vertrauenswürdiger Zertifikate
sslcertpath Pfad in dem die vertrauenswürdigen Zertifikate liegen
sslproto SSL Protokoll für die Verbindung (SSL2/SSL3/SSL23/TLS1)
keep Löscht die abgerufenen E-Mails nicht vom Server
nokeep Gegenteil von keep. Löscht die Mails nach dem Abruf.
fetchall Es werden alle E-Mails abgerufen, auch alle die schon geholt wurden.
limit E-Mails, die größer sind, als die Angabe, werden nicht heruntergeladen
interval Wenn das Skript abgearbeitet wird, wird nach dem n-ten mal dieser Eintrag gültig

Fetchmail als Daemon

Um Fetchmail im Hintergrund als Daemon laufen zu lassen muss man die Datei /etc/default/fetchmail bearbeiten:

sudo nano /etc/default/fetchmail

Hier muss der Eintrag START_DAEMON auf yes gesetzt werden

# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=no

Danach kann man den fetchmail Dienst starten

sudo service fetchmail start

Self Signed SSL Zertifikat

Benutzt der Quell-Server ein selbst-signiertes SSL Zertifikat muss man ein paar weitere Optionen hinzufügen.

Zuerst holt man sich das Zertifikat vom Quell-Server:

echo "quit" | openssl s_client -starttls imap -connect localhost:imap

Aus der Ausgabe kopiert man sich jetzt die Zertifikate heraus und speichert sie z.B. nach /var/lib/fetchmail/.certs/. Dabei muss für jedes Zertifikat das der Server liefert eine eigene Datei angelegt werden. Liefert der Server also ein Server Zertifikat und ein CA Zertifikat, muss man zwei Dateien anlegen:

sudo mkdir /etc/ssl/fetchmail
sudo nano /etc/ssl/fetchmail/imap.mydomain.de.pem
sudo nano /etc/ssl/fetchmail/myca.pem

Als nächstes müssen die Zertifikate gehashed werden:

cd /etc/ssl/
c_rehash fetchmail

dann die fetchmailrc ergänzen:

poll pop.provider.de with proto IMAP
   user 'account@provider.de there' with password 'geheim'
   is 'me@mydomain.de' here
   ssl sslcertck sslcertpath /etc/ssl/fetchmail sslproto ssl23

Jetzt sollte das selbstsignierte Zertifikat ordnungsgemäß funktionieren.

MD5 Fingerprint

Ich habe noch eine Variante gefunden bei der man den MD5 Fingerprint benutzt. Hab den Ansatz nicht weiter verfolgt, da die andere Version funktioniert. Musste aber ne Weile suchen wie man den MD5 Fingerprint bekommt. Also, für alle die, die wissen wollen wie man den MD5 Fingerprint bekommt:

echo "quit" | openssl s_client -connect imap.meinedomain.com:993 | sed -n /BEGIN/,/END/p | openssl x509 -noout -fingerprint

Oder falls man das Serverzertifikat schon gespeichert hat mit

openssl x509 -in my-srv-cert.pem -noout -fingerprint

Dieser kommt als weitere Option zum poll - Eintrag:

sslfingerprint '4A:5E:2F:7E:57:12:0A:85:66:9D:11:24:0E:9E:36:1A'

TLS verwenden

Die Verwendung des SSL-Ports 993 für IMAP ist ja inzwischen deprecated. Stattdessen soll man den Port 143 mit TLS verwenden was ebenfalls zu einer SSL-verschlüsselten Verbindung führt. Um Mails von einem Server mit TLS abzuholen benötigt man eine solche Konfiguration:

poll www.provider.de with proto IMAP
  user 'account@meinedomain.de' there with password 'geheim'
  is 'me@meinedomain.de' here
  nokeep fetchall
  sslcertck sslcertpath "/etc/ssl/fetchmail"
  sslproto TLS1

Wobei die öffentlichen Server Zertifikate im Verzeichnis /etc/ssl/fetchmail zur Verifizierung liegen müssen.

Samstag
07
Juni 2014
Klaus Moser
Klaus Moser

Ubuntu - Mailserver - Postfix

Postfix ist ein MTA (Mail Transfer Agent) und nimmt E-Mails entgegen und stellt diese entweder an ein lokales Postfach zu oder sendet diese an ein anderes System weiter. Für die Kommunikation untereinander verwenden MTAs häufig SMTP.

Installation

Wer die Pakete aus der Einleitung schon installiert hat, kann diesen Schritt überspringen. Die Installation von Postfix erfolgt über:

apt-get install postfix postfix-mysql

Nach der Installation sollte man den Konfigurationsassistenten nochmal aufrufen da er bei manuellem Aufruf mehr Fragen stellt:

dpkg-reconfigure postfix

Grundkonfiguration

Für die Konfiguration legen wir als erstes den Namensteil der Adresse fest, die hinter dem Benutzername und dem @ kommt:

sudo nano /etc/mailname

hier steht z.B. meinedomain.de. Siehe auch Debian Wiki.

Die Konfiguration von Postfix ist in zwei Dateien aufgesplittet. Zu einen ist das die main.cf, in der man, wenn ich das richtig verstanden habe, die globalen Einstellungen. In der master.cf werden die Dienste definiert und man kann hier für einzelne Dienste mit dem -o Parameter Einstellungen aus den globalen Einstellungen überschreiben, bzw. zusätzlich setzen.

Beginnen wir mit den globalen Einstellungen

sudo nano /etc/postfix/main.cf

Zunächst definieren wir den Hostnamen des Servers

# Name of the server
myhostname = homeserver.meinedomain.de

Dann legen wir den Domainnamen fest, der E-Mails von diesem Server angefügt werden soll:

# Domain to append to email
myorigin = /etc/mailname

Standardmäßig leitet Postfix alle Mails weiter, die von einem authorisierten Netzwerk Segmet kommen. Authorisierte Netzwerke legt man mit dem mynetworks Parameter fest. Vorsicht mit diesem Parameter, ist dieser falsch gesetzt, bekommt man möglichweise ein offenes Relay.

# Authorized networks
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Benutzt man kein IPv6 kann man den IPv6 Anteil auch weglassen. Hab ihn nur als Notiz für mich mal drinnen gelassen. Vielleicht finde ich ja mal die Zeit und stelle mein lokales Netz mal auf IPv6 um.

Würden wir eine lokale Zustellung ohne virtuelle Domains verwenden, würden wir hier die Domains festlegen die lokal zugestellt werden sollen:

# Lokale Zustelldomains
mydestination = meinedomain.de, meinedomain.local, srv, localhost.localdomain, localhost

Da wir unsere Domains aber über die MySQL Datenbank pflegen wollen, bleibt dieser Eintrag leer. 

mydestination =

Folgendes definiert den Begrüßungstext wenn sich ein Benutzer mit dem Postfix Server verbindet:

# Welcome message
smtpd_banner = $myhostname ESMTP $mail_name

Wir akzeptieren Mails auf allen Netzwerk Devices

# Accept mail from all devices
inet_interfaces = all

Ich plane aktuell nur ipv4 einzusetzen, daher werde ich die Verwendung auf dieses Protokoll beschränken.

# Allowed protocols
inet_protocols = ipv4

Als nächstes tragen wir ein Maquerading für Domains ein. Lautet der Servername z.B. homeserver.meinedomain.de will man als Absender Adresse lieber benutzer@meinedomain.de anstatt benutzer@homeserver.meinedomain.de. Man kann auch Domains festlegen die nicht masktiert werden sollen, wie z.B. die Adresse von seinem Dyndns Anbieter. Hier muss der Domainname die Subdomain sein.

# Masquerade Domains
masquerade_domains = homeserver.mydomain.de !mydynname.dyndomain.com
masquerade_exceptions = root

Jetzt kommen noch ein paar weitere Konfigurationen, die man in der Postfix Anleitung nachschlagen kann/soll. 

# Send new mail notification with "biff"
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# How long to wait before sending "delayed mail" warnings
delay_warning_time = 4h

# How many addresses cat be used in one message.
# Effective stopper to mass spammers
default_recipient_limit = 16

# Mailbox size (0=no limit)
mailbox_size_limit = 0

# Maximale Nachrichtengröße (1GB)
message_size_limit = 1024000000

# Location of the Postfix Readme files
readme_directory = no

recipient_delimiter =

Man kann sich die Standardparameter die Postfix verwendet übrigens anzeigen lassen mit

postconf -d

Alle vom Standard abweichenden Einstellungen bekommt man mit:

postconf -n

TLS- (SSL-) Verschlüsselung

Damit Passwörter beim Versand von E-Mails nicht im Klartext-Format übertragen werden, und damit von Dritten ausgespäht werden könnten, sollte man die Verbindung per TLS (Transport Layer Security) ehemals SSL verschlüsseln. Ein selbstsigniertes Zertifikat kann man über das Paket ssl-cert bekommen.

Um die Verschlüsselung per Zertifikat zu aktivieren müssen folgende Zeilen in die /etc/postfix/main.cf

# TLS parameters
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_sasl_security_options = noanonymous

Ausserdem müssen noch die Pfade zu den Zertifikaten gesetzt werden:

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Benutzt man z.B. ein Zertifikat von StartSSL muss man noch das Intermediate Zertifikat im Server Zertifikat unterbringen:

sudo cat my-server-cert.pem sub.class1.server.ca.pem > /etc/ssl/certs/startssl/postfix.pem
sudo cp mykey.pem /etc/ssl/startssl/private/key.pem

Die Konfiguration würde dann so aussehen:

smtpd_tls_CAfile=/etc/ssl/certs/StartCom_Certification_Authority.pem
smtpd_tls_cert_file=/etc/ssl/startssl/postfix.pem
smtpd_tls_key_file=/etc/ssl/startssl/private/key.pem

Unbedingt darauf achten, dass der Key nur für root lesbar ist um diesen vor unbefugtem Zugriff zu schützen.

Mann kann für smtpd_tls_security_level statt may auch encrypt verwenden, dann ist die TLS Verbindung Voraussetzung für die Verbindung und Postfix weist Clients ab die kein TLS unterstützen.

smtpd_tls_security_level = encrypt

Diese Option darf man aber nicht global in der main.cf setzen, sonst bekommt man spätestens mit fetchmail Probleme. Auf einem Internet Server würde diese Option dazu führen, dass keine Mailserver mehr Mails an unseren Server liefern können. Diese Option muss daher in der master.cf für den submission Port (587) gesetzt werden.

Die Option smtpd_tls_auth_only bewirkt dass Clients erst ein STARTSSL senden müssen bevor sie irgendwelche AUTH-Mechanismen von Postfix angeboten bekommen.

Es ist empfehlenswert das TLS Session Caching zu aktivieren, da das Aushandeln einer Session recht ressourcenintensiv ist.

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Zum Testen der Verbindung und des Zertifikates folgendes ausführen:

echo "quit" | openssl s_client -starttls smtp -connect localhost:587

Die Gültigkeitsdauer des Zertifikates bekommt man mit:

echo "quit" | openssl s_client -starttls smtp -connect localhost:587 | openssl x509 -noout -enddate

SASL Authentifikation

Für die SASL Authentifikation benötigen wir noch das folgende Paket:

sudo apt-get install libsasl2-modules

Damit postfix weiß welche Benutzer die Erlaubnis zum Senden von Mails haben, muss Postfix den Socket von Dovecot benutzen den wir bei der Einrichtung von Dovecot angelegt haben. Dazu muss folgende in die main.cf:

# SASL Auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Falls man Microsoft Outlook 2000-2003 erlauben will, sollte noch dieser Parameter gesetzt werden:

broken_sasl_auth_clients = yes

Anscheinend ist es wohl eine "Good Practice" für den Versand von Mails von seinen Nutzern einen eigenen Port, den submission Port  (TCP 587), zu verwenden und den Standard Port 25 für die Kommunikation der MTAs untereinander freizuhalten. Mithilfe des Submission Ports öffnet Postfix einen zusätzlichen Port über den nur dann E-Mails versendet werden können, wenn der Nutzer sich authentifiziert hat.

Dazu muss folgendes in die master.cf:

submission inet n - - - - smtpd
 -o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

In der master.cf gibt es bereits einen Bereich mit einer Definition des submission Ports. Darauf achten dass dieser auskommentiert ist.

Siehe auch Dovecot Wiki.

Dovecot LMTP

Im Dovecot Artikel haben wir einen LMTP Socket für die lokale Zustellung von Mails eingerichtet. Damit dieser verwendet wird müssen wir diesen Postfix über die main.cf noch bekannt geben:

# Use Dovecot LMTP Service to deliver Mails
virtual_transport = lmtp:unix:private/dovecot-lmtp

MySQL Anbindung

Auch Postfix wird wie Dovecot an eine MySQL Datenbank angebunden. Das vereinfacht die Administration, da man Benutzer und Domains bequem über Datenbank Tabellen pflegen kann.

Dazu legt man in der Datenbank vmail ein paar neue Tabellen an:

# Tabelle für Domains
CREATE TABLE domains (
    domain VARCHAR(128) NOT NULL,
    UNIQUE (domain)
);
# Tabelle für Aliase
CREATE TABLE aliases (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL,
    source VARCHAR(128) NOT NULL,
    destination VARCHAR(128) NOT NULL,
    UNIQUE (id),
    PRIMARY KEY (source, destination)
);

In die main.cf kommen folgende Einträge:

# MySQL
virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-domains.cf
local_recipient_maps = $virtual_mailbox_maps

Die hier referenzierten Dateien müssen noch angelegt werden:

sudo mkdir /etc/postfix/virtual
cd /etc/postfix/virtual

In den folgenden Dateien werden die Verbindungsparameter für den Zugriff auf die Datenbank sowie der Query für die entsprechende Aktion festgelegt. Der Wert für password entspricht also dem Passwort des Datenbankbenutzers vmail für die Datenbank vmail.

In die Datei mysql-aliases.cf kommt folgender Inhalt:

user = vmail
password = mysecret
hosts = 127.0.0.1
dbname = vmail
query = SELECT destination FROM aliases WHERE source='%s'

In die Datei mysql-maps.cf kommt dieser Inhalt:

user = vmail
password = mysecret
hosts = 127.0.0.1
dbname = vmail
query = SELECT * FROM users WHERE username='%u' AND domain='%d'

Und in die Datei mysql-domains.cf muss folgendes:

user = vmail
password = mysecret
hosts = 127.0.0.1
dbname = vmail
query = SELECT * FROM domains WHERE domain='%s'

Zum Schluss die Dateien nur für root lesbar machen:

sudo chmod 660 -R /etc/postfix/virtual/

Jetzt müssen die Tabellen noch mit gültigen Werten gefüllt werden. Dazu verbinden wir uns zur MySQL Datenbank:

mysql -u root -p
use vmail;

und fügen zunächst einen Domain Datensatz ein:

INSERT INTO domains (domain) VALUES ('meinedomain.de');

Einen Benutzer haben wir ja bereits im letzten Artikel, bei der Installation des Dovecot Servers, angelegt.

Und Aliase sollten mindestens für root und postmaster angelegt werden.

INSERT INTO aliases (source, destination) VALUES ('root@meinedomain.de', 'me@meinedomain.de');
INSERT INTO aliases (source, destination) VALUES ('postmaster@meinedomain.de', 'me@meinedomain.de');

SMTP Access Restrictions

Mit der Einstellung smtpd_relay_restrictions (bzw. smtpd_recipient_restrictions vor Postfix 2.10) kann man Postfix sagen, wann eine Mail die am SMTP Server ankommt angenommen oder direkt abgewiesen werden soll.

Standardmäßig akzeptiert Postfix Mails die eine der folgende Kritieren erfüllt:

  • Mails von Clients deren IP Adresse auf $mynetworks passt
  • Mails die an entfernte Empfänger gerichtet sind, die auf $relay_domains zutreffen, ausser Adressen die ein senderspezifiisches routing (user@elsewhere@domain) enthalten
  • Mails an lokale Empfänger die auf $inet_interfaces oder $proxy_interfaces, $mydestination, $virtual_alias_domains, oder $virtual_mailbox_domains zutreffen

Siehe Postfix.org.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination

Diesem Thema werde ich in nächster Zeit einen eigenen Blogbeitrag widmen.

E-Mail Client

Im E-Mail Client, wie z.B. Thunderbird müssen folgende Werte für den Versand von Mails über SMTP eingestellt werden:

Einstellung Wert
Verbindungsart SMTP
Port 587
Verbindungssicherheit STARTSSL
Authentifizierung Passwort, normal

Weitere Einstellmöglichkeiten

Es folgen noch ein paar weitere Konfigurationsmöglichkeiten für Postfix, die ich gefunden habe aber nicht einsetzen werde aber dennoch so interessant sind, dass ich sie mir hier notieren möchte. Zu beachten ist, dass ich diese nicht getestet habe, also nicht wundern wenn es nach dem Copy-Pasten nicht funktioniert.

Mails mit bestimmten Anhängen verweigern

Um Mails mit bestimmten Dateien im Anhang gleich von vornherein abzufangen, legt man eine Datei /etc/postfix/attachment_check mit einem RegExp an:

/^((Content-(Disposition: attachment;|Type:).*|\ +)| *) (file)?name\ *=\ *"?.*\. (lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe |dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wmf)"?\ *$/ REJECT attachment type not allowed

Darauf achten, dass das hier eine einzige Zeile ist, ggf. Zeilenumbrüche entfernen.

Dann trägt man diese Datei als mime_header_checks in die main.cf ein:

mime_header_checks = pcre:/etc/postfix/attachment_check 
Blog

Kmoser's Tech-Blog