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:
- REJECT Nachricht mit einem fatalen Fehler 5xx ablehnen
- REJECT MSG Nachricht mit dem Text MSG ablehnen
- DISCARD Die Nachricht wird verworfen und zwar an alle Empfänger, sobald einer der Empfänger via DISCARD abgelehnt wird. Dem Einliefernden client wir eine erfolgreiche Zustellung mittels 250 OK vorgegaukelt.
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.