IT security, FreeBSD, Linux, mail server hardening, post-quantum crypto, DNS, retro computing & hands-on hardware hacks. Privater Tech-Blog seit 2003.

Schlagwort: postmaster

Postfix-Fehlerantworten anpassen: So gehst du vor

Wieder wurde ich gefragt wie ich bei meinem Postfix den Error Reply für rejected 5xx E-Mails geändert habe. Nun ja, das habe ich überhaupt nicht.

Postfix hat seit vielen Jahren die Option: smtpd_reject_footer diese wurde in 2011 beim „Aufräumen“ umbenannt in: smtpd_reject_footer

Cleanup: smtpd_reject_contact_information is renamed to smtpd_reject_footer, because it can be used for non-contact information.

Beide Optionen sind anscheinend eher unbekannt. Was ich gut verstehen kann. Denn setzt man nun in seiner main.cf den smtpd_reject_footer wird diese zwar brav angehangen und taucht sogar beim Absender im Postfach auf, nur welcher Benutzer liest diese schon und folgt dann noch dem jeweiligen Hinweis? Bisher ist diese Rückmeldung meines Systems nur sehr wenigen überhaupt aufgefallen ;-P

Vor ~12 Jahren habe ich sie wohl zum ersten Mal gesetzt. Ich meine da auf die Adresse vom Postmaster verwiesen zu haben, damit die Nutzer sich dort hin melden können. Später hatte ich mal einen Link auf eine zweisprachige Hilfeseite bei mir und noch später etwas wie: „Das Problem ist zu 99% dein Mailserver, frag DEINEN Admin!“. Dieses war es bis heute, denn heute habe ich die erneute Frage zum Anlass genommen, dieses hier zu schreiben und natürlich direkt auf riot.im zu verlinken. Dann kann man mich direkt anschreiben. Sicher etwas freundlicher als: „geh weg du bist eh das Problem“ und einfacher als noch eine E-Mail an den Postmaster zu schreiben. Sicher werde ich nun durch diese Nachricht 1 oder 2 mal im Jahr angeschrieben, wenn es dieses überhaupt wird.

Achja, so sieht der Eintrag in der main.cf von Postfix aus:

root@smtp:/usr/local/etc/postfix # postconf smtpd_reject_footer
smtpd_reject_footer = For assistance, visit https://matrix.to/#/@kernel-error:kernel-error.com

Damit lässt sich nun dieses Ergebnis erzielen:

banane@bsd03:~ # telnet smtp.kernel-error.de 25
Trying 2a01:4f8:150:1095::25...
Connected to smtp.kernel-error.de.
Escape character is '^]'.
220 smtp.kernel-error.de ESMTP Postfix
helo asdf
250 smtp.kernel-error.de
mail from: <test@spam.de>
250 2.1.0 Ok
rcpt to: <spamlover@kernel-error.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: test
.test
.
554-5.7.1 Spam message rejected
554 5.7.1 For assistance, visit https://matrix.to/#/@kernel-error:kernel-error.com
Connection closed by foreign host.

Fragen? Dann wie immer bitte fragen…

Siehe auch: E-Mails ohne TLS ablehnen

Fragen? Einfach melden.

Eigene DNS-Blocklisten in Postfix: DNSRBL und RHSBL einrichten

Postfix kann eingehende Mails anhand von DNS-basierten Blocklisten ablehnen. Zwei Typen sind relevant: DNSRBL (IP-basiert) prüft ob die sendende IP-Adresse auf einer Blockliste steht. RHSBL (Domain-basiert) prüft ob die Absenderdomain gelistet ist. Beides passiert in Echtzeit während der SMTP-Sitzung, noch bevor die Mail angenommen wird.

Öffentliche Listen

Es gibt dutzende öffentliche Blocklisten. Nicht alle sind gleich zuverlässig. Diese hier laufen bei mir seit Jahren ohne nennenswerte False Positives:

# /etc/postfix/main.cf (Auszug)
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination,
   reject_rbl_client zen.spamhaus.org,
   reject_rbl_client bl.spamcop.net,
   reject_rbl_client b.barracudacentral.org,
   reject_rbl_client ix.dnsbl.manitu.net,
   permit

zen.spamhaus.org ist die Kombiliste von Spamhaus (SBL + XBL + PBL). ix.dnsbl.manitu.net wird in Deutschland gepflegt und erwischt deutschsprachigen Spam den internationale Listen übersehen.

Eigene Listen

Zusätzlich betreibe ich eigene Blocklisten unter kernel-error.de. Die werden teils von Hand gepflegt, teils automatisch aus einem Honeypot-Postfach befüllt. Einträge bleiben mindestens sechs Monate drin:

# Eigene Listen (RHSBL + RBL)
reject_rhsbl_sender abuse.rhsbl.kernel-error.de,
reject_rhsbl_sender postmaster.rhsbl.kernel-error.de,
reject_rhsbl_sender spam.rhsbl.kernel-error.de,
reject_rbl_client spam.rbl.kernel-error.de,

Die RHSBL-Listen prüfen die Absenderdomain: abuse listet Domains ohne funktionierende abuse-Adresse, postmaster solche ohne postmaster-Adresse, spam bekannte Spam-Domains. Die RBL-Liste prüft die IP-Adresse des sendenden Servers.

Warnung

Das sind meine privaten Listen. Ich pflege sie nach meiner persönlichen Einschätzung. Wer sie produktiv einsetzt, macht das auf eigene Verantwortung. Es wird zu False Positives kommen, weil meine Kriterien nicht mit den eigenen übereinstimmen müssen. Für den eigenen Mailserver sind sie ein nützlicher Baustein neben den öffentlichen Listen. Für fremde Mailserver würde ich sie nicht empfehlen.

