<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.25">
 <META NAME="LFCATEGORY" CONTENT="SystemAdministration">
<!-- this is used by a number of tools:
 =LF=AUTHOR: Atif Ghaffar
 =LF=CAT___: SystemAdministration
 =LF=TITLE_:  Aufbau eines skalierbaren ISPs unter Verwendung von Open Source Software
 =LF=NUMBER: 173
 =LF=ANAME_: article173.shtml
 -->
 <TITLE>lf173, SystemAdministration:  Aufbau eines skalierbaren ISPs unter Verwendung von Open Source Software</TITLE>
<!-- stylesheet added by lfparser: --> 
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-familiy:monospace,Courier }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm ;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar -->
 <!-- top navegation bar -->
 <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif"
           alt="[LinuxFocus-icon]" width="319" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE summary="topbar_1_links" width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="2">Home</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="2">Plan</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="2">Index</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.html"><FONT color=
                 "#DDDDDD" size="2">Suchen</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Nachrichten</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Archiv</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.shtml"><FONT color=
           "#FFFFFF">Links</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">&Uuml;ber uns</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.1 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Dieser Artikel ist verf&uuml;bar in: <A href="../../English/September2000/article173.shtml">English</a> &nbsp;<A href="../../Castellano/September2000/article173.shtml">Castellano</a> &nbsp;<A href="../../Deutsch/September2000/article173.shtml">Deutsch</a> &nbsp;<A href="../../Francais/September2000/article173.shtml">Francais</a> &nbsp;<A href="../../Nederlands/September2000/article173.shtml">Nederlands</a> &nbsp;<A href="../../Turkce/September2000/article173.shtml">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0  WIDTH="190" >
<TR>
<TD>

<!-- 2pdaIgnoreStart -->
<!-- PALM DOC -->
<TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD>
<font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font>
</TD> </TR> </TABLE>
<!-- END PALM DOC -->
<!-- 2pdaIgnoreStop -->
<br>
<IMG SRC="../../common/images/Atif-Ghaffar.jpg" ALT="[Photo of the Author]" HEIGHT=115 WIDTH=124>
<BR>von  Atif Ghaffar <br> <small>&lt;atif(at)developer.ch&gt;</small>
<BR><BR>
<I>&Uuml;ber den Autor:</I><BR>
<p>Atif arbeitet in den verschiedensten Bereichen. Mal ist er als System Administrator, mal als Programmierer, Lehrer oder
Projektmanager t&auml;tig, abh&auml;ngig davon, was f&uuml;r die Erf&uuml;llung der jeweiligen Aufgabe notwendig ist.
<br>Zur Zeit arbeitet er als Manager der Internetentwicklung bei <a href="http://www.4unet.net">4unet</a> und ist
<a href="http://www.4unet.net/careers/">auf der Suche nach talentierten Leuten</a>.<br>
Mehr &uuml;ber ihn erf&auml;hrt man auf seiner <a href="http://www.developer.ch/~aghaffar">Homepage</a>.
</P>
<!-- TRANSLATED TO de -->
<BR><BR><I>&Uuml;bersetzt ins Deutsche von:</I><BR>
Harald Radke <small>&lt;harryrat(at)gmx.de&gt;</small>
<br>
<!-- TRANSLATED TO STOP -->
<BR><i>Inhalt</i>:
<UL>
  <LI><A HREF="#173lfindex0">Warum LDAP?</A></LI>
  <LI><A HREF="#173lfindex1">Was ist ISPMan?</A></LI>
  <LI><A HREF="#173lfindex2">Dienste des ISP</A></LI>
  <LI><A HREF="#173lfindex3">Virtuelle Dom&auml;nen</A></LI>
  <LI><A HREF="#173lfindex4">Software unseres ISP</A></LI>
  <LI><A HREF="#173lfindex5">Die Verzeichnisstruktur</A></LI>
  <LI><A HREF="#173lfindex6">LDAP Authentifizierung (ohne Systemkonten)</A></LI>
  <LI><A HREF="#173lfindex7">LDAP zur DNS Verwaltung</A></LI>
  <LI><A HREF="#173lfindex8">Einrichtung von ProFTPd</A></LI>
  <LI><A HREF="#173lfindex9">Cyrus konfigurieren</A></LI>
  <LI><A HREF="#173lfindex10">Postfix aufsetzen</A></LI>
  <LI><A HREF="#173lfindex11">Benutzerverwaltung mit ISPMan</A></LI>
  <LI><A HREF="#173lfindex12">Mehrere Rechner verwenden</A></LI>
  <LI><A HREF="#173lfindex13">Webmail</A></LI>
  <LI><A HREF="#173lfindex14">Literaturverweise</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=173&amp;lang=en">Talkback f&uuml;r diesen Artikel</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2> Aufbau eines skalierbaren ISPs unter Verwendung von Open Source Software</H2>
 <IMG SRC="../../common/images/illustration173.gif" ALT="ispman" HSPACE=10 >
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Zusammenfassung</i>:
<P>

