Inhaltsverzeichnis

Grundabsicherung von Postfix

Das schlimmste, was uns passieren kann, wäre der Betrieb eines offenen Mailrelais bzw. ein Mailserver der sich beharrlich weigert mails zu versenden und zu empfangen. Mit unserer Grundinstallation haben wir schon mal den wichtigsten Part Mailrelay erschlagen und sichergestellt, dass kein Fremder Nachrichten an Dritte verschickt, für die unser MX sich nicht zuständig und verantwortlich fühlt.
Auch wurde der Versand unserer eMail bereits entsprechend berücksichtigt.

Absicherung mit Hilfe von Restrictions

Damit aber nun unser Mailserver nicht jeden Dreck - aka SPAM & Co - definieren wir uns nun ein Regelwerk, mit Hilfe dessen wir festlegen, wann unser Server Mails annehmen oder ablehnen soll. Diese Festlegungen erfolgt mit Hilfe der Restrictions.
Der entscheidenste Moment, an dem wir nicht nur SPAM sondern auch all die anderen unerwünschten Nachrichten abzuwehren, ist der Einlieferungszeitpunkt! Was wir nicht annehmen brauchen wir auch später nicht weiterverarbeiten bzw. beachten. Analog dem Briefverkehr legen wir quasi fest, welche Sendungen überhaupt in unseren Briefkasten geworfen werden können und dürfen.
Wie bereits die Grundkonfiguration habe ich die wichtigsten Details mit Hilfe der Postfix-Bibel erarbeitet, bzw. den dortigen Beispielen entnommen. Die Bemerkungen in den nachfolgenden Restriction-Definitionen verweisen auf einzelne Kapitel im Buch!

#
# Schutz durch Restrictions für unser SOHO 
# Eingetragen am 05.10.2008
#

smtpd_recipient_restrictions =
# Postmaster, abuse und andere aufgaben- oder funktionsgebundene E-Mail-Adressen (Role-Accounts) whitelisten
        check_recipient_access hash:/etc/postfix/access_recipient-rfc,
# Black- und Whitelisting                               (Kapitel 8.2.3 White- und Blacklisting)
        check_client_access hash:/etc/postfix/access_client,
        check_helo_access hash:/etc/postfix/access_helo,
        check_sender_access hash:/etc/postfix/access_sender,
        check_recipient_access hash:/etc/postfix/access_recipient,
# Unsauberer eMails nicht annehmen                      (Kapitel 8.2.4 Anforderungen an Mailadressen)
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
# Unsere eigenen Nutzer zulassen-/erlauben              (Kapitel 8.2.2 Relaying erlauben und verbieten)
        permit_sasl_authenticated,
        permit_mynetworks,
# RBL überprüfen (Kapitel 10.11 Realtime Blackhole Lists)
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client dnsbl.njabl.org,
        reject_rhsbl_client multi.uribl.com,
# Dynamische Prüfung auf existente Relay-Empfänger      (Kapitel 12.2.2 Dynamische Empfänger-Verifizierung)
#       reject_unverified_recipient,
# Mackupserver (MX) erlauben
#       permit_mx_backup,
# alles andere an relaying verbieten                    (Kapitel 8.2.2 Relaying erlauben und verbieten)
        reject_unauth_destination,
# Zu guter Letzt alles durchlassen, was bis jetzt noch nicht beanstandet wurde
        permit

erweiterte Konfiguration unseres MXers

An Hand der Restrictions können wir unseres Postfix-Servers nun mit folgender erweiterten Konfiguration betreiben.

# postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
header_checks = pcre:/etc/postfix/header_checks
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = nausch.org
mydestination = $myhostname, $mydomain, localhost, localhost.$mydomain
myhostname = mx1.nausch.org
mynetworks = 192.168.1.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/access_recipient-rfc,   check_client_access hash:/etc/postfix/access_client,    check_helo_access hash:/etc/postfix/access_helo,    check_sender_access hash:/etc/postfix/access_sender,    check_recipient_access hash:/etc/postfix/access_recipient,      reject_non_fqdn_sender,     reject_non_fqdn_recipient,      reject_unknown_sender_domain,   reject_unknown_recipient_domain,        permit_sasl_authenticated,      permit_mynetworks,         reject_rbl_client zen.spamhaus.org,        reject_rbl_client ix.dnsbl.manitu.net,        reject_rbl_client bl.spamcop.net,        reject_rbl_client dnsbl.njabl.org,     reject_rhsbl_client multi.uribl.com,        check_client_access hash:/etc/postfix/policyd_weight_client_whitelist   check_policy_service inet:127.0.0.1:12525,      check_policy_service unix:postgrey/socket,  reject_unauth_destination,      permit
unknown_local_recipient_reject_code = 550

header_checks zur SPAM-Abwehr

Für die erweiterete SPAM-Abwehr haben wir bereits die Option header_checks = pcre:/etc/postfix/header_checks in der main.cf eingetragen.

header_checks = pcre:/etc/postfix/header_checks

Voraussetzung hierzu (Perl Compatible Regular Expressions) ist natürlich die Unterstützung des installierten Postfix. Mit

# postconf -m
btree
cidr
environ
hash
ldap
nis
pcre
proxy
regexp
static
unix

können wir testen, ob pcre unterstützt wird.

Trifft das gewählte Suchmuster bei unseren PRCE zu, so haben wir unter anderem folgene Möglichkeiten:


Wollen wir nun Nachrichten von bestimmten Absendern generell blocken, so tragen wir in unsere /etc/postfix/header-checks einfach folgende Zeilen ein:

If /^From:/i
/^From: .*Euro Dice Casino.*/                           REJECT Header-From-Spamschutzregel From-1001
/^From: .*happydigits.de/                               REJECT Header-From-Spamschutzregel From-1000
Endif

Nachrichten mit einem speziellem Betreff filter wir wie folgt:

If /^Subject:/i
/^Subject:.*young and enhanced.*/                       REJECT Header-Subject-Spamschutzregel Subj-1053
/^Subject:.*YOUR ASSISTANCE.*/                          REJECT Header-Subject-Spamschutzregel Subj-1052
/^Subject:.*Potenzprobleme.*/                           REJECT Header-Subject-Spamschutzregel Subj-1001
/^Subject:.*RedBull fur Ihr bestes Stueck/              REJECT Header-Subject-Spamschutzregel Subj-1000
Endif

und verweigern damit die Annahme.
Nachrichten mit einem absurden Datum im Mailheader verweigern wir durch folgende Zeilen:

/^Date: .* 200[0-7]/                                    REJECT Your email has a date from the past. Fix your system clock and try again.
/^Date: .* 19[0-9][0-9]/                                REJECT Your email has a date from the past. Fix your system clock and try again.

DSN abstellen

DSN1) zu verbergen, kann ein wünschenswerter Zustand sein. Was geht schon einem externen der interne Aufbau unserer eMail-Infrastruktur an.

Wir erlauben also beim abgehenden Verkehr die Möglichkeit für unsere eigenen User, nach außen schotten wir uns jedoch ab. Dazu tragen wir in unserer /etc/postfix/main.cf folgende Zeile nach.

 vim /etc/postfix/main.cf
 
 # DSN selectiv aktivieren, bzw. sperren                 (Kapitel 13.11.2 DSN verbieten)
 # Eingetragen am 21.11.2008
 smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access

Die zugehörige cidr-Tabelle mit den Netzdefinitionen legen wir anschließend auch noch an.

 vim /etc/postfix/esmtp_access
 
 # NDS requests werden nur aus dem eignen Netz erlaubt
 192.168.10.0/24 silent-discard
 0.0.0.0/0       silent-discard, dsn
 ::/0            silent-discard, dsn

Abschließend starten wir den MX einmal durch.

 service postfix restart

Bei Änderungen an der Datei ist lediglich ein service postfix reload notwendig.

1)
Delivery Status Notification