Wer seinen Postfix weiter absichern will: Die HELO-Prüfung fängt einen erstaunlichen Anteil an Spam ab, bevor die RBL-Abfrage überhaupt nötig wird. Fragen? Einfach melden.

AOL macht jetzt auch Mailinglisten „kaputt“ / DMARC

Das gefällt mir laughing… Nachdem nun Yahoo die Eier hatte einfach mal ihre DMARC Policy „scharf“ (reject) zu schalten und sich so viel Schimpfe von aller Welt dafür eingesammelt hat und beschuldigt wurde die Mailinglisten „kaputt“ zu machen…. Tja, da zieht AOL nun in gewisser Weise nach: https://web.archive.org/web/20151222062444/http://postmaster-blog.aol.com/2014/04/22/aol-mail-updates-dmarc-policy-to-reject/ AOL hat nämlich gerade ein tierisches Spam-Problem. Also jetzt nicht direkt, eher haben andere das Problem, es betrifft AOL nur in soweit das deren Absenderdomain dafür missbraucht wird. Die Spam E-Mails sehen also so aus als wenn sie von AOL kommen. AOL hat nun also ihre DMARC Policy scharf geschaltet um das Problem damit etwas eindämmen zu können. Ob nun wohl so langsam Google und Microsoft ebenfalls nachziehen? Inzwischen sollten die Admins der Mailinglisten ja schon mal „warm“ gelaufen sein tongue-out

Fragen? Einfach melden.

Grobe Schnitzer im der DNS Konfiguration testen.

Da habe ich doch gerade noch einen Tipp bekommen (danke Felix). Möchte man „mal eben“ seine DNS Konfiguration inkl. Mailserver testen wird einem ein solcher Test über die Webseite www.dnsinspect.com angeboten.

Der Test geht natürlich jetzt nichts ins absolute Detail aber die ganz groben Fehler findet er dann schon. Auch so Dinge wie PRT – HELO/EHLO – Hostname oder postmaster und abuse Adresse. Zu gesprächige Nameserver usw. usw. usw…

Einfach zum Spaß mal eure Domain reinwerfen und schauen was passiert .-)

http://www.dnsinspect.com/kernel-error.de

Fragen? Einfach melden.

Nachfolger für RFC-Ignorant.Org

Na also…

Es ist ein ordentlicher Nachfolger für rfc-ignorant.org gefunden! Der Hosting-Provider manitu hat auch bereits eine Domain gestellt: rfc-ignorant.de

Noch ist die Liste „leer“. Keine Anfrage wird daher negativ bewertet. Denn noch kann man sie bereits in seine Konfiguration aufnehmen. Die neuen Zonen sind:

Old zone New zone
dsn.rfc-ignorant.org > dsn.bl.rfc-ignorant.de
postmaster.rfc-ignorant.org > postmaster.bl.rfc-ignorant.de
abuse.rfc-ignorant.org > abuse.bl.rfc-ignorant.de
whois.rfc-ignorant.org > whois.bl.rfc-ignorant.de
bogusmx.rfc-ignorant.org > bogusmx.bl.rfc-ignorant.de
fulldom.rfc-ignorant.org > fulldom.bl.rfc-ignorant.de

 

So gefällt es mir.

 

 

Siehe auch: Die Akte IGNORANT

Fragen? Einfach melden.

Die vergessenen abuse und postmaster Adressen

Für jede Domain, die E-Mail empfängt, muss es eine postmaster@ und eine abuse@ Adresse geben. E-Mails an diese Adressen müssen angenommen werden, und jemand sollte sie auch lesen. Geregelt ist das in RFC 5321 und RFC 2142.

Wofür die Adressen da sind

postmaster@domain.tld ist für technische Fragen zum Mailsystem. Wenn jemand Probleme hat, E-Mails an eine Domain zu schicken, wendet er sich an den Postmaster. Im schlechtesten Fall sitzt dort ein Mensch, der die Nachricht an den richtigen Admin weiterleiten kann.

abuse@domain.tld ist für Missbrauchsmeldungen. Wird die Domain zum Spam-Versand missbraucht, schreibt man an abuse. Eine Abuse-Adresse findet sich auch im WHOIS der meisten IP-Netze.

Warum das in der Praxis scheitert

Immer wieder kommen Beschwerden bei mir an, weil E-Mails an gehostete Domains abgewiesen werden. Also sucht man den Grund, findet ihn im Reject (Blockliste, fehlender Reverse-DNS, dynamische IP) und schreibt dem Postmaster der Absenderdomain. Vier Sekunden später kommt die Antwort: „Postfach nicht gefunden“ oder „Mailbox voll“.

Die Adressen existieren nicht, oder niemand liest sie. Das ist nicht nur ein Verstoß gegen die RFCs. Es macht die Fehlersuche für alle Beteiligten unmöglich.

Das eigentliche Problem: Filter

Selbst wenn die Adressen existieren, reicht das nicht. Wenn jemand Probleme hat, E-Mails an unsere Domain zu schicken, versucht er es über postmaster@. Wird diese E-Mail ebenfalls gefiltert, hat der Absender verloren. Ein Hinweis auf ein echtes Problem mit dem Mailsystem erreicht uns nicht.

Die Lösung: postmaster@ und abuse@ müssen an allen Filtern vorbei. Sowohl in Postfix als auch im Content-Filter.

Postfix: Empfänger whitelisten

In /etc/postfix/recipient-access die beiden Adressen mit OK eintragen:

