¨le Wetenschappen (INWE) Departement Industrie Vakgroep Informatica
Academiejaar 2003–2004
Uitbouw van een netwerk infrastructuur
Wim Daelemans
Promotor: Joris Moreau
Scriptie voorgedragen tot het behalen van de graad van Industri¨ eel Ingenieur Informatica
¨le Wetenschappen (INWE) Departement Industrie Vakgroep Informatica
Academiejaar 2003–2004
Uitbouw van een netwerk infrastructuur
Wim Daelemans
Promotor: Joris Moreau
Scriptie voorgedragen tot het behalen van de graad van Industri¨ eel Ingenieur Informatica
Woord vooraf
Mijn dank gaat uit naar mijn interne begeleider, dhr. Joris Moreau. Hij verschafte mij de nodige richtlijnen voor het tot stand brengen van dit werk, en las het grootste stuk ervan na. Daarnaast wil ik ook dhr. Peter Willems, en andere werknemers van vzw Capelderij, bedanken voor hun medewerking en vertrouwen. Tenslotte een woord van dank aan mijn ouders, voor hun morele steun. Wim Daelemans Gent, mei 2004
Inhoudsopgave Woord vooraf
2
Inleiding
7
1 Situering 1.1 Vroegere situatie . . . . . . . . . . . . . . . . 1.1.1 Primitief netwerkje voor administratie 1.1.2 Andere pc’s voor hulpverleners . . . . 1.2 Behoeftes . . . . . . . . . . . . . . . . . . . . 1.3 Vernieuwingen . . . . . . . . . . . . . . . . . 1.3.1 Windows versus Linux . . . . . . . . . 1.3.2 Netwerk . . . . . . . . . . . . . . . . . 1.3.3 Gateway en modem . . . . . . . . . . 1.3.4 Server . . . . . . . . . . . . . . . . . . 1.3.5 Internet verbinding . . . . . . . . . . . 1.3.6 Website . . . . . . . . . . . . . . . . . 1.3.7 Printserver . . . . . . . . . . . . . . . 2 Aanleg netwerk 2.1 Beschrijving situatie . . . . . . . . . . 2.2 Keuze netwerkmateriaal . . . . . . . . 2.2.1 Glasvezel rootswitch . . . . . . 2.2.2 Gemengde rootswitch . . . . . . 2.2.3 Geen rootswitch . . . . . . . . . 2.2.4 Softwarematig switchen via pc 2.2.5 Uiteindelijke oplossing: gebruik 2.3 Opbouw netwerk . . . . . . . . . . . . 2.3.1 Logische opbouw . . . . . . . . 2.3.2 Fysische opbouw . . . . . . . . 2.4 Beveiliging . . . . . . . . . . . . . . . 2.4.1 MAC-Address Spoofing . . . . 2.4.2 ARP Spoofing . . . . . . . . . 2.4.3 IP Spoofing . . . . . . . . . . .
3
. . . . . . . . . . . . . . . . . . . . . . . . maken . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . van converters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . .
8 8 9 9 9 10 10 11 11 12 12 12 12
. . . . . . . . . . . . . .
13 13 13 14 14 14 15 15 15 15 17 18 18 19 19
Inhoudsopgave 2.5
Configuratie van netwerkmateriaal 2.5.1 Firmware upgrade . . . . . 2.5.2 Poort configuratie . . . . . 2.5.3 VLAN’s . . . . . . . . . . .
4 . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
3 Gateway installatie en configuratie 3.1 Keuze hardware en software . . . . . . . . . . . . . . . . . 3.1.1 Keuze hardware . . . . . . . . . . . . . . . . . . . 3.1.2 Keuze software . . . . . . . . . . . . . . . . . . . . 3.2 Beveiliging . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Probleem met Open Source software . . . . . . . . 3.2.2 Lokale aanvallen versus netwerk aanvallen . . . . . 3.2.3 Draaiende hoeveelheid code beperken . . . . . . . 3.2.4 Inbraak zo snel mogelijk ontdekken en melden . . . 3.3 Installatie van het OS . . . . . . . . . . . . . . . . . . . . 3.3.1 Installatie CD-ROM . . . . . . . . . . . . . . . . . 3.3.2 Installatieprocedure voor het basis Debian systeem 3.3.3 Upgrade naar Adamantix . . . . . . . . . . . . . . 3.4 Configuratie en beveiliging van het OS . . . . . . . . . . . 3.4.1 Installatie van extra pakketten . . . . . . . . . . . 3.4.2 Keuze van de Linux-kernel . . . . . . . . . . . . . . 3.4.3 Kernel configuratie . . . . . . . . . . . . . . . . . . 3.4.4 Kernel compilatie . . . . . . . . . . . . . . . . . . . 3.4.5 Opstartbaar maken van de kernel . . . . . . . . . . 3.4.6 Verdere beveiliging . . . . . . . . . . . . . . . . . . 3.5 Netwerk configuratie . . . . . . . . . . . . . . . . . . . . . 3.6 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7 DHCP Server . . . . . . . . . . . . . . . . . . . . . . . . . 4 Raamplanbeheer 4.1 Vroegere situatie . . . . . . . . . . . . . . . . . . . . . 4.2 Mogelijke oplossingen . . . . . . . . . . . . . . . . . . 4.2.1 Ideale oplossing . . . . . . . . . . . . . . . . . . 4.2.2 Commerci¨ele oplossing . . . . . . . . . . . . . . 4.2.3 Workflow via email . . . . . . . . . . . . . . . . 4.2.4 File sharing van Word-documenten via netwerk 4.2.5 Database systeem . . . . . . . . . . . . . . . . 4.2.6 Zuiver CVS systeem . . . . . . . . . . . . . . . 4.2.7 Combinatie CVS, LATEX en scripting . . . . . . 4.3 Keuze van implementatie software . . . . . . . . . . . 4.3.1 Programmeertaal . . . . . . . . . . . . . . . . . 4.3.2 Database server . . . . . . . . . . . . . . . . . . 4.3.3 Opmaken en produceren van het document . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
20 20 21 22
. . . . . . . . . . . . . . . . . . . . . .
25 25 25 25 27 27 27 28 28 29 29 29 31 31 31 32 34 37 38 38 38 39 40
. . . . . . . . . . . . .
41 41 42 42 43 43 44 44 44 45 45 45 46 46
Inhoudsopgave 4.4
4.5
4.6
5
Gebruikershandleiding ter beschrijving van structuur en mogelijkheden 4.4.1 Gebruikers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 De gebruikersinterface . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Foutmelding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.4 Word template bestand cre¨eren . . . . . . . . . . . . . . . . . . 4.4.5 Nieuwe paragraaftypes . . . . . . . . . . . . . . . . . . . . . . . 4.4.6 De raamplanversie aanmaken . . . . . . . . . . . . . . . . . . . 4.4.7 Nieuw raamplan . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.8 Werkverdeling . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.9 Inhoud raamplan bekijken/bewerken . . . . . . . . . . . . . . . 4.4.10 Geproduceerd Word-document verkrijgen . . . . . . . . . . . . Implementatie details . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Visual Studio .NET project . . . . . . . . . . . . . . . . . . . . 4.5.2 Bestanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.3 Het MVC ontwerpmodel . . . . . . . . . . . . . . . . . . . . . . 4.5.4 Het template systeem en de klasse TemplatePage . . . . . . . . 4.5.5 Eigen controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.6 Menubalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.7 Selectiebalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.8 Cascading style sheets . . . . . . . . . . . . . . . . . . . . . . . 4.5.9 Database klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.10 Aanmelden en Active Directory . . . . . . . . . . . . . . . . . . 4.5.11 Word DCOM object . . . . . . . . . . . . . . . . . . . . . . . . 4.5.12 Internationalisatie . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.13 Foutafhandeling . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.14 Volgorde van opladen . . . . . . . . . . . . . . . . . . . . . . . Het installeren van de toepassing op een productieserver . . . . . . . . 4.6.1 Microsoft Word-Document DCOM object . . . . . . . . . . . . 4.6.2 Microsoft SQL Server 2000 . . . . . . . . . . . . . . . . . . . . 4.6.3 Microsoft IIS 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Internet verbinding 5.1 Keuze van de lijn . . . . . . . . . . . . . 5.2 Router . . . . . . . . . . . . . . . . . . . 5.3 Configuratie ADSL-modem . . . . . . . 5.3.1 Gegevens . . . . . . . . . . . . . 5.3.2 Connectie met modem . . . . . . 5.3.3 Opzetten ADSL verbinding . . . 5.3.4 Aanmaken van de gepaste routes 5.3.5 Forwarding . . . . . . . . . . . . 5.3.6 Pingen . . . . . . . . . . . . . . . 5.3.7 Linux Gateway . . . . . . . . . . 5.4 Configuratie zonder Linux Gateway . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46 46 46 48 48 50 50 51 51 51 51 52 52 52 55 56 58 59 59 59 60 60 63 64 65 66 68 68 69 70
. . . . . . . . . . .
71 71 71 72 72 72 73 75 75 75 76 76
Inhoudsopgave
6
6 Mailserver 6.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Pre-installatie . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Hoofdinstallatie . . . . . . . . . . . . . . . . . . . . . . 6.3 Configuratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.1 MMC Exchangetools . . . . . . . . . . . . . . . . . . . 6.3.2 Verplaatsen van de Mailbox Store naar andere partitie 6.3.3 Limiet mailboxen instellen . . . . . . . . . . . . . . . . 6.3.4 Wijzigen van het e-mail domein . . . . . . . . . . . . . 6.3.5 Internet mail ontvangen . . . . . . . . . . . . . . . . . 6.3.6 Basis beveiliging . . . . . . . . . . . . . . . . . . . . . 6.3.7 Mailboxen aanmaken . . . . . . . . . . . . . . . . . . . 6.3.8 Mailbox instellingen aanpassen . . . . . . . . . . . . . 6.3.9 De clients . . . . . . . . . . . . . . . . . . . . . . . . . 7 Printserver 7.1 Configuratie van de 7.2 Configuratie van de 7.2.1 Configuratie 7.2.2 Configuratie
printserver . . . . . . . . . . . clients . . . . . . . . . . . . . . van de Windows 98/Me clients van Windows XP clients . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
77 77 77 77 78 79 79 80 81 81 81 82 84 84 85
. . . .
87 87 88 88 88
Referentielijst
89
Index
90
Inleiding Als onderwerp voor dit eindwerk werd gekozen voor het uitbreiden van een netwerk infrastructuur. Deze titel is nogal vaag omdat er vrij uiteenlopende taken moesten worden volbracht. Eerst en vooral moest het bestaande netwerk worden uitgebreid naar een groter netwerk dat zich over meerdere gebouwen uitstrekt. Hiervoor werd professionele netwerkapparatuur aangekocht, ge¨ınstalleerd en geconfigureerd. Vervolgens moesten er verschillende diensten worden aangeboden op het netwerk. Zo moesten alle clients op het netwerk gebruik kunnen maken van ´e´en enkele gedeelde Internet verbinding. Er moest ook kunnen gebruik gemaakt worden van gezamenlijke printers, en er moesten bestanden kunnen worden gedeeld op het netwerk. Een andere belangrijke vereiste was een e-mail infrastructuur. Elke medewerker moest een eigen mailbox krijgen. Het e-mailen moest zowel lokaal werken (tussen medewerkers onderling), als extern (tussen een medewerker en een willekeurige Internet gebruiker). Tenslotte was er ook nood aan een netwerktoepassing waarmee op een effici¨ente manier bepaalde verslagen konden worden opgesteld en beheerd. Voor het verwezenlijken van dit alles werden verschillende systemen en technologie¨en gebruikt. Zo bestond een deel van het werk uit het installeren en configureren van netwerkapparatuur, het configureren van een Windows server, het opzetten van een Linux gateway, en het programmeren van een netwerktoepassing. Er werd dus niet fanatiek gekozen voor ofwel een zuivere Windows omgeving, ofwel een zuivere Linux omgeving. Het beste uit beide werelden werd gecombineerd. De rode draad door dit alles was de beveiliging. Persoonlijk vind ik een informatica systeem weinig waard als er geen zorg werd besteed aan de beveiliging ervan. Wegens tijdsgebrek werd niet alles steeds parano¨ıde beveiligd, maar er werd wel altijd aangegeven hoe dit zou moeten gebeuren. Hopelijk beleeft u veel plezier aan het lezen van dit eindwerk, en steekt u er iets van op. 7
Hoofdstuk 1
Situering Het MPI1 Capelderij is een instelling voor jeugdhulpverlening in Opdorp2 (deelgemeente van Buggenhout). Op het terrein zijn verschillende gebouwen aanwezig, omringd door vijvers en prachtige natuur. In de televisiereeks Stille Waters” werd er dan ook dankbaar gebruik ” gemaakt van deze omgeving. Tot de belangrijkste gebouwen behoort onder andere het kasteel . Hierin bevindt zich het bureau van de directeur, evenals de administratie. Momenteel zitten er ook een paar hulpverleners. Een ander gebouw op het terrein is de villa. In dit gebouw is het merendeel van de hulpverleners gevestigd. In dit gebouw is ook de woonplaats gevestigd van ´e´en enkele jongere. Als derde belangrijke gebouw kunnen we de school vernoemen. Het gaat hier om de vrije beroepsschool B.O.3 , eveneens behorende tot de vzw Capelderij. Deze school zal in de toekomst ook van Internet toegang moeten voorzien worden. Verder zijn er op het terrein nog verschillende appartementsgebouwen, waarin de jongeren zelf gevestigd zijn.
1.1
Vroegere situatie
Dit is allemaal mooi en wel, het lijkt zelfs bijna op een sprookje. Wat is nu eigenlijk het probleem? Wel, zoals je waarschijnlijk al kon raden: de informatica infrastructuur. 1
Medisch Pedagogisch Instituut Het middelpunt van Vlaanderen 3 Bijzonder Onderwijs 2
8
Hoofdstuk 1. Situering
1.1.1
9
Primitief netwerkje voor administratie
Voor de administratie was er reeds een primitief netwerkje aanwezig. Hiervoor werd een kleine switch/router gebruikt die ook verbonden was met een Telenet ethernet modem, en zo het netwerk van een gedeelde Internet verbinding voorzag. Via deze switch werden een paar pc’s, met clientsoftware voor administratie, verbonden met de server , waarop de database draaide voor deze software. Deze server (van het merk Compaq) draait Windows 2000 Server (versie 5.00.2195) met service pack 3 . Hij is voorzien van ´e´en Intel Pentium III 1133Mhz processor en 512MB RAM geheugen, en biedt de mogelijkheid om een tweede processor bij te plaatsen. Voor opslag was hij oorspronkelijk uitgerust met twee hardeschijven van 40GB in RAID 1 (dus 40GB effectieve opslagruimte). Momenteel zijn dat er twee van 80GB geworden. Voor het administratieve programma draait op deze server het DBMS MS SQL Server . De server werd geleverd door het bedrijf NC Computing. De software werd voordelig aangekocht via de AVW 4 organisatie van Sumika.
1.1.2
Andere pc’s voor hulpverleners
De hulpverleners werken ook op pc’s, maar deze waren oorspronkelijk niet met het primitief netwerkje verbonden. Ze gebruikten deze pc’s vooral voor het opmaken van jongerenverslagen, die men raamplannen noemt. Het probleem is, dat verschillende hulpverleners aan dezelfde verslagen moeten kunnen werken. Een verslag handelt over een bepaalde jongere, en elke hulpverlener (bijvoorbeeld de gezinsbegeleider of de logopedist) voegt daar zijn bijdrage aan toe. De toenmalige werkwijze ging als volgt. Iedere hulpverlener opende een sjabloonbestand in Word . Dit werd dan aangevuld, opgeslagen en op een diskette geplaatst. Wanneer iedereen zijn deel afgewerkt had, wat maximaal kon duren tot zes maanden na het vorige raamplan, werden alle diskettes afgeleverd aan de coach, de verantwoordelijke voor dat speciefieke raamplan. Die knipte en plakte alle afzonderlijke teksten in ´e´en globaal Word document, en maakte dan de opmaak uniform. Vervolgens werd het document afgedrukt en doorgegeven zodat iedereen het kon inkijken.
1.2
Behoeftes
• Internet: Er zijn computers waarop steeds betrouwbare mensen werken, en er zijn er waarop mogelijk onbetrouwbare mensen werken. Deze werkposten zijn verspreid over 3 gebouwen (de villa, het kasteel en de school ), die onderling op 150m afstand van elkaar liggen. Beide soorten werkposten moeten Internet toegang krijgen. Er zou dus een betrouwbaar netwerk moeten komen, waarop de medewerkers werken, en een onbetrouwbaar netwerk, waarop de clients enkel worden gebruikt om te surfen. Toch moeten 4
Automatisatie Vlaamse Welzijnszorg
Hoofdstuk 1. Situering
10
beide netwerken via dezelfde fysieke netwerkinfrastructuur naar het kasteel worden geleid, want daar bevindt zich de Internet gateway. • Firewall : Tussen het Internet en het lokaal netwerk, alsook tussen het betrouwbaar deel van het lokaal netwerk en het onbetrouwbaar deel, moet een firewall geplaatst worden. • Eigen domeinnaam: De vzw Capelderij wenst de domeinnaam capelderij.be. • E-mail boxen: Elke werknemer moet een eigen mailbox krijgen, en een bijhorend e-mail adres van de vorm
[email protected]. • Website: De vzw Capelderij wenst ook een eigen website, onder het adres www.capelderij.be. Deze zal onderhouden worden door mensen met een zeer beperkte informatica kennis. • Printserver : In het printlokaal van het kasteel komt een printer, waarop via het betrouwbare netwerk moet kunnen worden geprint. • Geoptimaliseerd raamplanbeheer : De hulpverleners moeten via het netwerk op een effici¨ente manier aan de raamplannen kunnen werken. Verschillende personen moeten gelijktijdig aan hetzelfde raamplan kunnen werken, en de reeds ingevulde delen van andere medewerkers kunnen inkijken.
1.3 1.3.1
Vernieuwingen Windows versus Linux
Oorspronkelijk was het de bedoeling van zoveel mogelijk diensten aan te bieden op een Linux server. Zo zou ik bijvoorbeeld bij voorkeur een Sendmail mailserver ge¨ınstalleerd hebben, en MySQL in combinatie met Java Server Pages of iets dergelijks voor het raamplanbeheer . Een van de nadelen is dan dat er op dezelfde machine als waarop de firewall ge¨ınstalleerd is nog een pak andere services uitgevoerd worden. Dit is niet ideaal qua beveiliging. Het grote voordeel van het uitvoeren van al deze diensten op een Linux machine is de stabiliteit, performantie, de hoge beschikbaarheid van documentatie en hulp, en natuurlijk ook de onafhankelijkheid van commerci¨ele belangen. De gehele Linux oplossing zou namelijk volledig gratis zijn geweest. De zaken zijn echter iets anders uitgedraaid. Toen het bedrijf NC Computing, dat de server en support leverde aan de instelling, hoorde van de veranderingen werd onmiddellijk een vergadering belegd waarop ik eveneens aanwezig was. Uit die vergadering, waarin vrij agressief uitgehaald werd naar mij, mijn eindwerk en Linux, werd vooral de ondersteuning van de configuratie op lange termijn aangehaald. Wanneer er problemen zouden optreden na afloop van mijn eindwerk, wie zou dan de support leveren? NC Computing levert geen support voor
Hoofdstuk 1. Situering
11
Linux, enkel voor Windows systemen. Aangezien de vzw in de toekomst verder wou met NC Computing, moest er dus een compromis gesloten worden. Als mailserver is uiteindelijk gekozen voor Microsoft Exchange Server 2003. Een bijkomend voordeel is dat er, wanneer we bovendien met Outlook clients werken, kan gewerkt worden met het MAPI protocol van Microsoft. Hierdoor werken server en clients optimaal samen. Alle e-mails, contacts, agenda’s, ... worden centraal op de server bewaard. Bovendien is het mogelijk om agenda’s te delen zodat de medewerkers, indien toegestaan, de agenda van andere medewerkers kunnen raadplegen en/of aanpassen. Voor de ontwikkeling van het raamplanbeheer werd gekozen voor de programmeertaal ASP.NET. Hiervoor is het .NET Framework vereist, maar dit is gratis te downloaden. IIS (webserver van Microsoft) is ook aangewezen, en maakt standaard deel uit van het Windows 2000 Server besturingssysteem. Als databank systeem tenslotte werd gebruik gemaakt van Microsoft SQL Server, omdat deze reeds aanwezig was voor de administratieve toepassing. In de Windows en Exchange wereld is ook Active Directory niet uit te sluiten. Hiervan werd dan ook zoveel mogelijk gebruik gemaakt. Ook de file- en printersharing werd op de Windows Server ge¨ımplementeerd. Tenslotte werd ook een DNS (voor het domein ‘capelderij.local’) en DHCP server voor het betrouwbare netwerk geconfigureerd.
1.3.2
Netwerk
Voor alle eerder vernoemde behoeften is het fysieke netwerk van essentieel belang. Daarom werd het ook grondig en professioneel uitgebreid. Voor de verbindingen tussen de gebouwen werd er bijvoorbeeld glasvezel kabel gebruikt. In de gebouwen zelf werd nieuwe CAT6 bekabeling aangelegd, en werden racks met patchpanelen geplaatst. Verder werden er SNMP manageable switchen aangekocht en geconfigureerd. Om betrouwbare werkposten van onbetrouwbare te scheiden werd gebruik gemaakt van VLAN’s. Voor meer informatie over dit alles verwijs ik u door naar hoofdstuk 2.
1.3.3
Gateway en modem
We zullen een extra pc bijplaatsen die als tweede server dienst doet, en die we voortaan de gateway noemen. Zijn hoofdtaak is, in combinatie met de modem, het aanbieden van Internet aan het gehele netwerk. Er is maar ´e´en publiek IP-adres beschikbaar, zodat er aan NAT5 zal moeten gedaan worden. Hij zal ook het enige apparaat zijn dat zowel op het onbetrouwbare deel van het netwerk als op het betrouwbare deel bereikbaar is (omdat beide delen Internet toegang nodig hebben). Tenslotte zal de gateway ook dienst doen als firewall tussen het Internet en het lokale netwerk, en tussen het betrouwbare deel van het lokale netwerk en 5
Network Address Translation
Hoofdstuk 1. Situering
12
het onbetrouwbare. Het spreekt vanzelf dat deze server goed moet beveiligd worden. De installatie en configuratie van de gateway wordt behandeld in hoofdstuk 3, die van de modem in 5.
1.3.4
Server
Op de reeds bestaande Compaq server, we noemen hem voortaan de server , zal naast het bestaande administratieprogramma nu ook het raamplanbeheer uitgevoerd worden, evenals MS Exchange server, Active Directory en de DHCP server voor het betrouwbare netwerk. Het raamplanbeheer kan ook gebruik maken van de databank met administratieve gegevens die op de server aanwezig is. De server is ook voorzien van een tapedrive om alles te backuppen. Het raamplanbeheer wordt behandeld in hoofdstuk 4, en voor de configuratie van de mailserver kan je in hoofdstuk 6 terecht.
1.3.5
Internet verbinding
Het MPI huurt een eigen domein, namelijk capelderij.be. We gaan voor dit domein ook een eigen mailserver configureren. Een vast IP adres is bijgevolg een vereiste. Ook een degelijke upload snelheid, en onbeperkt transfer volume waren belangrijke factoren bij het kiezen van een specifieke Internet verbinding. Zie hoofdstuk 5.
1.3.6
Website
Aangezien mensen met een beperkte informaticakennis moeten instaan voor het onderhoud van de website, en vanwege tal van andere voordelen, werd oorspronkelijk gekozen voor een CMS (Content Management System): Typo3 . Wegens het aanwerven van een informaticus door het MPI is deze behoefte echter vervallen.
1.3.7
Printserver
De printer bevindt zich in een apart lokaal waar geen werkpost of server aanwezig is. Omdat een USB kabel maar kan gebruikt worden voor een zeer beperkte lengte (5m zonder tussenliggende hubs), werd er een ethernet printserver aangekocht. Voor de configuratie ervan zie hoofdstuk 7.
Hoofdstuk 2
Aanleg netwerk 2.1
Beschrijving situatie
Het netwerk verbindt verschillende componenten, verspreid over drie gebouwen. In het hoofdgebouw, het kasteel , zijn volgende zaken aanwezig: een kopieerapparaat, een gewone printer, twee servers (de server en de gateway), een ethernet modem voor de Internet verbinding, en ongeveer 6 werkposten. Het tweede gebouw, de villa, telt momenteel 6 werkposten (in de toekomst maximaal 12). Tenslotte zal na een verbouwing ook nog de school aangesloten worden met maximum 10 werkposten. In de verre toekomst kunnen ook extra gebouwen (van de leefgroepen) netwerktoegang vereisen. Tussen het kasteel en de villa ligt er reeds een SX multimode glasvezelkabel (50/125 µm). De bedoeling is dat alle werkposten (zowel betrouwbare als onbetrouwbare) Internet toegang krijgen, en dat men op de betrouwbare pc’s ook nog administratieve taken en het raamplanbeheer kan uitvoeren.
2.2
Keuze netwerkmateriaal
Voor de netwerkapparatuur kwamen verschillende merken in aanmerking: SMC , Cisco, 3Com, Allied Telesyn, D-Link , ... Oorspronkelijk koos ik voor 3Com switchen in combinatie met Allied Telesyn converters. De verkoper bij firma De Volder (waar de netwerkapparatuur aangekocht werd) raadde mij echter ten zeerste aan alle apparatuur van hetzelfde merk te nemen. Aangezien 3Com geen aparte glasvezel-ethernet converter heeft, en aangezien Allied Telesyn een zeer gerespecteerd merk is, koos ik uiteindelijk voor het laatste. Een belangrijk probleem dat zich stelde was de grote afstand tussen de 3 gebouwen onderling, namelijk ongeveer 150m. Gewone twisted pair kabel mag echter maar gebruikt worden voor afstanden kleiner dan 100m. Bij hogere afstanden kan o.a. het correct detecteren van collisions niet meer verzekerd worden. Daar komt nog bij dat er tussen 2 gebouwen reeds een glasvezelkabel gelegd was, en deze dus maar beter kon gebruikt worden. Het probleem met glasvezel technologie is echter de kost van de netwerkapparatuur. In de volgende paragrafen 13
Hoofdstuk 2. Aanleg netwerk
14
overloop ik de mogelijke alternatieven. Een algemene opmerking hierbij is dat ik omwille van de betere toekomstperspectieven geopteerd heb voor een gigabit backbone. Bij al deze oplossingen speelde het specifieke productengamma van enkele belangrijke merken een grote rol, evenals de beschikbaarheid, levertermijn en prijs.
2.2.1
Glasvezel rootswitch
Voortaan gebruiken we de term rootswitch voor een switch die centraal staat in het netwerk. Het is als het ware de ‘wortel’ van de boomstructuur van ons netwerk. Hier gebruiken we een rootswitch voor glasvezel, bestaande uit 6 glasvezel poorten. De switchen op het volgende niveau worden dan via een glasvezel uplink met deze rootswitch verbonden, alsook de servers. Nadelen: • Zeer dure rootswitch • Servers vereisen glasvezelverbindingen (glasvezel-netwerkkaart + korte glasvezelkabel) naar rootswitch
2.2.2
Gemengde rootswitch
We zouden als rootswitch een gewone twisted pair ethernet switch kunnen nemen, die voorzien is van 2 uitbreidingssloten voor GBIC 1 modules. We zouden dan 2 SX GBIC modules kunnen plaatsen in deze rootswitch voor de verbinding met de villa en de school . De servers krijgen dan een gewone twisted pair gigabit verbinding naar deze rootswitch. Nadelen: • Er zijn maar 2 uitbreidingssloten beschikbaar zodat maar maximaal 2 verafgelegen gebouwen aan te sluiten zijn
2.2.3
Geen rootswitch
We zouden in elk gebouw een 10/100Mbit switch kunnen plaatsen met 2 SX GBIC modules per switch. Zo kunnen we een soort gigabit ringstructuur cre¨eren door in de cirkel elke switch met zijn 2 buren te verbinden. We kunnen de ring eventueel openlaten om routing loops te vermijden (wat eigenlijk op een lineaire structuur neerkomt), of we kunnen de switchen configureren zodat ze gebruik maken van het Spanning Tree Protocol (STP ). Het STP vermijdt routing loops en houdt een eventuele redundante verbinding ter beschikking voor als de primaire verbinding zou uitvallen. Nadelen: 1
Gigabit Integrated Circuit
Hoofdstuk 2. Aanleg netwerk
15
• Op deze manier wordt er 1 gigabit verbinding gedeeld door meerdere communicerende gebouwenparen • De servers zelf kunnen niet via een gigabit verbinding aangesloten worden op het netwerk (tenzij ze, aangezien we maar 2 servers hebben, verplaatst zouden worden naar de cirkel onderbreking) • Onderbrekingen in de ring zijn nefaster voor het netwerk
2.2.4
Softwarematig switchen via pc
Deze oplossing voorziet een pc van een paar gigabit glasvezel netwerkkaarten. Op deze manier verkrijgen we een zelfgebouwde gigabit glasvezelswitch. Nadelen: • Glasvezel netwerkkaarten vereisen een PCI-X bus (64 bit/133 MHz) die enkel op moederborden uit een duurdere klasse te vinden is • Deze PCI bus heeft een maximale doorvoersnelheid van 1017MB/s (±8 Gbps2 ). Dit betekent dat de som van alle datastromen die via onze server passeren niet groter kan zijn dan 8Gbps. Bij een hardwareswitch wordt deze interne doorvoersnelheid de backplane genoemd. Bij een gigabit switch is deze backplane veel hoger dan 8Gbps, bijvoorbeeld 24Gbps bij de AT-9410GB.
2.2.5
Uiteindelijke oplossing: gebruik maken van converters
De beste oplossing qua prijs/kwaliteitsverhouding bleek bekomen te worden via het gebruik van Gigabit Ethernet media converters. Deze maken het mogelijk over te gaan van een twisted pair gigabit ethernet kabel naar een gigabit glasvezel kabel. Zo kunnen we de laagst gelegen switchen voorzien van een SX GBIC module voor het aansluiten van een gigabit glasvezel uplink. Aan de andere zijde van elke glasvezelkabel plaatsen we zo’n media converter . Deze converters kunnen dan via UTP bekabeling met een gewone gigabit ethernet switch verbonden worden.
2.3
Opbouw netwerk
Een overzicht van merk/type van alle netwerkapparatuur kan je vinden in tabel 2.1.
2.3.1
Logische opbouw
Een schema van deze opbouw is te zien in figuur 2.1. Ik heb gekozen voor de oplossing met 2
Gigabit per seconde
Hoofdstuk 2. Aanleg netwerk
16
Naam
Locatie
Type
rootswitch kindswitch 1 kindswitch 2 mediaconvertor 1 mediaconvertor 2 GBIC 1 GBIC 2 gateway server printserver kopieerapparaat ADSL-modem
Kasteel Villa School Kasteel Kasteel Villa School Kasteel Kasteel Kasteel Kasteel Kasteel
AT-9410GB AT-8326GB AT-8326GB AT-MC1004 AT-MC1004 AT-G8SX AT-G8SX Desktop pc op Linux Server op Win2000 Server D-Link DP-301U Thomson Speedtouch 510
Tabel 2.1: Overzicht netwerkapparatuur
de converters 3 zoals vermeld in 2.2.5. Alle switchen en converters zijn van het merk Allied Telesyn. Er werd gekozen voor manageable switchen, o.a. omwille van hun extra beveiligingsmogelijkheden. Als rootswitch koos ik voor de AT-9410GB4 switch, met 10 10/100/1000T poorten, 2 GBIC slots en een 24Gbps backplane. Hierop wordt de gateway, de server , de printserver , het kopieerapparaat, mediaconvertor 1 en mediaconvertor 2 aangesloten. mediaconvertor 1 leidt naar kindswitch 1 en mediaconvertor 2 naar kindswitch 2 . kindswitch 1 en kindswitch 2 , beiden van het type AT8326GB5 , zijn elk voorzien van 24 10/100Mbit poorten, een 12.8Gbps backplane en 2 GBIC slots 6 . kindswitch 1 wordt uitgebreid met GBIC 1 en kindswitch 2 met GBIC 2 zodat op beiden een glasvezelkabel kan aangesloten worden. De clients in de villa worden op de kindswitch 1 gestoken, de clients in het kasteel voorlopig rechtstreeks op de rootswitch. De reden waarom er voor 2 glasvezelverbindingen geen GBIC modules in de rootswitch werden geplaatst, maar gigabit media converters werden gebruikt, is omdat de rootswitch op deze manier vrij te plaatsen is in het gebouw (twisted pair kabel is zeer eenvoudig te leggen). De clients in de school zijn untrusted , dit wil zeggen dat ze eventueel zouden kunnen gebruikt worden om de informatica infrastructuur te hacken. De clients in de villa kunnen zowel trusted als untrusted zijn. Die van het kasteel zijn trusted . Om te voorkomen dat de untrusted clients de trusted clients in de war brengen, worden ze in een aparte VLAN geplaatst (voor meer info zie 2.4). 3
http://www.alliedtelesyn.nl/product/MC1004 http://www.alliedtelesyn.nl/product/9410GB 5 http://www.alliedtelesyn.nl/product/8326gb 6 http://www.alliedtelesyn.nl/product/G8 4
Hoofdstuk 2. Aanleg netwerk
17
Figuur 2.1: Logische opbouw
2.3.2
Fysische opbouw
In de netwerkkamer in het kasteel bevinden zich de rootswitch, een gigabit media converter voor elk verbonden gebouw, een ADSL verbinding, een ethernet ADSL modem, de reeds aanwezige database server (voor administratie) en de nieuwe Linux server. Normaal zouden we hier een extra switch plaatsen waarop de clients worden aangesloten, maar omdat er nog genoeg aansluitmogelijkheden zijn op de rootswitch, en deze auto-sense poorten heeft, kunnen we de clients rechtstreeks op de gigabit switch aansluiten. In de 2 gewone bureau’s, het bureau van de directeur en het secretariaat bevinden zich client pc’s. In het printlokaal bevinden zich de printserver en het kopieerapparaat, die beiden voorzien zijn van een netwerkverbinding. Een grondplannetje is te zien in figuur 2.2. In de villa worden alle werkposten via UTP kabel verbonden met kindswitch 1 , die zich in het bureau bevindt waar de glasvezelkabel aankomt. De school zal eerst verbouwd worden, en wordt voorlopig nog niet aangesloten. Een overzicht van de IP-adressering zie je in tabel 2.2.
Hoofdstuk 2. Aanleg netwerk
18
Figuur 2.2: Grondplan kasteel
2.4
Beveiliging
We gaan ons indekken tegen 3 manieren die kunnen aangewend worden om de veiligheid van het netwerk in het gedrang te brengen.
2.4.1
MAC-Address Spoofing
De eerste methode die kwaadwillige personen kunnen gebruiken is het ingebakken MAC-adres van de netwerkkaart negeren, en een vals adres gebruiken in de verzonden frames. Op deze manier gaat de switch het zelf ingestelde MAC-adres in zijn dynamische MAC-adres tabel aan deze poort koppelen. Toekomstige frames vanuit het netwerk, met dit MAC-adres als doel, zouden dan zo bij de hacker kunnen terechtkomen. Dit kan misbruikt worden door als vals MAC-adres het adres van een server te nemen, en te doen alsof hij de server zelf is door bijvoorbeeld dezelfde services aan te bieden. Zo kunnen dan vertrouwelijke gegevens zoals wachtwoorden bemachtigd worden. We kunnen dit voorkomen door op elke poort van de switch maar een paar, expliciet ingestelde MAC adressen toe te laten. Dit doen we via de statische MAC-adres tabel, en door de poort op Secure in te stellen (zie 2.5.2).
Hoofdstuk 2. Aanleg netwerk
19
Object
IP-adres
server printserver kopieerapparaat gateway rootswitch kindswitch 1 Trusted clients Untrusted clients gateway
192.168.123.1 192.168.123.2 192.168.123.81 192.168.123.254 192.168.123.200 192.168.123.201 192.168.123.100 - 192.168.123.199 192.168.2.100 - 192.168.2.199 192.168.2.254
Tabel 2.2: IP-adresseringsschema
2.4.2
ARP Spoofing
Men kan ook valse ARP broadcasts op het netwerk sturen, waarin staat dat de hacker zijn echt MAC-adres nu associeert aan een ander IP-adres dan zijn voorzien adres, bijvoorbeeld aan het IP-adres van de server. Zo sturen clients dan informatie bedoeld voor de server, naar het verkeerde MAC-adres. We zouden dit kunnen voorkomen door op elke client een statische ARP tabel in te stellen, waarin het IP van de server gelinkt wordt met zijn echte MAC-adres. Dit vraagt natuurlijk heel wat extra werk aan configuratie. Ik heb gekozen om de betrouwbare hosts volledig te scheiden van de onbetrouwbare door middel van VLAN’s. Op deze manier kunnen de onbetrouwbare hosts onderling elkaar wel het leven zuur maken, maar krijgen ze in geen geval vertrouwelijke gegevens afkomstig van betrouwbare hosts toegestuurd. Een probleem dat we wel moeten oplossen is, dat Internet toegang voor zowel onbetrouwbare als betrouwbare hosts beschikbaar moet zijn. Ofwel plaatsen we 2 netwerkkaartjes in de server, voor elke VLAN ´e´en. Ofwel maken we gebruik van een ‘tagged port’ die tot meerdere VLAN’s tegelijkertijd kan horen (zie 2.5.3).
2.4.3
IP Spoofing
Een laatste methode, die in feite meestal in combinatie met ARP Spoofing wordt gebruikt7 , is het vervalsen van het bron IP-adres in de IP header , zodat pakketjes ogenschijnlijk van een andere host afkomstig zijn. Zo kan bepaalde informatie worden geaccepteerd, die normaal enkel toegelaten wordt van bepaalde vertrouwelijke IP-adressen. We kunnen dit oplossen door, bijvoorbeeld in firewall rules), eerder het MAC-adres te gebruiken dan het IP-adres, of door pakketten van adressen die niet kunnen komen uit een bepaalde VLAN te verwerpen. 7
misbruikt
Hoofdstuk 2. Aanleg netwerk
2.5 2.5.1
20
Configuratie van netwerkmateriaal Firmware upgrade
Eerst en vooral upgraden we de firmware van de switchen. Daarbij moeten we eerst de bootloader downloaden in de switch, en daarna de image file. De bootloader kunnen we enkel downloaden door zelf een TFTP server op te zetten. Hiervoor kunnen we bijvoorbeeld gebruik maken van de AT-TFTP server die we gratis kunnen downloaden8 . Deze server voeren we vervolgens uit op een willekeurige pc, met een gewone UTP-kabel verbonden met een van de poorten van de switch. We zorgen ervoor dat deze server de meest recente bootloader (bijvoorbeeld boot.rom) ter beschikking stelt. Vervolgens geven we de switch een ip-adres in dezelfde range als dat van onze server. We verbinden hiervoor een pc via de seri¨ele COM-poort met de switch. Daarna connecteren we op de switch via Terminal Emulation software, zoals bijvoorbeeld de HyperTerminal van Microsoft, die standaard in Windows XP te vinden is. We hebben nu een zogenaamde local management session gestart. Na inloggen kunnen we dan via de menustructuur (figuur 2.3) een gepast IP-adres geven.
Figuur 2.3: Local Management Session
Via datzelfde menu kunnen we de switch ook de opdracht geven om zijn nieuwe bootloader te downloaden. Hiervoor geven we het ip-adres op van de TFTP server, plus de naam van het 8
http://www.alliedtelesyn.co.nz/support/rapier/download.html
Hoofdstuk 2. Aanleg netwerk
21
bestand (‘boot.rom’ in ons voorbeeld). Op een gelijkaardige manier kunnen we ook de image file op de switch downloaden. We kunnen dit echter evengoed doen via Xmodem. Op deze manier werd de software van de AT-8326GB naar versie 1.1.4 geupgraded, en die van de AT-9410GB naar versie 1.0.5 [2, 3].
2.5.2
Poort configuratie
In tabel 2.3 vind je een overzicht van de instellingen voor de rootswitch, in tabel 2.4 voor kindswitch 1 . We zorgen ervoor dat op elke poort enkel het MAC-adres van het verbonden Poort 1 2 3 4 5 6 7 8 9 10
Verbinding naar
Tagged op VID
Untagged op VID
Secure Level
server gateway printserver kopieerapparaat Client 1 Client 2 Client 3 Client 4 Client 5 kindswitch 1
123, 2 123, 2
123 1 123 123 123 123 123 123 123 1
S S S S S S S S S N
Tabel 2.3: Poortconfiguraties rootswitch
Poort 1 2 3 4 5 6 23 25
Verbinding naar
Tagged op VID
Untagged op VID
Secure Level
Client 1 Client 2 Client 3 Client 4 Client 5 Client 6 Bjorn rootswitch
123, 2
123 123 123 123 123 123 2 1
S S S S S S S N
Tabel 2.4: Poortconfiguraties kindswitch 1
apparaat toegelaten wordt. Hiervoor zetten we het Secure Level van alle poorten op beide switchen op Secure. Daardoor zal de switch geen nieuwe dynamische MAC-adressen bijleren,
Hoofdstuk 2. Aanleg netwerk
22
en enkel de huidige gebruiken (met een oneindige levensduur indien de switch nooit wordt herstart). We doen dit vooraleer de apparaten verbonden worden met de switch, zodat de eventuele verzameling dynamische adressen leeg is. Nu kunnen we in de statische MAC-tabel van elke poort het juiste MAC-adres toevoegen. Let op: bij toevoegen van een entry in de statische MAC-tabel moeten we naast de poort en het MAC-adres ook een VID opgeven (zie hiervoor 2.5.3)! Wanneer een bepaalde poort deel uitmaakt van meerdere VLAN’s (zoals die van gateway) moeten we per poort een entry toevoegen voor elke VLAN waarop we de poort willen gebruiken. De enige poorten die niet op Secure worden gezet zijn de poorten die verbonden zijn met een andere switch, omdat we die andere switch vertrouwen, en er anders voor die poort een hele lijst MAC-adressen zouden moeten worden opgegeven. Alle niet gebruikte poorten worden expliciet uitgeschakeld.
2.5.3
VLAN’s
Een VLAN is een groep van poorten die zich op verschillende switchen kunnen bevinden. Verschillende VLAN’s kunnen naast elkaar bestaan op dezelfde switch. Ze vormen aparte segmenten, en hosts van het ene VLAN kunnen geen rechtstreekse informatie sturen naar hosts van een ander VLAN. Enkele voordelen: • Het broadcast domein is beperkt tot ´e´en enkele VLAN, wat de netwerkbelasting in grote netwerken enorm kan verlagen • Wanneer bepaalde hosts van segment veranderen, kan men rekening houden met deze wijziging door enkel de switch (eventueel vanop afstand) te herconfigureren. Er zijn geen manuele interventies (zoals het versteken van kabels) meer nodig in de netwerkruimte. • Door het feit dat VLAN ’s onderling geen informatie kunnen uitwisselen, kunnen we op deze manier onbetrouwbare hosts scheiden van betrouwbare. Het is vooral omwille van dit laatste voordeel dat we VLAN ’s gaan implementeren. We maken gebruik van de 802.1Q VLAN mode, omdat deze ons, ook bij gebruik van meerdere switchen, kan verzekeren dat op geen enkel moment pakketten bedoeld voor het ene VLAN op een ander VLAN terecht kunnen komen. We maken 2 VLAN’s genaamd trusted en untrusted met als VLAN identifier (VID) respectievelijk 123 en 2. Wanneer bijvoorbeeld een frame bedoeld is voor VLAN trusted , dan zal het frame gedurende zijn hele reis doorheen opeenvolgende switchen een VID gelijk aan 123 dragen. De switchconfiguratie voor VLAN’s wordt in de handleiding van Allied Telesyn ([8]) nogal onduidelijk uit de doeken gedaan. De configuratie is op zich dan ook een beetje verwarrend. Dankzij uitgebreid testen van verschillende situaties werd alles echter duidelijker.
Hoofdstuk 2. Aanleg netwerk
23
Elke poort kan zich voor elke VLAN waarvan hij deel uitmaakt op 2 manieren gedragen. Ofwel gedraagt hij zich op een bepaald VLAN als een Tagged Port, ofwel als een Untagged Port. Elke poort gedraagt zich voor exact 1 VLAN als Untagged Port, en voor een willekeurig aantal andere VLAN’s als Tagged Port. De VLAN waarop een poort zich gedraagt als Untagged Port kunnen we instellen door zijn VID in te stellen als Port VID (PVID) voor die poort. Een poort als Tagged Port laten deel uitmaken van een VLAN doen we door deze poort toe te voegen aan de VLAN in kwestie. Wat de termen Tagged Port en Untagged Port juist inhouden wordt uitgelegd aan de hand van twee voorbeelden. Een frame komt de switch binnen Is de binnenkomende frame niet voorzien van een VLAN-tag, dan vult de switch deze VLAN-tag automatisch op met de PVID van de poort. Is de binnenkomende frame WEL voorzien van een VLAN-tag, en de tag bevat een VID van ´e´en van de VLAN ’s waarvan de poort deel uitmaakt, dan wordt de frame ongewijzigd binnengelaten. Op deze manier is ELK frame dat zich binnen een switch bevindt steeds voorzien van een VLAN-tag. Een frame wil de switch uit De MAC-tabel wordt doorzocht om de juiste uitgaande poort te vinden. Indien het hardware adres nog niet te vinden is in deze MAC-tabel, dan wordt de frame naar alle poorten gebroadcast. Een frame zal enkel een poort uittreden indien het een VLAN-tag bevat van ´e´en van de VLAN’s waarvan de poort deel uitmaakt. Is de poort een Untagged Port op dit VLAN, dan wordt de tag eerst verwijderd uit het frame. Is de poort een Tagged Port op dit VLAN dan wordt het frame niet gewijzigd. De poorten waarop zich onbetrouwbare clients bevinden, stellen we in als Untagged Port van VLAN 2. De poorten waarop zich betrouwbare clients bevinden, evenals die van de server , de printserver en het kopieerapparaat, stellen we in als Untagged Port van VLAN 123. Bepaalde poorten maken deel uit van beide VLAN’s, en worden ingesteld als Tagged Ports van VLAN 123 en VLAN 2. Voorbeelden van zulke poorten zijn de poort die naar een andere switch leidt en de poort waarop de gateway is geplaatst. Willen de devices op zulke poort ook effectief kunnen communiceren met beide VLAN’s, dan moeten ze de 802.1Q standaard volgen, en van beide VLAN’s op de hoogte zijn. Omdat elke poort op exact 1 VLAN moet ingesteld zijn als Untagged Port (dit VLAN doet dan dienst als een soort default VLAN) stellen we deze poorten in als een Untagged Ports van VLAN 1.
Hoofdstuk 2. Aanleg netwerk
24
Onbetrouwbare clients kunnen op deze manier enkel het netwerk op als lid van VLAN 2. Onze gateway kan op deze manier, door zijn VLAN-tag in te stellen, ´e´en van beide VLAN’s kiezen [8].
Hoofdstuk 3
Gateway installatie en configuratie 3.1
Keuze hardware en software
In principe zouden we een DMZ 1 moeten opzetten, waarin zich de mailserver en webserver bevinden. Tussen deze DMZ en het Internet, evenals tussen deze DMZ en het lokale netwerk, zou dan een firewall moeten worden geplaatst. Bij voorkeur is dit dan een hardware-firewall omwille van de snelheid en veiligheid. Een hardware-firewall is ook zeer eenvoudig vanop afstand te updaten, zodat eventuele veiligheidslekken in de firewall-software2 eenvoudig kunnen worden gedicht. Wegens het beperkte budget echter, kon geen echte DMZ worden opgezet, en kon ook geen gebruik worden gemaakt van hardware-firewalls en extra servers. Ik heb gekozen om de mailen webserver op het lokale netwerk te plaatsen (de Windows server die daar reeds aanwezig was), en om tussen dit lokale netwerk en het Internet een gateway te plaatsen. Deze gateway kan dan voorzien worden van een software-firewall.
3.1.1
Keuze hardware
De gateway is verbonden met het Internet, met het trusted netwerkgedeelte, en met het untrusted netwerkgedeelte. Hij verzorgt de routing tussen deze netwerken, alsook firewall functies. Aangezien dit geen rekenintensieve bewerkingen zijn volstaat een oudere pc, namelijk een Pentium III 450MHz , die reeds ter beschikking was. Hij werd voorzien van een extra gigabit netwerkkaart, zodat hij de gigabit poort op de rootswitch ten volle kan benutten.
3.1.2
Keuze software
Er is nood aan een besturingssysteem dat goed te beveiligen valt, zeer stabiel is, vlot draait op een oudere pc, en voor een zo laag mogelijke kostprijs zeer professionele functies uitvoert. 1 2
Demilitarized Zone Ook een hardware-firewall bevat software
25
Hoofdstuk 3. Gateway installatie en configuratie
26
Hiervoor is Linux zeer geschikt. Het voldoet aan al deze vereisten en is bovendien volledig gratis. Nu komt het er op aan om de juiste distributie uit te kiezen. Uit ervaring weet ik dat Debian GNU/Linux 3 een zeer goede distributie is voor de vereiste functionaliteit. Volgende eigenschappen spelen daar een grote rol in: • Debian is volledig gebaseerd op niet-commerci¨ele software, tenzij er tijdens de installatie gekozen wordt om ook commerci¨ele pakketten beschikbaar te maken • De meeste van de standaard tools komen van het GNU project 4 , met als voornaamste sponsor de Free Software Foundation (FSF ). Hierdoor is deze distributie zeer geliefd in de Open Source gemeenschap. Daardoor werken er veel vrijwilligers aan mee, staat alles los van commerci¨ele belangen, en is er veel en gratis documentatie voor te vinden. Er werken bijvoorbeeld meer dan 900 vrijwilligers mee aan het onderhoud van de pakketten voor dit OS. • De standaard versie, Woody genaamd, is bedoeld voor productieomgevingen. Hierbij staat stabiliteit en veiligheid centraal. Een gevolg hiervan is dat er dikwijls met iets oudere pakketten wordt gewerkt, omdat die hun degelijkheid reeds bewezen hebben in het verleden. Er wordt ook moeite gedaan om fouten te halen uit deze oudere versies, in plaats van steeds beroep te doen op de nieuwste offici¨ele releases van softwarepakketten (die naast bug-fixes ook nieuwe functionaliteit leveren, en bijgevolg ook nieuwe fouten introduceren). • De standaard installatie is zeer minimaal: er wordt enkel het hoogst nodige ge¨ınstalleerd5 . Zo heeft men een goed overzicht van welke services er standaard draaien, namelijk bijna geen enkele. Dit is zeer interessant voor de beveiliging van het systeem, waar een grondige kennis van het gehele systeem een vereiste is. Hoe minder functionaliteit er standaard aanwezig is, hoe eenvoudiger het is om deze grondige kennis te verkrijgen. • Het OS is voorzien van een zeer goed pakketbeheersysteem (Package management system). Dit systeem maakt het mogelijk om zowel binaire pakketten als broncode pakketten eenvoudig te installeren, en om deze pakketten in de toekomst eenvoudig te kunnen updaten, en dit zonder verlies van configuratiebestanden. Uiteindelijk koos ik voor de distributie Adamantix 6 , die is gebaseerd op Debian GNU/Linux . Deze distributie spitst zich nog eens extra toe op beveiliging. Ze probeert een hoog beveiligingsniveau te behalen (het Common Criteria LSPP AEL 5 niveau of hoger), maar dit 3
http://www.debian.org/ http://www.gnu.org/ 5 De minimale installatie neemt slechts ongeveer 40MB schijfruimte in beslag! 6 http://www.adamantix.org 4
Hoofdstuk 3. Gateway installatie en configuratie
27
op een gebruiksvriendelijke manier. Zo werden bijvoorbeeld alle pakketten gecompileerd met een aangepaste compiler waardoor de software beter beveiligd wordt tegen buffer overflow aanvallen.
3.2
Beveiliging
Geen enkel systeem is 100% waterdicht. Hiervan zijn verschillende oorzaken. Enerzijds ontstaan er beveiligingslekken door programmeerfouten in de software. Ongeveer 50% van deze lekken zijn te wijten aan wat men noemt buffer overflows. Aangezien hedendaagse software zo complex en uitgebreid is, en uit duizenden regels code bestaat, is het bijna onmogelijk om deze foutvrij te maken. De tijd nodig om een fout te ontdekken is omgekeerd evenredig met het percentage resterende fouten. Anderzijds is er de configuratie van software en hardware. We moeten, onder andere via het toekennen van toegangsrechten, exact defini¨eren wie welke permissies heeft. Eveneens moeten we ervoor zorgen dat niemand zich ongeoorloofd toegang kan verschaffen tot bepaalde gegevens, bijvoorbeeld door netwerkconnecties af te luisteren. Terwijl programmeerfouten te wijten zijn aan de programmeurs van de betreffende software, zijn fouten in de configuratie het gevolg van onvoldoende kennis, of nalatigheid van de systeembeheerder. Toch kunnen we ons, als niet-programmeur, zo goed mogelijk beschermen tegen die mogelijke programmeerfouten.
3.2.1
Probleem met Open Source software
Bij Open Source software is de broncode vrij te downloaden, te bekijken, aan te passen en te verspreiden. Dit heeft zowel voordelen als nadelen. Enerzijds is het voor hackers veel eenvoudiger om veiligheidsgaten op te sporen, aangezien ze rechtstreeks kunnen zoeken in de originele code. Veiligheidsgaten worden dus veel sneller gevonden. Dit heeft natuurlijk ook een positieve kant: de gaten kunnen zo veel sneller worden gedicht. Uiteindelijk zal Open Source software vaak dus minder fouten bevatten dan andere software. Er is ook een grotere openheid rond veiligheidsgaten, een commerci¨ele firma zal eerder geneigd zijn deze te verzwijgen, zodat er sneller patches worden beschikbaar gesteld.
3.2.2
Lokale aanvallen versus netwerk aanvallen
Er zijn twee categorie¨en van aanvallen: lokale aanvallen en netwerk aanvallen. Lokale aanvallen kunnen plaatsvinden wanneer de hacker een lokale gebruikersaccount heeft. Met deze account kan hij met andere woorden aanmelden op de Linux machine, en een gebruikers-shell verkrijgen. Zo kan hij bestanden lezen, processen manipuleren en programma’s uitvoeren, indien hij beschikt over de gepaste rechten. Heeft hij deze lokale account echter niet, dan moet
Hoofdstuk 3. Gateway installatie en configuratie
28
de hacker zich in eerste instantie beperken tot toepassingen die netwerkverbindingen accepteren. Dit verlaagt het aantal inbraakmogelijkheden drastisch. Het gevaar bestaat er echter wel in dat, via het uitbuiten van een beveiligingslek in een netwerktoepassing, toch een lokale shell kan opgestart worden. Deze shell wordt dan uitgevoerd met hetzelfde gebruikersaccount als datgene waarmee de betreffende netwerktoepassing werd uitgevoerd. Een van de problemen met Linux is dat het gebruikersaccount waarmee een toepassing wordt opgestart dikwijls het root account is. Dit komt omdat bepaalde taken, zoals bijvoorbeeld het binden van een netwerktoepassing op een lagere tcp-poort, de rechten van het rootaccount vereisen. De oplossing voor dit probleem is gebruik maken van een systeem als RSBAC . Dit systeem maakt het mogelijk om voor elk programma precies te defini¨eren welke rechten er nodig zijn, en dit zijn er niet meer dan nodig. Zelfs het root-account heeft zeer weinig rechten. Aanpassingen in de configuratie kunnen enkel worden verwezenlijkt door het systeem te herstarten, en via een speciale RSBAC-soft kernel te booten. Wegens tijdsgebrek werd RSBAC niet ge¨ımplementeerd.
3.2.3
Draaiende hoeveelheid code beperken
Een eerste maatregel die we kunnen treffen is de hoeveelheid draaiende code beperken. Hoe groter de hoeveelheid code, hoe groter de kans op programmeerfouten. Het verlagen van de hoeveelheid draaiende code kan enerzijds worden verwezenlijkt door het beperkten van het aantal opgestarte services tot de hoogst nodige. Anderzijds kunnen we ook de Linux kernel zo klein mogelijk houden. Dit kan door de kernel te hercompileren, en dit met zo weinig mogelijk functionaliteit. Voor meer informatie zie paragraaf 3.4.2.
3.2.4
Inbraak zo snel mogelijk ontdekken en melden
Een laatste onderdeel in de beveiliging is intrusion detection. Hierbij gaat het over de detectie van een inbraak, niet over het voorkomen ervan. Dit is een niet te verwaarlozen onderdeel van de beveiliging. Aangezien geen enkel systeem 100% waterdicht is, moeten we er op zijn minst voor zorgen dat, wanneer er dan toch wordt ingebroken, we er tenminste van op de hoogte worden gebracht zodat we meteen kunnen ingrijpen. Men kan bijvoorbeeld na installatie van het systeem, waarop op dat moment nog niet is ingebroken, hashwaardes berekenen van alle belangrijke programmabestanden. We slaan deze hashwaardes op een veilige plaats op. Wanneer we nu achteraf op geregelde tijdstippen deze hashwaardes herberekenen, en vergelijken met de originele, kunnen we de integriteit ervan verifi¨eren. Een andere taak is het controleren van de logbestanden. Er bestaan programma’s om deze logbestanden periodiek te onderzoeken op verdachte meldingen. Eens er problemen zijn vastgesteld ondernemen deze tools een gepaste actie, zoals het verzenden van een e-mail naar de beheerder.
Hoofdstuk 3. Gateway installatie en configuratie
3.3
29
Installatie van het OS
Zoals reeds eerder vermeld installeren we de Linux-distributie Adamantix . Deze is echter volledig gebaseerd op Debian. De installatieprocedure bestaat uit het installeren van een minimale Debian-distributie, en het vervolgens upgraden van dat systeem naar de Adamantixdistributie.
3.3.1
Installatie CD-ROM
Eerst en vooral moet de image van de eerste installatie CD-ROM worden gedownload. Dit kan bijvoorbeeld van de ftp-server van Belnet 7 . Het bestand dat daar moet gedownload worden heet debian-30r2-i386-binary-1_NONUS.iso. Dit image bestand moet vervolgens op een CD-ROM worden gebrand. Tenslotte moet de opstartvolgorde op de te installeren pc zo worden ingesteld, dat de pc eerst zal proberen op te starten via de CD-ROM drive. Dit gebeurt via het BIOS . Na installatie moeten we deze opstartvolgorde opnieuw wijzigen zodat er enkel van de hardeschijf wordt opgestart. We kiezen ook een BIOS-wachtwoord, zodat niemand deze opstartvolgorde terug zou kunnen wijzigen om bijvoorbeeld van een diskette of CD-ROM op te starten. Indien dat zou gebeuren wordt het aanwezige Linux systeem namelijk volledig genegeerd, en heeft die persoon alle rechten.
3.3.2
Installatieprocedure voor het basis Debian systeem
De installatieprocedure wijst zichzelf uit. Daarom wordt er enkel gewezen op zaken die afwijken van de standaard instellingen. Wanneer ons gevraagd wordt naar de partitionering van de schijf (dit is er een van 80GB), dan doen we dit volgens tabel 3.1. We kiezen voor elke partitie, met uitzondering van een paar kleine, voor het bestandssysteem EXT3 . Dit bestandsysteem is gebaseerd op EXT2 , uitgebreid met journaling. Journaling maakt het veel eenvoudiger om een bestandsysteem te herstellen na een crash. Voor de keuze van het partitioneringsschema werd rekening gehouden met volgende factoren: • Elke directorystructuur waarop een gebruiker schrijfrechten heeft, zoals /home of /tmp, wordt best op een aparte partitie geplaatst. Dit verlaagt de kans op een DoS 8 aanval waarbij het ‘/’-koppelpunt volledig wordt opgevuld, wat kan resulteren in een onbruikbaar systeem. • Elke directorystructuur waarin de benodigde plaats vari¨eert, bijvoorbeeld /var, moet ook op een aparte partitie. Bij Debian is deze best wat groter omdat gedownloade pakketten (de apt cache) in /var/cache/apt/archives worden bewaard. 7 8
ftp://ftp.belnet.be/mirror/ftp.debian.org/debian-cd/images/3.0_r2/i386/ Denial of Service
Hoofdstuk 3. Gateway installatie en configuratie
30
Partitie
Koppelpunt
Grootte (MB)
Bestandssysteem
hda1 hda2 hda5 hda6 hda7 hda8 hda9 hda10 hda11 hda12
/boot (swap) / /usr /home /tmp /var /var/mail /usr/local /data
20 512 2000 4000 3000 256 2500 1000 1000 62000
EXT2 (swap) EXT3 EXT3 EXT3 EXT2 EXT3 EXT3 EXT3 EXT3
Tabel 3.1: Overzicht partities
• Elke directorystructuur waarop we distributie onafhankelijke software wensen te installeren, wordt ook best op een aparte partitie geplaatst, bijvoorbeeld /usr/local. Deze aparte partities zullen namelijk niet worden verwijderd als Debian opnieuw zou moeten ge¨ınstalleerd worden. • Het heeft ook zin om alle statische data op een eigen partitie te zetten, en deze als read-only te koppelen. Nog beter zou zijn om ze op een medium te plaatsen waarvan het technisch uitsluitend mogelijk is te lezen (zoals een CD-R schijfje). Tijdens het vervolg van de installatieprocedure kiezen we voor MD5 passwords en Shadow passwords. We gebruiken geen tasksel of dselect, maar installeren pakketten achteraf handmatig via apt-get install pakketnaam. Anders zouden er te veel ongewenste pakketten worden ge¨ınstalleerd. Er wordt ons ook om de mail instelling van Exim gevraagd, de standaard MTA 9 van Debian. Daarbij geven we volgende zaken op: • Satellite system (er wordt geen post lokaal bezorgd, maar alles wordt doorgestuurd naar een andere mailserver) • Computer system’s name: gateway.capelderij.local • domainname: capelderij.be • smarthost: mail.capelderij.local (de mailserver waarnaar alle post wordt doorgestuurd) 9
Mail Transport Agent
Hoofdstuk 3. Gateway installatie en configuratie
31
• administrator mail: davy (alle mail bedoeld voor de beheerder wordt naar gebruiker davy gestuurd) Achteraf kunnen we deze configuratie procedure eventueel opnieuw doorlopen via eximconfig. Tenslotte kiezen we een goed wachtwoord voor de root-account.
3.3.3
Upgrade naar Adamantix
Voordat we ook maar ´e´en extra pakket hebben ge¨ınstalleerd passen we het bestand /etc/apt/sources.list aan. Hierin worden de bronnen vermeld waarvan het package management system zijn pakketten download. De inhoud van dit bestand moeten we vervangen door: deb ftp://ftp.szczepanek.de/adamantix/ stable main contrib deb http://security.adamantix.org/ stable-security main contrib
Daarna voeren we de volgende commando’s uit: apt-get update apt-get install libncurses5 apt-get dist-upgrade
3.4 3.4.1
Configuratie en beveiliging van het OS Installatie van extra pakketten
We installeren volgende extra pakketten: • emacs21 (onze favoriete editor) • ssh (om vanop afstand een shell te verkrijgen over een SSL verbinding) • make, gcc (gcc-2.95), cpp (cpp-2.95), libc6-dev en libncurses5-dev (voor het hercompileren van de kernel) • iproute (en atm-tools) • vlan (om de vlan devices aan te maken) • libpam-cracklib (en cracklib-runtime, cracklib2, file) • sudo • logcheck (logbestand analyse), en bijgevolg ook logcheck-database, perl, perl-modules, logtail • debsums (md5 file system integrety check), en bijgevolg ook libdigest-md5-perl Dit kan via de opdracht apt-get install pakketnaam.
Hoofdstuk 3. Gateway installatie en configuratie
3.4.2
32
Keuze van de Linux-kernel
De Linux-kernel De Linux-kernel is de kern van het besturingssysteem. Het is het gemeenschappelijke onderdeel van alle Linux distributies. Alle andere gebruikte programma’s, userland tools, kunnen vrij gekozen worden, maar de Linux-kernel is hetgene waar het besturingssysteem zijn naam aan te danken heeft. De standaard Linux kernel (in zijn zuivere vorm) is verkrijgbaar in broncode 10 . Zulke zuivere kernel wordt de mainstream kernel genoemd. Sommige distributies noemen hem soms ook de vanilla kernel . Deze wordt verder ontwikkeld door een team van kernel developers, waaronder Linus Torvalds. De meestgebruikte versie is momenteel 2.4.x, maar de eerste versies in de 2.6.x reeks zijn ondertussen ook al klaar. Patches Dikwijls zijn er voorzieningen en stuurprogramma’s nodig die in de kernel thuishoren (omdat ze bijvoorbeeld rechtstreeks toegang tot de hardware vereisen), maar er niet standaard zijn in opgenomen. Daarom kan je her en der kernel patches terugvinden. Een patch brengt de nodige wijzigingen/uitbreidingen aan aan de mainstream kernel sources. Om conflicten te vermijden is het best van uitsluitend patches toe te passen voor de juiste kernel-versie. Configuratie Na het patchen van de kernel kunnen we overgaan tot de configuratie ervan. Hierbij duiden we aan welke onderdelen er statisch in de kernel moeten worden gecompileerd, welke delen als module, en welke onderdelen helemaal niet. Een statisch gecompileerd onderdeel is altijd geladen wanneer de kernel draait. Een module kunnen we echter at runtime in of uit de draaiende kernel halen op het gewenste moment (zonder dat herstarten van het OS nodig is). We kunnen hierbij nog opmerken dat we de configuratie uiteindelijk kunnen opslaan in een bestand, dat we later bij andere kernel sources eventueel kunnen importeren. Het onderling exporteren en importeren van zulke bestanden is enkel mogelijk voor kernels uit dezelfde reeks (bijvoorbeeld alle kernels in de 2.4.x reeks). Compilatie Uiteindelijk kunnen we overgaan tot het compileren van de kernel. Na compilatie krijgen we een zogenaamde kernel image die alle statisch gecompileerde code bevat. Dit bestand kunnen we dan verplaatsen naar de /boot partitie en hem vervolgens opgeven aan de boot manager zodat hij kan geboot worden. We kunnen ook de modules compileren. Bij het draaien van 10
http://www.kernel.org
Hoofdstuk 3. Gateway installatie en configuratie
33
de nieuwe kernel image kunnen dan de gewenste modules geladen worden. Soms kan men op bepaalde sites voorgecompileerde modules vinden voor een bepaalde kernel versie (een soort beschikbaar gestelde driver). Pakketten De meeste Linux distributies bieden voorgecompileerde kernels aan (zowel de kernel image als de modules). Deze kunnen dan eenvoudig ge¨ınstalleerd worden via het package management system van de desbetreffende distributie. Welke opties er statisch zijn gecompileerd, welke als module, en welke helemaal niet, is natuurlijk op voorhand bepaald en kan niet gewijzigd worden. Daarom worden er standaard meestal voldoende onderdelen als modules meegeleverd, zodat de kans groot is dat de benodigde module beschikbaar is. Een bepaald kernel pakket is ook maar geldig voor ´e´en bepaalde architectuur (aangezien de kernel voorgecompileerd is). Zo kan het zijn dat er bijvoorbeeld enkel een i386 versie aangeboden wordt (voor Intel 386 processoren en recenter) zodat er geen nieuwe instructies of optimalisaties gebruikt worden van de recentste processoren. Als voorbeeld is in tabel 3.2 een opsomming gegeven van sommige kernel image pakketten in de distributie Adamantix. In dit overzicht zien we dat er pakketten bestaan voor verschillende Intel processoren. Per processor zijn er dan nog eens verschillen in de meegecompileerde opties. Daarnaast biedt Adamantix ook een pakket aan met de kernel-sources. Deze bronbestanden zijn reeds voorzien van een hele reeks interessante patches. Na het installeren van zo een pakket moeten we dus de kernel nog configureren, compileren en uiteindelijk installeren (zodat hij geboot wordt). Een voorbeeld van zo een pakket in Adamantix: kernel-source-2.4.22 - us: Linux kernel source for version 2.4.22 with Debian patches
Op de website van Adamantix staat duidelijk vermeld welke configuratie opties er moeten gewijzigd worden om de ‘normal’ kernel, de ‘sec’ kernel, of de ‘soft’ kernel te bekomen. Onze keuze We hebben verschillende patches nodig ten opzichte van de mainstream kernel , bijvoorbeeld voor VLAN ondersteuning, RSBAC, PaX,... Deze patches zijn allemaal aanwezig in de Adamantix kernelpakketten, maar bijvoorbeeld niet allemaal in de originele Debian pakketten. Vervolgens willen we een aantal onderdelen in de kernel hebben. In de standaard image pakketten van Adamantix zit bijvoorbeeld geen VLAN ondersteuning. Bovendien willen we, met het oog op veiligheid, zo weinig mogelijk code in de draaiende kernel. Want hoe meer programmacode er draait, hoe groter de kans op veiligheidslekken waarvan misbruik kan gemaakt worden. Ideaal is dus het eerder vermelde kernel-source pakket te installeren, vervolgens onze zelf gekozen configuratie te laden, en te compileren (met buffer overflow protectie, zie verder).
Hoofdstuk 3. Gateway installatie en configuratie kernel-image-2.4.22-1-386 - us kernel-image-2.4.22-1-386-sec - us kernel-image-2.4.22-1-386-soft - us kernel-image-2.4.22-1-386-switch - us kernel-image-2.4.22-1-586tsc - us kernel-image-2.4.22-1-586tsc-sec - us kernel-image-2.4.22-1-586tsc-soft - us kernel-image-2.4.22-1-586tsc-switch - us kernel-image-2.4.22-1-686 - us kernel-image-2.4.22-1-686-sec - us kernel-image-2.4.22-1-686-smp - us kernel-image-2.4.22-1-686-smp-sec - us kernel-image-2.4.22-1-686-smp-soft - us
Linux kernel image for version 2.4.22 Linux kernel image for version 2.4.22 Linux kernel image for version 2.4.22 Linux kernel image for version 2.4.22 Linux kernel image for version 2.4.22 Pentium-Classic. Linux kernel image for version 2.4.22 Pentium-Classic. Linux kernel image for version 2.4.22 Pentium-Classic. Linux kernel image for version 2.4.22 Pentium-Classic. Linux kernel image for version 2.4.22 PPro/Celeron/PII/PIII/PIV. Linux kernel image for version 2.4.22 PPro/Celeron/PII/PIII/PIV. Linux kernel image for version 2.4.22 PPro/Celeron/PII/PIII/PIV SMP. Linux kernel image for version 2.4.22 PPro/Celeron/PII/PIII/PIV SMP. Linux kernel image for version 2.4.22 PPro/Celeron/PII/PIII/PIV SMP.
34 on on on on on
386. 386. 386. 386.
on on on on on on on on
Tabel 3.2: Kernel image pakketten
Dit kan eventueel in een automatisch script worden geplaatst. Stel dat er een nieuwe kernel versie beschikbaar is, moeten we enkel het juiste source-pakket downloaden, onze configuratie opties laden en compileren. We moeten dus niet alle benodigde patches voor de nieuwe kernel versie gaan zoeken en downloaden, want dat valt niet te automatiseren en brengt dus veel extra werk mee. Werk dat nu wordt gedaan door de Adamantix ontwikkelaars.
3.4.3
Kernel configuratie
Na het installeren van het pakket kernel-source-2.4.22 - us pakken we de bronbestanden uit, verplaatsen we ons naar de nieuwe directory, en voeren het commando make menuconfig uit. We krijgen dan een menustructuur te zien waar we volgende wijzigingen dienen aan te brengen: Processor type and features (Pentium-III/Celeron(Coppermine)) Processor family
Hoofdstuk 3. Gateway installatie en configuratie --> compilatie optimalisaties voor onze Pentium III processor Symmetric multi-processing support --> ons toestel heeft maar 1 processor PCMCIA/CardBus support PCMCIA/CardBus support --> we hebben geen PCMCIA/CardBus
35
UIT
UIT
General setup ACPI Support ACPI Support IN Processor IN --> Wanneer onze processor niets te doen heeft mag er stroom bespaard worden Networking options Packet Socket IN --> voor dhcpd Network packet filtering (replaces ipchains) IN --> we gebruiken ook packet filtering in onze firewall (via iptables) Socket Filtering IN --> voor dhcpd IP: Netfilter Configuration Connection tracking (required for masq/NAT) IN --> we willen aan NAT doen FTP protocol support IN IRC protocol support IN IP tables support (required for filtering/masq/NAT) IN --> we willen aan packet filtering en NAT doen netfilter MARK match support (NEW) IN --> voor onze bandwidth control Multiple port match support (NEW) IN --> handig om in 1 regel meerdere poorten te ¨ especifiren Connection state match support (NEW) IN --> nodig i.v.m. onze NAT Packet filtering (NEW) IN --> om de standaard table "‘filter"’ te gebruiken Full NAT (NEW) IN --> we willen ook de table "‘nat"’ gebruiken voor onze NAT MASQUERADE target support (NEW) --> we gebruiken een device met een wisselend IP adres (PPPoE verbinding) REDIRECT target support (NEW) IN
Hoofdstuk 3. Gateway installatie en configuratie
36
--> handig om aanvragen op bepaalde poorten te forwarden naar lokale machines, of om een transparante proxy in te stellen Transparent proxying (NEW) <M> --> voor onze ZORP firewall TPROXY target support (NEW) <M> --> ZORP (eventueel) tproxy match support (NEW) <M> --> ZORP (eventueel) LOG target support IN --> om vreemde zaken door iptables te laten loggen (TODO) 802.1Q VLAN Support IN --> om onze VLAN instellingen te kunnen doen QoS and/or fair queueing QoS and/or fair queueing IN --> voor onze bandwidth control HTB packet scheduler (NEW) IN SFQ queue (NEW) IN SCSI support SCSI support UIT --> we hebben geen scsi devices, en ook geen iomega parallelepoort zipdrive Network device support Allow Net Devices to contribute to /dev/random UIT --> zie Adamantix kernel info Ethernet (10 or 100Mbit) Ethernet (10 or 100Mbit) IN 3COM cards IN 3c590/3c900 series (592/595/597) "Vortex/Boomerang" support (NEW) IN --> voor onze ingebouwde 3®Com PCI 3C905B-TX EISA, VLB, PCI and on board controllers UIT --> niet nodig Ethernet (1000 Mbit) Intel(R) PRO/1000 Gigabit Ethernet support IN --> voor onze Intel(R) PRO/1000 MT Desktop Adaptor) PPP (point-to-point protocol) support IN --> onze PPPoE adsl verbinding heeft dit nodig PPP support for async serial ports (NEW) IN --> adsl verbinding PPP MPPE encryption (NEW) IN --> zie adamantix kernel Character devices
Hoofdstuk 3. Gateway installatie en configuratie /dev/agpgart (AGP Support) --> we gaan geen grafische toepassingen draaien Direct Rendering Manager (XFree86 DRI support) --> zelfde reden
37 UIT UIT
File systems Quota support IN --> zodat we eventueel voor bepaalde gebruikers beperkingen i.v.m. opslagruimte kunnen opleggen Ext3 journalling file system support IN --> grootste deel van onze partities zijn in EXT3 DOS FAT fs support UIT --> laten we uit zodat onze backup hardeschijf in geen geval kan gemount worden vanuit een draaiend os (veiligheid) Virtual memory file system support (former shm fs) UIT --> niet nodig ISO 9660 CDROM file system support IN Microsoft Joliet CDROM extensions IN --> voor als we is een microsoft cdtje plaatsen met lange bestandsnamen Network File Systems NFS file system support UIT --> niet nodig NFS server support UIT --> niet nodig SMB file system support (to mount Windows shares etc.) IN --> voor backups op netwerkshared van \server Sound Sound card support --> we gaan onze sound chipset niet gebruiken
UIT
PaX options We zetten alle opties op behalve "‘Randomize ET\_EXEC base (NEW)"’ --> zie Adamantix kernel information
3.4.4
Kernel compilatie
We compileren de kernel door het volgende commando uit te voeren: make ADAMANTIX=y dep clean bzImage modules modules\_install
Zonder de optie ADAMANTIX=y stopt het compileren met de foutmelding: /root/src/kernel-source-2.4.22/include/asm/unistd.h:379: Invalid ‘asm’ statement:
Hoofdstuk 3. Gateway installatie en configuratie
38
/root/src/kernel-source-2.4.22/include/asm/unistd.h:379: fixed or forbidden register 3 (bx) was spilled for class BREG.
3.4.5
Opstartbaar maken van de kernel
Na het compileren van de kernel voeren we volgende commando’s uit: cp /root/src/kernel-source-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22 ln -s /boot/vmlinuz-2.4.22 /norsbac
Vervolgens passen we het configuratiebestand /etc/lilo.conf aan van onze bootmanager, en voegen volgende gegevens toe: default=norsbac image=/norsbac label=norsbac read-only restricted
Tenslotte herschrijven we onze bootsector via het commando lilo -v.
3.4.6
Verdere beveiliging
Voor verdere beveiliging van het OS verwijs ik u door naar de Securing Debian Manual 11 waarin stap voor stap alle aanpassingen worden beschreven. Van deze handelingen werd het grootste deel effectief toegepast.
3.5
Netwerk configuratie
De gateway is via ´e´en enkele netwerkkaart met een tagged poort van de switch verbonden. We maken nu 2 fictieve netwerk devices aan, zodat het lijkt alsof we een netwerkkaart hebben op VLAN 123 , en een andere op VLAN 2 . Dit doen we via de tool vconfig: vconfig add eth0 123 vconfig add eth0 2
Vervolgens geven we het configuratiebestand /etc/network/interfaces de volgende inhoud:
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) # The loopback interface 11
http://www.debian.org/doc/manuals/securing-debian-howto
Hoofdstuk 3. Gateway installatie en configuratie
39
auto lo iface lo inet loopback # The first network card - this entry was created during the Debian installation # (network, broadcast and gateway are optional) auto eth1 iface eth1 inet static address 10.0.0.254 netmask 255.0.0.0 network 10.0.0.0 broadcast 10.255.255.255 gateway 10.0.0.138 auto eth0 iface eth0 inet static address 192.168.1.254 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 auto eth0.123 iface eth0.123 inet static vlan-raw-device eth0 address 192.168.123.254 netmask 255.255.255.0 network 192.168.123.0 broadcast 192.168.123.255 auto eth0.2 iface eth0.2 inet static vlan-raw-device eth0 address 192.168.2.254 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255
We laten ook forwarding toe door in het bestand /etc/network/options de optie ip forward=yes toe te voegen. Via firewall regels moeten we dan wel verboden trafiek blokkeren.
3.6
Firewall
Om de firewall configuratie in te stellen, te testen en door te voeren maken we gebruik van het pakket iptables-utils. De configuratie gebeurt in twee bestanden, namelijk /etc/iptables.conf.in voor de regels, en /etc/iptables.conf.var voor de constanten.
Hoofdstuk 3. Gateway installatie en configuratie
40
Daarna voeren we volgende commando’s uit voor het activeren van de configuratie: iptables-gen iptables-commit
Het is ook aan te raden om i.p.v. bepaalde trafiek door te sturen naar het interne netwerk, gebruik te maken van proxy servers. Dit kan bijvoorbeeld door de proxyserver Zorp, die standaard in de Adamantix-distributie beschikbaar is.
3.7
DHCP Server
Na het installeren van het pakket dhcp passen we het configuratiebestand /etc/dhcpd.conf als volgt aan: subnet 10.0.0.0 netmask 255.255.255.0 { } subnet 192.168.1.0 netmask 255.255.255.0 { } subnet 192.168.123.0 netmask 255.255.255.0 { } subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.254; option subnet-mask 255.255.255.0; option domain-name-servers 195.238.2.21; range 192.168.2.100 192.168.2.199; default-lease-time 21600; max-lease-time 43200; }
Merk op dat voor elk bestaand subnet een verwijzing moet geplaatst worden.
Hoofdstuk 4
Raamplanbeheer Voor elke jongere in de instelling wordt er om de 6 maanden een raamplan opgesteld. Dit is een soort verslag over het gedrag en de vorderingen van de jongere in de afgelopen 6 maanden. Verschillende mensen werken samen aan zo’n verslag, maar meestal werkt iedereen aan zijn eigen vaste paragrafen. Zo zal de pedagogisch co¨ordinator instaan voor de paragrafen ‘Medisch verslag’ en ‘Hypothesen en strategie’, en de schoolorthopedagoge voor de paragraaf ‘School’.
4.1
Vroegere situatie
V´o´or de herstructurering was elke medewerker in het bezit van een Word-sjabloon voor de raamplanstructuur. Dit wordt hier nu wel sjabloon genoemd, maar het was werkelijk de meest primitieve vorm van een sjabloon. Elke medewerker vulde dan op de gepaste plaatsen (de paragrafen waarvoor hij verantwoordelijk was) inhoud toe. De andere delen liet hij leeg. Vervolgens werd het half afgewerkte document op een diskette geplaatst, en deze werd dan uiteindelijk bezorgd aan de coach van dat raamplan. Deze coach opende dan alle documenten van alle medewerkers voor dat raamplan, en knipte en plakte de inhoud van die documenten samen tot ´e´en afgewerkt document. Vervolgens moest de coach de opmaak uniform maken (elke medewerker had zo zijn eigen regeltjes i.v.m. opmaak en structuur), de titeltjes nummeren, manueel een inhoudstafel aanmaken, de medewerkerstabel op het einde van het raamplan opstellen, en de administratieve gegevens invullen (die eerst op het secretariaat moesten bekomen worden). Nadelen: • Men kon geen tijdelijk resultaat van het raamplan inkijken. Er moest gewacht worden tot het raamplan volledig afgewerkt was door de coach, en aan iedereen werd doorgegeven (een afgedrukt exemplaar passeerde via persoonlijke postvakjes langs elke medewerker).
41
Hoofdstuk 4. Raamplanbeheer
42
• Veel werk voor de coach: het aanvragen van administratieve gegevens, het samenstellen van alle documenten, de opmaak in orde brengen, de titels nummeren en de inhoudstabel en medewerkerstabel opstellen. • Er was geen centrale opslagplaats voor de raamplannen. Een afgedrukt exemplaar was achteraf (eens het afgewerkt was) enkel beschikbaar op het bureau van de coach, voor zover het op dat moment niet uitgeleend was aan iemand anders. • Door het gebruik van een diskette moest men zich van de ene werkplaats naar de andere verplaatsen (soms in verschillende gebouwen). • Geen duidelijke informatie over wie welke aanpassingen heeft gedaan. • Een wildgroei van verschillende opmaak stijlen was mogelijk. • Iedere coach kan zonder problemen het werk van andere personen lezen en aanpassen, en dit zonder ook maar ´e´en spoor achter te laten.
4.2
Mogelijke oplossingen
Er bestaan verschillende mogelijke oplossingen voor dit probleem. Het moeilijkste is vermijden dat wanneer meerdere personen gelijktijdig aan dezelfde paragraaf werken, er conflicten optreden. Als er 2 personen een paragraaf elk op hun eigen manier aangepast hebben, en beide versies van de paragrafen worden ongeveer gelijktijdig teruggestuurd naar de server, welke versie is dan de juiste? En hoe zorgen we ervoor dat de wijzigingen van beide personen in rekening worden gebracht. We zullen deze situatie voor de eenvoud onmogelijk maken in ons ontwerp, in plaats van er echt voorzieningen voor te treffen. In wat nu volgt zal ik kort enkele alternatieven bespreken. De uiteindelijk gekozen en uitgewerkte oplossing wordt daarna in detail besproken.
4.2.1
Ideale oplossing
Wanneer je erover nadenkt, zou de meest ideale oplossing er misschien best als volgt kunnen uitzien. Wanneer verschillende personen A, B en C aan hetzelfde document werken, zouden de wijzigingen van persoon A (bijvoorbeeld het typen van een teken) rechtstreeks (in realtime) zichtbaar moeten zijn op het scherm van persoon B en C, met eventueel de vermelding van de naam van persoon A. Het gedeelte (liefst zo klein mogelijk, bijvoorbeeld de zin) waaraan persoon A aan het werken is kan dan misschien best vergrendeld worden. Ook achteraf moet duidelijk kunnen opgevraagd worden wie welk deel heeft opgesteld, en wanneer. Om de opmaak uniform te maken kan een systeem als LATEX worden gebruikt, waarbij via extra tags tussen de reguliere tekst de logische opbouw wordt opgegeven in plaats van de fysische. Om
Hoofdstuk 4. Raamplanbeheer
43
de toegang van bepaalde delen te ontzeggen aan andere gebruikers zou men eventueel ook extra tags voor en na de tekst in kwestie kunnen plaatsen. Zulke oplossing vraagt een speciaal geschreven netwerkapplicatie die in realtime verbonden is met alle andere applicaties. De vraag is of het schrijven van zo een complex programma wel echt de moeite loont. Misschien is het toch beter bestaande, eventueel gratis, middelen te gebruiken om deze ideale oplossing te benaderen.
4.2.2
Commerci¨ ele oplossing
Er bestaat momenteel een zeer geschikte oplossing die veel van deze problemen oplost, namelijk Microsoft Office 2003 . Dit product biedt de mogelijkheid om in team te werken. Men kan de naam en online status van alle andere teamleden op elk moment bekijken. Men kan dan gezamenlijk aan documenten werken die gebaseerd zijn op sjablonen. Deze gedeelde documenten bevinden zich in zogenaamde Document Workspaces. Wanneer een bevoegd persoon een sjabloon aanpast, dan zal de opmaak van alle hierop gebaseerde documenten mee veranderen. Word, Excel en PowerPoint vergelijken een lokale kopie van het document regelmatig met de originele versie op de server, en zetten alle veranderingen in de afzonderlijke kopie¨en bij elkaar. In de Professional Edition van Office 2003 zit ook een geavanceerde toegangsbeveiliging. De maker van een document kan dan via het rechtenbeheer (Information Rights Management) voor het document, of zelfs voor afzonderlijke stukken van het document, instellen welke andere gebruikers het mogen lezen, bewerken of alleen maar becommentari¨eren. Het nadeel, zoals steeds bij zulke commerci¨ele oplossingen, is de kostprijs. Microsoft Office 2003 vereist minimaal Windows 2000 met Service Pack 3 op alle werkstations, Windows XP wordt aangeraden. Voor een groot deel van de nieuwe functies, die gezamenlijk werken aan documenten mogelijk maken, zijn ook Windows Server 2003 en de SharePoint Portal Server vereist op de server. Wanneer we op 10 bestaande pc’s met Windows 98 willen upgraden naar Windows XP Professional kost dat het MPI ongeveer 2000d. Office Pro 2003 upgrades kosten voor 10 pc’s 3290d. De Windows 2003 Enterprise Server kost 2400d, en de SharePoint Server 7050d. Tezamen komen we aan een som van 14740d(alleen nog maar voor software), wat onbetaalbaar is voor een kleine vzw zoals Capelderij. Gelukkig kunnen een aantal van deze pakketten via Sumika aan een goedkopere prijs worden aangekocht, maar het blijft een grote investering. [10]
4.2.3
Workflow via email
Een eenvoudige oplossing bestaat erin een soort workflow te cre¨eren. Men vertrekt van een leeg sjabloon. Iedere werknemer plaatst zijn deel erin en mailt het vervolgens door naar de volgende persoon, tot het document langs alle medewerkers is gepasseerd en uiteindelijk bij de coach terecht komt. Het voornaamste voordeel t.o.v. de huidige situatie is dat men niet meer
Hoofdstuk 4. Raamplanbeheer
44
van werkplaats naar werkplaats moet wandelen om de huidige versie door te geven. Wanneer men bovendien de andere medewerkers steeds een kopietje bezorgd van de e-mail, zijn deze steeds op de hoogte van de reeds afgewerkte paragrafen. Een groot deel van de nadelen blijft echter aanwezig.
4.2.4
File sharing van Word-documenten via netwerk
Een andere oplossing is het delen van een Word-document op een netwerkshare. Wanneer een persoon dit document opent, vergrendelt MS Office dit volledige document. Men kan dus niet met meerdere mensen gelijktijdig aan hetzelfde document werken. Om dit gedeeltelijk op te lossen kan men de verschillende paragrafen (die meestal elk afzonderlijk bij een bepaalde persoon horen) in aparte documenten plaatsen. Deze aparte documenten kunnen dan later handmatig samengevoegd worden tot ´e´en groot. Deze laatste stap zouden we eventueel kunnen automatiseren via scripts die het Office Object model aanspreken (cfr. 4.3.3). Voordelen: • Geen tijdverlies door verplaatsen van werkplaats naar werkplaats • Alle personen kunnen tegelijkertijd aan hun eigen deel werken • Alle delen staan centraal op een server • Rechten kunnen per deeldocument worden ingesteld
4.2.5
Database systeem
Vorig systeem van file sharing kan gesimuleerd worden in een database toepassing. De aparte paragrafen worden dan aparte velden in de GUI. In de database gaat het dan om verschillende entry’s. Deze velden kunnen in de GUI vergrendeld worden op het moment dat iemand anders deze bewerkt. Het wordt ook eleganter om verslagen van jongeren te beheren. Voordelen: • Alle voordelen aangehaald in 4.2.4. • Het overzicht van de verslagen en het beheer ervan worden eleganter uitgevoerd.
4.2.6
Zuiver CVS systeem
CVS1 is een systeem dat eigenlijk is bedoeld om met een heel team van programmeurs aan dezelfde broncode van programma’s te werken. Voor je begint te werken haal je de nieuwste versie van alle documenten binnen via CVS. Vervolgens wijzig je de nodige delen. Na 1
Concurrent Version System
Hoofdstuk 4. Raamplanbeheer
45
je werk plaats je de documenten via CVS terug op de server. Wanneer iemand anders in die periode ook wijzigingen heeft aangebracht aan je gewijzigd document, worden deze veranderingen samengevoegd (dit samenvoegen heet mergen in het Engels). Gebeurden deze wijzigingen op verschillende plaatsen in het document, dan is de kans groot dat dit mergen zonder problemen verloopt. Gebeurden de wijzigingen bij beide personen aan dezelfde regels, dan kunnen er conflicten ontstaan. Deze worden echter duidelijk weergegeven door het systeem, en kunnen eenvoudig handmatig worden gecorrigeerd. De bestanden moeten wel best gewone tekstbestanden zijn. We kunnen bijvoorbeeld geen Word-document gebruiken met opmaak erin. Voordelen: • Geen tijdverlies door verplaatsen van werkplaats naar werkplaats. • Men kan met meerdere personen tegelijkertijd aan dezelfde tekst werken (niet alleen elk aan hun eigen deel). • Alle wijzigingen worden in detail bijgehouden (wie welk deel wanneer toegevoegd heeft). • Mogelijkheid om op elk moment een rollback te doen naar gelijk welke vroegere situatie.
4.2.7
Combinatie CVS, LATEX en scripting
Wanneer we enkele van de voorgaande technieken combineren met scripting kunnen we misschien wel komen tot een snel implementeerbare oplossing die dicht tegen ons ideale oplossing komt. De paragrafen kunnen bijvoorbeeld worden opgesteld en aangepast via CVS. Achteraf kunnen de paragrafen worden samengevoegd, en kunnen LaTeX tags worden bijgeplaatst, via scripts. Na het compileren met een LaTeX compiler (eveneens geautomatiseerd) verkrijgen we het uiteindelijke opgemaakte document.
4.3
Keuze van implementatie software
Na het bespreken van de mogelijke oplossingen met het personeel, werd er uiteindelijk gekozen voor het programmeren van een webgebaseerde toepassing, met een ondersteunende gegevensbank. Zo kan men werken op gelijk welk werkstation dat is voorzien van een internet browser. Dit werkstation moet natuurlijk verbonden zijn met de server. Dit kan via het lokale netwerk, of zelfs via het Internet.
4.3.1
Programmeertaal
Als programmeertaal werd gekozen voor C# in ASP.NET . De toepassing werd ontwikkeld in Visual Studio .NET . Op de productieserver hoeft deze ontwikkelingsomgeving echter niet aanwezig te zijn. Op de productieserver moet enkel zowel het .NET framework aanwezig zijn
Hoofdstuk 4. Raamplanbeheer
46
(gratis verkrijgbaar en eveneens noodzakelijk voor Exchange server) als de MS IIS webserver (standaard aanwezig in Windows server versies, en eveneens vereist voor Exchange server).
4.3.2
Database server
Als database server koos ik voor Microsoft SQL Server 2000 omdat dit reeds aanwezig was op de Windows server. Het werd trouwens ook gebruikt door de reeds aanwezige administratie software. Hiervan kon eveneens handig gebruik gemaakt worden om bepaalde administratieve gegevens voor de raamplannen uit deze reeds bestaande database op te halen.
4.3.3
Opmaken en produceren van het document
Om de velden in onze database programmatisch samen te smelten tot een opgemaakt document werd gebruik gemaakt van DCOM objecten. Deze maken het mogelijk om vanuit een programma (zoals onze ASP.NET toepassing) een Word template bestand te openen, allerlei handelingen te doen zoals locaties opzoeken, tekst invoegen, tabellen aanmaken, inhoudstafel produceren,... en uiteindelijk het resultaat op te slaan in een ander Word bestand. Voor dit alles werd MS Word 2003 gebruikt. Bij installatie van dit product worden de nodige dll bestanden automatisch toegevoegd.
4.4
4.4.1
Gebruikershandleiding ter beschrijving van structuur en mogelijkheden Gebruikers
Wanneer je als medewerker wilt deel uitmaken van het raamplanbeheer systeem, of indien je er wilt gebruik van maken, dan moeten volgende zaken gebeuren. Jouw gebruikersaccount moet bestaan in Active Directory, of erin aangemaakt worden (bijvoorbeeld via Active Directory Users and Computers). Vervolgens moet de gebruiker toegevoegd worden aan de groep met de naam raamplanbeheer. Tenslotte moet er een keer aangemeld worden via deze gebruiker op het raamplanbeheer systeem, zodat de medewerker opgenomen wordt in de gegevensbank. Vanaf dan is de medewerker gekend en kan hij, bijvoorbeeld via werkverdeling, ingeschakeld worden voor een bepaald raamplan.
4.4.2
De gebruikersinterface
Wanneer we de gewenste URL in onze internet browser opgeven, bijvoorbeeld http://capelderijsrv/Raamplanbeheer/raamplanViewer/RaamplanViewer.aspx
dan moeten we ons eerst aanmelden. Na het ingeven van een correct gebruikersnaam en wachtwoord paar zien we de gevraagde pagina. Alle pagina’s hebben een uniforme layout (zie
Hoofdstuk 4. Raamplanbeheer
47
Figuur 4.1: Het raamplanbeheer systeem
figuur 4.1). Dit komt de gebruiksvriendelijkheid ten goede. In de titelbalk zien we als welke gebruiker we zijn aangemeld. Bovenaan de webpagina bevindt zich de menubalk (figuur 4.2). De knop die geselecteerd is
Figuur 4.2: De menubalk
wordt in een paars kleurtje weergeven, de andere actieve opties in het donker blauw, en de niet actieve opties (niet aan te klikken op dat moment) in het lichtblauw. Net onder de menubalk bevindt zich de selectiebalk (figuur 4.3). Hier kunnen we in de viewer modus een paar extra opties kiezen.
Hoofdstuk 4. Raamplanbeheer
48
Figuur 4.3: De selectiebalk
In het midden van de pagina zien we de effectieve inhoud, en onderaan bevindt zich de statusbalk (4.4). In deze balk wordt meer informatie gegeven over de verwachte handeling in
Figuur 4.4: De statusbalk
een bepaalde situatie.
4.4.3
Foutmelding
Wanneer er een fout optreedt, wordt deze weergegeven in een zelfgemaakte foutpagina zoals te zien is in figuur 4.5. Deze foutpagina past natuurlijk binnen de uniforme layout en wordt in
Figuur 4.5: De foutpagina
het midden gedeelte weergegeven (tussen selectiebalk en statusbalk). Er wordt zoveel mogelijk informatie getoond om de gebruiker een idee te geven over de oorzaak.
4.4.4
Word template bestand cre¨ eren
Eerst en vooral moeten we specifi¨eren hoe het uiteindelijk geproduceerd bestand er moet uitzien. Daartoe maken we in Word de volledige vormgeving, en slaan we dit bestand op als
Hoofdstuk 4. Raamplanbeheer
49
een Word template bestand (.dot). Zo maken we het titelblad, de (lege) tabel voor administratieve gegevens, alle titels en ondertitels,... Het is belangrijk dat we voor de titels gebruik maken van opmaakprofielen (bijvoorbeeld 1. Kop1, 1.1. Kop2, 1.1.1. Kop3,...) zodat we achteraf automatisch een inhoudstafel kunnen laten opmaken. Elk paragraafje tekst in het uiteindelijk geproduceerd document noemen we heel toepasselijk een paragraaf , en elke paragraaf heeft een paragraaftype. Elk raamplan bestaat uit steeds dezelfde paragraaftypes. Per paragraaftype krijgen we voor elk raamplan natuurlijk een andere paragraaf inhoud. Het is de bedoeling dat er overal waar er in ons Word document inhoud moet ingevoegd worden bladwijzers geplaatst worden. Een bladwijzer is een verwijzing die je op een bepaalde plaats in het document kan aanbrengen, en een bepaalde naam kan geven. Bij het produceren van het uiteindelijk Word document voor een bepaald raamplan, wordt er op de plaats van elke bladwijzer de juiste inhoud geplaatst door ons programma. We kunnen gebruik maken van 3 soorten bladwijzers in ons sjabloonbestand. 1. Eerst en vooral hebben we een paar vaste bladwijzers. Dat zijn de bladwijzers met de namen inhoudsopgave (hier zal de inhoudstafel geplaatst worden), medewerkerstabel (hier komt de medewerkerstabel), datum (hier komt de datum van het huidige raamplan) en datumvorig (hier komt de datum van het vorige raamplan van dezelfde jongere). 2. Verder hebben we bladwijzers die dezelfde naam dragen als de overeenkomstige kolomnamen uit bepaalde tabellen in de administratieve toepassing, horende bij de jongere waarover het raamplan handelt. Zo hebben we bijvoorbeeld VGEMCOD voor het postnummer van de gemeente waar de jongere woont, VBEWNAT voor de nationaliteit van de jongere, VBEWMOEDER voor de naam van de jongere zijn moeder, en VBEWOMS voor de naam van de jongere zelf. Sommige velden komen echter 2 keer voor in het document. Zo wordt de naam en geboortedatum van de jongere zowel in de administratieve tabel geplaatst, als op het titelblad. Het probleem is dat elke bladwijzernaam uniek moet zijn. We kunnen dus bijvoorbeeld niet twee maal een bladwijzer met de naam VBEWOMS plaatsen. Daarom werd er voor het veld VBEWOMS een andere bladwijzer naam in het leven geroepen, en voor het veld VBEWGEB een bladwijzer geboortedatum. Deze bevatten gewoon een kopie van de overeenkomstige velden. 3. Tenslotte voegen we voor elk paragraaftype op de gewenste plaatsen een bladwijzernaam naar keuze in. Deze bladwijzernamen moeten wel overeenkomen met de opgegeven naam in de aangemaakte (of aan te maken) paragraaftypes in ons raamplanbeheer systeem (zie hoofdstuk 4.4.5). Hier volgen een paar tips voor het werken met bladwijzers. Ten eerste is het handig als je de bladwijzers effectief ziet staan in het document. Daarom openen we in Word het menu Extra en kiezen Opties. In het tabblad Weergave vinken we bij Weergeven de optie Bladwijzers
Hoofdstuk 4. Raamplanbeheer
50
aan. Vanaf nu zien we alle bladwijzers in het document door middel van een soort grijze cursor. Een tweede handigheid is het cre¨eren van een sneltoets voor het invoegen/editeren van bladwijzers. Daarvoor klikken we in het menu Extra op Aanpassen.... In het tabblad Opdrachten klikken we onderaan op de knop Toetsenbord.... In het nu volgende scherm kiezen we uit de lijst Categorieen het item Alle opdrachten, en vervolgens uit de lijst Opdrachten het item BladwBewerken. Nu gaan we in het vakje Druk op nieuwe sneltoets staan, en drukken we onze sneltoets, bijvoorbeeld Ctrl+B. We kunnen dan ook zien of de sneltoets al aan een andere functie is toegewezen. Zijn we zeker van onze sneltoetskeuze dan klikken we op de knop Toewijzen. Als we vanaf nu in ons Word document op een willekeurige plaats gaan staan, en we drukken op onze sneltoets, dan kunnen we op die plaats een bladwijzer invoegen. Stond er daar al een, dan kunnen we hem op deze manier aanpassen. Wens je via de menuutjes te werken, dan kan je een bladwijzer toevoegen/wijzigen via het menu Invoegen, Bladwijzer....
4.4.5
Nieuwe paragraaftypes
Wanneer we in ons nieuw Word sjabloonbestand bladwijzernamen toevoegen, waar nog geen overeenkomstig paragraaftypes voor zouden bestaan in ons raamplanbeheer systeem, dan moeten we deze eerst aanmaken. Daarvoor klikken we op Paragraaftypes in de menubalk. Vervolgens kiezen we de discipline die bevoegd is om het nieuwe paragraaftype te editeren (bijvoorbeeld gezinsbegeleider of logopedist), een willekeurige titel (die wordt getoond in onze raamplanviewer, net boven een paragraaf van dit type, maar die verder geen betekenis heeft) en de naam van de bladwijzer die we hebben gebruikt om aan te geven waar dit paragraaftype moet worden geplaatst in ons document. Na het klikken op de knop Toevoegen wordt het paragraaftype toegevoegd in de lijst. Alle toevoegingen kunnen worden geannuleerd via de knop Annuleren, of worden bevestigd door de knop Bevestigen. Aangemaakte paragraaftypes kunnen achteraf niet meer worden verwijderd, enkel gedeactiveerd in de nieuwste raamplanversie (zie 4.4.6).
4.4.6
De raamplanversie aanmaken
Eens we onze nieuwe structuur via een nieuw Word template bestand hebben opgemaakt, en eventueel nieuwe paragraaftypes hebben aangemaakt, kunnen we hieruit een nieuwe raamplanversie cre¨eren. Vanaf dat moment zullen alle nieuw aangemaakte raamplannen op deze versie gebaseerd worden. We klikken op Nieuwe versie in de menubalk. Daar kunnen we links alle niet-actieve paragraaftypes zien (nieuw aangemaakte types zijn standaard niet-actief), en rechts alle actieve. Met de knoppen >> en << kunnen paragraaftypes tussen deze 2 categorie¨en worden verplaatst. Onderaan kunnen we het pad naar ons nieuw Word template bestand opgeven (we kunnen ook Browse... klikken). Wanneer we tenslotte op de knop Aanmaken klikken, wordt de nieuwe
Hoofdstuk 4. Raamplanbeheer
51
versie toegevoegd aan onze gegevensbank en, zoals vermeld, worden alle vanaf nu aangemaakte raamplannen hierop gebaseerd.
4.4.7
Nieuw raamplan
Een nieuw raamplan aanmaken is zeer eenvoudig. We klikken gewoon op de knop Nieuw RP in de menubalk. Vervolgens selecteren we de jongere waarvoor we het nieuwe raamplan willen starten uit de lijst (deze lijst van jongeren wordt opgehaald uit de administratie database). We kiezen ook de datum. Deze datum kan bijvoorbeeld in de toekomst liggen. Wanneer we op de knop Aanmaken klikken, wordt een nieuw raamplan voor de geselecteerde jongere en de ingevulde datum aangemaakt. Dit houdt in dat er een lege paragraaf wordt aangemaakt voor elk actief paragraaftype (elk paragraaftype in de nieuwste versie), horende bij dit raamplan. Het raamplan wordt ook gekoppeld aan deze nieuwste versie, en dus ook aan het bijbehorende Word template bestand. Diegene die een raamplan aanmaakt, wordt automatisch de coach van dit raamplan.
4.4.8
Werkverdeling
Indien we de coach zijn van een raamplan, kunnen we ten alle tijde de werkverdeling ervan aanpassen. Men kan op 2 manieren op het scherm terecht komen om de werkverdeling aan te passen. Ofwel na het aanmaken van een nieuw raamplan, ofwel na het klikken op de knop Werkverdeling in de menubalk, nadat we in de Viewer een raamplan hadden geselecteerd. Men kan hier voor elke gewenste discipline een gepaste medewerker opgeven. Eens de lijst van disciplines en overeenkomstige medewerkers voor het huidige raamplan is opgegeven, klikken we op de knop Bevestigen.
4.4.9
Inhoud raamplan bekijken/bewerken
De inhoud van een raamplan bekijken/bewerken doen we via de raamplan viewer. Die openen we door op de knop Viewer te klikken in de menubalk. Vervolgens kiezen we een jongere uit de jongerenlijst. Daarna een raamplan van die jongere uit de raamplanlijst (vanaf nu is het ook mogelijk om op werkverdeling te klikken, of op .doc zie 4.4.10), en tenslotte kiezen we de gewenste discipline uit de disciplinelijst. We zien nu alle paragrafen voor de gekozen discipline van het geselecteerde raamplan. Wanneer we zelf opgegeven zijn voor deze discipline in de werkverdeling voor het geselecteerde raamplan, dan kunnen we elk van de getoonde paragrafen ook editeren via de knop Editeren die dan onder elke paragraaf verschijnt.
4.4.10
Geproduceerd Word-document verkrijgen
Na het selecteren van een raamplan via de viewer (zie 4.4.9) kunnen we op de knop .doc klikken in de menubalk, om een raamplan document te produceren. Er wordt ons dan au-
Hoofdstuk 4. Raamplanbeheer
52
tomatisch een downloadaanvraag voorgesteld van het geproduceerde Word document. Dit document is niets meer dan het template bestand van de gepaste versie, waarbij alle bladwijzers zijn vervangen door de gepaste inhoud voor het geselecteerde raamplan. Dit document kan ten alle tijde opnieuw geproduceerd worden via deze knop, en dit natuurlijk voor alle bestaande raamplannen in het systeem, ongeacht hun versie.
4.5
Implementatie details
In dit gedeelte wordt beschreven hoe het programma uitgewerkt werd.
4.5.1
Visual Studio .NET project
Na het opstarten van Microsoft Visual Studio .NET kiezen we in het menu File voor New en vervolgens Project.... We kiezen onder de rubriek Visual C# Projects voor ASP.NET Web Application. We geven ook een locatie op, namelijk http://localhost/Raamplanbeheer
4.5.2
Bestanden
We maken de volgende bestanden aan in ons project (wanneer er een aspx pagina wordt vermeld bedoelen we impliciet eigenlijk ook het bijbehorende code behind bestand met extensie .aspx.cs): Constanten.cs In de klasse Constanten plaatsen we onze constanten d.m.v. statische strings, bijvoorbeeld: public static string PAD_ERROR = "/Raamplanbeheer/Error.aspx";. In onze stringnamen gebruik ik het voorvoegsel PAD_ voor constanten die naar een bepaalde pagina verwijzen (absoluut pad), het voorvoegsel MENU_ voor constanten die de afzonderlijke menuknoppen aanduiden in een Menu object (verzameling van MenuKnoppen), en het voorvoegsel SESSIE_ voor parameternamen van objecten die op de sessie worden geplaatst. Error.aspx Dit is de foutpagina naar waar verwezen wordt bij het optreden van een fout (zie 4.5.13) Login.aspx en Logout.aspx Login.aspx is de pagina die automatisch wordt opgeroepen wanneer de gebruiker nog niet is ingelogd. Hij hoeft dus niet zelf naar deze pagina te surfen om in te loggen: dit gebeurt automatisch wanneer een willekeurige pagina wordt opgeroepen en de gebruiker niet is ingelogd.
Hoofdstuk 4. Raamplanbeheer
53
Na het inloggen wordt automatisch teruggekeerd naar deze willekeurige pagina. Logout is bedoeld om te gebruiker uit te loggen, ofwel zodat er vervolgens met een andere gebruiker kan worden ingelogd, ofwel wanneer de pc een onbetrouwbare pc is waarop andere mensen anders de sessie zouden kunnen voortzetten. Web.config Hier bevinden zich een aantal variabelen waarvan we verwachten dat de informatica verantwoordelijke ze achteraf eenvoudig moet kunnen aanpassen. Ook de authenticatie instellingen worden hier gedeeltelijk gedaan (zie 4.5.10). Hier volgen de variabelen en hun standaard waardes:
Global.asax Hierin wordt de methode Application_AuthenticateRequest gedefini¨eerd voor het authenticatie systeem (zie 4.5.10) en de methode Application_BeginRequest voor het internationalisatiessysteem (zie 4.5.12). LdapAuthentication.cs Bevat de LdapAuthentication klasse die instaat voor de communicatie met de Active Directory.
Hoofdstuk 4. Raamplanbeheer
54
De directory eigenItems Deze directory bevat volgende bestanden: • DDLMetLabel.cs (een DropDownList met een label ervoor, bedoeld voor de selectiebalk), • Menu.cs (een collectie van MenuKnoppen) • MenuKnop.cs (een menuknop inclusief status) • PaginaTitel.cs (de titel bovenaan in de titelbalk van de internet browser) • SLButton.cs (een gewone Button die we in de selectiebalk kunnen plaatsen) • TBMetLabel (een TextBox met een label ervoor, bedoeld voor in de selectiebalk te plaatsen) De directory maakDocument met het bestand MaakWord.aspx Deze pagina cre¨eert het Word document van een geselecteerd raamplan. De directory models Deze bevat het bestand Model.cs (de interface klasse Model, waarvan alle model klassen moeten worden afgeleid) en het bestand DatabankModel.cs (de model klasse voor onze MS SQL Server database connectie). De directory raamplanDefinitie Met de bestanden NieuwRaamplan.aspx (om een nieuw raamplan te cre¨eren) en WerkverdelingEditor.aspx (om de werkverdeling ervan aan te passen). De directory raamplanViewer Met de bestanden ParagraafEditor.aspx (om een paragraaf te editeren nadat op de knop Editeren werd geklikt naast een paragraaf in de viewer) en RaamplanViewer.aspx (de viewer zelf). De directory resources Bevat de resource files voor het ondersteunen van verschillende talen: MyResources.resx dient voor de standaardtaal (niet gebruikt), en MyResources.nl.resx voor het Nederlands.
Hoofdstuk 4. Raamplanbeheer
55
De directory structuur Met de bestanden NieuweParagraaftypes.aspx (voor het aanmaken van nieuwe paragraaftypes) en NieuweVersie.aspx (voor het cre¨eren van een nieuwe raamplanversie). De directory templatePage Hierin bevindt zich het bestand TemplatePage.cs (al onze pagina’s zijn van de klasse TemplatePage afgeleid, zie 4.5.4. Ook ons CSS bestand template1.css bevindt zich hier, evenals een paar JPG bestanden zoals error_boobs.jpg en kasteel.JPG.
4.5.3
Het MVC ontwerpmodel
We bouwen onze applicatie volgens het MVC model . Dat staat voor Model, View, Controller . Het model is de representatie van datgene waar de gebruiker probeert mee te communiceren. In onze toepassing gaat het om het MS SQL Server DBMS. Er moeten gegevens uit opgehaald worden, en vervolgens aan de gebruiker worden voorgesteld. Deze voorstelling is de taak van de view . Dit zijn onze aspx pagina’s, en soms ook een gedeelte van de achterliggende code behind files wanneer er via code zaken worden toegevoegd aan de pagina. Tenslotte is er een systeem dat acties van de gebruiker (gewoonlijk muis en toetsenbord acties) verwerkt. Dit is de taak van de Controller . In onze applicatie wordt dit verwezenlijkt door een gedeelte van de code behind files, en door onze TemplatePage die zich tussen al onze pagina’s en de klasse Page bevindt. In figuur 4.6 wordt het een en ander geschetst. Zo zien we dat de ASP(X) pagina instaat voor de view, en omgezet wordt naar een nieuwe webpagina die naar de gebruiker wordt gestuurd. De aspx pagina kan voor het produceren van de view gegevens opvragen uit het model (bijvoorbeeld een aantal paragrafen). Vervolgens vult de gebruiker een Web Form op deze pagina in, en onderneemt hij een actie (zoals het klikken op een knop). Deze actie wordt verwerkt door het code behind bestand (aspx.cs) en door de ViewController . Om de aanpassingen door te voeren, raadpleegt het code behind bestand het model . Ons code bestand is dus ook afgeleid van de ViewController (onze TemplatePage). Deze ViewController regelt o.a. de authenticatie van de gebruiker, en welke pagina’s hij mag bekijken en welke niet. Wanneer we ergens in onze toepassing verwijzen naar een andere pagina, dan zou dit moeten gebeuren via de ViewController . Dit is effectief zo voor de fout pagina. Voor verwijzingen naar andere pagina’s echter wordt gebruik gemaakt van een klasse Constanten, zodat we hetzelfde resultaat bereiken: wanneer er pagina’s van naam veranderen moet ons programma maar op ´e´en plaats worden gewijzigd, namelijk in de Constanten klasse [7].
Hoofdstuk 4. Raamplanbeheer
56
Figuur 4.6: Het MVC model in ASP.NET
4.5.4
Het template systeem en de klasse TemplatePage
Om alle pagina’s een uniforme structuur en opmaak te geven, en ook om het mogelijk te maken achteraf alternatieve structuren en opmaak te ontwikkelen, en die eventueel naast de huidige te gebruiken, werd er goed nagedacht over een template systeem. Vroeger (bijvoorbeeld in ASP) werden zulke template systemen verwezenlijkt door bovenaan en onderaan elke pagina een include te doen van steeds dezelfde bestanden, en natuurlijk ook door gebruik te maken van Cascading Style Sheets (CSS). Nu met de introductie van ASP.NET, en de verregaande object geori¨enteerdheid ervan, zijn er betere technieken mogelijk. Alle pagina’s in ASP.NET zijn eigenlijk klassen, afgeleid van de bovenklasse Page. Wat we gaan doen is al deze pagina klassen niet meer afleiden van Page, maar van een nieuwe tussenklasse TemplatePage die op haar beurt van de klasse Page is afgeleid. In deze nieuwe klasse kunnen we dan bepaalde methodes overschrijven, en nieuwe methodes, eigenschappen,velden,... bijmaken. Om te weten wat en hoe we moeten overschrijven, is het belangrijk om de volgorde te weten waarin de methodes worden aangeroepen, en wat er wanneer gebeurt. Daarover meer in volgende deelparagrafen. Ik bespreek eerst wat ik aangepast heb.
Hoofdstuk 4. Raamplanbeheer
57
Eigenschap PageTitle Wanneer we de waarde van deze eigenschap (string) instellen, dan wordt de Text eigenschap van het achterliggende PaginaTitel-object ingesteld. Eigenschap StatusMessage Wanneer we de waarde van deze eigenschap (string) instellen, wordt de eigenschap Text van het achterliggende Label-object ingesteld. Eigenschap MenuItems Deze eigenschap stelt het achterliggende Menu-object in. Dit object bevat de menuknoppen voor in de menubalk. Eigenschap SelectieItems Deze eigenschap stelt het achterliggende ArrayList-object in. Dit object bevat alle WebControls die in de selectiebalk worden geplaatst. Veld resources Dit is een object van het type ResourceManager. Dit object gaan we gebruiken om onze taal-specifieke gegevens op te halen, zoals teksten en opschriften. Eigenschappen ErrorCode en ErrorString Stellen een foutnummer en foutstring in wanneer er een fout optreedt. Eigenschap ModelObject Deze eigenschap stelt het achterliggende Model-object in. Via dit object kunnen we methodes aanroepen om gegevens op te halen uit ons model, of dit nu ons DatabankModel is (om de gegevens uit onze MS SQL Server databank te halen) of een andere deelklasse van Model. Eigenschap UserId Deze eigenschap bevat de id van de gebruiker die momenteel is aangemeld. De constructor In de constructor van de TemplatePage klasse worden een groot deel van de vorige items ge¨ınitialiseerd, en wordt het menu opgebouwd.
Hoofdstuk 4. Raamplanbeheer
58
De methode OnInit en volgelingen Als het niet om de login- of om de foutpagina gaat, wordt de logout-menuknop geactiveerd en krijgt het userid veld het id van de aangemelde gebruiker. De methode BuildPage wordt hier ook aangeroepen, met als argument een HtmlForm-object teruggegeven door de methode GenerateHtmlForm. Dit wil zeggen dat eerst de methode GenerateHtmlForm wordt aangeroepen. Hierin wordt een nieuw HtmlForm-object gemaakt waarin we bijna de volledige pagina gaan opbouwen. De nodige HTML-code wordt erin geplaatst, de menubalk wordt opgebouwd (m.b.v. de methode AddMenuItems), de selectiebalk wordt opgebouwd (m.b.v. de methode AddSelectionItems), alles wat op dat moment in de Controls collectie zit van de pagina (met andere woorden alles wat in de bijbehordende aspx pagina aanwezig is, aangevuld met wat in onze code behind file via code werd toegevoegd) wordt eruit gehaald en aan de form toegevoegd (m.b.v. de methode AddControlsFromDerivedPage), en tenslotte wordt de statusbalk toegevoegd. Dit volledig nieuwe form object wordt dan meegegeven aan de methode BuildPage. Deze laatste methode plaatst al het nodige in de Controls collectie van de pagina, die ondertussen is leeggemaakt, en waarvan de inhoud zich nu ergens in het Form object bevindt. Dit houdt in: de HTML-code voor en na de form (zoals ook de verwijzing naar ons CSS-bestand), en het Form object zelf. Tenslotte wordt de methode OnInit() van de bovenklasse opgeroepen. De methode GetResource Deze methode heeft een string als parameter. Aan de hand van deze parameter wordt de bijbehorende string opgehaald uit het juiste resource bestand (voor de juiste taal). De methode SetErrorCode Met deze methode wordt het veld errorCode ingesteld, en eventueel ook het veld errorString. Met enkel een numerieke errorcode wordt er ´o´ok een passende string opgehaald uit het resource bestand. De extra parameter dient vooral voor situatie afhankelijke extra info. Vervolgens gebeurt er automatisch een transfer naar de error.aspx pagina (die de ingestelde velden gebruikt voor het weergeven van de fout informatie) [1] [4].
4.5.5
Eigen controls
Deze paragraaf vermeldt een paar opmerkingen i.v.m. eigen controls waarover in volgende paragrafen wordt gesproken. De meesten ervan zijn afgeleid van bestaande controls, en overschrijven de methode Render(HtmlTextWriter output). Dit heeft als voordeel dat ze rechtstreeks aan de Controls collectie van de pagina kunnen worden toegevoegd, en dat ze geparst worden net zoals de andere controls. De eenvoudigste manier om een nieuwe control aan te maken is via het menu File, Add New Item.... Daar kiezen we in Web Project Items -->
Hoofdstuk 4. Raamplanbeheer
59
UI --> Web Custom Control. Wanneer we deze control ook in een aspx-pagina willen gebruiken, moeten we verdere acties ondernemen, en de control compileren naar een dll file. Maar dit is allemaal niet nodig: we voegen ze enkel toe vanuit code.
4.5.6
Menubalk
Het menu zit vervat in een object van de zelfgemaakte klasse Menu. Dit is een gegevensstructuur die objecten van de klasse MenuKnop bevat. Het speciale aan deze gegevensstructuur is dat de volgorde van de menuknoppen moet vastliggen, maar dat er toch ook effici¨ent een bepaalde menuknop via een string-indexer moet kunnen opgehaald worden. Dit is handig wanneer bijvoorbeeld de status van een reeds aanwezige menuknop moet aangepast worden in een of ander code behind bestand. Daarom werd er intern gebruik gemaakt van een object van de klasse ArrayList, om de objecten in volgorde op te slaan, en ook van een hashtabel om de plaats van een object in de ArrayList via een string-indexer ogenblikkelijk terug te vinden. Een MenuKnop zelf heeft een eigenschap Text (voor het opschrift), een eigenschap Link (die de hyperlink achter de menuknop instelt), en een eigenschap Toestand die de volgende waarden kan aannemen: • Actief: Er kan op de knop geklikt worden • Inactief: Er kan niet op de knop geklikt worden • Geladen: De pagina achter de link is momenteel geladen Zoals reeds eerder vermeld wordt de menubalk aangemaakt in de constructor van de klasse TemplatePage. De eigenschappen van een knop naar keuze kunnen natuurlijk achteraf aangepast worden (bijvoorbeeld de eigenschap Toestand).
4.5.7
Selectiebalk
De selectiebalk wordt gevormd uit het selectieItems veld in onze TemplatePage. Dit is een eenvoudige ArrayList, waarbij alle elementen moeten afgeleid zijn van de klasse Control, zodat ze rechtstreeks, na casten naar Control, aan de Controls collectie van de pagina, of van een form, kunnen worden toegevoegd.
4.5.8
Cascading style sheets
Her en der in de geproduceerde html code worden er class properties bij html tags toegevoegd. Zo kunnen we vanuit een CSS de opmaak afhandelen. Door een andere TemplatePage te schrijven kunnen we de volledige structuur van alle pagina’s wijzigen: bijvoorbeeld het menu links, en statusbalk bovenaan. Door te verwijzen naar een ander CSS bestand, eveneens in de TemplatePage, kunnen we de volledige opmaak wijzigen: bijvoorbeeld alle kadertjes en boordjes groter, kleuren anders,...
Hoofdstuk 4. Raamplanbeheer
60
Binnenin het CSS bestand zijn wel subtiele verschillen i.v.m. het bereik van de instellingen. Zo slaat TABLE.basistabel bijvoorbeeld enkel op tabellen die de klasse basistabel dragen, niet op geneste tabellen. Bijvoorbeeld bij de TABLE.basistabel TH echter zullen de instellingen slaan op alle TH elementen onder de tabel met klasse basistabel: niet enkel op de TH elementen van de tabel zelf, maar ook van al de geneste tabellen, tenzij er verder in de boomstructuur van elementen een meer specifieke instelling opduikt.
4.5.9
Database klasse
Bepaalde dingen verschillen van gegevensbron tot gegevensbron, en zelfs van DBMS tot DBMS, ook al maken we voor allen gebruik van klassen die op interfaces uit System.Data zijn gebaseerd. Zo verschilt bijvoorbeeld het gebruik van parameters, of het gebruik van datum notaties. Daarom schuiven we de scheidingslijn op, zodat er meer (specifieke) code in de model klasse wordt gestopt, en minder in de aanroepende codestukken. We maken een interface model, waarin we alle methodes defini¨eren. We kunnen dan het ModelObject in onze gehele applicatie beschouwen als een object van het type Model, ongeacht welke deelklasse we gebruiken (en dus ongeacht welke gegevensbron). Hier volgen twee voorbeelden van zulke methodes: 1. DataSet geefWerkverdeling(int raamplanId); We geven een raamplan id mee, en we krijgen een DataSet terug met de werkverdeling voor dat raamplan. Veel code (zoals het defini¨eren van een connectiestring, het aanroepen van een adapter,...) verdwijnt dus in de implementatie van deze interface. 2. void updateWerkverdeling(int raamplanId, DataSet ds); We geven de gewijzigde dataset terug mee, tezamen met het raamplan id. De wijzigingen worden doorgevoerd in ons model. Voor onze toepassing hebben we de implementatieklasse DatabankModel gemaakt (afgeleid van Model) voor de connectie met het MS SQL Server DBMS.
4.5.10
Aanmelden en Active Directory
We gebruiken active directory voor 2 zaken: 1. Om de combinatie login en wachtwoord te controleren 2. Om via de login de volledige naam van de medewerker te achterhalen Om van de directory services klassen te kunnen gebruik maken moeten we eerst een referentie in ons project toevoegen. Dit gebeurt als volgt: We klikken met de rechtermuisknop op References (in onze Solution Explorer) en kiezen Add reference. In het .NET tabblad selecteren we System.DirectoryServices.dll, we klikken op de knop Select en tenslotte
Hoofdstuk 4. Raamplanbeheer
61
op Ok. In de bestanden waarin we gebruik wensen te maken van de directory services, plaatsen we bovenaan using System.DirectoryServices;. Via onze klasse LdapAuthentication kunnen we gebruik maken van volgende methodes: 1. bool IsAuthenticated(string domain, string username, string pwd) Deze methode controleert of de meegegeven gebruikersnaam en wachtwoord kloppen voor het opgegeven domein. 2. void vervangNamen(DataSet medewerkersDS, string path) Deze methode vervangt de waarde in de kolom naam (oorspronkelijk de loginnaam) door de volledige naam, voor alle rijen van de meegegeven DataSet. 3. string GetGroups() Geeft een string terug met alle groepen waartoe de eerder geauthenticeerde gebruiker behoort. De groepen zijn gescheiden door middel van pipeline-tekens. We maken gebruik van de Forms authentication mode. Daarom plaatsen we het volgende in het bestand Web.config, onder <system.web>: <deny users="*" />
Het eerste blok stelt de authenticatie mode in, evenals de loginpagina (login.aspx), de cookienaam van het cookie dat we gaan gebruiken voor onze loginsessie, en het aantal minuten waarna de loginsessie verloopt. Let op, deze loginsessie timeout is volledig onafhankelijk van de sessie timeout! De sessie timeout stellen we in door aan <system.web> <sessionState> het attribuut timeout="60" toe te voegen. De loginsessie timeout en de sessie timeout zetten we best op dezelfde waarde. Merk op dat de timeouts gelden na het ingestelde aantal minuten inactiviteit. Dus bij elke actie worden ze terug gereset. Het tweede blok laat enkel gebruikers toe die zich in de groep raamplanbeheer bevinden, de rest wordt geweigerd. Het laatste blok tenslotte zorgt ervoor dat de windows identiteit waaronder de webpagina voor de ingelogde gebruiker uitgevoerd wordt gelijk is aan die van
Hoofdstuk 4. Raamplanbeheer
62
IIS. Dit is IUSR CAPELDERIJSRV voor onze productieserver (IIS 5.0), en NT AUTHORITY\NETWORK SERVICE voor onze ontwikkelingsserver (IIS 6.0). Volgende (pseudo)code wordt uitgevoerd wanneer er op de loginknop wordt geklikt na het invullen van de gebruikersnaam en wachtwoord: Als ActiveDirectoryLogin(gebruikersnaam, wachtwoord) succesvol { groepen = haalGroepenOpUitActiveDirectory(gebruikersnaam) ticket = Maakauthenticatieticket(login, huidige datum, hudige datum + 60min, groepen) encrypteer(ticket) cookie = maakCookie(ticket) Keer terug naar oorspronkelijk aangevraagde pagina }
Het volgende plaatsen we in het Global.asax.cs bestand (voorbeeld in pseudo code): protected void Application_AuthenticateRequest(Object sender, EventArgs e) { cookie = vraagCookieOp Als cookie niet leeg { ticket = decrypteer(geefCookieinhoud(cookie)) Als decrypteren gelukt { groepen = haalGroepenUitCookie(cookie) principal = creeerNieuwePrincipal(haalNaamUitCookie(cookie), groepen) Context.User = principal } } }
Als er dus geen geldige ge¨encrypteerde cookie wordt meegegeven, zal er geen geldige principal op de pagina context worden geplaatst door de methode Application AuthenticateRequest. Hierdoor zal de login pagina opnieuw getoond worden. Deze maakt een correct ge¨encrypteerde cookie aan wanneer de login gegevens via Active Directory zijn goedgekeurd. Merk op dat zowel de login van de ingelogde gebruiker, als zijn groeplidmaatschap worden doorgestuurd via een cookie, en dus lokaal bij de client zelf worden bewaard. De gebruiker kan deze gegevens echter niet zelf wijzigen, aangezien de cookie versleuteld is, en de sleutel op de server bewaard wordt. Bovenstaande werkwijze wordt overigens door Microsoft zelf voorgesteld[5].
Hoofdstuk 4. Raamplanbeheer
4.5.11
63
Word DCOM object
Wanneer de gebruiker op de menuknop klikt om een Word document te genereren wordt er via een DCOM object een Word instantie geopend op de server (al dan niet zichtbaar). Hierin worden alle bladwijzers overlopen, en door de gepaste inhoud vervangen. Zo worden alle paragrafen op de juiste plaats ingevoegd, wordt de medewerkers tabel opgebouwd, en wordt tenslotte een inhoudstafel gegenereerd. Om te achterhalen hoe dit er in programmacode uitziet, kunnen we handig gebruik maken van een functie in Word: Nieuwe macro opnemen... in het menu Extra, macro. Tijdens het opnemen doen we alle net beschreven handelingen. Wanneer we de opname stoppen gaan we via het menu Extra, macro naar Macro’s..., selecteren onze macro en kiezen Bewerken. We zien nu de achterliggende code in Visual Basic. Het is niet noodzakelijk de meest optimale code om de gewenste handelingen uit te voeren, en het is ook geen C# code, maar het helpt ons wel een heel stuk vooruit. Om gebruik te kunnen maken van een COM object moeten we eerst de gapaste referentie in ons project toevoegen. Dit gebeurt als volgt: We klikken met de rechter muisknop op References (in onze Solution Explorer) en kiezen Add reference. In het COM tabblad selecteren we Microsoft Word 11.0 Object Library, we klikken op de knop Select en tenslotte op Ok. In de bestanden waarin we gebruik wensen te maken van een Word DCOM object, plaatsen we bovenaan using Word;. Wanneer we onze toepassing willen uitvoeren, moeten we zien dat de juiste beveiligingsgroep de juiste uitvoerrechten heeft om een Microsoft Word-Document DCOM object op te starten. Meer informatie hierover kan u vinden in 4.6. Het programmeren van COM objecten is redelijk onhandig. Bij de meeste procedure aanroepen worden er als parameters namelijk referenties verwacht. Dit wil zeggen dat we voor elke parameter een object moeten aanmaken, en dit als referentie moeten doorgeven. Wanneer we de waarde voor een bepaalde parameter niet wensen te specifi¨eren, geven we een referentie naar een object van het type System.Reflection.Missing.Value mee. Hieronder volgt een voorbeeld ter illustratie. Wat we doen is de bladwijzer opzoeken met de naam inhoudsopgave, en op die plaats een inhoudstabel toevoegen. oWordApp bevat een object van de klasse Word.ApplicationClass, waarin reeds een document is geopend. object object object object object object object
missing = System.Reflection.Missing.Value; waar = true; onwaar = false; tableId = "inhoudstafelken"; legeString = ""; upperHeadingLevel = 1; lowerHeadingLevel = 3;
Hoofdstuk 4. Raamplanbeheer
64
naamvanbookmark = "inhoudsopgave"; oWordApp.Selection.GoTo(ref gotobookmark, ref missing, ref missing, ref naamvanbookmark); oWordApp.ActiveDocument.TablesOfContents.Add(oWordApp.Selection.Range, ref waar, ref upperHeadingLevel, ref lowerHeadingLevel, ref onwaar, ref tableId, ref waar, ref waar, ref legeString, ref waar, ref waar, ref waar); oWordApp.ActiveDocument.TablesOfContents[1].TabLeader = WdTabLeader. wdTabLeaderSpaces; oWordApp.ActiveDocument.TablesOfContents.Format = WdTocFormat.wdTOCClassic;
Een ander probleem was dat er na het opslaan en sluiten van het Word document via een COM object, een instantie van Word achterbleef in het geheugen. Wanneer er met andere woorden in de loop der tijd 1000 keer een Word document zou worden geproduceerd, zouden er 1000 Word instanties (van meer dan 10MB/stuk) in het geheugen achterblijven wat onvermijdelijk voor problemen zou zorgen. De volgende code was nodig om alle restanten uit het geheugen te verwijderen: // het sluiten en vrijgeven van de openstaande documenten oWordApp.Documents.Close(ref saveChanges, ref missing, ref missing); System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordDoc); oWordDoc = null; // sluiten en vrijgeven van de Word applicatie oWordApp.Application.Quit(ref missing, ref missing, ref missing); System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordApp); oWordApp = null; GC.Collect();
4.5.12
Internationalisatie
De applicatie werd ook voorzien voorzien op uitbreidingen in andere talen. Dit omdat het Nederlands natuurlijk geen wereldtaal is, maar vooral omdat het een goede gewoonte is om op deze manier te programmeren. We maken eerst de nodige resource files aan. Dit doen we door met de rechtermuisknop op het mapje resources te klikken in de Solution Explorer, en vervolgens op Add New Item. Daar kiezen we Web Project Items, Resources, Assembly Resource File. Op deze manier maken we een MyResources.resx aan, en een MyResources.nl.resx. De eerste is voor de standaard taal (maar gaan we niet opvullen), de tweede voor het Nederlands. Het gaat hier om een xml-bestand dat een gegevenstabel bevat. Deze tabel kunnen we via Visual Studio eenvoudig aanvullen na het dubbelklikken op het bestand. We gebruiken de kolommen name
Hoofdstuk 4. Raamplanbeheer
65
en value om een aantal naam-waarde paren op te geven. Zo voegen we bijvoorbeeld de naam nieuweparagraaftypesm toe met de waarde ‘Kies de gepaste gegevens voor het nieuwe paragraaftype’. In alle andere resource files (voor de andere talen) voegen we dezelfde naam toe, met als waarde de vertaling ervan in de gepaste taal. Een ander voorbeeld: 4 als naam, ‘Fout bij het aanmaken van het nieuwe raamplan’ als waarde. Dit is de foutboodschap voor de fout met id gelijk aan 4. De volgende stap is het aanvullen van het Global.asax.cs bestand: protected void Application_BeginRequest(Object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL"); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; }
Tenslotte passen we ozne TemplatePage.cs aan: private ResourceManager _resources; protected override void OnInit(System.EventArgs e) { ... ResourceManager temp = (ResourceManager)Application["resources"]; if (temp == null) { Application["resources"] = new ResourceManager( "Raamplanbeheer.resources.MyResources", Assembly.GetExecutingAssembly()); } _resources = (ResourceManager)Application["resources"]; }
Deze code controleert of de resources zijn geladen in de applicatie, en indien niet wordt er een instantie van gemaakt en in de applicatie geladen. Achteraf kunnen we via _resources.GetString("nieuweparagraaftypesm") bijvoorbeeld de waarde ophalen in de gepaste taal. [6]
4.5.13
Foutafhandeling
Overal waar we een fout verwachten, vangen we ze op via een try/catch blok. Vervolgens kunnen we een zelf gedefini¨eerde foutmelding oproepen via bijvoorbeeld SetErrorCode(7,fout.ToString()). De functie SetErrorCode is een zelf geschreven methode in de TemplatePage klasse. Deze stelt de errorCode en errorString variabelen in, en doet
Hoofdstuk 4. Raamplanbeheer
66
vervolgens een transfer naar de Error.aspx pagina. In Error.aspx zelf kunnen we aan deze variabelen via ((TemplatePage)Context.Handler).ErrorCode
en ((TemplatePage)Context.Handler).ErrorString
ErrorCode en ErrorString zijn eigenschappen voor de lokale variabelen errorCode respectievelijk errorString van PageTemplate.
4.5.14
Volgorde van opladen
Het werken met de tussenliggende pagina TemplatePage en ons template systeem bracht ook een hoop moeilijkheden en nadelen met zich mee. Om een nieuwe pagina op te bouwen moet men met meer zaken rekening houden dan alleen maar de pagina af te leiden van PageTemplate i.p.v. Page. Hieronder zie je de volgorde waarin alles opgestart en aangeroepen wordt, en waarmee je moet rekening houden: Initialisatie van de pagina 1. Eerst wordt de constructor van de afgeleide klasse opgeroepen. We kunnen hier eventueel een paar eigen controls initialiseren. Daarmee bedoel ik bijvoorbeeld webcontrols die handmatig zijn aangemaakt in het code behind bestand, en niet diegene die in de aspx pagina voorkomen. 2. Vervolgens wordt de constructor van TemplatePage opgeroepen. Hierin worden lokale variabelen ge¨ınitialiseerd, en het menu opgebouwd. De werkverdeling knop, de .doc knop en de logout knop worden standaard op inactief gezet. 3. Dan wordt OnInit van de afgeleide klasse opgeroepen. Hier kunnen we onze eigen controls toevoegen aan this.Controls. 4. Dit is de laatste kans (en aangewezen plaats) om nog eigen controls toe te voegen via this.Controls, om zelf menu-items toe te voegen aan MenuItems, of om selectie-items toe te voegen aan SelectieItems. 5. Helemaal op het einde van de OnInit methode van de afgeleide klasse, wordt de OnInit methode van TemplagePage opgeroepen. Hierin wordt de userid variabele opgevuld die via de eigenschap UserId kan worden opgevraagd. De ResourceManager wordt hier ook ge¨ınitialiseerd. En tenslotte wordt de volledige pagina opgebouwd via ons templatesysteem. Dit wil zeggen dat alle controls reeds in this.Controls moeten aanwezig zijn, want ze worden er nu uitgehaald en in onze volledig zelf opgebouwde paginastructuur gestopt.
Hoofdstuk 4. Raamplanbeheer
67
6. Pas vanaf nu kunnen we de UserId opvragen en de taalstrings bekomen (via GetResource). 7. Dan wordt de OnLoad van de basisklasse opgeroepen. 8. Nu gaat het systeem de viewstate herstellen (dus ook of er al dan niet een event opgeroepen werd!!) via de Page Init methode. Belangrijk is dus dat alle controls op dit moment in this.Controls aanwezig zijn (wat onrechtstreeks gebeurde via ons template systeem in vorige stappen)! Ook belangrijk is dat ze in de zelfde volgorde en plaats zitten in this.Controls, als voorheen!! Stel dat we bijvoorbeeld enkel bij een postback een menuitem toevoegen in de OnInit, dan zal de index in this.Controls van alle volgende controls wijzigen en de viewstate niet correct meer kunnen worden hersteld. Laden van de pagina De pagina wordt geladen, met de bijbehorende event. Deze event roept Page Load op indien we dit zo ingesteld hebben in onze Code Behind file. Het laden van de pagina gebeurt altijd, ook wanneer de pagina geladen wordt na het drukken op een knop bijvoorbeeld. We moeten wel in gedachten houden dat de viewstate op dit moment reeds hersteld is, en dat we dus geen drastische wijzigingen meer moeten doen aan de inhoud van een control (willen we gebruik maken van het automatische viewstate herstel). Validaties of controles Ik heb mijn eigen validators moeten schrijven, want om de een of andere reden werkten de standaard validators van .NET niet via ons templatesysteem. Gebeurtenissen afhandelen De gebeurtenissen van de gepaste controls treden eventueel op, en worden afgehandeld. Genereren pagina en afsluiten De pagina wordt gerenderd, extra verborgen velden worden toegevoegd, de gebeurtenis Page Unload wordt opgeroepen en de informatie van de pagina wordt uit het geheugen verwijderd. Wanneer we eigen controls hadden gemaakt, zoals menuknoppen, dan mogen deze aangepast worden (de status of de link bijvoorbeeld) tot op dit moment. Hier wordt namelijk de methode Render opgeroepen van de control, zodat die definitief vertaald wordt in html code. Ons Model kan ten alle tijde opgevraagd worden via de eigenschap ModelObject. Was deze nog niet ge¨ınitialiseerd, dan gebeurt dat op dat moment.
Hoofdstuk 4. Raamplanbeheer
68
Een algemene opmerking: wanneer we willen dat .NET zelf een aantal zaken voor ons regelt, zoals het herstellen van de inhoud van de controls + hun viewstate, dan moeten deze controls op de juiste momenten in this.Controls aanwezig zijn!! Wanneer we ze bijvoorbeeld toevoegen aan onze SelectionItems, dan zullen ze pas aanwezig zijn in this.Controls NA het afhandelen van de OnInit methode! Wanneer we enkel de eerste keer een webcomponent zoals een dropdownlist opvullen (aan dataset koppelen en binden), en dit NA de OnInit (na het toevoegen van de component aan this.controls indien die er nog niet in aanwezig was), dus bijvoorbeeld in de Page Load, en volgende keren niet (ook niet koppelen aan dataset!!) dan zal OOK de inhoud worden hersteld van de component, en vervolgens de viewstate.
4.6
Het installeren van de toepassing op een productieserver
Volgende zaken moeten aanwezig zijn op de productieserver2 : • Windows2000 of hoger • Active Directory • Microsoft SQL Server 2000 • .NET Framework (te downloaden) • Internet Information Services (IIS) 5.0 of hoger • Microsoft Word 2003 Op onze productieserver draait IIS 5.0, dus de webtoepassing draait onder de windows gebruiker IUSR CAPELDERIJSRV . Moest dit IIS 6.0 zijn, dan was het de groep NT AUTHORITY\NETWORK SERVICE .
4.6.1
Microsoft Word-Document DCOM object
Eerst en vooral moet deze gebruiker (of groep) het recht hebben om een Microsoft WordDocument DCOM object op te starten. Dit kunnen we instellen via de Component Services tool: DCOMCNFG.EXE. Daar kiezen we bij Console Root --> Component services --> Computers --> My Computer --> DCOM Config met de rechter muisknop op Microsoft Worddocument. Vervolgens kiezen we properties. In het Security tabblad kiezen we Launch Permissions --> Customize --> Edit. Daar voegen we onze gebruiker/groep toe. De user/groep moet ook kunnen schrijven in de map waar het output bestand moet geplaatst worden. Daarom geven we de gebruiker/groep NTFS schrijfrechten op de directory I:\Inetpub\wwwroot\Raamplanbeheer\maakDocument\documents. 2
http://www.microsoft.com/netherlands/msdn/aspnet/menu.asp
Hoofdstuk 4. Raamplanbeheer
4.6.2
69
Microsoft SQL Server 2000
We veronderstellen dat MS SQL Server 2000 reeds is ge¨ınstalleerd. Databank aanmaken 1. We klikken met rechter muisknop op icoontje rechtsonder in de taakbalk en kiezen voor MS SQL Server - Start. Of we kunnen via Services in het Control Panel de service MSSQLSERVER starten. 2. We starten de Enterprise manager via Startmenu --> All programs --> Microsoft SQL Server --> Enterprise manager. 3. Bij Console Root --> Microsoft SQL Servers --> SQL Server Group --> (local) (Windows NT) --> Databases kunnen we via onze rechter muisknop voor New Database ... kiezen (of via menu Action --> New Database ...). We kunnen hier een naam opgeven (raamplanbeheer), en eventueel ook de namen van de files waarin de database zal worden opgeslagen. 4. Nu zien we onder Databases de nieuwe database raamplanbeheer die we hebben aangemaakt. Wanneer we die openen kiezen we voor Tables. Daar kunnen we op dezelfde manier (bijvoorbeeld rechter muisknop) kiezen voor New Table.... We maken via deze gui al onze kolommen aan met bijpassende types. Handmatig inhoud toevoegen Na het aanmaken van een tabel kunnen we met onze rechter muisknop op deze tabel klikken en vervolgens open table --> return all rows kiezen. Onderaan het overzicht van de rijen kunnen we nieuwe rijen toevoegen. We voegen zo al onze statische gegevens toe. Automatisch script genereren Nadat onze tabellen en onze statische gegevens aangemaakt zijn, klikken we met de rechter muisknop op onze database, en vervolgens op All tasks - Generate SQL Script.... Script laden Wanneer we achteraf ons script willen laden, of uitbreiden, kunnen we dit doen via de tool ‘SQL Query Analyzer’. We kiezen trouwens steeds voor ‘Windows Authentication’, zodat al onze Windows gebruikers automatisch ook database gebruikers zijn. Uit de dropdownlist bovenaan selecteren we onze database raamplanbeheer. Met de opdracht ‘Parse Query’ kunnen we ons script controleren. Met ‘Execute Query’ voeren we het effectief uit.
Hoofdstuk 4. Raamplanbeheer
70
Toegang vanuit ASP.NET Aangezien onze SQL Server ingesteld staat op Windows only authenticatie (SQL server en IIS webserver op zelfde machine) moeten we ervoor zorgen dat de gebruiker waaronder IIS ASP pagina’s draait toegang heeft tot onze database. Dit is dus IUSR CAPELDERIJSRV voor IIS 5.0. Om dit account toegang te geven klikken we in SQL Server Enterprise Manager met de rechtermuisknop op Console Root --> Microsoft SQL Servers --> SQL Server Group --> (local) (Windows NT) --> Security --> logins, en vervolgens new login. Als naam geven we de IUSR_CAPELDERIJSRV op. Bij Defaults stellen we eventueel onze database raamplanbeheer in. Vervolgens vinken we op het Tabblad Database Access onze database raamplanbeheer aan, en de gepaste rollen: public en db_owner. Hetzelfde doen we nu voor de administratieve database.
4.6.3
Microsoft IIS 5.0
Nu rest ons nog enkel het installeren van de webapplicatie zelf. Daartoe kiezen we in Visual Studio .NET nog een laatste maal voor Rebuild all. Vervolgens kopi¨eren we de volledige directory Raamplanbeheer (met ons gehele project erin) vanop onze ontwikkelingsserver naar onze productieserver in de map C:\Inetpub\wwwroot. Daarna openen we Internet-servicebeheer via Start - Programma’s - Systeembeheer. Daar klikken we met de rechter muisknop op Internet Information Services --> *capelderijsrv --> standaardwebsite --> Raamplanbeheer en kiezen eigenschappen. In het tabblad Map kiezen we bij Instellingen voor toepassing op de knop Maken. Dit maakt van onze map Raamplanbeheer een toepassing. De optie ‘Machtigingen uitvoeren’ mag op ‘Alleen scripts’ blijven staan.
Hoofdstuk 5
Internet verbinding 5.1
Keuze van de lijn
Als Internet verbinding werd gekozen voor een Skynet ADSL I-Line Fixed IP voor scholen. Dit is een verbinding gelijkaardig aan de Skynet ADSL Office Line Fixed IP. Eigenschappen/voordelen van deze lijn zijn: • Permanente en volledige toegang: alle poorten zijn beschikbaar (in tegenstelling tot concurrentie!) • Download: maximum 1Mbps • Upload: maximum 256Kbps • Transfervolume: onbeperkt (in tegenstelling tot concurrentie!) • Vast IP adres: 80.201.243.39 • 25 e-mail accounts • Hosting: 10MB Unix-webruimte (PHP en MySQL) Dit alles voor een 37d per maand (voor scholen, bibliotheken en ziekenhuizen).
5.2
Router
Volgens Skynet was de enige mogelijkheid om deze lijn te benutten gebruik maken van een speciale CISCO Router 826. Voor deze router zou een maandelijkse huur moeten worden betaald van 22,49d. Ik was er echter van overtuigd dat de router totaal overbodig was, en dat een gewone Alcatel (Thomson) Speedtouch 510 Ethernet ADSL modem zou volstaan. Bij Skynet konden ze mij hieromtrent echter geen enkele informatie verschaffen. Op Internet
71
Hoofdstuk 5. Internet verbinding
72
waren er nog mensen met de vraag of het echt niet zonder CISCO router kon, maar nergens stond een bruikbaar antwoord. Uiteindelijk heb ik een werkende configuratie gevonden, zonder de CISCO router. In volgende hoofdstukken volgt de werkwijze voor het configureren van de Alcatel Speedtouch 510 ADSL modem voor een Skynet ADSL Office Line of I-line Fixed IP.
5.3 5.3.1
Configuratie ADSL-modem Gegevens
De volgende zaken waren gegeven: • IP WAN (ons publiek IP-adres): 80.201.243.39 • MASK WAN: 255.255.255.128 • GATEWAY: 80.201.243.1 Deze gegevens werden gekozen i.v.m. de verbinding tussen modem en netwerk (gateway): • IP LAN: 10.0.0.138 (standaard adres van modem) • MASK LAN: 255.0.0.0 • IP Linux Gateway: 10.0.0.254
5.3.2
Connectie met modem
Een basisconfiguratie kan gedaan worden via de webinterface van de modem. Maar om de geavanceerdere instellingen te doen die nodig zijn in ons geval, moeten we werken via de CLI (Command Line Interface). Dit doen we simpelweg via een telnet connectie: telnet 10.0.0.138
De pc waarop we de telnet client draaien moet natuurlijk in dezelfde IP-range zitten. Vervolgens kunnen we op twee manieren gebruik maken van de menuopties. Ofwel kiezen we een opdracht door stap voor stap in de boomstructuur af te dalen, het commando in te typen zonder parameters, en vervolgens via vraag en antwoord de nodige parameters op te geven. Bijvoorbeeld: =>ip [ip]=>rtadd dst = 192.168.50.0 [dstmsk] = 255.255.255.0 [label] =
Hoofdstuk 5. Internet verbinding
73
[gateway] = 10.0.0.254 [intf] = [metric] =
Het overeenkomstige volledige commando wordt hierna getoond (en uitgevoerd). We kunnen dit trouwens steeds terugroepen uit de history via de cursor toetsen. Het volledige commando ziet er zo uit: :ip rtadd dst=192.168.50.0/24 gateway=10.0.0.254
Deze testroute terug verwijderen doen we trouwens via :ip rtdelete dst=192.168.50.0/24 gateway=10.0.0.254
Heel eenvoudig dus door het terugroepen van ons oorspronkelijk commando uit de history, en door vervanging van rtadd door rtdelete. In het vervolg van dit hoofdstuk werken we met volledige commando’s.
5.3.3
Opzetten ADSL verbinding
We kennen eerst het benodige virtuele ATM kanaal toe. :phonebook add name="IPOAtoCISCO2" addr=8*35 type=any
De naam ‘IPAtoCISCO2’ komt uit een handleiding voor configuratie van de SpeedTouch met een Cisco IPsec Gateway maar mag in principe vrij gekozen worden. 8*35 slaat op adres VP/VC 8/35, het benodigde virtuele ATM kanaal. Bij een Office Line bij Belgacom/Skynet is dit gewoonlijk 8/35 voor PSTN, en 0/35 voor ISDN. In geval van twijfel kan dit ook door het commando :phonebook autolist worden opgevraagd. Met :phonebook detach en :phonebook delete kunnen eventuele reeds bestaande VP/VC combinaties worden losgekoppeld respectievelijk verwijderd. De bestaande kan je opvragen met :phonebook list. Vervolgens maken we de WAN interface aan. :ipoa ifadd intf="IPOAtoCISCO2" dest=IPOAtoCISCO2 :ipoa ifattach intf=IPOAtoCISCO2
‘Ipoa’ staat voor IP Over ATM. De eerste ‘IPOAtoCISCO2’ is de naam van de nieuwe interface, de tweede ‘IPOAtoCISCO2’ is de naam van onze phonebook entry. Standaard worden de IP-paketten ge¨encapsuleerd in LLC/SNAP frames op AAL5 frames (AAL5SNAP). Nu gaan we de IP configuratie van de interface afhandelen. :ip apadd addr=80.201.243.39 intf=IPOAtoCISCO2 pointopoint=80.201.243.1
Hoofdstuk 5. Internet verbinding
74
Let op de enkele ‘t’ in ‘pointopoint’. Dit is om neerwaartse compatibiliteit te behouden met een historische typefout. Het eerste adres is ons publieke Internet adres, het tweede het opgegeven adres voor de externe gateway bij Skynet. Daarna maken we de standaard route aan, naar het Internet. :ip rtadd dst=0.0.0.0/0 gateway 80.201.243.1 metric=1
Een overzicht van de interfaces en hun IP-adressen ziet er als volgt uit: :ip aplist 1
2
0
eth0 Type:Ethernet HWaddr 00:90:d0:bb:be:ea BRHWaddr ff:ff:ff:ff:ff:ff ip-addr:10.0.0.138 mask:255.0.0.0 UP RUNNING MTU:1500 Group:2 IPRX bytes:254279154 unicastpkts:2214696 brcastpkts:90851 IPTX bytes:852465389 unicastpkts:2472229 brcastpkts:3
droppkts:0
IPOAtoCISCO2 Type:SERIAL ip-addr:80.201.243.39 point-to-point:80.201.243.1 UP RUNNING pat MTU:1500 Group:0 IPRX bytes:851986051 unicastpkts:2496800 brcastpkts:0 IPTX bytes:232410847 unicastpkts:2238717 brcastpkts:0
droppkts:0
loop Type:0 ip-addr:127.0.0.1 mask:255.0.0.0 UP RUNNING MTU:1500 Group:1 IPRX bytes:0 unicastpkts:0 brcastpkts:0 IPTX bytes:0 unicastpkts:0 brcastpkts:0
droppkts:0
Tenslotte moeten we ervoor zorgen dat alle interne adressen vertaald worden naar ons publiek IP-adres (we hebben er zo maar ´e´en). Daarom configureren we NAT1 voor het IP-adres 80.201.243.39. :nat enable 80.201.243.39 type=pat saveall
Het laatste commando bewaart alle instellingen definitief op de modem. 1
Network Address Translation
Hoofdstuk 5. Internet verbinding
5.3.4
75
Aanmaken van de gepaste routes
Naast de default route (naar het Internet) moeten we nog een paar extra routes voor eigen netwerken opgeven. :ip rtadd dst=192.168.123.0/24 gateway=10.0.0.254 :ip rtadd dst=192.168.2.0/24 gateway=10.0.0.254
De totale route tabel ziet er nu als volgt uit: :ip rtlist Destination Label 10.0.0.138/32 80.201.243.1/32 80.201.243.39/32 127.0.0.1/32 192.168.2.0/24 192.168.123.0/24 10.0.0.0/8 224.0.0.0/4 0.0.0.0/0
5.3.5
Gateway Intf Mtrc Status 10.0.0.138 eth0 0 [UP] 80.201.243.39 IPOAtoCISCO2 0 [UP] 80.201.243.39 IPOAtoCISCO2 0 [UP] 127.0.0.1 loop 0 [UP] 10.0.0.254 eth0 0 [UP] 10.0.0.254 eth0 0 [UP] 10.0.0.138 eth0 0 [UP] 10.0.0.138* eth0 0 [UP] 80.201.243.1 IPOAtoCISCO2 1 [UP]
Forwarding
Omdat bepaalde diensten op servers draaien op het intern netwerk, maar er maar ´e´en enkel publiek IP adres beschikbaar is, moeten we aanvragen op bepaalde poorten doorsturen naar de gepaste interne server. Dit heet forwarding, en wordt als volgt ingesteld: :nat create protocol=tcp inside_addr=192.168.123.1:www-http outside_addr =80.201.243.39:www-http :nat create protocol=tcp inside_addr=192.168.123.1:smtp outside_addr =80.201.243.39:smtp
5.3.6
Pingen
Wanneer we bepaalde configuraties willen testen, is het altijd handig om vanop de modem te pingen naar een Internet adres, of een lokaal adres. Dit kan via het volgende commando: :ip ping addr=192.168.123.1 count=10 size=1000 interval=5100
Hoofdstuk 5. Internet verbinding
5.3.7
76
Linux Gateway
De Linux Gateway moet nu als default gateway 10.0.0.138 instellen (onze modem). Verder moet de gepaste routing gebeuren zodat de netwerken 10/8, 192.168.123/24 en 192.168.2/24 correct worden verbonden met elkaar. Meer over de Linux Gateway configuratie vindt u in hoofdstuk 3.
5.4
Configuratie zonder Linux Gateway
Tenslotte beschrijf ik welke handelingen ondernomen moeten worden om de modem zodanig te configureren dat hij zonder de Linux gateway Internet kan aanbieden aan het betrouwbare netwerk. We verbinden de modem dan rechtstreeks met de switch via een untagged port op VLAN 123. Voordat we dit doen herconfigureren we de modem eerst: :ip rtdelete dst=192.168.123.0/24 gateway=10.0.0.254 :ip apadd addr=192.168.123.254/24 saveall
Nu maken we opnieuw een telnet verbinding naar het nieuwe adres (nadat we het ip adres van onze configuratie-pc gewijzigd hebben). In de nieuwe telnet-sessie voeren we volgende commando’s uit: :ip apdelete 10.0.0.138 saveall
Hoofdstuk 6
Mailserver 6.1
Inleiding
Zoals reeds eerder vermeld in hoofdstuk 1, werd er gekozen voor MS Exchange Server 2003 . De voornaamste redenen zijn: • Windows software, dus ondersteuning door NC Computing. • Perfecte samenwerking tussen Outlook 2003 clients en de server software. • Mails, contacts en agenda’s worden centraal op server bewaard. Gebruikers kunnen aan hun gegevens, onafhankelijk van op welke werkpost ze zich aanmelden en of er nu gebruik wordt gemaakt van roaming profiles of niet. Ook het backuppen wordt eenvoudiger op deze manier. • De mogelijkheid om agenda’s te delen. Een van de nadelen is natuurlijk het prijskaartje: ongeveer 200d voor de serverlicentie, en 2.5d per client licentie (gereduceerde prijzen voor de Vlaamse Welzijnszorg).
6.2
Installatie
Een paar kleine opmerkingen vooraf. We veronderstellen dat Active Directory reeds is ge¨ınstalleerd en geconfigureerd voor het domein ‘capelderij.local’. Dat was ook het geval op de stageplaats. Voor wat nu volgt is het ook handig om weten dat de Windows 2000 Server software Nederlandstalig is, maar de Exchange server Engelstalig (UK versie).
6.2.1
Pre-installatie
Exchange 2003 integreert zeer nauw met enkele onderdelen van Windows. Daarom moeten we zien dat op voorhand volgende zaken ge¨ınstalleerd zijn: 77
Hoofdstuk 6. Mailserver
78
• Microsoft .NET Framework, • Network News Transfer Protocol (NNTP) service, • SMTP service, • World Wide Web (WWW) service. Voor Windows 2003 moeten we deze via ‘Add/Remove Windows Components’ stuk voor stuk installeren. Voor Windows 2000 moeten we enkel de NNTP service manueel installeren. Het .NET Framework of ASP.NET zitten standaard niet in Windows 2000, en daarom zal de Exchange 2003 installatie dit voor zijn rekening moeten nemen, mocht het nog niet ge¨ınstalleerd zijn. De SMTP en WWW services werden automatisch ge¨ınstalleerd bij de installatie van het besturingssysteem. Om de NNTP service te installeren voeren we volgende handelingen uit: • Vanuit het configuratiescherm openen we Software. • We kiezen vervolgens Windowsonderdelen toevoegen of verwijderen. • We selecteren Internet-services (IIS), en dan Details.... • We schakelen de optie NNTP-service aan. De opties SMTP-service en World Wide Web-server zouden normaal al moeten geselecteerd zijn, indien niet kunnen we dit nu doen. • We klikken Ok en Volgende om de installatie te voltooien.
6.2.2
Hoofdinstallatie
In het openingsscherm Welcome to Exchange Server 2003 Setup (na het invoegen van de installatie cd-rom) kiezen we rechts voor Exchange Deployment Tools. We klikken bovenaan op Deploy the first Exchange 2003 server en in het daarop volgende scherm onderaan op New Exchange 2003 Installation. We kunnen nu stap voor stap afwerken: • SP3 van Windows 2000 Server moet ge¨ınstalleerd zijn (dit was in onze configuratie reeds het geval). • NNTP, SMTP en WWW services moeten ge¨ınstalleerd zijn. • Om zeker te zijn dat alles in orde is op de server, installeren we eerst de Windows 2000 SP3 Windows Support Tools1 . Belangrijk is dat we deze versie downloaden en installeren, en niet diegene die op de installatie cd-rom van Windows 2000 Server te vinden is, aangezien die nog niet compatibel met SP3 was. 1
http://www.microsoft.com/windows2000/downloads/servicepacks/sp3/supporttools.asp
Hoofdstuk 6. Mailserver
79
• We kunnen nu de diagnose-tools DCDiag (voor de domein controller configuratie) en NetDiag (voor de netwerk instellingen) gebruiken. • De volgende stap is het uitvoeren van ForestPrep (via de link, of via setup /forestprep). Je moet hiervoor wel de juiste rechten hebben. Via deze stap wordt het Active Directory Schema uitgebreid tot bijna het dubbele aantal van het oorspronkelijke aantal attributen. • Daarna starten we DomainPrep op dezelfde wijze (via de link of via setup /domainprep). Hierdoor wordt het Windows 2000 domein voorbereid. Zo worden er extra groepen aangemaakt en rechten toegekend. • We zijn nu eindelijk klaar voor de uiteindelijke interactieve Exchange Server 2003 installatie. Hierbij klikken we een paar keer Next, we kiezen Create New Exchange Organisation, nog een paar keer Next. We letten hierbij niet op de waarschuwing i.v.m. reeds bestaande groepen in een Mixed Mode domein, aangezien dit voor ons niet van toepassing is, en klikken uiteindelijk op Finish. We klikken tenslotte Ok om te herstarten.
6.3 6.3.1
Configuratie MMC Exchangetools
Voor de eenvoud van de verdere configuratie maken we een eigen MMC2 . Dit doen we door mmc op te starten via Start, uitvoeren. In het menu Console kiezen we voor Module toevoegen / verwijderen. In het tabblad Zelfstandige module kiezen we onderaan Toevoegen.... We voegen nu volgende zelfstandige modules toe: • DNS • Exchange System (First Organization (Exchange)) • Active Directory: gebruikers en computers voor capelderijsrv.capelderij.local (onze huidige server) • Services (lokaal) We kiezen in het menu Console voor Opslaan als... en slaan onze wijzigingen op in exchangetools.msc. 2
Microsoft Management Console
Hoofdstuk 6. Mailserver
80
Figuur 6.1: Onze Exchangetools MMC
6.3.2
Verplaatsen van de Mailbox Store naar andere partitie
Op de server zijn twee partities C: en D: aanwezig. Standaard wordt de mailbox store op C: geplaatst. Dit is eigenlijk onze systeempartitie, en alle data moet in principe op D: terecht komen. Na het aanmaken van een gepaste map (bijvoorbeeld D:\exchange_store1 openen we ofwel onze MMC en kiezen we de Exchange module (First Organization (Exchange)),
Hoofdstuk 6. Mailserver
81
ofwel openen we via het startmenu de Exchange System Manager. Daar kiezen we in de boomstructuur voor Administrative Groups, First Administrative Group, Servers, CAPELDERIJSRV, First Storage Group. Hierop klikken we met onze rechtermuisknop, kiezen voor eigenschappen, en passen de Transaction log location en de System path location aan naar onze nieuwe map. Vervolgens doen we hetzelfde voor Mailbox Store (CAPELDERIJSRV) onder First Storage Group. In het Properties venster ervan veranderen we in het tabblad Database het Exchange database en het Exchange streaming database pad naar D:\exchange_store1\priv1.edb respectievelijk D:\exchange_store1\priv1.stm.
6.3.3
Limiet mailboxen instellen
Om het hardeschijf verbruik op de server wat in te perken, stellen we per mailbox een limiet in van 1GB. Dit doen we via Exchange tools, First Organization (Exchange), Administrative Groups, First Administrative Group, Servers, CAPELDERIJSRV, First Storage Group. Daar klikken we met onze rechtermuisknop op Mailbox Store (CAPELDERIJSRV) en kiezen eigenschappen. Op het tabblad Limits vullen we voor Issue warning at (KB) 700.000 in (bij een verbruik van ongeveer 700MB wordt er een waarschuwing naar de gebruiker verstuurd), voor Prohibit send at (KB) 800.000 (mailbox voor meer dan 800MB gevuld zal een verbod op verzenden tot gevolg hebben), en tenslotte Prohibit send and receive at (KB) op 1.000.000: wanneer er 1GB in de mailbox zit zal de gebruiker geen e-mails meer kunnen versturen of ontvangen. Deze instellingen zijn van toepassing op alle mailboxen, tenzij deze instelling per mailbox zelf wordt gewijzigd.
6.3.4
Wijzigen van het e-mail domein
Standaard gebruikt Exchange de domeinnaam van Active Directory, capelderij.local in ons geval, als e-mail domein. We wensen echter het domein capelderij.be te gebruiken. Om dit te wijzigen klikken we in onze MMC op First Organization (Exchange), Recipients, Recipient Policies. In het rechter venster klikken we met onze rechtermuisknop op Default Policy en kiezen vervolgens eigenschappen. In het tabblad E-Mail Addresses (Policy) voegen we het adres @capelderij.be toe van type SMTP. Het adres @capelderij.local kunnen we dan eventueel verwijderen. Vanaf nu zal de Exchange server ook binnenkomende berichten voor het domein capelderij.be accepteren en bezorgen in de mailbox van de gepaste gebruiker.
6.3.5
Internet mail ontvangen
Eerst en vooral moeten we ervoor zorgen dat onze server als mailserver gebruikt wordt voor het domein capelderij.be. Voor lokale clients die via het protocol MAPI rechtstreeks met onze mailserver verbinden, moet er niets speciaals gedaan worden. Voor externe afzenders op het Internet liggen de zaken natuurlijk wel anders. Het domein capelderij.be werd
Hoofdstuk 6. Mailserver
82
aangekocht via het hostingbedrijf Hostbasket 3 . Daar kunnen we via hun webinterface instellen dat we HUN nameservers wensen te gebruiken. We stellen bijvoorbeeld het A record mail.capelderij.be. A 80.201.243.39 in. Mail.capelderij.be verwijst nu naar ons publiek IP adres. Als MX record voor ons domein geven we nu mail.capelderij.be. op, met prioriteit 9. Als er mailforwarding zou worden ingesteld bij hostbasket, dan staat die forwarding-server op prioriteit 10 en wordt deze bijgevolg dus niet gebruikt: het laagste cijfer krijgt de hoogste prioriteit. Wanneer nu een willekeurige persoon een e-mail verstuurt naar bijvoorbeeld [email protected], dan zal de gebruikte mailserver via het DNS systeem ontdekken dat hij naar ons publieke IP-adres moet worden gestuurd. De e-mails komen dan aan op onze ADSL modem op poort 25 (smtp). Hierop moeten we instellen dat alle tcp berichten met bestemming 80.201.243.39:25 doorgestuurd worden naar ons intern adres van de Exchangeserver, namelijk 192.168.123.1:25. Op de Linux gateway moeten dan de gepaste routing en firewall regels worden ingesteld.
6.3.6
Basis beveiliging
Een heel eenvoudig beveiligingslek zou eruit kunnen bestaan, dat personen op Internet onze mailserver als uitgaande mailserver zouden kunnen instellen, en dat die dan mails zou accepteren en proberen afleveren voor om het even welk domein. Zo zou onze mailserver kunnen gebruikt worden om bijvoorbeeld SPAM te versturen. Een gevolg hiervan zou dan kunnen zijn dat andere Internet providers onze mailserver gaan blokkeren, waardoor we helemaal geen mails meer kunnen ontvangen. Het is dus belangrijk dat we controleren dat onze mailserver enkel mails voor het domein capelderij.be accepteert van externe clients, maar wel alles van interne clients, die onze mailserver wel als uitgaande SMTP mailserver mogen instellen. Waarschijnlijk staan de meeste van deze instellingen standaard wel goed, maar omdat het zo belangrijk is, overloop ik ze nog eens. We openen in onze MMC First Organization (Exchange), Administrative Groups, First Administrative Group, Servers, CAPELDERIJSRV, Protocols, SMTP. Daar klikken we met de rechtermuisknop op Default SMTP Virtual Server en vervolgens op eigenschappen. We verplaatsen ons naar het tabblad Access. Daar zijn volgende knoppen belangrijk: • Authentication...: Anonymous access mag hier aangevinkt blijven, evenals Resolve anonymous e-mail. We laten immers e-mail berichten, bestemd voor eigen mailboxen, toe die afkomstig zijn van willekeurige mailservers op het Internet, en deze authenticatie gebeurt altijd anoniem. Integrated Windows Authentication laten we ook toe, voor de Outlook clients die lokaal via het MAPI protocol connecteren. Clients die op deze 3
http://www.hostbasket.com
Hoofdstuk 6. Mailserver
83
manier geauthenticeerd zijn hebben meer rechten: ze mogelijk namelijk ook naar andere domeinen mail versturen via deze mailserver. Maar daarover meer in de volgende puntjes. • Connection: Dit laten we staan op All except the list below. Iedereen die op ´e´en van bovenstaande manieren geauthenticeerd is (dus ook anoniem) mag connecteren. • Relay restrictions, de belangrijkste pagina: Hier wordt ingesteld voor welke clients de mailserver e-mails mag bezorgen die niet voor lokale mailaccounts zijn bestemd (relaying). We moeten zien dat het vakje Only the list below is aangevinkt. Vervolgens kunnen we (via Add...) in de lijst eventueel het IP Address 192.168.123.254 toevoegen, zodat onze gateway (die deze mailserver als relay mailserver heeft ingesteld) ook eventueel externe mail kan versturen. Onderaan vinken we de optie Allow all computers which successfully authenticate to relay, regardless of the list above. aan. Dit geeft alle clients die geauthenticeerd zijn via de Integrated Windows Authentication het recht om externe e-mail via deze mailserver te versturen. In het volgende tabblad Messages vullen we eventueel de textbox Send copy of Non-Delivery Report to: in met [email protected]. Dit adres kennen we later toe aan een beheerder naar keuze, bijvoorbeeld aan gebruiker Davy. Zo kunnen problemen vroegtijdig opgemerkt worden. We zijn nu gekomen aan het laatste tabblad Delivery met volgende belangrijke knoppen: • Outbound Security...: Hier laten we de optie Anonymous access opstaan. Dit wil zeggen dat onze mailserver voor het afleveren van e-mail gebruik maakt van anonieme authenticatie bij andere mailservers. Dit is de standaard op het Internet. • Advanced...: De Fully - qualified domain name: box vullen we op met mail.capelderij.be. Deze DNS naam moet bestaan en naar ons publiek IP adres leiden. Andere mailservers kunnen dit gebruiken ter controle. Smart host kunnen we eventueel instellen op relay.skynet.be, de mailserver van onze Internet provider. Onze mailserver zal externe mail dan niet zelf proberen te bezorgen aan de gepaste doelmailserver, maar in plaats hiervan alles doorgeven aan de mailserver van Skynet. Dit biedt onder andere het voordeel dat grote mails die naar verschillende bestemmelingen tegelijk worden verstuurd, maar ´e´en keer door onze ADSL verbinding naar buiten gaan. Tenslotte een opmerking die los staat van dit alles. Het is een goede gewoonte om services die niet gebruikt worden uit te schakelen. Stel dat er toevallig beveiligingsgaten in deze services zitten, dan kunnen deze niet misbruikt worden. Daarom openen we de services snapin in onze MMC. De volgende services moeten we wel automatisch laten opstarten: de
Hoofdstuk 6. Mailserver
84
Information Store, Management, MTA Stacks, Routing Engine en System Attendant, allen met voorvoegsel Microsoft Exchange. De services Microsoft Exchange POP3 of Microsoft Exchange IMAP4 kunnen naar keuze automatisch opgestart worden of niet, afhankelijk van het feit of we willen dat er ook respectievelijk via POP3 of via IMAP mail kan opgehaald worden. Op de stageplaats was daar geen nood aan, aangezien de clients op andere manieren connecteren (zie 6.3.8). Door via de rechtermuisknop op een service te klikken, dan eigenschappen te kiezen, en vervolgens bij Algemeen het Opstarttype te wijzigen kunnen we de service al dan niet automatisch laten opstarten.
6.3.7
Mailboxen aanmaken
Nu is het tijd om mailboxen en aliassen aan te maken. Dit is zeer eenvoudig en kan op 2 manieren: ofwel tijdens het aanmaken van een nieuwe gebruiker van Active Directory, ofwel bij een reeds bestaande gebruiker. Eerst en vooral openen we in onze MMC de container: Active Directory: gebruikers en computers [capelderijsrv.capelderij.local]
en vervolgens capelderij.local, Users (of bijvoorbeeld een zelfaangemaakte OU Capelderij waarin de gebruikers zitten). Om een reeds bestaande gebruiker een mailbox te geven klikken we erop met de rechtermuisknop, en kiezen vervolgens Exchange tasks. In de Wizard die daarop volgt kiezen we Create Mailbox. Vervolgens vullen we een gepaste alias in (hetgeen voor de suffix @capelderij.be wordt geplaatst). De server en mailbox store staan standaard goed ingesteld: we hebben van elke item maar ´e´en exemplaar. Na het klikken op voltooien is de mailbox aangemaakt en kan de persoon e-mailen. Om bij het aanmaken van een nieuwe gebruiker onmiddellijk ook een mailbox te cre¨eren, laten we in de wizard Nieuw object: Gebruiker simpelweg de optie Create an Exchange mailbox ingeschakeld. We kunnen in datzelfde venster dezelfde opties opgeven als in de vorige paragraaf beschreven.
6.3.8
Mailbox instellingen aanpassen
Er zijn 2 locaties waar we instellingen kunnen wijzigen. De eerste locatie bereiken we door met de rechtermuisknop op een gebruiker te klikken, en vervolgens op Exchange tasks.... In de daarop volgende wizard Exchange Task Wizard kunnen we de mailbox verplaatsen naar een andere store, de mailbox verwijderen, kiezen welke services en protocollen voor deze mailbox beschikbaar moeten zijn,...
Hoofdstuk 6. Mailserver
85
De andere locatie is de belangrijkste. Hiervoor klikken we opnieuw met de rechter muisknop op de betreffende gebruiker, en kiezen eigenschappen. We zien dat in het eigenschappen venster van een gebruiker een hele hoop extra tabbladen zijn toegevoegd. Hier kunnen we bijvoorbeeld extra e-mail adressen toevoegen voor deze mailbox, door in het tabblad E-mail Addresses op New te klikken, en vervolgens SMTP Address te kiezen. Na opgeven van het adres zal Exchange server vanaf dan ook de e-mails voor dit adres in deze mailbox plaatsen.
6.3.9
De clients
Nu de server correct ingesteld is, kunnen we een mailclient kiezen en met onze persoonlijke mailbox connecteren. Om enkel en alleen e-mails te versturen en te ontvangen hebben we een ruime keuze aan connectiemogelijkheden. Zo is er bijvoorbeeld de mogelijkheid om via POP3 te connecteren, via IMAP4, via het MAPI protocol, of via de Outlook Web Access interface te communiceren. Wel moeten hiervoor de corresponderende services gestart zijn. Wensen we ook gebruik te maken van alle andere functionaliteit die Outlook ons biedt, zoals contacts, agenda,... centraal op server, dan moeten we kiezen tussen hetzij MAPI , hetzij Outlook Web Access. Om echt het onderste uit de kan te halen, zoals het delen van agenda’s, wordt onze keuze beperkt tot de Outlook client, bij voorkeur Outlook 2003, en connecteren we via het MAPI protocol. Outlook Web Access is een web based client, die de meeste outlook functionaliteit via een webinterface aanbiedt. Een groot voordeel is dat op deze manier bijna alle functionaliteit die outlook ons biedt, ook kan benut worden op werkstations waar de Outlook 2003 client zelf niet kan ge¨ınstalleerd worden. Ook kunnen medewerkers van gelijk waar op het Internet connecteren. Het is dan wel aanbevolen om dit enkel toe te laten over een SSL verbinding. Connecteren met Outlook Web Access kan via de URL http://capelderijsrv/exchange voor lokale connecties, en via http://mail.capelderij.be/exchange voor externe connecties. Wanneer er reeds is aangemeld op het domein, dient er geen login en wachtwoord te worden opgegeven. In alle andere gevallen wel. Een Outlook 2003 client configureren voor samenwerking met de Exchange server is zeer eenvoudig. Een voorwaarde is wel dat de client zich op hetzelfde lokale netwerk bevindt als de server. Het is echter ook mogelijk om dit via een internet mogelijk te maken, maar dit valt buiten het bestek van dit eindwerk. Na installatie van de Outlook 2003 client wordt de wizard E-mailaccounts gestart. Deze kan achteraf ook gestart worden via Configuratiescherm, E-mail, E-mailaccounts.... Hier kiezen we voor Een nieuwe e-mailaccount toevoegen, en in het volgende scherm voor Microsoft Exchange - server. In het veld Microsoft Exchange - server geven we capelderijsrv op, en in het vakje Gebruikersnaam de gepaste gebruiker (normaal diegene waar we momenteel mee aangemeld zijn). Om in Outlook eventuele reeds bestaande persoonlijke mappen te verwijderen kiezen we in
Hoofdstuk 6. Mailserver
86
het menu Bestand op Gegevensbestandsbeheer...: in het volgende scherm kunnen we de aanwezige archiefmappen indien gewenst verwijderen. Vanaf nu worden onze contacts, agenda’s, postvakken,... centraal op de server bewaard (en gebackupt), en kunnen we er van overal aan. We kunnen ook zonder problemen onze agenda delen met andere collega’s, en gedeelde agenda’s van anderen bekijken of aanvullen.
Hoofdstuk 7
Printserver In het printlokaal staat een printer zonder netwerk interface. Op deze printer moet via het netwerk kunnen afgedrukt worden. In dit lokaal is echter geen pc aanwezig. De USB standaard laat een maximum kabellengte van 30m toe, indien er bovendien om de 5m een USB-hub wordt geplaatst. Aangezien er in het lokaal reeds een netwerkkabel aankomt was het veel eenvoudiger om een aparte print server te plaatsen en die enerzijds via de netwerkkabel op het netwerk aan te sluiten, en anderzijds via een USB kabel op de printer. Als printserver werd de D-Link DP-301U aangekocht.
Figuur 7.1: DP-301U
7.1
Configuratie van de printserver
In eerste instantie staat de printer af en is het apparaat nog niet van stroom voorzien. We verbinden het apparaat nu met ons netwerk. Vervolgens verbinden we het apparaat via een USB kabel met de printer. We schakelen de printer aan. We voorzien nu het apparaat van stroom. Standaard heeft het apparaat het IP-adres 192.168.0.10. We zorgen er dus bijgevolg voor dat 87
Hoofdstuk 7. Printserver
88
een pc die via het netwerk met het apparaat is verbonden in dezelfde IP-bereik ligt, door hem bijvoorbeeld het adres 192.168.0.1 te geven. Vervolgens kunnen we het apparaat op het adres http://192.168.0.10 via een webbrowser configureren. Het eerste wat we doen is het apparaat het adres 192.168.123.2 geven. Nadat het toestel is herstart moeten we natuurlijk de pc waarop we de configuratie doen ook terug in het juiste IP-bereik brengen. Vervolgens noteren we de USB poortnaam die het apparaat toegekend heeft, in dit geval PS-54CFD8-U1. We wijzigen ook het wachtwoord van het toestel, zodat niet iedereen de instellingen kan wijzigen. Let op: het wachtwoord mag niet langer zijn dan 8 karakters. Indien langer zal het wachtwoord niet ingesteld worden, zonder foutmelding1 ! Om dezelfde reden zetten we de toegangsrechten voor de SNMP Community public op Read Only. We kunnen de printserver bijvoorbeeld installeren op de Windows server, die wordt dan een client voor de printserver, en kunnen de printer vervolgens publiceren in Active Directory. Indien we dat zouden doen, moet de printserver zo geconfigureerd worden dat uitsluitend printtaken afkomstig van het IP-adres van de Windows server worden geaccepteerd.
7.2 7.2.1
Configuratie van de clients Configuratie van de Windows 98/Me clients
Bij ‘start, instellingen, configuratiescherm, netwerk’ kiezen we ‘toevoegen’, vervolgens ‘client’. We geven de lpr driver op die meegeleverd is op de CD-ROM. De netwerkcomponent ‘LPR for TCP/IP Printing’ is nu toegevoegd. Bij ‘eigenschappen’ kunnen we vervolgens het IP adres van het apparaat opgeven, alsook de poortnaam ‘PS-54CFD8-U1’. Na het herstarten van de pc voegen we een nieuwe printer toe. We kiezen ‘netwerkprinter’, en vervolgens ‘bladeren’ om de printer te selecteren (onder Print Servers - TCP/IP LPR, 192.168.123.2, PS-54CFD8-U1). Vervolgens installeren we de juiste printerdriver.
7.2.2
Configuratie van Windows XP clients
Op de clients voegen we een nieuwe printer toe. We kiezen hiervoor ‘lokale printer’, en schakelen de optie ‘automatisch detecteren’ uit. Vervolgens geven we het IP adres van het apparaat op. De poortnaam wordt hierbij door Windows zelf gekozen. Vervolgens kiezen we aangepaste instellingen, wijzigen het protocol naar LPR, en vullen we als LPR Wachtrijnaam het eerder genoteerde poortnummer ‘PS-54CFD8-U1’ in. Nu selecteren we de juiste driver voor onze printer [9].
1
wel een foutmelding via telnet sessie
Referentielijst [1] ASP.NET Page Templates - Using Inheritance. URL: http://www.codeproject.com/aspnet/page templates.asp [11 mei 2004]. [2] AT-S41 Version 1.1.2 Management Software Release Notes. [3] AT-S45 Version 1.0.5 Management Software Release Notes. [4] Do more with your ASP.NET Page Template. URL: http://www.codeproject.com/aspnet/pagetemplates.asp [11 mei 2004]. [5] How To: Use Forms Authentication with Active Directory. URL: http://msdn.microsoft.com/library/en-us/dnnetsec/html/secnetht02.asp [10 mei 2004]. [6] Internationalize Your ASP.NET Applications (Part 1 of 3). URL: http://www.devx.com/DevX/Article/6997/0/page/6 [10 mei 2004]. [7] MVC for ASP.net. URL: http://www.dmbcllc.com/asp mvc.aspx [10 mei 2004]. [8] User’s Guide for the AT-9410GB Gigabit Ethernet switch. Version 1.0. [9] (2003). D-Link DP-301U Manual. [10] D. Brors (2003). Groepsdynamica: Microsofts strategie achter office 2003. c’t: magazine voor computer techniek, 12:110–112.
89
Index .NET framework, 45 /boot, 32 3Com, 13 Active Directory Schema, 79 Active Directory Users and Computers, 46 Adamantix, 26, 29 AddControlsFromDerivedPage, 58 AddMenuItems, 58 AddSelectionItems, 58 ADSL verbinding, 17 Allied Telesyn, 13, 16 apt cache, 29 ARP Spoofing, 19 ArrayList, 59 ASP.NET, 45 at runtime, 32 auto-sense, 17 AVW, 9 backplane, 15, 16 backuppen, 12 Belnet, 29 betrouwbaar, 9 betrouwbare, 9 BIOS, 29 bladwijzers, 49 bootloader, 20 buffer overflow, 27 buffer overflows, 27 bug-fixes, 26 BuildPage, 58
C#, 45 Capelderij, 8 Cisco, 13 CMS, 12 coach, 9, 41, 51 code behind, 52, 55, 59 code behind bestand, 55 code behind file, 58 code behind files, 55 collisions, 13 Common Criteria LSPP AEL 5, 26 Compaq, 12 Component Services, 68 Constanten, 52, 55 constructor van de afgeleide klasse, 66 constructor van TemplatePage, 66 Content Management System, 12 Controller, 55 converter, 13 converters, 13, 15, 16 D-Link, 13 database, 44 datum, 49 datumvorig, 49 DCDiag, 79 De Volder, 13 Debian, 29, 30 Debian GNU/Linux, 26 dhcp, 40 DMZ, 25
90
Index Document Workspaces, 43 DoS, 29 dselect, 30 E-mail boxen, 10 Eigen domeinnaam, 10 entry, 22, 44 error.aspx, 58 ethernet, 12 ethernet ADSL modem, 17 Exim, 30 EXT2, 29 EXT3, 29 file sharing, 44 Firewall, 10 firewall, 10, 11 firewall rules, 19 Form, 58 Free Software Foundation, 26 FSF, 26 fysische, 42 GBIC, 14 GBIC slots, 16 geboortedatum, 49 GenerateHtmlForm, 58 Geoptimaliseerd raamplanbeheer, 10 Gigabit Ethernet media converters, 15 GNU project, 26 hashtabel, 59 HtmlForm, 58 HyperTerminal, 20 image, 29 image file, 20 Information Rights Management, 43 inhoudsopgave, 49 Intel 386, 33 Intel Pentium III 1133Mhz, 9
91 Internet, 9 intrusion detection, 28 IP Spoofing, 19 IUSR CAPELDERIJSRV, 62, 68, 70 Java Server Pages, 10 Journaling, 29 journaling, 29 kasteel, 8–10, 13, 17 kernel developers, 32 kernel image, 32 kernel patches, 32 kernel-sources, 33 Link, 59 Linux, 26 Linux-kernel, 32 local management session, 20 logische, 42 Logout, 53 MAC-Address Spoofing, 18 mailbox store, 84 mailserver, 12 mainstream kernel, 32, 33 manageable, 11, 16 MAPI, 11, 81, 85 MD5 passwords, 30 medewerkerstabel, 49 media converter, 15, 17 media converters, 16 Microsoft, 11 Microsoft Office 2003, 43 Microsoft SQL Server 2000, 46 Mixed Mode, 79 model, 55 Model, View, Controller, 55 mogelijk onbetrouwbare, 9 MS Exchange, 12 MS Exchange Server 2003, 77
Index
92
MS IIS, 46 MS SQL Server, 9 MTA, 30 MVC model, 55 MySQL, 10
school, 8, 9, 13, 14 Secure, 18 Secure Level, 21 Securing Debian Manual, 38 Sendmail, 10 server, 9, 84 naam, 49 Service Pack 3, 43 NC Computing, 9, 10 service pack 3, 9 NetDiag, 79 Shadow passwords, 30 NT AUTHORITYΓE30F NETWORK SERSharePoint Portal Server, 43 VICE, 62, 68 SMC, 13 SNMP, 11 Office Pro 2003, 43 SNMP Community, 88 onbetrouwbaar, 9 Spanning Tree Protocol, 14 OnInit methode van TemplagePage, 66 STP, 14 OnInit van de afgeleide klasse, 66 string-indexer, 59 OnLoad van de basisklasse, 67 Sumika, 9 Open Source, 26, 27 SX multimode, 13 Outlook, 85 Package management system, 26 package management system, 31, 33 Page Load, 67 paragraaf, 49 paragraaftype, 49 patches, 27 patchpanelen, 11 Pentium III 450MHz, 25 Port VID, 23 Printserver, 10 printserver, 12 PVID, 23 raamplan, 9, 41 raamplanbeheer, 10–13 raamplannen, 9 racks, 11 read-only, 30 Render, 67 routing loops, 14 RSBAC, 28
tagged, 38 Tagged Port, 23 tags, 42 tapedrive, 12 tasksel, 30 template systeem, 56 TemplatePage, 55 Terminal Emulation, 20 Text, 59 TFTP, 20 Toestand, 59 trusted, 16, 22, 25 twisted pair, 13–15 Typo3, 12 Untagged Port, 23 untrusted, 16, 22, 25 uplink, 14 userland tools, 32 vanilla kernel, 32
Index VBEWGEB, 49 VBEWMOEDER, 49 VBEWNAT, 49 VBEWOMS, 49 vconfig, 38 VGEMCOD, 49 VID, 22, 23 view, 55 ViewController, 55 viewer modus, 47 villa, 8, 9, 13, 14, 16 Visual Studio .NET, 45 VLAN, 16, 22, 23 VLAN 123, 38 VLAN 2, 38 VLAN identifier, 22 Website, 10 werkverdeling, 46 Windows 2000, 43 Windows 2000 Server, 9 Windows 2003 Enterprise Server, 43 Windows Server 2003, 43 Windows XP, 43 Woody, 26 Word, 9 workflow, 43 Xmodem, 21 Zorp, 40
93