Aufgrund zahlreicher Reaktionen auf den Linux LDAP Artikel und der Frage, wie man mittels LDAP, kombiniert
mit weiterer erstklassiger Open Source Software, einen Mail- oder WWW Server aufsetzen k&ouml;nne, wird in diesem
Artikel der Aufbau eines skalierbaren ISP, <i>Internet Server Provider</i>s, basierend auf LDAP unter Linux, erl&auml;utert.
Dabei werden viele angesprochene Aspekte und Fragen tangiert.
Zus&auml;tzlich wird <i>ISPMan</i> zur Verwaltung eingesetzt.

<p>
Um zu vermeiden, dass der Artikel durch Beispiele im Text unn&ouml;tig lang wird,
wurden diese in Textboxen untergebracht.
Wer diese Seiten wirklich ausdrucken will, sollte sie auf seinem Rechner speichern und
dann die Textboxen durch Verwendung von <tt>pre</tt> Tags in formatierten Text umwandeln.
<br>
Dieser Perl-Aufruf sollte dies bewerkstelligen:
<br><i>perl -pi.bak -e 's!textarea.*?>!pre>!g' filename</i><p>
Einen ISP aufzubauen und zu verwalten ist ein wenig komplexer, vorallem, wenn es sich um ein hochgradig verf&uuml;gbares,
skalierbares und automatisiertes System handeln soll. Der Betrieb eines ISPs verlangt ein Team von Administratoren, deren Aufgabe es ist,
die Rechner am laufen zu halten, Accounts einzurichten, WWW Seiten zu pflegen, sowie  Probleme zu l&ouml;sen und Kundenservice zu leisten.
Meistens haben die Mitarbeiter im Kundenservice (oder Helpdesk) keinen Zugriff auf etwaige Einstellungen. Die meisten Helpdesks,
mit denen ich zu tun hatte, brauchten selbst Hilfe.
<br></P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


<A NAME="173lfindex0">&nbsp;</A>
<H2>Warum LDAP?</H2>

<p>
LDAP ist ein ausgezeichneter Verzeichnisdienst. Durch diesen k&ouml;nnen nicht nur die Usernamen und Passw&ouml;rter der Benutzer,
sondern noch weitere Informationen &uuml;ber sie und ggfs. von ihnen verwaltet werden.
Im Verlauf dieses Artikels wird deutlich werden, wie mittels LDAP eine Menge an Verwaltungsaufgaben zentral erledigt werden kann.
</p>

<A NAME="173lfindex1">&nbsp;</A>
<H2>Was ist ISPMan?</H2>

<p>
ISPMan ist ein Programm, welche von mir geschrieben wurde, damit ich Ruhe vor der IT Abteilung hatte, wollte sie eine neue Domain,
einen neuen WWW Server einrichten oder DNS Eintr&auml;ge &auml;ndern. ISPMan ist Open Source und kann unter
<a href="http://www.ispman.org">http://www.ispman.org</a> bezogen werden. Allzusehr wird hier nicht auf ISPMan selbst
eingegangen werden, wer mag, kann es ausprobieren und auch verbessern.
</p>



<A NAME="173lfindex2">&nbsp;</A>
<H2>Dienste des ISP</H2>

<p>
Unser ISP wird DNS, Mail, Webmail, WWW Seiten und mehr verwalten.<br>
<br>
Beispielhaft wird ein Kunde bertrachtet, dessen Domain <i>exampledomain.com</i> verwaltet werden soll.
<br>
Die Einrichtung der Domain geschieht durch einige wenige Mausklicke, viele Aktionen geschehen im Hintergrund, darunter DNS,
das Einrichten von virtuellen Mail- und WWW-Servern.
<br>Der Kunde erh&auml;lt einen Benutzernamen, um mittels FTP auf seinen WWW/FTP Server zugreifen zu k&ouml;nnen.
Innerhalb der Domain kann eine beliebige Zahl von E-Mailkonten eingerichtet werden. Benutzer dieser Domain k&ouml;nnen bei Bedarf
auch Platz f&uuml;t ihre WWW Seiten erhalten.<p>
Ein weiterer Aspekt ist die Verwaltung von Internetzug&auml;ngen. Da der Schwierigkeitsgrad hier aber von <tt>gering</tt> bis
<tt>sehr hoch</tt> reicht, wird dieses Thema in diesem Artikel ausgeklammert. :)
</p>


<A NAME="173lfindex3">&nbsp;</A>
<H2>Virtuelle Dom&auml;nen</H2>