# /etc/postfix/recipient-access
postmaster@kernel-error.de    OK
abuse@kernel-error.de         OK

Danach die Hash-Datei erzeugen:

postmap /etc/postfix/recipient-access

In /etc/postfix/main.cf muss check_recipient_access vor den Restrictions stehen. Die Reihenfolge ist entscheidend: Postfix arbeitet die Regeln von oben nach unten ab, die erste passende greift.

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        check_recipient_access hash:/etc/postfix/recipient-access,
        reject_rbl_client zen.spamhaus.org,
        ...

Alle nachfolgenden HELO-Checks und RBL-Prüfungen greifen jetzt nicht mehr auf E-Mails an postmaster@ und abuse@.

Wo im SMTP-Dialog prüfen?

Postfix bietet mehrere Stellen für Restrictions:

smtpd_client_restrictions — nach connect
smtpd_helo_restrictions — nach HELO/EHLO
smtpd_sender_restrictions — nach MAIL FROM
smtpd_recipient_restrictions — nach RCPT TO
smtpd_data_restrictions — nach DATA
smtpd_end_of_data_restrictions — nach der Übertragung

Je früher man ablehnt, desto weniger Ressourcen verbraucht man. Wer im HELO prüft, nimmt erst gar keinen Empfänger entgegen. Wer erst nach DATA prüft, hat die komplette E-Mail schon angenommen. Für die meisten Setups ist smtpd_recipient_restrictions der sinnvolle Kompromiss.

Content-Filter: Spam durchlassen

Postfix lässt die E-Mails an postmaster@ und abuse@ jetzt durch. Aber der Content-Filter dahinter wird sie trotzdem filtern, wenn man ihm nicht sagt, dass er sie in Ruhe lassen soll.

In rspamd geht das über eine settings.conf Regel, die bestimmte Empfänger vom Spam-Filtering ausnimmt. In AMaViS (falls noch im Einsatz) über @spam_lovers_maps in /etc/amavis/conf.d/50-user:

# AMaViS: /etc/amavis/conf.d/50-user
@spam_lovers_maps = (
  [
    "postmaster\@kernel-error.de",
    "abuse\@kernel-error.de",
  ]
);

Das bedeutet nicht, dass die E-Mail nicht geprüft wird. AMaViS testet weiterhin, lässt die Nachricht aber durch. Viren und verdächtige Anhänge filtere ich an dieser Stelle weiterhin. Nur Spam darf passieren. Denn wenn mir jemand über eine dynamische IP per Telnet eine Nachricht an postmaster@ schickt, soll sie ankommen.

Wer sich grundsätzlich gegen Spoofing absichern will: SPF hilft dabei, festzulegen, welche Server für eine Domain senden dürfen.

Fragen? Einfach melden.

Mailserver – früher war alles besser…

Nein, nicht ganz. Früher war es nur noch nicht so wichtig, ob man sich nun an die RFCs oder Empfehlungen hält noch nicht. Solange man nur smtp spricht….
In den letzten Jahren hat sich dieses etwas geändert. Da immer mehr Benutzer und Server in Fluten von Viren- und SPAMMAILS ertranken. Wurden die Ansprüche an Filter, welche diesem Herr werden sollten, immer höher.

Eine Idee ist nun zu schauen ob der einliefernde E-Mail-Server überhaupt sauber konfiguriert ist. Denn jemand der keine genaue Ahnung hat was er da genau konfiguriert, der konfiguriert mal schnell Lücken für Spammer oder ist sogar selbst einer. Lässt ein Admin seine Konfiguration schleifen, dann schleift auch meist die Sicherheit des Systems. Möchte man als Mailserver ernst genommen werden, sollte man zumindest korrekt konfiguriert sein. Im normalen Leben erwarte ich ja von meinem Arzt auch eine gewissen Hygiene, sonst lasse ich mich nicht anfassen!

Jetzt testen diese Spamfilter also in gewissem Maße die korrekte Konfiguration des einliefernden Mailservers. Passt diese nicht zu den gängigen RFCs und/oder Empfehlungen, werden die E-Mails halt abgewiesen. Man glaubt überhaupt nicht, wie viele Spammails man damit schon erschlägt. Leider betrifft dieses nun auch die E-Mails der Mailserver, welche von „faulen“ Admins oder…. –interessierten Laien- betrieben werden.
Diese stöhnen nun natürlich, denn der -faule- Admin muss sich kümmern und der interessierte Laie versteht überhaupt nicht was los ist. Für diese war es früher „einfacher“.

Es wird leider sehr schnell unterschätzt was zum korrekten Betrieb eines E-Mail Servers alles nötig und zu beachten ist. Nur zu dumm dass man Mittlerweile sogar damit auffällt *lach*!

Ich habe selbst eine gewissen Zeit mal die RBL von https://web.archive.org/web/20171023192347/http://www.rfc-ignorant.org/ eingebunden. Dieses trifft leider nur die Benutzer. Die wollen und können dieses Problem nicht verstehen. Es kann denn noch sehr spannend sein, zu sehen wer dort hin und wieder gelistet ist.
Denkt also immer brav an RFC5321 https://web.archive.org/web/20171023192347/http://www.rfc-ignorant.org/policy-postmaster.php sowie an RFC2142 https://web.archive.org/web/20171023192347/http://www.rfc-ignorant.org/policy-abuse.php Was wird noch gleich oft vergessen? Ja genau…. PRT, A/AAAA-RECORD und HELO!

 

 

Siehe auch: MTA-STS einrichten

Fragen? Einfach melden.

Telekommailserver verschärfte Bedingungen der Mailannahme

