|
|
Dit document is beschikbaar in: English Castellano Deutsch Francais Nederlands Turkce |
door Atif Ghaffar <atif(at)developer.ch> Over de auteur:
Atif is een kameleon. Hij verandert van rol, van systeembeheerder, naar programmeur, naar leraar, naar project manager, al naar gelang het werk vereist.
Vertaald naar het Nederlands door: Alrik van Eijkelenborg <alrik(at)xs4all.nl> Inhoud:
|
Kort:
In mijn laatste artikel, introduceerde ik het gebruik van LDAP onder Linux. Ik heb veel verzoeken gekregen van mensen, die nieuwsgierig waren hoe LDAP in combinatie met andere goede open-source software een web mail of web hosting systeem kan vormen.
In dit artikel zullen we een een flexibele ISP service opzetten, gebaseerd op LDAP en Linux. Het zal veel raakvlakken hebben met de kwesties en vragen die gesteld werden. We zullen een tool met de naam ISPMan gebruiken om het te beheren.
Om ruimte te besparen in de voorbeeldteksten, heb ik ze opgenomen in textarea tags. Als je deze pagina wilt printen, sla het dan lokaal op en verander de textarea in pre tags.
Wellicht lukt het met deze perl-regel.
perl -pi.bak -e 's!textarea.*?>!pre>!g' bestandsnaam
Een ISP opzetten en vervolgens beheren is lastig, vooral als je het grotendeels geautomatiseerd wilt doen, met een hoge beschikbaarheid en flexibiliteit. De ISP vereist een team van systeem beheerders, toegewijd aan het in de lucht houden van machines, aanmaken van accounts, managen van websites, trouble shooten, verzorgen van een help desk etc.
Vaak heeft een helpdesk weinig tot geen controle over de configuratie. De meeste helpdesks waarmee ik in contact ben geweest, zijn wanhopig aan hulp toe.
LDAP is een uitstekende directory. Het kan niet alleen het username/paswoord beheren, maar het beheert nog veel meer informatie over gebruikers en middelen. Gaandeweg zullen we zien hoe LDAP ons helpt om een heleboel zaken centraal te beheren.
Ik heb de ISPMan software geschreven om te voorkomen dat de mensen van de IT afdeling me nodig hebben als ze een nieuw domain willen aanmaken, een nieuwe webserver willen inrichten of een DNS waarde willen aanpassen. ISPMan is open source software en is te vinden op http:// www.ispman.org. Ik zal niet proberen de werking van ISPMan uit te leggen, maar wel de ideeen erachter. Iedereen is vrij het uit te proberen en te verbeteren.
De ISP zal DNS, mail, webmail en web hosting etc. diensten aanbieden.
Het uitgangspunt is een klant die het domain "exampledomain.com" wil gebruiken.
Het domein wordt centraal aangemaakt door slechts een paar keer klikken en een hoop magie wordt achter de schermen afgehandeld, inclusief het configureren van DNS, de virtuele mailserver en de virtuele webserver.
De klant krijgt een ftp gebruikersnaam om toegang te krijgen tot zijn/haar web/ftp server. Een ongelimiteerd aantal gebruikers kan gemaakt worden binnen het domein voor email toegang. Gebruikers in het domein kunnen al dan niet webruimte toegewezen krijgen.
En dan is er is nog het probleem van internet toegang. Dat zou een redelijk eenvoudig proces kunnen zijn, maar het kan behoorlijk gecompliceerd worden, dus gaan we er in dit artikel niet verder op in :).
Iedereen wil een website en email adres met zijn eigen domain naam. Email servers zijn op een vreemde manier verbonden aan systeem accounts voor emails. Ik hou daar niet van.
Er onstaan problemen op verscheidene niveau's wanneer je user1@domain1.com en user1@domain2.ch etc. wilt beheren.
Er moeten onnodig veel verwijzingen etc. gedaan worden. Hopelijk zal toekomstige software geschreven worden met domeinen in gedachten.
Cyrus bijvoorbeeld, is een uitstekende IMAP server. Cyrus beheert mailboxen (geen gebruikers). Het staat maar 1 mailbox toe met de naam "aghaffar". Als ik een andere klant heb met het domein "linuxrus.com", die een gebruikersnaam "aghaffar" wenst, dan heb ik pech. Ik zou een mailbox moeten creeeren onder een andere naam en die gebruiker moeten verwijzen naar die mailbox.
Een andere truc is het creeeren van gebruiker "aghaffar.linuxrus.com", maar Cyrus neemt "." als het mailbox onderscheidingsteken, dus dat kan hier niet, net zo min als "aghaffar@linuxrus.com".
Bedenk ook dat niet iedereen in de VS leeft. Een heleboel voorbeelden in mailing lijsten suggereren user1@domain1 en user1@domain2. Ze gaan ervan uit dat alle domein namen eindigen op .com. Dus we moeten letten op "username" "domain" "TLD"(Top Level Domain).
Ons ontwerp zal met alles rekening houden.
Dus, in plaats van het aanmaken van gebruikers als "aghaffar", zullen we gebruikers maken met deze notatie "username_domain_tld".
Ik herinner me niet echt waarom ik "_" als het onderscheidingsteken gebruikte, maar "." was geen optie vanwege Cyrus, en er waren andere problemen met andere tekens, zoals "&" bijvoorbeeld een slechte keuze is voor zowel shells als URL's.
Dit is een lijst van software die wat mij betreft aardig in combinatie met elkaar te gebruiken is. Je kunt indien gewenst andere software gebruiken voor het gewenste resultaat.
Onze directory is gebaseerd op domeinen. Er zijn domeinen, domein gebruikers, domein diensten etc.
Een gebruiker bijvoorbeeld, kan alleen maar bestaan in een domein (behalve een paar systeem gebruikers als LDAP admin, Cyrus admin etc)
Een domein tak bevat informatie over gebruikers van dat domein, de DNS gegevens van het domein, de http gegevens van het domein etc. etc.
Een voorbeeld:
Hier hebben we een tak voor het domein "developer.ch" gedefinieerd, deze tak heeft vertakkingen voor users, dnsdata en httpdata.
In dit voorbeeld, hebben we een uid, gid, homeDiretory etc gedefinieerd, want we willen dat alleen gebruiker "domain.tld" toegang heeft via ftp.
Als een klant bijvoorbeeld in het bezit is van developer.ch dan wil ze haar bestanden kunnen uploaden naar haar directory, door in te loggen met gebruiker "developer.ch" en het bijbehorende paswoord op de ftp server, die hopelijk chroot naar homeDirectory.. etc .. etc.. daarover later meer.
Voor andere gebruikers hebben we geen uid, gid, etc omdat we niet willen dat ze inloggen met ftp.
Je vindt een compleet LDIF voorbeeld bestand hier (dit bestand kan gedateerd zijn omdat het van een productie machine komt, ik heb nieuwe mogelijkheden toegevoegd aan het nieuwe ontwerp)
of volg deze link als je het aan je baas wilt laten zien (ook een beetje gedateerd).
Een ander groot voordeel is dat we geen systeem accounts meer hoeven toe te voegen aan /etc/passwd, /etc/shadow of NIS hoeven te beheren.
Alle gebruikers worden beheerd in LDAP en validatie vindt plaats direct door LDAP.
Voor dit trucje leunen we flink op PAM (Pluggable Authentification Module) pam_ldap.
PAM stelt je in staat te bepalen welke module de verificatie, validatie afhandelt.
Bijvoorbeeld, mijn /etc/pam.d/imap, /etc/pam.d/pop en /etc/pam.d/proftpd bestanden bevatten:
#%PAM-1.0 auth sufficient /lib/security/pam_ldap.so account sufficient /lib/security/pam_ldap.soZo worden alle imap/pop3/ftp logins afgehandeld door de ldap server. Dus gebruiker aghaffar_developer_ch wordt gevalideerd en krijgt zijn mail, zelfs als hij niet bestaat in de paswoord en NIS bestanden van het systeem.
DNS heeft op het moment nog geen LDAP koppeling en misschien is het geen goed idee om een LDAP koppeling te hebben voor DNS, behalve bij Dynamische DNS, die gebruikt wordt in samenwerking met DHCP. In ieder geval gaan we LDAP gebruiken om DNS informatie op te slaan en op te vragen en daarmee DNS zone bestanden te maken. Dit stelt ons in staat om alles centraal vanaf een veilige machine te beheren, terwijl er geen aanpassingen aan DNS nodig zijn.
De DNS waarden in LDAP zien er als volgt uit:
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 |
De dnsdata tak defenitie. Het bevat ook een posixAccount(een gebruiker) met dezelfde naam als de domeinnaam. Deze gebruiker is een soort webmaster, die kan inloggen via ftp en bestanden kan uploaden naar bepaalde gebieden, enzovoorts. |
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 |
Dit defenieert de SOA waarden voor het DNS van 4unet.net.
Een script is verantwoordelijk voor het uitlezen van de waarden en het vertalen naar een DNS SOA regel voor de zone file. |
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 |
En dit zijn de NS waarden.
Een script zal alle attributen uitlezen en ze splitsen aan de hand van het "," teken en het doel en naamserver aan het zone bestand toevoegen. |
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 |
Idem als hierboven, maar de MX waarden deze keer.
Deze regels bevatten ook een prioriteits waarde, welke op dezelfde wijze in de MX regels van het zone bestand komen. |
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 |
Dit zijn de A waarden, een simpele host en ip adres verwijzing. |
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 |
En de CNAMES ofwel Aliasen voor de hosts. |
Je hebt een installatie van proftpd met de LDAP module nodig. Als je ftp met virtuele servers en dergelijken wilt draaien en je verwacht dat het vaak druk zal zijn, dan zou je het standalone kunnen draaien, in plaats van via inetd.
Verwijder de ftp regels in inetd.conf door er commentaar voor te zetten en herstart de inetd daemon.
Maak een group met gid 1000 genaamd ftponly. We zullen dit gid voor alle domeinen gebruiken.
Verander /etc/pam.d/proftpd zoals in de paragraaf van LDAP validatie beschreven is.
Het bestand /etc/proftpd.conf moet er dan ongeveer zo uit gaan zien.
Om proftpd te starten, kun je het commando /usr/sbin/proftpd geven. En om het te stoppen, killall /usr/sbin/proftpd.
Compileer en installeer Cyrys SASL en imapd en de c-sdk van de UW-IMAP client. De IMAP client sdk kan al op je systeem staan. Probeer eerst eens rpm -aq | grep imap. Als je twijfelt, compileer en installeer dan gewoon een nieuwere versie. Maak een systeem gebruiker genaamd cyrus en een group mail, volg de installatie instructies en test of jouw imap server werkt. Als het eenmaal werkt, activeer dan /etc/pam.d/imap zoals hierboven getoond in de LDAP validatie paragraaf.
Je zult een gebruiker genaamd cyrus moeten maken of een andere beheerder uit /etc/imapd.conf in de LDAP directory.
Als bijvoorbeeld jouw cyrus beheerder "cyrus" heet, dan is het waarschijnlijk dat de volgende regels in jouw ldap directory voorkomen.
dn: uid=cyrus, ou=admins, o=ispman cn: Cyrus Admin sn: Cyrus objectclass: top objectclass: systemadmins uid: cyrus userpassword: XXDDCCYY ou: adminsISPMan zal ervoor zorgen dat deze regels tijdens de installatie ingevuld worden.
Postfix is bijzonder LDAP vriendelijk. Je kunt zoekopdrachten voor virtuele domeinen en virtuele gebruikers direct in LDAP doen, zodat je niet hoeft te specificeren voor welke domeinen je mail ontvangt.
Als er bijvoorbeeld mail binnenkomt voort het domein "perl.ch", dan zou het in alle domeinen moeten zoeken naar een domein genaamd "perl.ch". Als het bestaat dan moet het de mail accepteren in plaats van het antwoord "Duh MX van perl.ch verwijst naar zichzelf".
Mijn /etc/postfix/main.cf ziet er zo uit
ISPMan maakt het eenvoudig om gebruikers te beheren. Het aanmaken van een gebruiker gebeurt in twee stappen
ISPMan stelt je in staat mailboxen van gebruikers te verdelen over de machines in je mailfarm. Als je bijvoorbeeld beschikt over mail1, mail2, mail3, mail4, enzovoorts, waarbij elke machine 10.000 gebruikers beheert, dan kun je met door de combinatie van LDAP + Postfix + Cyrus de mail bezorgen bij ieder van deze interne machines.
Stel bijvoorbeeld dat er mail arriveert voor bob@developer.ch. Postfix vraagt dan aan de ldap server welke maildrop overeenkomt met mailacceptinggeneralid=bob@developer.ch en de LDAP server antwoordt dan bob@mail5.developer.ch. Vervolgens wordt de mail gerouteerd naar de machine met de naam mail5 in de mailfarm.
Momenteel werk ik samen met enkele ontwikkelaars aan een IMAP/pop3 proxy die draait op de mailservers die van buitenaf bekend zijn en transparante toegang verzorgen naar de interne machines. Daardoor hoeven gebruikers maar 1 adres te weten, zoals bijvoorbeeld mail.developer.ch of pop.developer.ch om verbinding te maken, in plaats van te weten op welke mailserver hun mail staat.
IMP is een geweldig product om webmail te bieden aan gebruikers.
Je kunt een alias voor mail.* in apache's httpd.conf opnemen, om te verwijzen naar de centrale IMP installatie te verwijzen.
Dit is een voorbeeld uit mijn configuratie.
Ik werk momenteel nog aan een aangepaste versie van IMP die ook de volgende situaties aankan.
|
Site onderhouden door het LinuxFocus editors team
© Atif Ghaffar, FDL LinuxFocus.org Klik hier om een fout te melden of commentaar te geven |
Vertaling info:
|
2002-06-08, generated by lfparser version 2.28