[LinuxFocus-icon]
Home  |  Map  |  Index  |  Zoek

Nieuws | Archieven | Links | Over LF
Dit document is beschikbaar in: English  Castellano  Deutsch  Francais  Nederlands  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Foto van de Auteur]
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.
Momenteel werkt hij als Internet Development manager bij 4unet en is op zoek naar getalenteerde mensen om in dienst te nemen.
Meer informatie over hem is te vinden op zijn homepage.



Vertaald naar het Nederlands door:
Alrik van Eijkelenborg <alrik(at)xs4all.nl>

Inhoud:

 

Een Flexibele ISP oplossing met open-source software

ispman

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.



 

Waarom LDAP?

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.

 

Wat is ISPMan?

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.

 

Wat gaat de ISP doen?

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 :).

 

Virtuele domeinen

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.

 

Software voor onze ISP

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.

 

Directory ontwerp

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).

 

LDAP Validatie (zonder systeem accounts)

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.so
Zo 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.

 

Het beheren van DNS via LDAP

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.
Alle scripts worden meegeleverd met het ISPMan pakket. Kijk maar eens naar het schermoverzicht om te zien hoe een NS record veranderd kan worden.

 

Het Configuren van proftpd

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.

 

Het installeren van Cyrus

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: admins
ISPMan zal ervoor zorgen dat deze regels tijdens de installatie ingevuld worden.

 

Het installeren van Postfix

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

 

Gebruikers beheer met ISPMan

ISPMan maakt het eenvoudig om gebruikers te beheren. Het aanmaken van een gebruiker gebeurt in twee stappen

  1. Een regel toevoegen aan de LDAP database
  2. Een mailbox aanmaken op de IMAP server
Bij het verwijderen van een gebruiker worden beide stappen ongedaan gemaakt.

 

Schaalbaarheid naar meerdere machines

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.

 

Webmail voor gebruikers

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.

Op die manier stel je alle clients in staat emails te lezen door simpelweg te browsen naar http://mail.their.domain

 

Bronnen

PAM LDAP Module
De pam_ldap module verschaft een methode voor Solaris en Linux werkstations om aan te loggen op LDAP directory's en om paswoorden te wijzigen in de directory.
openLDAP
Het OpenLDAP Project is een gezamenlijke inspanning om een robuuste, commecieel concurerende, complete en open source LDAP suite van programma's en hulpmiddelen te ontwikkelen. Het project wordt aangestuurd door een wereldwijde gemeenschap van vrijwilligers die het Internet gebruiken om te communiceren, plannen en vervaardigen van de OpenLDAP Suite en de bijbehorende documentatie.
Postfix
De geweldige SMTP server.
Cyrus SASL bibliotheek en imapd
Het Cyrus Electronic Mail Project is voortdurend bezig een mail system met een grote mate van schaalbaarheid te ontwerpen voor gebruik in omgevingen van grote bedrijven, gebaseerd op gestandaardiseerde technologie. Cyrus's technologie zal schaalbaar zijn van zelfstandig gebruik in kleine afdelingen tot centraal beheerde systemen in grote bedrijven.
ISPMan (maakt Exchange overbodig)
De ISP beheer software bij dit artikel.
proftpd
Een veilige ftp server.

 

Talkback voor dit artikel

Elk artikel heeft zijn eigen talkback pagina. Daar kan je commentaar geven of commentaar van anderen lezen:
 talkback pagina 

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:
en --> -- : Atif Ghaffar <atif(at)developer.ch>
en --> nl: Alrik van Eijkelenborg <alrik(at)xs4all.nl>

2002-06-08, generated by lfparser version 2.28