Na also, nun hat die Telekom die Sicherheitsrichtlinien ihrer E-Mail Server so angepasst dass helo, hostname und R-DNS zusammenpassen müssen. Sonst gibt es diese Meldung:

A problem occurred. (Ask your postmaster for help or to contact tosa@rx.t-online.de to clarify.)

So gefällt mir das! Meine Kiste macht dieses ja schon länger so und ich bekomme immer mal wieder die Info, man könne mir keine E-Mail schicken. Mein Mailserver sei wohl kaputt, er sage immer:

550 5.7.1 Client host rejected: cannot find your hostname….

Wenn ich dann erkläre um was es geht bekomme ich immer mal wieder den Vorwurf da zu –genau- zu sein. Da jetzt noch ein weiteres großes Unternehmen genau so verfährt werden sich wohl noch mehr Mailserver „Administratoren“ um dieses Problem kümmern müssen. Lustig finde ich ja dass die Telekom direkt eine E-Mail Adresse angegeben hat tosa@rx.t-online.de, was da wohl abgehen muss.

 

http://www.kernel-error.de/postfix-spam-und-virenabwehr-durch-helo

 

 

 

Siehe auch: SPF-Record einrichten

Fragen? Einfach melden.

Spam- und Virenabwehr durch HELO: So funktioniert’s

Postfix kann schon beim SMTP-Dialog prüfen, ob die Angaben des einliefernden Servers plausibel sind. Stimmt der HELO-Hostname nicht, existiert die Absenderdomain nicht im DNS, oder passt der Reverse-DNS nicht zur IP? Dann ist die E-Mail mit hoher Wahrscheinlichkeit Spam. Diese Prüfungen kosten fast nichts und filtern einen erheblichen Teil des Mülls, bevor die Nachricht überhaupt angenommen wird.

Warum das funktioniert

Ordentlich konfigurierte Mailserver melden sich mit ihrem FQDN, und der Reverse-DNS-Eintrag passt dazu. Gekaperte Rechner eines Botnetzes melden sich dagegen mit dem Hostnamen, den der Besitzer irgendwann eingegeben hat. Im besten Fall „Peters-PC“, im schlechtesten Fall gar nichts. Selbst wenn der FQDN stimmt, wird der Botnetzbetreiber kaum beim ISP einen passenden Reverse-DNS setzen lassen. Bei dynamischen IPs von DSL-Anschlüssen ist der Hostname meist nicht einmal in einem gültigen Format.

Das können wir uns zunutze machen. Wer sich nicht korrekt anmeldet, bekommt einen 5xx-Reject. Der Vorteil: Postfix beendet die Verbindung sofort und gibt Ressourcen frei. Fällt ein legitimer Absender durch diese Prüfung, hat dessen Admin nicht sauber gearbeitet. Die Fehlermeldung im Reject sagt ihm genau, was falsch ist.

Grundkonfiguration

In /etc/postfix/main.cf zwei Zeilen ergänzen:

smtpd_helo_required = yes
smtpd_delay_reject = yes

smtpd_helo_required erzwingt ein HELO/EHLO von jedem Client. smtpd_delay_reject verschiebt die Ablehnung bis nach dem RCPT TO, weil manche SMTP-Clients (vor allem von Microsoft) sonst Probleme bekommen.

Die Restrictions im Detail

Die eigentlichen Prüfungen kommen in smtpd_recipient_restrictions. Hier die einzelnen Regeln und was sie tun:

reject_non_fqdn_sender — Absenderadresse ist kein FQDN.
reject_non_fqdn_recipient — Empfängeradresse ist kein FQDN.
reject_non_fqdn_hostname — Clientname ist kein FQDN.
reject_non_fqdn_helo_hostname — HELO-Hostname ist kein FQDN.
reject_invalid_hostname — Clientname hat kein gültiges Format.
reject_invalid_helo_hostname — HELO-Hostname hat kein gültiges Format.
reject_unknown_recipient_domain — Empfängerdomain hat keinen A- oder MX-Record.
reject_unknown_sender_domain — Absenderdomain hat keinen A- oder MX-Record.
reject_unknown_client_hostname — IP und Hostname des Clients passen nicht zusammen.
reject_unknown_helo_hostname — HELO-Hostname hat keinen A- oder MX-Record.
reject_unlisted_recipient — Empfänger nicht in der Liste gültiger Adressen.
reject_unauth_destination — Domain ist weder lokal noch als Relay konfiguriert.

Vollständige Konfiguration

Zusammen mit DNS-Blocklisten (RBL/RHSBL) und SPF-Prüfung ergibt sich eine Konfiguration wie diese:

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        check_recipient_access hash:/etc/postfix/recipient-access,
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_unlisted_recipient,
        reject_non_fqdn_recipient,
        reject_non_fqdn_helo_hostname,
        reject_non_fqdn_hostname,
        reject_non_fqdn_sender,
        reject_unknown_recipient_domain,
        reject_unknown_client_hostname,
        reject_unknown_helo_hostname,
        reject_invalid_helo_hostname,
        reject_invalid_hostname,
        reject_unknown_client,
        reject_unknown_sender_domain,
        reject_unauth_destination
smtpd_data_restrictions =
        reject_unauth_pipelining,
        permit

Die Reihenfolge ist wichtig. Postfix arbeitet die Regeln von oben nach unten ab, und die erste passende greift. permit_mynetworks und permit_sasl_authenticated stehen deshalb ganz oben, damit eigene Benutzer und vertrauenswürdige Netze nicht gefiltert werden. check_recipient_access erlaubt das Whitelisting bestimmter Empfänger (etwa postmaster@ und abuse@). Dann kommen die Blocklisten, danach die HELO- und DNS-Prüfungen.