<p>
Heutzutage will jeder eine WWW Seite und seine eigene Domain f&uuml;r die Email Adresse.
Mailserver allerdings sind bei der Zustellung von Post eng mit den Benutzerkonten des jeweiligen Systems
verzahnt, keine allzugl&uuml;ckliche Kombination.
<br>
Vielschichtige Probleme ergeben sich n&auml;mlich in dem Augenblick, wo Adressen wie <tt>user1@domain1.com</tt>
und <tt>user1@domain2.ch</tt>, usw. verwaltet werden sollen.<br>
Als Folge m&uuml;ssen eine Menge unn&ouml;tiger Querverweise realisiert werden.
Man kann nur hoffen, dass in Zukunft die Entwicklung von Software im Hinblick auf diese Problematik
gestaltet wird.
<br>
Beispielsweise etwa <tt>Cyrus</tt>, ein gro&szlig;artiger IMAP Server,
der statt Benutzer Mailkonten verwaltet.
Es kann nur ein Konto namens <i>aghaffar</i> geben.
Sollte es einen weiteren Kunden innerhalb der Domain <tt>linuxrus.com</tt> geben, der den Benutzernamen <i>aghaffer</i>
verwenden will, hat man Pech gehabt. Es m&uuml;sste dann ein Konto unter einem anderen Namen eingerichtet und dann auf dieses
Konto verwiesen werden. Es ist nicht m&ouml;glich, etwa einen Benutzer mit Namen <i>aghaffer.linuxrus.com</i> anzulegen,
da <tt>Cyrus</tt> &quot;.&quot; als Begrenzungszeichen f&uuml;r Mailkonten verwendet.
<p>
Desweiteren gibt es ja auch ausserhalb der USA Menschen, die das Internet nutzen. Viele Beispiele, die in einigen Mailinglisten
gebracht werden, schlagen <i>user1@domain1</i> und <i>user1@domain</i> vor. Diese erwarten, dass alle Domainnamen auf <i>.com</i>
enden. Es m&uuml;ssen also <tt>username</tt>, <tt>domain</tt> und <tt>TLD</tt> (Top Level Domain) ber&uuml;cksichtigt werden.
<p>
Das hier vorgestellte System wird all dies ber&uuml;cksichtigen.
<p>
Statt einen Benutzer namens <i>aghaffar</i> zu kreieren, werden Benutzernamen die Form <tt>username_domain_tld</tt> haben.
<br>Warum nun gerade &quot;_&quot; als Trennzeichenn verwendet wird, habe ich vergessen, &quot;.&quot; geht auf jeden Fall nicht,
da Cyrus Schwierigkeiten machen w&uuml;rde und ein paar andere Begrenzer ebenfalls ausscheiden, etwa &quot;&&quot;, welcher in Verbindung
mit Shells und URLs Probleme bereiten kann.
</p>

<A NAME="173lfindex4">&nbsp;</A>
<H2>Software unseres ISP</H2>

<p>
Hier eine Liste der Programme, die sehr sch&ouml;n zusammenarbeiten. Nat&uuml;rlich kann auch andere Software verwendet werden, wenn es dem
Leser beliebt und das Zusammenspiel klappt.
<p>
<ul>
  <li>openLDAP (der LDAP Server)
  <li>Postfix (ein LDAP f&auml;higer und sehr schneller SMTP Server)
  <li>Cyrus imapd (ein ausgezeichneter IMAP/POP3 Server)
  <li>Cyrus SASL (Bibliothek, die vom Cyrus <tt>imapd</tt> Daemon zur Authentifizierung verwendet wird)
  <li>Apache (muss man wohl nichts weiter zu sagen)
  <li>Proftpd (ein sehr guter FTP Server, der LDAP unterst&uuml;tzt)
  <li>Perl (Hey, hat jemand ernsthaft geglaubt, ich w&uuml;rde das ohne <tt>Perl</tt> hinkriegen?)
  <li>ISPMan (Ein Programm zur Verwaltung des ISPs, abgestimmt auf das hier vorgestellte Design)
  <li>Bind (DNS)
  <li>pam_ldap (LDAP Modul f&uuml;r die Authentifizierung)
  <li>IMP 2.2 (PHP basierter Webmail Client)
</ul>

</p>


<A NAME="173lfindex5">&nbsp;</A>
<H2>Die Verzeichnisstruktur</H2>

<p>
Das Verzeichnis verwendet die Domains als Basis. Es gibt Domains, Benutzer innerhalb der Dom&auml;nen, Domaindienste, usw.
<br>Beispielsweise kann es einen Benutzer innerhalb einer Dom&auml;ne nur einmal geben (ausser einigen systemspezifischen Benutzern,
wie dem LDAP, Cyrus,... Administrator).
<br>Ein Zweig  einer Domain beinhaltet Informationen der jeweiligen Benutzer, die DNS und WWW Daten der Dom&auml;ne, usw.
<br>Ein Beispiel<p>
<form>
<textarea cols=60 rows=10>
o=ispman
objectclass=top
objectclass=organisation
o=ispman

  domain=developer.ch, o=ispman
  domain=developer.ch
  objectclass=top
  objectclass=dnsdomain
  objectclass=posixAccount
  uid: developer.ch
  uidNumber: 2000
  gidNumber: 1000
  homeDirectory: /home/developer.ch
  userPassword: {crypt}XXffGGHH
  loginShell: /bin/bash

    ou=users, domain=developer.ch, o=ispman
    domain=developer.ch
    ou=users
    objectclass=top
    objectclass=domainusers

    ou=dnsdata, domain=developer.ch, o=ispman
    domain=developer.ch
    ou=dnsdata
    objectclass=top
    objectclass=domainrelatedobject

    ou=httpdata, domain=developer.ch, o=ispman
    ou=httpdata
    objectclass=top
    objectclass=httpdata
    serverroot=/home/httpd/virtual/developer.ch
