Voor wie is deze guide? Deze guide is bedoeld voor zowel de beginners die voor het eerst een webserver willen opzetten als wel de gevorderde gebruiker die wellicht wat handigheidjes op wil doen.
Waar gaan we het over hebben? We beginnen met het dichtspijkeren van Windows door middel van IPSec. Andere onderwerpen zijn FTP user isolation - Zorgen dat gebruikers FTP toegang hebben tot hun eigen site, maar niet bij anderen in de mappen kunnen komen - en het installeren van PHP. Vooral het laatste is iets waar nogal veel mensen moeite mee schijnen te hebben. Als je deze guide echter hebt doorgelezen zal je je afvragen waarom. :)
Wat voor systeem heb ik als ik deze guide helemaal gevolgd heb? Je beschikt dan over een webserver voor het hosten van meerdere websites met ASP, PHP en MySQL functionaliteit. De server is in principe veilig genoeg om 'm zonder verdere firewall (denk aan dedicated/colocated servers waarbij firewalls vaak erg duur zijn) aan het internet te hangen. Hoewel de server beveiligd is tegen de meest voorkomende aanvallen, raad ik je aan nog wat meer stappen te ondernemen als je de server echt goed beveiligd wilt hebben. Maar hierover later meer.
Voordat je begint Denk erom dat je in ieder geval het IPSec gedeelte vanaf de console moet doen, en niet via Remote Desktop. Je zult jezelf namelijk buitensluiten, waardoor je alsnog het probleem via de console moet verhelpen!
Misschien heb je al wel ergens een Windows 2003 server staan die je hiervoor wilt gaan gebruiken. Echter, als je het goed wilt doen kun je deze beter formatteren en met een schone installatie beginnen. Je kunt immers niet bouwen op een slechte fundering. Let er tijdens de setup trouwens op dat het handig is minimaal 2 partities aan te maken. Eén voor je besturingssysteem, en één voor websites en overige data.
Na de installatie is het belangrijk dat je direct Windows Update draait om de laatste updates binnen te halen. Veel mensen denken "het zal wel", maar verreweg de meeste machines lopen virussen op of worden gehackt doordat er geen updates waren geïnstalleerd. Wees dus niet eigenwijs, en installeer die updates, daar zijn ze voor!
Nu je een volledig up to date Windows installatie hebt, wordt het tijd om Internet Information Services (IIS) te gaan installeren. Dit doe je door in je configuratiescherm op Add or Remove Programs te klikken en vervolgens op Add/Remove Windows Components. Kies voor de Details van de Application Server en vink IIS aan. Ga vervolgens naar de details van IIS en vink daar weer FTP aan. Sluit alle vensters weer door op OK te klikken en vervolg de installatie. Nadat je de onderdelen hebt geïnstalleerd start je weer even Windows Update op om een patch voor IIS binnen te halen.
Stap 2: IPSec
Ga naar de IPSec console door "secpol.msc" uit te voeren, en vervolgens op IP Security Policies on Local Computer te klikken.
Klik met de rechtermuisknop in de console en kies Manage IP filter lists and filter actions. Voeg onder het tabblad Manage Filter Actions een action toe met de naam "Block" en als actie ook Block. Bevestig alle vensters met OK en ga terug naar de console.
Klik met de rechtermuisknop in de console en kies Create IP Security Policy. Noem de policy 'Webserver" en schakel de Default response rule uit.
Voeg de filters All IP Traffic en All ICMP Traffic toe met respectievelijk als actions Block en Permit. (Overigens maken we geen gebruik van tunnels en gaat het om alle netwerkkaarten bij het toevoegen van filter lists) Hiermee blokkeren we al het IP verkeer, maar staan we ICMP (pingen e.d.) toe. Sluit weer alle vensters door te bevestigen met OK en ga terug naar de console.
Open weer het Manage IP filter lists and filter actions venster en voeg een nieuwe filter list "Inbound" toe. Voeg een filter toe met de volgende eigenschappen: Gemirrored, van Any IP Address naar My IP Address, protocol TCP en als "to" poort 80. Geef eventueel bij de description "HTTP" op zodat het duidelijk is om welk protocol het gaat. Bevestig het venster met OK en ga terug naar het overzicht van filters in de filter list Inbound.
Herhaal de eerdere stappen voor het toevoegen van het HTTP filter, maar nu voor FTP (poort 20 en 21), PASV FTP (5001 - 5010) en Remote Desktop (3389)
Sla je filter list op en maak een nieuw aan met de naam "Outbound". Voeg hier weer op dezelfde manier poort 80 (TCP) en poort 53 voor zowel TCP als UDP toe. Het enige verschil is nu dat je nu van My IP Address naar Any IP Address gaat (uitgaand verkeer dus). Nu kun je tenminste weer internetten vanaf je server. :) Mocht je overigens andere protocollen nodig hebben, dan zul je hiervan ook de poorten toe moeten voegen. Voor bijvoorbeeld SSL zul je ook poort 443 (TCP) toe moeten voegen. Als je echt veilig bezig wilt zijn sta je zelfs geen poort 80 toe, maar alleen poort 443. Op deze manier kun je alleen beveiligde sites bezoeken vanaf je server.
Open weer je IP Security Policy "Webserver" en voeg nu Outbound en Inbound met als actie Permit toe. Bevestig je wijzigingen weer met OK. Klik nu met de rechtermuisknop op je policy en kies "Assign".
Een simpele poortscan laat zien dat alleen de poorten die wij open willen hebben nu ook daadwerkelijk open staan, terwijl de rest gesloten (filtered) is. Let overigens niet op de beschrijvingen bij 5001-5010. Deze zijn normaal gesloten, en worden alleen gebruikt voor PASV FTP. Dit zijn gewoon willekeurige poorten, je had ook anderen kunnen gebruiken, mits ze boven de 5000 zitten. Echter, later zul je deze wel op moeten geven in de IIS metabase, dus voorlopig blijven we even bij 5001-5010.
Een poortscan zonder IPSec beveiliging: er staan een hoop systeempoorten open waar eventuele hackers en virussen misbruik van kunnen maken.
Stap 3: FTP
Maak ergens, bij voorkeur op een eigen partitie, de mappenstructuur aan zoals je die ziet op de screenshot. Hierbij is Tweaker de naam van de gebruiker waarmee later wordt ingelogd op de FTP server.
Open de Internet Information Services console en ga naar het FTP gedeelte. Verwijder de default FTP site en maak een nieuw aan. Noem deze "Content" en kies voor User Isolation Mode. Als directory geef je D:\Websites (of jouw variant hierop) op. Zorg dat zowel Read als Write aanstaat. Ga na het maken van de FTP site naar de eigenschappen hiervan en zet onder Security Accounts anonymous access uit. Geef eventueel nog wat messages die de server weergeeft bij het maken van verbinding e.d. op. Open nu de metabase (C:\Windows\System32\inetsrv\MetaBase.xml) en voeg PassivePortRange="5001-5010" toe onder /LM/MSFTPSVC. Sla de MetaBase weer op en herstart voor de zekerheid IIS (rechtermuisknop op de computernaam in de IIS console, All tasks, restart IIS).
Maak een nieuwe gebruiker aan met een gebruikersnaam die overeen komt met de naam van de map in LocalUser die je daarstraks hebt aangemaakt.
Verander de rechten op de map D:\Websites zoals weergegeven in de screenshot en pas deze op alle ondergelegen mappen toe.
Zorg dat de gebruiker in zijn of haar map wel modify rechten heeft. ;)
Even testen! We loggen in met de zo juist gemaakte gebruiker en we komen in zijn homedirectory. We kunnen een map "Test" aanmaken, en controleren of deze bestaat. Als we omhoog in de mappenstructuur willen kan dat niet, we blijven in de homedirectory. We kunnen de map "Test" verwijderen en loggen weer uit.
Stap 4: HTTP
Open de IIS console en ga naar websites. Verwijder de default website en maak een nieuw aan met als directory D:\Websites\LocalUser\Tweaker (of jouw variant hierop). Neem verder de instellingen zoals ze in de screenshot staan over. Voeg eventueel bij documents index.html en index.php toe (als je PHP wilt installeren tenminste)
Als je nu een index pagina in de gebruikersmap plaatst en naar je server toegaat met je browser, zou je pagina moeten worden weergegeven.
Stap 5: PHP
Als je PHP wilt installeren zul je de laatste versie in een zip bestand moeten downloaden van php.net. Als je dit gedaan hebt pak je het bestand uit naar C:\PHP. Als je dit gedaan hebt open je de map en kopieer je php4ts.dll naar C:\Windows\System32 en php.ini-recommended naar C:\Windows. Wijzig de naam van het php.ini-recommended bestand in de Windows map naar php.ini en open het. Breng de volgende wijzigingen aan:
Verdere wijzigingen zijn natuurlijk altijd mogelijk. Open nu weer de IIS console en voeg PHP onder de Web Service Extensions toe zoals aangegeven in de screenshot.
Voeg de PHP extensie toe in de eigenschappen van Websites. Ga naar Home Directory, Configuration en voeg de extensie toe zoals aangegeven in de screenshot. Bevestig alle vensters met OK en herstart IIS (rechtermuisknop op de computernaam in de IIS console, All tasks, restart IIS).
Maak een PHP bestand in de userdirectory met daarin <?php phpinfo(); ?> en open het in je browser. Als het goed is krijg je nu informatie over PHP te zien.
Stap 6: MySQL
Installeer de laatste 4.1.x versie van MySQL (te downloaden op MySQL.com) en vink het Configure MySQL vinkje aan het eind van de wizard aan. Gebruik nu volgende instellingen om MySQL te configureren: Detailed configuration > Server Machine > Multifunctional > Installation Path > Kies een optie op basis van de verwachte drukte op de server > Enable TCP/IP (3306) > UTF8 > Install as service > Root password opgeven, Only from localhost, Geen anonymous account
Om compatible te zijn met oudere MySQL clients (zoals de MySQL library van PHP4) moeten we de passwords op een zwakkere manier laten encrypten. Dit doe je door de query in de screenshot uit te voeren d.m.v. de Command Line Client. "nieuw_wachtwoord" Moet je uiteraard vervangen door je root password naar keuze.
Breng de wijzinging zoals deze te zien is in de screenshot aan in je my.ini. Dit bestand is te vinden in de installatiedirectory van MySQL. Hierna zal je wel even de MySQL service moeten herstarten.
Een eenvoudige phpMyAdmin installatie laat zien dat PHP en MySQL nu naar behoren functioneren, je webserver is klaar!
Met deze guide heb je nu de basis van het inrichten van een Windows 2003 webserver wel onder de knie. Wil je echter echt het onderste uit de kan gaan halen wat betreft IIS ga je dan eens verdiepen in de metabase en de mogelijkheden van bijv. application pools. Hierover is op Microsoft.com en Google erg veel te vinden. Wat betreft de beveiliging van de server, deze is met IPSec nu redelijk goed dichtgespijkerd. Ga je deze server voor productiedoeleinden gebruiken, denk dan ook aan het uitschakelen van zaken als filesharing, het instellen van audits, het veranderen van de poort voor RDP, etc. Dit valt helaas een beetje buiten het bereik van deze guide, dus hier zal je zelf meer informatie over moeten zoeken. :)