Ein Reject im Log

So sieht ein typischer Reject aus, wenn ein Bot sich mit einem ungültigen HELO meldet:

Jun  7 17:50:35 smtp postfix/smtpd[22037]: NOQUEUE: reject: RCPT from
  unknown[94.52.112.110]: 504 5.5.2 <userpc>: Helo command rejected:
  need fully-qualified hostname;
  from=<MackenzieSaranzak@redvanilla.com>
  to=<empfaenger@domain.de>
  proto=ESMTP helo=<userpc>

Der Client „userpc“ hat keinen FQDN im HELO geliefert. Postfix lehnt mit 504 ab, die Verbindung ist sofort beendet. Kein Inhalt übertragen, keine Ressourcen verbraucht.

Wie effektiv ist das?

Allein die HELO- und DNS-Prüfungen filtern 30 bis 55 Prozent des Spams. Zusammen mit den RBLs kommt man auf über 90 Prozent, bevor rspamd überhaupt etwas zu tun bekommt. Das spart Rechenzeit und macht den Content-Filter deutlich entlastet.

Wer noch weiter gehen will: Mit eigenen DNS-Blocklisten lassen sich wiederkehrende Absender und Domains gezielt sperren.

Fragen? Einfach melden.

Mailserver

Alt, tot, überholt, schlecht, nicht nachmachen 🙂


 

 

Dieses soll eine kleine Beschreibung über die Gründe, die eigentliche Installation
und Einrichtung meines privaten Mailservers werden. Also kein HowTo!
Sollte jemand Fragen oder Anregungen haben, freue ich mich natürlich
über jede E-Mail.
Solltest du Fragen stellen achte bitte darauf deine Frage so genau wie irgend
möglich zu stellen. Beschreibe kurz dein Problem, haue mich nicht mit log und
configs zu und habe etwas Geduld. Ich bekomme nicht nur eine E-Mail am Tag. Darum
werde ich ganz sicher nur auf unfreundliche und ungenaue Fragen antworten. KEINER
hat ein Recht drauf von mir Support zu bekommen!!

Nun, die Situation bei mir schaut ca. so aus: Meine Familie, der Nachbar und ich
selbst sitzen zusammen im Netzwerk. Zu dem kommt immer mal wieder Besuch zu uns.
Da wir auch etwas mehr Platz als der normale Durchschnitt haben, finden auch oft
irgendwelche LANs usw. bei uns stat. Zu dem hängt noch eine Firma und ein
geschlossenes WLAN mit drin.

Da ist ein Problem mit der Sicherheit natürlich vorprogrammiert und den überblick
kann man da so einfach auch nicht mehr behalten. Das Netzwerk ist daher in mehrere Bereiche,
mit unterschiedlichen Rechten aufgeteilt worden. Das Netzwerk ist zum Internet hin
durch eine Firewall, Proxy und MTA abgeschirmt. Zu Proxy und Firewall sind andere
Projektbeschreibungen zu finden.