</textarea></form>
<p>
Hier wird ein Zweig der Domain <i>developer.ch</i> angelegt, welcher sich weiter verzweigt, f&uuml;r Benutzer,
DNS Daten und HTTP Daten.

<br>
In diesem Beispiel werden <tt>uid</tt>, <tt>gid</tt>, <tt>homeDirectory</tt>, usw. dieser Domain definiert,
da nur der Benutzer <tt>domain.tld</tt> Zugriff mittels FTP haben soll. Will also der Besitzer der Domain <i>developer.ch</i>
Dateien in sein Verzeichnis hochladen, verwendet er der Benutzernamen <i>developer.ch</i> (und das entsprechende Passwort),
um sich auf dem FTP Server einzuloggen. Dieser setzt dann (hoffentlich) als Wurzelverzeichnis <tt>homeDirectory</tt>, usw.,
mehr dazu sp&auml;ter.
<br><br>
Alle anderen Benutzer erhalten keine <tt>uid</tt>,<tt>gid</tt>, usw., da sie sich nicht mittels FTP einloggen sollen.
<br>Ein komplette LDIF Beispielsdatei ist <a href="../../common/src/article173/example.ldif.txt">hier</a> zu finden
(diese mag ein wenig veraltet sein, das sie von einem Arbeitsrechner kommt und ich mittlerweile weitere Features in das
neue Design integriert habe). Wer das Beispiel seinem Chef vorf&uuml;hren will, kann <a href="http://www.ispman.org/ldapdata.php3">diesem Link</a>
folgen, wieder ein wenig &auml;lter.
</p>

<A NAME="173lfindex6">&nbsp;</A>
<H2>LDAP Authentifizierung (ohne Systemkonten)</H2>

<p>
Ein sehr sch&ouml;ner Aspekt des hier vorgestellten Systemes ist, dass keine Konten, etwa in <tt>/etc/passwd</tt>, <tt>/etc/shadow</tt>
angelegt, bzw. &uuml;ber NIS verwaltet werden m&uuml;ssen.
<br>
Alle Accounts werden &uuml;ber LDAP verwaltet, Authentifizierung wird von LDAP selbst erledigt.
<br>Hierf&uuml;r wird auf das PAM, das <i>Pluggable Authentification Module</i>, <tt>pam_ldap</tt> zur&uuml;ckgegriffen.
PAM erm&ouml;glicht es zu spezifizieren, welches Modul f&uuml;r die Authentifizierung, Autorisierung, usw. zust&auml;ndig
ist.
<p>
Hier als Beispiel die Dateien <tt>/etc/pam.d/imp</tt>, <tt>/etc/pam.d/pop</tt> und <tt>/etc/pam.d/proftp</tt><br>
<pre>
#%PAM-1.0
auth       sufficient   /lib/security/pam_ldap.so
account    sufficient   /lib/security/pam_ldap.so
</pre>
So wird also die Authentifizierung f&uuml;r <tt>imap</tt>/<tt>pop3</tt>/<tt>imap</tt> &uuml;ber den LDAP Server realisiert.
Der Benutzer <tt>aghaffar_developer_ch</tt> wird authentifiziert, und kann seine Post abholen, obwohl er weder einen Passwort- noch einen
NIS-Eintrag auf dem System hat.
</p>


<A NAME="173lfindex7">&nbsp;</A>
<H2>LDAP zur DNS Verwaltung</H2>

<p>
F&uuml;r DNS gibt es zur Zeit noch kein LDAP Backend, und vielleicht w&auml;re solch ein Backend auch gar keine so gute Idee,
ausser vielleicht f&uuml;r den Einsatz dynamischen DNS in Verbindung mit DHCP. Wie dem auch sei, hier wird LDAP
f&uuml;r die Verwaltung der DNS Informationen verwendet. Aus diesen werden dann die DNS Dateien extrahiert.
Dadurch k&ouml;nnen alle Bereiche zentral von einem sicheren Rechner aus verwaltet werden, gleichzeitig werden keine &Auml;nderungen
am DNS System notwendig.

