| Postfix mit SMTP-Authentifikation |
|
|
|
|
Von Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst
Wenn Sie über Ihren eigenen Mailserver aus dem Netzwerk E-Mails versenden wollen, dann ist dies problemlos möglich, ohne daß andere Ihren Server zum Spammen mißbrauchen können. Sie können Ihrem Mailserver das Relaying (weiterleiten der Mails) nur aus dem lokalen Netzwerk erlauben und allen anderen verbieten. Was ist aber, wenn Sie mit einem Laptop z.B. von außerhalb ins Internet gehen und auch von dort Mails versenden wollen? In den meisten Fällen werden Sie eine dynamische IP-Adresse haben. Dadurch ist die Angabe einer IP-Adresse, von welcher aus Relaying erlaubt ist, so gut wie nicht mehr möglich bzw. äußerst unpraktisch (per SSH anmelden, IP dem Mailserver bekannt machen und diesen dann neu starten). Aus diesem Grund ist die Anmeldung per Login und Paßwort wohl die eleganteste Methode, um den Zugang zum Mailserver zu kontrollieren. Es gibt zwar noch andere Methoden, z.B. smtp-after-pop, aber diese sind etwas tricky bzw. »unsauber« (meiner Meinung nach). Deshalb ziehe ich die Login/Paßwort-Methode vor. Wenn eine E-Mail versendet wird, soll uns der SMTP-Server einen Login-Prompt anbieten, an dem wir unseren Login und das Paßwort eingeben können - theoretisch. Den Login-Prompt möchten wir nicht selbst sehen und auch die Eingabe des Logins und des Paßwortes soll der Mailclient übernehmen. Allerdings stellen die üblichen Mailserver in der Standardkonfiguration diese Funktionalität nicht zur Verfügung.
Es wäre durchaus möglich, sich die Originalquellen der Software zu besorgen, aber es gibt bereits vorkonfigurierte SRPM-Pakete im Internet. Tuomo Soini hat dies freundlicherweise getan und stellt die Pakete zum Download bereit. Postfix gibt es auf http://tis.foobar.fi/software/?postfix. Im Moment (12.08.2002 14:27) ist postfix-1.1.11-t4.src.rpm aktuell. Cyrus-SASL gibt es auf http://tis.foobar.fi/software/?sasl in Version cyrus-sasl-1.5.27-t28.src.rpm. 5. Bauen und Installieren der RPMs Das Bauen der RPMs sollte man, wie alles in einem Linuxsystem, wenn es sich vermeiden läßt, nicht als root-User durchführen. Also gehen wir als normaler User ran: Zuerst sind ein paar Verzeichnisse anzulegen (habe ich in meinem Homeverzeichnis getan. Da ich Holger heiße, ist das bei mir /home/holger oder kurz ~/):
Wie Sie sehen, zeigt die Ausgabe von tree schön die angelegten Verzeichnisse vom aktuellen Verzeichnis aus an. Nun sollte man dem RPM-Manager noch mitteilen, daß wir nicht als root, sondern als normaler User arbeiten. Hierzu legen wir in unserem Homeverezichnis eine Datei mit dem Namen .rpmmacros an und schreiben folgenden Inhalt hinein: %_topdir $HOME/rpm Mittlerweile sollten Sie sich die beiden Pakete heruntergeladen haben. Wenn nicht, wäre jetzt ein guter Zeitpunkt dafür:-) Gut, nachdem Sie die Pakete haben, kann es losgehen. Als erstes wird das SASL-Paket (bzw. die Quellen) mit folgendem Befehl installiert (immer noch im Homeverzeichnis): rpm -ivh cyrus-sasl-1.5.27-t28.src.rpm Wenn wir den tree-Befehl jetzt nochmal wiederholen, sehen Sie, daß tatsächlich etwas installiert wurde :-o
Jetzt wechseln wir ins Verzeichnis ~/rpm/SPECS und bauen mit dem Kommando rpm -ba cyrus-sasl.spec das installierbare RPM. [holger@mail holger]$ cd rpm/SPEC [holger@mail holger]$ rpm -ba cyrus-sasl.spec Die tree-Ausgabe erspare ich uns jetzt mal, da es bereits über 400 Dateien in über 40 Verzeichnissen sind ;-) Als nächstes sollten wir uns mal informieren, ob bereits ein SASL installiert ist. Hierfür können wir auch wieder den Paketmanager befragen:
Wie Sie sehen, ist bei mir schon was drauf. Ich werde das zuerst entfernen. Hierzu sind allerdings root-Rechte von Nöten: Also su root: (Sie können es auch updaten mit rpm -Uhv dateiname für update).
Nun ins Verzeichnis wechseln, in dem die kompilierten RPMs abgelegt worden sind (~/rpm/RPMS/i386). Dort finden Sie einige RPMs:
Alle installieren mit: rpm -ivh * So. Wenn das alles ohne Fehler abgelaufen ist, haben Sie jetzt Cyrus-SASL drauf. Ich gehe jetzt mal kurz einen Kaffee holen und mache dann mit Postfix weiter. Was bei der Installation von Postfix analog zu der obigen abläuft, werde ich der Faulheit halber nicht mehr kommentieren, sondern nur noch die Kommandos und evtl. die Ausgaben hier reinkopieren :-) rpm -ivh postfix-1.1.11-t4.src.rpm Tuomo's Postfix-Version enthält bereits Unterstützung für eine Vielzahl von zusätzlichen Features, die beim Kompilieren mit der Angabe --with FEATURE an- bzw. --without FEATURE abgeschaltet werden können. Um zu sehen, welche Features das sind, genügt folgender Befehl:
Da ich keine Datenbankanbindung brauche, werde ich Postfix ohne MySQL und PostgreSQL-Support kompilieren. LDAP laß ich ebenfalls weg: [holger@mail holger]$ cd rpm/SPECS/ [holger@mail SPECS]$ rpm -ba --without ldap --without pgsql --without mysql postfix.spec Bevor wir nun Postfix installieren können, sollten wir vorher den vermutlich vorhandenen Sendmail entfernen (als root): [root@mail root]# rpm -e --nodeps sendmail [root@mail root]# cd /home/holger/rpm/RPMS/i386/ [root@mail i386]# rpm -ivh postfix-* SASL muß nicht konfiguriert, sondern nur gestartet werden: [root@mail i386]# cd /etc/init.d/ [root@mail init.d]# ./saslauthd start Postfix wird in der Hauptkonfigurationsdatei /etc/postfix/main.cf konfiguriert. Folgende funktioniert bei mir.
OK. Latürnich sollten Sie Daten wie Domain, IP, Hostname, usw. an die Gegebenheiten bei Ihnen anpassen. Da Postfix von Haus aus nicht sehr gesprächig ist, können wir ihm das beibringen. Was am Anfang gar nicht so schlecht ist, falls Probleme auftreten. Hierzu die Datei /etc/postfix/master.cf öffnen und an das smtpd in der Zeile: smtp inet n - n - - smtpd ein -v anhängen. Also wird die Zeile zu: smtp inet n - n - - smtpd -v Bevor wir unsere erste Testmail versenden können, sollte der Mailserver gestartet oder die Brieftaube gefüttert (siehe RFC 1149) werden :-) [root@mail init.d]# ./postfix start So, nun überprüfen, ob er auch wirklich läuft: [root@mail init.d]# ps aux | grep postfix Und... nix wars. Bei mir zumindest. Ich werde jetzt erst mal Fehler suchen. Als erstes schau ich mal hinten in /var/log/maillog rein: Aug 13 15:06:56 mail postfix/master[25983]: fatal: parameter inet_interfaces: no local interface found for 192.168.150.20 Ich hatte den falschen Hostnamen in /etc/postfix/main.cf stehen. Achten Sie auch darauf, daß der Hostname auch korrekt in /etc/hosts eingetragen ist. Dadurch bestimmt Postfix die IP-Adresse, auf der er läuft. Also nochmal starten:
Wie Sie sehen, ist Postfix keine einzelner Prozess, wie z.B. Sendmail, sondern die Arbeit teilen sich mehrere Prozesse. Diese laufen auch im Gegensatz zu Sendmail nicht mit root-Rechten. Es muß auch noch ein Prozess namens master vorhanden sein, welcher als einziger mit root-Rechten läuft. Nun könnte man sich ja mal bei unserem Mailserver einloggen und schauen, was er alles zu bieten hat:
Weiter passiert erstmal nichts. Der Mailserver wartet darauf, daß wir was machen. Also begrüßen wir ihn erstmal freundlich und sagen ihm, wer wir sind:
ichbins sei der Name unseres Clients, welcher im Moment aber nicht von Bedeutung ist. Die Zeile AUTH PLAIN LOGIN GSSAPI sagt uns, welche Mechanismen wir zur Anmeldung verwenden können. Bei PLAIN und LOGIN werden die Zugangsdaten im Klartext übers Netz geschickt. Hier sollte darüber nachgedacht werden, evtl. die Verbindung zu verschlüsseln (TLS z.B.). Wenn ich Zeit finde, werde ich das noch anfügen. Bei GSSAPI wird Kerberos verwendet. Nun aber zum Testen... aber zuvor sollten Sie noch einen User anlegen, wenn es noch keinen gibt. Bei mir gibt es einen und der heißt zufälligerweise wie ich holger ;-) 9.1. Mail vom Mailserver aus versenden Als erstes werden wir versuchen, eine Mail vom Mailserver aus zu versenden.
Kurze Erläuterung zum Programm mail. Nach mail den Accountnamen oder die Mailadresse angeben, an den/die die Mail gehen soll. Dann fragt das Programm nach dem Subject der Mail (Betreffzeile). Nun können Sie Ihren Mailtext schreiben. Hier sind natürlich auch Zeilenumbrüche und Leerzeilen erlaubt. Abgeschlossen wird die Mail mit einem einzelnen Punkt (.) alleine in einer Zeile. In der nächsten Zeile können Sie noch ein Cc angeben, wenn Sie wollen; wenn nicht, einfach Enter drücken. Einfach mit less in die Mailbox reinschauen:
9.3. Mail von entferntem Rechner an lokalen User Soweit so gut. Nun versuchen wir, von einem anderen Rechner aus eine Mail an einen lokalen User zu senden. Das machen wir, wie es sich gehört, hardcoremäßig mit telnet ;-) Hierzu loggt man sich per Telnet von einem anderen Rechner auf dem Mailserver ein. Mein Mailserver hat die IP 192.168.150.10 und dann steht daneben noch ein Webserver mit der IP 192.168.150.20. Von diesem aus werde ich die Mail nun versenden.
Erstmal begrüßen und dem Server sagen, wer ich bin: ehlo ichbins.testdomain.de Und der Server antwortet wieder mit:
Wir sagen dem Server, von wem die Mail kommt: mail from:< Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst > Postfix's Antwort: 250 Ok Den Empfänger der Mail angeben: rcpt to:< Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst > Wieder die Antwort: 250 Ok Wir wollen Daten versenden: data Postfix: 354 End data with <CR><LF>.<CR><LF> Nun die Nachricht schreiben und wieder mit einem einzelnen Punkt in einer neuen Zeile beenden: Testnachricht vom Webserver . Postfix meint dazu: 250 Ok; queued as 97173E1D66 Verbindung beenden: quit Postfix ist auch hier nicht unfreundlich: 221 Bye Nun haben wir also auch eine Mail von einem entfernten Host an einen lokalen User gesendet. Jetzt kommt's aber :-) Wir wollen eine Mail an einen User auf einem anderen Rechner schicken => Relaying. Um dies zu testen, müssen wir eine Mail von einem Host aus versenden, von dem wir es laut Konfig nicht dürfen. Hä? Nochmal einen Blick in /etc/postfix/main.cf. Dort steht z.B. mynetworks = 127.0.0.0/8 relay_domains = $mydomain Das heißt, daß alle Rechner aus dem Netzwerk 127.0.0.0 Mails verschicken dürfen (OK, ist localnet) und alle Rechner die zu $mydomain gehören. Deshalb habe ich den zweiten Eintrag zu Testzwecken kurzerhand auskommentiert: # relay_domains = $mydomain Danach muß man allerdings Postfix dazu veranlassen, die Konfiguration neu einzulesen: [root@mail init.d]# ./postfix reload So, nun wieder von einem entfernten Rechner eine Verbindung aufbauen:
Ich sage: ehlo testdomain.de Nun wieder der Server:
Ich: mail from:< Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst > Postfix: 250 Ok Ich: rcpt to:< Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst > Postfix: 554 < Diese E-Mail-Adresse ist gegen Spam-Bots geschützt, du musst Javascript aktivieren, damit du sie sehen kannst >: Recipient address rejected: Relay access denied Ich: quit Postfix: 221 Bye Ziel erreicht, oder? Postfix verbietet das Relaying. 10. Relaying (kontrolliert) erlauben Wir erinnern uns an einige Zeilen aus /etc/postfix/main.cf:
Der letzte Parameter ist speziell für einige "spezielle" Mailclients aus dem Hause M$ (Outlook Express 4, Exchange 5.0 z.B.). Und mit der Zeile:
legen wir fest, wer relayen darf: User, die sich per smtp_auth anmelden, die aus mynetworks, und die aus relay_domains. 10.1. Einstellungen an den Clients Nun wieder der Test. Allerdings hab ich keine Lust, das jetzt wieder per Telnet zu machen, weil hierzu der Benutzername und das Passwort Base64 kodiert werden müssen. Das geht zwar an der Konsole, da bin ich aber jetzt zu faul:-) Ich nehme statt dessen den Netscape Messenger. Nun können Sie eine Mail schreiben und diese (versuchen zu) versenden. Es sollte dann eine Passwortabfrage kommen (außer Sie haben einen Mailclient, bei dem man das Passwort schon in den Einstellungen angeben kann). Damit hätten wir unser Ziel erreicht. Sie können in der main.cf den Parameter mynetworks noch ändern, damit Sie aus dem lokalen Netzwerk kein Passwort braucht; oder Sie können es auch so lassen und immer das Passwort verwenden. (Man muß es ja nicht von Hand eingeben, die meisten Mailclients sollten das erledigen.) 12. Bei Fehlern oder Problemen
Entschuldigen möchte ich mich für komischen Schreibstil, Tippfehler und was sonst nicht unbedingt reingehört ;-)
|
||||||||||||||||||||||||||||||||||||||
| < Zurück | Weiter > |
|---|