Die Hauptgründe für die Einrichtung des MTA sind also folgende:
– Zentraler Check der E-Mails auf Viren
– Zentraler Check der E-Mails auf Spam
– Einfachere Einschränkung der Bandbreite (damit eine E-Mail nicht die Internetverbindung lahmlegt.
– Keine zusätzliche Software auf den Clients
– Interner schneller E-Mail Verkehr, auch mit sehr grossen Daten

Alle E-Mails von externen Usern werden über Fetchmail vom Postfach des jeweiligen
Providers abgeholt. Werden dann sofort vom AntivirMailgate auf Viren überprüft
und müssen dann einen genauen Check durch Spamassassin über sich ergehen lassen.
Ist die E-Mail virenverseucht, bekommt der Postmaster (also ich) eine genaue Information
über den Virus, den Absender und den Empfänger der E-Mail. Der Absender und der
eigentliche Empfänger bekommt eine kurze Nachricht darüber, dass die E-Mail nicht
weitervermittelt wurde und mit welchem Virus diese E-Mail verseucht war. Sollte die E-Mail
als Spam klassifiziert werden wird vor den Betreff der E-Mail das Wort *****SPAM*****
geschrieben, ein kleiner Bericht angefertigt und diesem dann die eigentliche E-Mail
angehängt. Das ganze wird im Postfach des Empfängers abgelegt. So kann dieser
über seinen E-Mail Client die vermeintlichen Spam E-Mails entsprechend seiner Wünsche
weiter sortieren oder gar löschen. Da die vermeintliche Spam E-Mail dem Bericht
angehängt wird, hat er aber immer die Möglichkeit die E-Mail noch einmal zu
begutachten. Es könnte sich ja auch im eine wirkliche E-Mail handeln. Ist die E-Mail
aber virenfrei und kein Spam wird sie einfach im Postfach des Users abgelegt.

Alle E-Mails von den internen Clients durchlaufen die gleiche Routine bis zu einer
bestimmten Stelle. Ist die E-Mail für einen User bestimmt, der auch auf dem Mailserver
existiert, so wird die E-Mail direkt in dessen Postfach abgelegt und muss nicht erst durchs
Internet wandern. Somit ist auch bei 15 MB (1und1) nicht schon Schluss, sondern er wird an
den maximal möglichen Angaben des MTA gemessen.
Sollte die E-Mail für einen User ausserhalb des MTA bestimmt sein, wird sie an den MTA
des ISP weitergeleitet.

So nun aber zur Konfiguration des Ganzen. Konfigurationspunkte, welche ich aus privaten
oder sicherheitstechnischen Gründen lieber nicht öffentlich preisgeben
möchte, habe ich etwas umgeschrieben oder unter den Tisch fallen lassen.

Fangen wir mit der Konfiguration von Fetchmail an. Ich habe mir unter /etc/ eine
Datei mit dem Namen fetchmail.conf angelegt. Diese Datei sollte nach Möglichkeit
nur vom User root und dem User zu lesen sein, der für den Fetchmaildienst verantwortlich
ist. Denn in dieser Datei stehen die Zugangsdaten zu allen E-Mailpostfächern des ISP bzw.
E-Maildienstanbieters im Klartext. Durch einiges herumprobieren habe ich herausgefunden, dass
es bei einer ADSL-Leitung ganz sinnvoll ist alle 320 Sekunden nach neuen E-Mails in den
Postfächern des ISP zu schauen. Zwar blockiert sich Fetchmail nicht selbst, da wenn
Fetchmail gerade mit dem E-Mailchecken beschäftigt ist startet es sich nicht einfach
noch einmal parallel neu aber wenn man die Zeit unter 320 Sekunden setzt kommt es vor dass
der ISP meint es seien jetzt mal zu viele Anmeldungen in zu kurzer Zeit auf das Postfach
und dieses dann einfach mal für ein paar Minuten oder gar Stunden sperrt. Nimmt man
über 320 Sekunden muss man einfach zu lange auf E-Mails warten, da man ja auch wieder
die Zeit mitberechnen muss, die Fetchmail fürs abrufen der E-Mails braucht!

Ich starte fetchmail per init script im runlevel 3 mit dem Befehl:

fetchmail -d 320 -f /etc/fetchmail.conf

 

Die Option d startet fetchmail als Deamon im Hintergrund und zwar alle 320 Sekunden
(dafür die 320). Mit der Option f gebe ich fetchmail die zu nutzende Konfigurationsdatei an.
Die Konfigurationsdatei kann man in mehreren Arten formatieren. Ich habe mich für die
unten angezeigte Art entschieden. Da ich E-Mails von verschiedenen Servern abholen muss
und es so am übersichtlichsten finde. Es muss aber jeder für sich entscheiden
welche ihm besser gefällt. Ich beschränke mich hier aber auf die von mir genutzte Art.

############ /etc/fetchmail.conf # Anfang ############
set postmaster "postmaster"
set bouncemail
set no spambounce
set properties ""

poll pop.gmx.net with proto POP3
user 'info@gmx.net' there with password 'eienei' is 'peter1' here options fetchall
user 'info@gmx.li' there with password 'sksieneu' is 'klaus' here options fetchall

poll pop.1und1.com with proto POP3
user 'pt3732737' there with password 'safadsfg' is 'maus' here options fetchall
user 'pt302020' there with password 'aerfe' is 'peter1' here options fetchall

poll pop.t-online.de with proto POP3
user '000835444444444444400001' there with password '23424364' is 'bilder' here options keep
user '000835888888888001' there with password '334524364' is 'hund' here options keep
############ /etc/fetchmail.conf # Ende ############

 

Wie man sehen kann stehen in den ersten 4 Zeilen ein paar, selbsterklärende Angeben
für Fetchmail. Das Wort poll sagt Fetchmail: „Achtung, aber hier bezieht sich alles
auf den nachfolgenden Server!“ im ersten Fall also auf pop.gmx.net. With proto POP3 gibt
Fechtmail dann noch das zu nutzende Protokoll für die übertragung an. Bei mir in allen
Fällen pop3. in der nächsten Zeile werden Fetchmail nun die Daten für die einzelnen,
auf diesem Server zu überprüfenden, Postfächer übergeben. Hinter user folgt in
Hochkomma der Username für das Postfach beim ISP. there with password braucht normalerweise
auch schon keine genaue Beschreibung mehr. Hier wird in Hochkomma halt das zugehörige Passwort
für das Postfach angegeben. Direkt dahinter taucht is auf. Hinter is wird in Hochkomma nun der
Unix-Username des Benutzers auf dem lokalen MTA angegeben, in wessen Postfach die abgerufenen
E-Mails einsortiert werden. Der Punkt options fetchall weist Fetchmail an alle E-Mails erst vom
Server herunterzuladen und dann dort zu löschen. Es gibt natürlich auch die Möglichkeit
dieser dort liegen zu lassen und nur die Kopien herunterzuladen. Dafür ist die Option keep
zu setzten, was in den letzten beiden Zeilen der Konfigurationsdatei zu sehen ist. Einem
lokalen User kann natürlich auch mehr als ein externes Postfach zugeordnet werden. Dieses
ist in Zeile 7 und 12 zu sehen. Die Konfigurationsdatei sollte sich ohne grosses Denken
sofort verständlich lesen lassen. Fetchmail lässt sich auch dazu überreden die
E-Mails verschlüsselt vom ISP abzuholen. Genaue Informationen gibt es bei mir oder
am besten mit dem Befehl: man fetchmail

Um die E-Mails nun auf dem lokalen System zu bewegen und auch an Spamassassin weiterzugeben,
nutze ich das Programm Procmail. Diese benötigt eine eigene Konfigurationsdatei. Diese
habe ich in /etc/ angelegt und procmailrc genannt.

############ /etc/procmailrc# Anfang ############
PATH=$HOME/bin:/usr/bin:/usr/local/bin:

####################
# AntiSpam Section #
####################
:0 hbfw
| /usr/bin/spamassassin -P
############ /etc/procmailrc # Ende ############

 

Der Aufbau ist so simpel und kurz… Da spare ich mir jede Erklärung. Sollten noch
Fragen da sein: Googeln oder Mailen.

Beim Programm Spamassassin wird es schon wieder interessanter. Es braucht natürlich
auch eine Konfigurationsdatei. Diese ist bei mir unter: /etc/mail/spamassassin zu finden
und nennt sich local.cf

############ /etc/spamassasin/local.cf # Anfang ############
# How many hits before a message is considered spam.
required_hits 5.0
rewrite_header Subject *****SPAM*****
# Encapsulate spam in an attachment
report_safe 1
# Use terse version of the spam report
use_terse_report 0
# Enable the Bayes system
use_bayes 1
# Enable Bayes auto-learning
auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all
############ /etc/spamassasin/local.cf # Ende ############

 

Auch hier sind die Angaben selbsterklärende und schon in der Konfigurationsdatei
beschrieben. Hier taucht erst der Parameter auf, dann eine 0 für deaktiviert, eine
1 für aktiviert oder eine genauerer Angabe zum Parameter. Wenn eine E-Mail mehr als
5.0 Punkte bekommt wird sie als Spam klassifiziert. Spamassassin ist in der Lage
selbstständig zu lernen. Bis es das Filtern von Spam richtig beherrscht sollte man
den Wert vielleicht auf 4.0 oder 4.5 setzten. Hier sollte man ein bischen mit den Werten
herumprobieren.

Jetzt werden die E-Mails also schon mal auf Spam überprüft und sie werden auch
zwischen MTA, in meinem Fall Postfix, usw. herumgereicht. Die E-Mails sollen nun noch auf
Viren getestet werden. Dies sollte aber so passieren, dass keine E-Mail sich am Virenscanner
vorbei schleichen kann. Ich nutze das AntivirMailgate dafür. Dieses stellt einen eigenen
SMPT-Server und lauscht, anstelle von Postfix, auf dem TCP Port 25. Mit den passenden Regeln
in der Firewall (Firewallprojekt) müssen nun alle E-Mails im ganzen Netzwerk hier durch.

Damit das AntivirMailgate auch wirklich so arbeiten muss man natürlich noch ein paar Sachen umstellen..
Im Ordner /etc/ liegt die Datei services. Dort sollte man folgende beiden Einträge hinzufügen:

antivir 10024/tcp #Port for avgated
smtp-backdoor 10025/tcp #Port for postfix backdoor

 

Jetzt können einige Programme das ganze auch etwas übersichtlicher in den logs usw.
aufschlüsseln und wir können mit der Konfiguration des Mailgates fortfahren. Im
Ordner /etc/ sollte die Konfigurationsdatei avmailgate.conf liegen. In dieser müssen
nun diese beiden Einträge eingegeben werden, bzw. die Kommentarzeichen angepasst werden.

ListenAddress localhost port antivir
ForwardTo SMTP: localhost port smtp-backdoor
Der erste Eintrag gibt dem Mailgate an auf dem gerade in den services angegebenen Port zu arbeiten.
Zeile zwei sagt dem Mailgate wohin er die E-Mails nach dem Testen weitergeben soll. Wie man sieht
taucht hier wieder smtp-backdoor auf. Will man sich den Eintrag in /etc/services sparen kann man hier
natürlich dann auch die Ports eintragen. Das ganze kann ich aber nicht empfehlen.

Nun sind noch zwei kleine änderungen an Postfix zu machen. Im Ordner /etc/postfix/ gibt es
die Datei master.cf

In dieser sind folgende änderungen zu machen:

# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
smtp inet n ­ n - - smtpd
localhost:smtp-backdoor inet n ­; n - - smtpd -o content_filter =

 

Mit diesen änderungen sagt man Postfix das es selbst die Finger von den ankommenden E-Mails
lassen soll. Dieses soll ja unser Mailgate erledigen 🙂 Es sollte aber darauf geachtet werden dass,
das erste Zeichen in der Tabelle kein Leerzeichen und kein Tab ist. Sonst gibt es einen Fehler und
man suchst sich Stundenlang tot (ja, es ist mir passiert!).

Zum Schluss nun nur noch folgendes in die Datei main.cf im Ordner /etc/postfix/ packen:

#AntiVir Einbindung
content_filter = smtp:127.0.0.1:10024

 

Jetzt läuft dann auch schon unsere Virenprüfung. Wie man jetzt genau das Programm Antivir
und welche Zusatzoptionen man nun noch beim Mailgate macht, ist wieder so eine Sache mit dem Probieren.
Ich gebe natürlich auch gerne dabei noch eine Hilfestellung. Nur sollte man es selbst
schon einmal ausprobiert haben.

Was fehlt nun noch? Genau die Konfiguration des MTA (Postfix). Sonst geht ja schon alles…
Du solltest sicher gehen das du sasl libs usw. installiert hast. Sonst kommt am Ende die Meldung das
der Service nicht zur Verfügung steht (sobald du versuchst eine E-Mail an deinen ISP weiter zu
schicken). Genau so wichtig ist auch ein installierter popd, welcher auf Port 110 lauscht. Sonst
ist es Essig mit dem Abrufen der E-Mails vom Server.. Hier habe ich in den Anfängen auch
schon mal etwas länger grübeln dürfen.

Ich will alle E-Mails für externe User über den Mailserver von 1und1 schicken. Der ist
über den DNS-Namen smtp.1und1.com zu erreichen. Um E-Mails über den verschicken zu
können muss ich mich dort anmelden. Daher brauche ich dort einen Usernamen und ein Kennwort,
diese habe ich ja automatisch, sobald ich dort eine E-Mail Adresse besitze. Ich habe also im
Ordner /etc/postfix die Datei sasl_passwd angelegt. Die Datei hat folgenden Inhalt:

############ /etc/postfix/sasl_passwd # Anfang ############
smtp.1und1.com pt3333333-3:3333333
############ /etc/postfix/sasl_passwd # Ende ############

 

In diese Datei kommt zuerst der Server um den es sich handelt. Er muss genau so geschrieben
werden wie später der relay host in der postfix Konfiguration. Hier also smtp.1und1.com! Nun folgt
eine Leerzeile und dann pt3333333-3 dieses ist der Username für die Anmeldung am Mailserver des ISP.
Direkt dahinter kommt ein „:“! Dieses gibt an dass hier der Username endet und das zugehörige Passwort
beginnt. In unserem Fall 3333333! Plöp… Das war es auch schon. Man sollte nie vergessen aus diesen
Dateien, auch access und alias.. bla, eine Datenbank zu erstellen. Sonst ist man schon wieder seinen Fehler
am suchen! Das geht mit postmap /pfad/Dateiname

Im gleichen Ordner finden wir nun die Datei access. In dieser sollte man erst mal alle Einträge
auskommentieren. Nur dieser darf drinbleiben:

127 RELAY

 

Das sagt Postfix nun folgendes: Nur E-Mails die von einer IP Adresse kommen welche mit 127 beginnt werden
überhaupt angenommen und weiterverarbeiten. Da die 127..bla für die localhost Geschichte gedacht
ist werden jetzt erst mal nur E-Mails vom eigenen Host angenommen und verarbeitet. Ich habe bei mir
mehrere Netze aber alle beginnen mit 192.168.! Daher schaut meine Datei am Ende so aus:

127 RELAY
192.168 RELAY

 

Hat man nur ein Netz, sagen wir mal 192.168.50.0, dann sollte man das natürlich auch so angeben.
Damit haben wir schon mal sichergestellt, dass keine scheiss Spamer unseren schönen Server als
„offenen relay host“ nutzen können. SEHR WICHTIG!! Gut, speichern und raus.. Was haben wir
vergessen? Genau postmap :-)…

