Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
centos:mailserver:grundabsicherung_von_postfix [30.05.2011 15:25. ]
django [Absicherung mit Hilfe von Restrictions] Rechtschreibkorrektur
centos:mailserver:grundabsicherung_von_postfix [23.05.2012 14:01. ] (aktuell)
django [header_checks zur SPAM-Abwehr]
Zeile 1: Zeile 1:
 +====== 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 [[http://​www.postfixbuch.de|Postfix-Bibel]] erarbeitet, bzw. den dortigen Beispielen entnommen. Die Bemerkungen in den nachfolgenden Restriction-Definitionen verweisen auf einzelne Kapitel im Buch!
 +<​code>#​
 +# 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</​code>​
 +===== erweiterte Konfiguration unseres MXers =====
 +An Hand der **Restrictions** können wir unseres Postfix-Servers nun mit folgender erweiterten Konfiguration betreiben.
 +<​code>#​ 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</​code>​
 +===== 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.\\
 +\\
 +<​code>​header_checks = pcre:/​etc/​postfix/​header_checks</​code>​
 +Voraussetzung hierzu (//Perl Compatible Regular Expressions//​) ist natürlich die Unterstützung des installierten Postfix. Mit <​code>#​ postconf -m
 +btree
 +cidr
 +environ
 +hash
 +ldap
 +nis
 +pcre
 +proxy
 +regexp
 +static
 +unix</​code>​ 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:
 +<​code>​If /^From:/i
 +/^From: .*Euro Dice Casino.*/ ​                          ​REJECT Header-From-Spamschutzregel From-1001
 +/^From: .*happydigits.de/ ​                              ​REJECT Header-From-Spamschutzregel From-1000
 +Endif
 +</​code>​
 +Nachrichten mit einem speziellem Betreff filter wir wie folgt:
 +
 +<​code>​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</​code>​ und verweigern damit die Annahme.
 +\\
 +Nachrichten mit einem absurden Datum im Mailheader verweigern wir durch folgende Zeilen:
 +<​code>/​^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.
 +</​code>​
 +===== DSN abstellen =====
 +DSN((Delivery Status Notification)) 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.
  
  • centos/mailserver/grundabsicherung_von_postfix.txt
  • Zuletzt geändert: 23.05.2012 14:01.
  • von django