<p>
Die Eintr&auml;ge  f&uuml;r DNS im LDAP System sehen etwa so aus:
<table>
<tr>
<td bgcolor=antiquewhite>
<pre>
dn: ou=dnsdata, domain=4unet.net, o=ispman
domain: 4unet.net
ou: dnsdata
objectclass: top
objectclass: domainrelatedobject
objectclass: posixAccount
uid: 4unet.net
uidNumber: 2000
gidNumber: 1000
homeDirectory: /home/4unet.net
userPassword: {crypt}XXffGGHH
loginShell: /bin/true
</pre>
</td>
<td>
Die Definition f&uuml;r den Zweig <tt>dnsdata</tt>. Es wird ein posixAccount (ein Benutzer) angelegt, der als
Namen den der Domain tr&auml;gt. Dieser Benutzer stellt quasi den WWW Admin dar, der sich &uuml;ber FTP einloggen
und Dateien in die jeweiligen Bereich hochladen kann, usw.
</td>
</tr>

<tr>
<td bgcolor=antiquewhite>
<pre>
dn: cn=soarecords, ou=dnsdata, domain=4unet.net, o=ispman
cn: soarecords
primary: ns1.4unet.net
ou: dnsdata
retry: 1800
rootmail: dnsmaster.4unet.net
domain: 4unet.net
minimum: 432000
objectclass: top
objectclass: domainRelatedObject
expire: 1209600
refresh: 21600
</pre>
</td>
<td>
Hier werden die SOA Eintr&auml;ge f&uuml;r den DNS der Domain <tt>4unet.net</tt> definiert.
Die Werte werden durch ein Skript extrahiert, und korrekt f&uuml;t die Verwendung in der <tt>zone</tt> Datei formatiert.
</td>
</tr>

<tr>
<td bgcolor=antiquewhite>
<pre>
dn: cn=nsrecords, ou=dnsdata, domain=4unet.net, o=ispman
domain: 4unet.net
cn: nsrecords
ou: dnsdata
objectclass: top
objectclass: domainRelatedObject
record: @,ns1.4unet.net
record: @,ns2.4unet.net
</pre>
</td>
<td>
Dies sind die NS Eintr&auml;ge.
<br>
Auch hier werden alle Attribute eines Eintrages von einem Skript ausgelesen, durch &quot;,&quot; separiert und die Werte in
die <tt>zone</tt> Datei eingetragen.
</td>
</tr>

<tr>
<td bgcolor=antiquewhite>
<pre>
dn: cn=mxrecords, ou=dnsdata, domain=4unet.net, o=ispman
domain: 4unet.net
cn: mxrecords
ou: dnsdata
objectclass: top
objectclass: domainRelatedObject
record: @,10, mx1.4unet.net
record: @,100, mx2.4unet.net
</pre>
</td>
<td>
Wie oben, aber nun die MX Eintr&auml;ge.
<br>Die Eintr&auml;ge besitzen desweiteren ein Feld f&uuml;r die Priorit&auml;t, welches entsprechend den MX Eintr&auml;ge
der <tt>zone</tt> Datei angepasst wird.
</td>
</tr>
<tr>
<td bgcolor=antiquewhite>
<pre>
dn: cn=arecords, ou=dnsdata, domain=4unet.net, o=ispman
objectclass: top
objectclass: domainRelatedObject
domain: 4unet.net
cn: arecords
ou: dnsdata
record: ns1, 193.247.80.43
record: ns2, 193.247.80.44
record: @,193.247.80.43
record: @,193.247.80.44
</pre></td>
<td>
Dies sind die A Eintr&auml;ge, Hostname, IP Adresszuordnung...
</td>
</tr>

<tr>
<td bgcolor=antiquewhite>
<pre>
dn: cn=cnames, ou=dnsdata, domain=4unet.net, o=ispman
objectclass: top
objectclass: domainRelatedObject
domain: 4unet.net
cn: cnames
ou: dnsdata
record: ftp, www
record: mail, www
record: *, www
</pre>
</td>
<td>
...und die CNAMEs oder weitere Namen der Rechner.
</td>
</tr>
</table>
Die verwendeten Skripte kommen mit <tt>ISPMan</tt> mit.
Ein Beispiel, wie ein NS Eintrag modifiziert wird, ist
<a href="http://www.ispman.org/screenshots.php3?screenshot=ns"> hier</a>
zu finden.
</p>


<A NAME="173lfindex8">&nbsp;</A>
<H2>Einrichtung von ProFTPd</H2>

<p>
Hierzu muss proftpd mit dem LDAP Modul installiert werden.
Soll FTP auch f&uuml;r virtuelle Server eingerichtet werden, und man meint,
es werde recht viel Verkehr geben, sollte der Daemon nicht von <tt>inetd</tt> aus, sondern
eigenst&auml;ndig gestartet werden.
<br>
Dazu werden die Zeilen, die den FTP Dienst betreffen, in <tt>/etc/inetd.conf</tt> auskommentiert
und <tt>inetd</tt> neu gestartet.<br>
Danach legt man eine Gruppe namens <i>ftponly</i> an, <tt>gid</tt> 1000. Diese <tt>gid</tt> wird innerhalb
aller Domainen bekannt sein.
<p>
Nun sollte <tt>/etc/pam.d/proftpd</tt> entsprechend dem obigen Abschnitt &uuml;ber die Authenifizierung
mittels LDAP angepasst werden.<br> Die Date <tt>/etc/proftpd.conf</tt> sollte in etwa so aussehen:
<br>
<form>
<textarea cols=60 rows=10>
ServerName      "developer connections"
ServerType      standalone
ServerAdmin     atif@developer.ch