Jetzt schauen wir uns im gleichen Ordner mal die Datei aliases an. In dieser sollte schon so einiges
an Usernamen stehen. Las diese bitte auch erst mal so, es sei denn du weisst was du tust! Der Aufbau ist
aber ganz simpel. Links steht der Aliasname und rechts der wirkliche Username im lokalen System. Möchte
ich also das alle E-Mails die an peter-hat-es-dicke@mailserver.de gesendet werden, dem lokalen User
peter1 zugeteilt werden dann trage ich folgendes ein:

peter-hat-esdick: peter1
Das Spielchen kann ich mit so vielen User- und Aliasnamen machen wie ich Lust und Zeit habe.

Da gibt es nun aber noch eine interessante Datei mit namen canonical! In dieser steht meist nur
auskommentierter Krims. Der Sinn der Datei ist aber folgender. Ist mein Username auf dem lokalen
System hanz, meine E-Mail Adresse aber wurst und ich schicke z.B.: über die Konsole eine E-Mail
ab. So wird als Absender folgendes angegeben:

hanz@mailserver.de 

 

Tja, die Adresse gibt es nicht oder gehört nicht mir. Ist so also schon mal scheisse. Wenn
ich aber nun in die Datei cononical folgendes eintrage:

hanz wurst@mamama.de

 