DeferWelcome      off
DefaultServer     on

Port        21
Umask       022

User        nobody
Group       nogroup

&lt;Directory /*>
  AllowOverwrite    on
&lt;/Directory>

PathAllowFilter ".*/[a-zA-Z0-9]+$"
PathAllowFilter ".*/[a-zA-Z0-9_\.\-]+$"

PathDenyFilter "(\.ftpaccess)|(\.htaccess)$"

MaxInstances                   30
UseReverseDNS        off
IdentLookups         off
TimeoutStalled                  300

ScoreboardPath       /var/run/proftpd
TransferLog          /var/log/proftpd.xfer_log
DefaultRoot ~/ ftponly
MaxLoginAttempts                3

LDAPServer         "localhost"
LDAPPrefix         "o=ispman"
</textarea>
</form>
<p>


Gestartet wird <i>proftpd</i> mittels <tt>/usr/sbin/proftpd</tt>, beendet
durch <tt>killall /usr/sbin/proftpd</tt>.
</p>

<A NAME="173lfindex9">&nbsp;</A>
<H2>Cyrus konfigurieren</H2>

<p>
Man &uuml;bersetzt und installiert Cyrus SASL und <tt>imapd</tt>, sowie die C-SDK des UW-MAP Client.
<tt>imap</tt> und die SDK sind m&ouml;glicherweise schon auf dem jeweiligen System installiert.
Dies kann man durch <Tt>rpm -aq | grep imap</tt> testen. Im Zweifelsfalle &uuml;bersetzt und installiert man
sich halt eine aktuellere Version.

Es werden ein Benutzer <tt>cyrus</tt> und die Gruppe <tt>mail</tt> auf dem System eingerichtet. Man solllte den Installationsanweisungen
folgen und sp&auml;ter testen, ob der <tt>imap</tt> Server korrekt l&auml;uft. Sobald dies der Fall ist, wird die
Datei <tt>/etc/pam.d/imap</tt> entsprechend des obigen Abschnittes &uuml;ber die Authentifizierung bearbeitet.

<p>
Nun muss noch ein LDAP Benutzer eingerichtet werden, zum Beispiel <i>cyrus</i> oder wie auch immer man den Administrator in
<tt>/etc/imapd.conf</tt> genannt hat.

<br>
Ist der Cyrus Administrator etwa <tt>cyrus</tt>, sollte ein entsprechender Eintrag im LDAP Verzeichnis aufgenommen werden:
<pre>
dn: uid=cyrus, ou=admins, o=ispman
cn: Cyrus Admin
sn: Cyrus
objectclass: top
objectclass: systemadmins
uid: cyrus
userpassword: XXDDCCYY
ou: admins
</pre>
ISPMan erstellt diese Eintr&auml;ge selbstst&auml;ndig w&auml;hrend der Einrichtungsphase.

</p>

<A NAME="173lfindex10">&nbsp;</A>
<H2>Postfix aufsetzen</H2>

<p>
Postfix arbeitet sehr gut mit LDAP zusammen. Anfragen &uuml;ber virtuelle Dom&auml;nen oder Benutzer
k&ouml;nnen direkt &uuml;ber LDAP realisiert werden, sodass nicht extra angegeben werden muss, f&uuml;r
welche Domains Post empfangen werden soll.<br>
Trifft etwa eine Mail f&uuml;r die Domain <i>perl.ch</i> ein, so sollten alle Dom&auml;nen durchsucht werden,
ob eine von ihnen <i>perl.ch</i> ist. Ist dies der Fall, soll die Mail angenommen werden, anstatt
etwa &quot;Duh MX for perl.ch loops back to myself&quot; zur&uuml;ckzuliefern.

<p>
Hier ein Beispiel f&uuml;r <tt>/etc/postfix/main.cf</tt>:
<form><textarea cols=60 rows=10>
queue_directory = /var/spool/postfix
program_directory = /usr/lib/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs = nobody
myhostname = mozilla.developer.ch
mydomain = developer.ch
myorigin = $mydomain
inet_interfaces = all
default_transport = smtp

# the following map gets domain from LDAP to see
# if it shoud accept mails for this domain
mydestination = /etc/postfix/destination, ldap:ldapdomain
ldapdomain_server_host = localhost
ldapdomain_server_port = 389
ldapdomain_bind_dn = o=ispman
ldapdomain_search_base = o=ispman
ldapdomain_query_filter = (&(objectclass=dnsdomain)(domain=%s))
ldapdomain_result_attribute = domain


#these maps make a lookup to ldap to see if there is an
# entry called mailacceptinggeneralid that matched the address.

# for Example, mail comes in for atif@developer.ch, ldap server
# searched for mailacceptinggeneralid=atif@developer.ch
# If it finds it, then it requests the resulting attribute "maildrop"
# this could return a local or remote address.
# in my case it returns atif_developer_ch@mozilla, which means drop the
# mail in the mailbox called "atif_developer_ch" on host "mozilla"
virtual_maps = hash:/etc/postfix/virtual, ldap:ldapvirtual
ldapvirtual_server_host = localhost
ldapvirtual_server_port = 389
ldapvirtual_bind_dn = o=ispman
ldapvirtual_bind = no
ldapvirtual_timeout = 5
ldapvirtual_search_base = o=ispman
ldapvirtual_query_filter = (mailacceptinggeneralid=%s)
ldapvirtual_result_attribute = maildrop
ldapvirtual_lookup_wildcards = no

relocated_maps = hash:/etc/postfix/relocated
smtpd_sender_restrictions = hash:/etc/postfix/access

transport_maps = hash:/etc/postfix/transport

mailbox_transport = cyrus
best_mx_transport = local

virtual_domains=/etc/postfix/virtual
relay_domains = $mydestination, $virtual_domains

smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
</textarea></form>
<p>

</p>


<A NAME="173lfindex11">&nbsp;</A>
<H2>Benutzerverwaltung mit ISPMan</H2>

<p>
Die Verwaltung von Benutzern mit ISPMan ist recht einfach. Das Einrichten eines neuen Benutzers
erfolgt in zwei Schritten:
<ol>
<li>Erstellen eines Eintrages in der LDAP Datenbank
<li>Anlegen eines Mailkontos auf dem IMAP Server
</ol>
Wird ein Benutzer gel&ouml;scht, werden automatisch diese beiden Eintr&auml;ge entfernt.
</p>


<A NAME="173lfindex12">&nbsp;</A>
<H2>Mehrere Rechner verwenden</H2>

<p>
Auf jedem Rechner der Mailfarm kann mittels ISPMan das Mailkonto eines Benutzers angelegt werden.
Hat man beispielsweise die  Rechner <tt>mail1</tt>, <tt>mail2</tt>, <tt>mail3</tt>, usw., von denen
jeder 10.000 Benutzer verwaltet, kann &uuml;ber die Kombination LDAP-Postfix-Cyrus Post an jede der
internen Maschinen geliefert werden.
<br>Angenommen, es kommt Post f&uuml;r <i>bob@developer.ch</i> an.
<tt>Postfix</tt> stellt eine Anfrage an den LDAP Server nach der <tt>maildrop</tt> Adresse des Eintrages, der mit
<tt>mailacceptinggeneralid=bob@developer.ch</tt> &uuml;bereinstimmt. Der LDAP Server liefert als Antwort <i>bob@mail5.developer.ch</i>
zur&uuml;ck, wodurch die Mail an den Rechner <tt>mail5</tt> der Mailfarm weitergeleitet wird.
<p>Zur Zeit arbeite ich mit einigen guten Entwicklern an einem IMAP/POP3 Proxy, der auf den jeweiligen Ports der nach aussen sichtbaren
Mailservern l&auml;uft und die Anfragen transparent an die jeweiligen Server innerhalb des Netzes weiterleitet.
Dadurch ist jedem Benutzer nur eine Adresse zugeordnet, beispielsweise <i>mail.developer.ch</i> oder <i>pop.developer.ch</i>,
unter der er erreicht wird, statt nachzuhalten, auf welchem Mailserver das Mailkonto wirklich zu finden ist.
</p>


<A NAME="173lfindex13">&nbsp;</A>
<H2>Webmail</H2>

<p>
IMP ist eine gro&szlig;artige Software f&uuml;r den Webmail Dienst.<br>

Es kann ein Alias <tt>mail.*</tt> in der Konfigurationsdatei von Apache, <tt>httpd.conf</tt>, eingetragen
werden, der auf die zentrale IMP Installation verweist.<p>
Hier ein Beispiel meiner eigenen Installation<br>

<form><textarea cols=60 rows=10>

&lt;VirtualHost 195.61.45.153>
    ServerName mail.webcv.ch
    ServerAlias mail.*
    UseCanonicalName off
      DocumentRoot /www/virtual/mail.webcv.ch/htdocs/horde/imp
      Alias /horde /www/virtual/mail.webcv.ch/htdocs/horde
      Alias /imp /www/virtual/mail.webcv.ch/htdocs/horde/imp
        AddType application/x-httpd-php3 .php3
        DirectoryIndex index.html index.php3
        Options Indexes FollowSymLinks
        php3_include_path  /www/virtual/mail.webcv.ch/htdocs/horde:/www/virtual/mail.webcv.ch/php
        php3_auto_prepend_file /www/virtual/mail.webcv.ch/php/prepend.php3
        php3_magic_quotes_gpc Off
        php3_magic_quotes_runtime Off
        RewriteEngine on
        RewriteOptions inherit
        TransferLog /www/logs/mail.webcv.ch_access
        ErrorLog /www/logs/errors/mail.webcv.ch_error