Wird immer, sofern nicht anders vom Mailclient oder ähnlich angegeben, mein Absender auf
wurst@mamama.de gesetzt. Toll nicht?
So, alles schön gespeichert und auch jeweils an postmap gedacht? Sehr gut! Dann schauen wir uns
mal die Datei main.cf an. Ja, die ist schön voll 🙂 Wir sausen daher mal direkt ans Ende der
Datei. Hier tippern wir nun folgendes ein:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
relayhost = smtp.1und1.com
smtp_sasl_security_options = noanonymous
smtp_always_send_ehlo = yes
message_size_limit = 1024000000
mailbox_size_limit = 1024000000
myhostname = mailserver.de
smtpd_banner = $myhostname ESMTP (S-wie-Sicker)

 

Dann schauen wir zuerst die ganze Datei durch ob wir nicht damit gerade doppelte
Einträge gemacht haben. Interessant hierbei ist natürlich nur der Teil links
vor dem „=“! Sollten wir doppelte haben, kommentieren wir diese oben aus. Jetzt ganz
schnell wieder runter ans Ende!

smtp_sasl_auth_enable sagt Postfix das wir uns am Mailserver vom ISP anmelden müssen,
smtp_sasl_password_maps sagt Postfix mit welchen Zugangsdaten das ganze passieren soll und
relayhost sagt welcher Host überhaupt der Mailserver unseres ISPs(oder sonst wer) ist.

smtpd_banner verändere ich nur, damit nicht jeder sofort sehen kann, mit welchem SMTP-Server
er sich gerade bei mir unterhält. So hat ein Angreifer es etwas schwerer Sicherheitslöcher
zu nutzen. Da er ja erst mal keine Ahnung hat welche es in diesem System gerade gibt.

mailbox_size_limit gibt die maximale Grösse der Usermailboxen auf dem lokalen System an.
message_size_limit die maximale Grösse der E-Mails, die ein lokaler User verschicken kann.
message_size_limit sollte sinnvollerweise nie grösser als mailbox_size_limit sein.

Tja, das war es dann auch schon.

–==Ende==–

 

 

 

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