&lt;/VirtualHost>
</textarea>
</form>
<p>

Es wird eine leicht modifizierte Version von IMP verwendet, die die folgenden F&auml;lle abdeckt:
<ul>
<li>kurze Benutzernamen (aghaffar statt aghaffar_developer_ch), aus denen dann die kompletten Namen
zur Authentifizierung erstellt werden, abh&auml;ngig von der URL, die der Benutzer angesprochen hat.
Ruft etwa der Benutzer <i>aghaffar</i> die Adresse <tt>http://mail.developer.ch</tt> auf, so wird sein Name zu
<i>aghaffar_developer_ch</i>, falls etwa der User <i>atif</i> <tt>http://mail.perl.ch</tt> besucht, ist sein
Benutzername nun <i>atif_perl_ch</i>
<li>Weiterleiten an interne Mailserver, in Abh&auml;ngigkeit der Antwort des LDAP Dienstes
<li>kleine &Auml;nderung in der Art, wie Benutzernamen im Adressbuch gespeichert werden, usw. zur Verwaltung mehrerer
Hosts auf einem Rechner.
</ul>
So wird es jedem Kunden erm&ouml;glicht, auf Post einfach dadurch zuzugreifen, dass sie die Seite
<tt>http://mail.their.domain</tt> besuchen.
</ul>

</p>

<A NAME="173lfindex14">&nbsp;</A>
<H2>Literaturverweise</H2>

<p>

<DL>
    <Dt>
        <A HREF="http://www.padl.com/pam_ldap.html">PAM LDAP Modul</a>
    </dt>
    <Dd>
	Das <tt>pam_ldap</tt> Modul erm&ouml;glicht es Solaris und Linux Rechnern,
	Authentifizierung &uuml;ber LDAP Verzeichnisse zu realisieren und Passworte
	im Verzeichnis zu verwaltetn.
    </dd>

    <DT>
        <A HREF="http://www.openldap.org/">openLDAP</a>
    </dt>
    <DD>
	Das OpenLDAP Projekt stellt einen gemeinschaftlichen Versuch dar, eine stabile, voll funktionale und mit kommerziellen Produkten
	vergleichbare Open Source LDAP Umgebung mit Applikationen und Entwicklungswerkzeugen zu schaffen. Eine &uuml;ber die ganze Welt
	verteilte Gruppe von Freiwilligen leitet das Projekt und kommuniziert, plant und entwickelt OpenLDAP und die dazugeh&ouml;rigen
	Dokumente via Internet.
    </dd>

    <DT>
        <A HREF="http://www.postfix.org">Postfix</a>
    </dt>
    <dd>
      Ein ausgezeichneter SMTP Server
    </dd>

    <dt><a href="http://asg.web.cmu.edu/cyrus/">Cyrus SASL Bibliothek und <tt>imapd</tt></a></dt>
    <dd>
	Das <i>Cyrus Electronic Mail</i> Projekt ist ein professionelles, hochskalierbares Mailsystem, dessen Einsatzgebiet
	von kleinen Unternehmen bis hin zu gro&szlig;en Firmen reicht, unter Verwendung von Standardtechnologien.
	Sowohl in kleinen Abteilungen unabh&auml;ngig von anderen, als auch als zentrales Verwaltungssystem einer Firma kann Cyrus
	verwendet werden.</dd>

  <dt><a href="http://www.ispman.org">ISPMan (der Exchange Killer)</a></dt>
  <dd>Die ISP Verwaltungssoftware, die in diesem Artikel verwendet wurde</dd>

  <dt><a href="http://www.proftpd.net">proftpd</a>
  </dt>
  <dd>Eine sichere FTP Serversoftware</dd>
</DL>


</p>



<!-- vim: set sw=2 ts=2 et: -->





<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Talkback f&uuml;r diesen Artikel</h2>
Jeder Artikel hat seine eigene Seite f&uuml;r Kommentare und R&uuml;ckmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen:
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=173&amp;lang=en"><b>&nbsp;Talkback Seite&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%">
<TR><TD ALIGN=CENTER BGCOLOR="#9999AA" WIDTH="50%">
<A HREF="../../common/lfteam.html">Der LinuxFocus Redaktion schreiben</A>
<BR><FONT COLOR="#FFFFFF">&copy; Atif Ghaffar, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
<BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=de&amp;article=article173.shtml" target="_TOP">Einen Fehler melden oder einen Kommentar an LinuxFocus schicken</A><BR></TD>
<TD BGCOLOR="#9999AA">
<!-- TRANSLATION INFO -->
<font size=2>Autoren und &Uuml;bersetzer:</font>
<TABLE>
  <tr><td><font size="2">en --&gt; -- : Atif Ghaffar <small>&lt;atif(at)developer.ch&gt;</small></font></td></tr>
  <tr><td><font size="2">en --&gt; de: Harald Radke &lt;harryrat(at)gmx.de&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2002-02-24, generated by lfparser version 2.25</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>